{"version":3,"file":"dronegame-components.js","sources":["../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/is-message.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/descriptors.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/wire/varint.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/proto-int64.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/reflect/scalar.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/reflect/error.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/reflect/unsafe.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/reflect/guard.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/create.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-check.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/wire/text-format.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/reflect/nested-types.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/reflect/names.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/registry.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/to-binary.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/from-binary.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/wire/base64-encoding.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/restore-json-names.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/boot.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/message.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/file.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/timestamp_pb.js","../../webcomponents/node_modules/.pnpm/@bufbuild+protobuf@2.1.0/node_modules/@bufbuild/protobuf/dist/esm/wkt/timestamp.js","../../webcomponents/node_modules/.pnpm/@lit+context@1.1.2/node_modules/@lit/context/lib/context-request-event.js","../../webcomponents/node_modules/.pnpm/@lit+context@1.1.2/node_modules/@lit/context/lib/create-context.js","../../webcomponents/node_modules/.pnpm/@lit+context@1.1.2/node_modules/@lit/context/lib/controllers/context-consumer.js","../../webcomponents/node_modules/.pnpm/@lit+context@1.1.2/node_modules/@lit/context/lib/value-notifier.js","../../webcomponents/node_modules/.pnpm/@lit+context@1.1.2/node_modules/@lit/context/lib/controllers/context-provider.js","../../webcomponents/node_modules/.pnpm/@lit+reactive-element@2.0.4/node_modules/@lit/reactive-element/css-tag.js","../../webcomponents/node_modules/.pnpm/@lit+reactive-element@2.0.4/node_modules/@lit/reactive-element/reactive-element.js","../../webcomponents/node_modules/.pnpm/lit-html@3.2.0/node_modules/lit-html/lit-html.js","../../webcomponents/node_modules/.pnpm/lit-element@4.1.0/node_modules/lit-element/lit-element.js","../../webcomponents/node_modules/.pnpm/@lit+reactive-element@2.0.4/node_modules/@lit/reactive-element/decorators/custom-element.js","../../webcomponents/node_modules/.pnpm/@lit+reactive-element@2.0.4/node_modules/@lit/reactive-element/decorators/property.js","../../webcomponents/node_modules/.pnpm/lit-html@3.2.0/node_modules/lit-html/directive-helpers.js","../../webcomponents/node_modules/.pnpm/lit-html@3.2.0/node_modules/lit-html/directive.js","../../webcomponents/node_modules/.pnpm/lit-html@3.2.0/node_modules/lit-html/async-directive.js","../../webcomponents/node_modules/.pnpm/lit-html@3.2.0/node_modules/lit-html/directives/ref.js","../../webcomponents/node_modules/.pnpm/three@0.169.0/node_modules/three/examples/jsm/controls/OrbitControls.js","../../webcomponents/node_modules/.pnpm/three@0.169.0/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js","../../webcomponents/node_modules/.pnpm/three@0.169.0/node_modules/three/examples/jsm/loaders/DRACOLoader.js","../../webcomponents/node_modules/.pnpm/three@0.169.0/node_modules/three/examples/jsm/loaders/GLTFLoader.js","../../webcomponents/node_modules/.pnpm/three@0.169.0/node_modules/three/examples/jsm/loaders/RGBELoader.js","../../webcomponents/node_modules/.pnpm/three@0.169.0/node_modules/three/examples/jsm/utils/SkeletonUtils.js","../../webcomponents/node_modules/.pnpm/three@0.169.0/node_modules/three/src/math/MathUtils.js","../../webcomponents/src/api/dronegame/v1/shared_pb.ts","../../webcomponents/src/api/dronegame/v1/matches_pb.ts","../../webcomponents/src/drone-game/context.ts","../../webcomponents/src/drone-game/drone-view.ts","../../webcomponents/src/drone-game/utils.ts","../../webcomponents/src/drone-game/match-live.ts","../../webcomponents/node_modules/.pnpm/@lit+task@1.0.1/node_modules/@lit/task/task.js","../../webcomponents/node_modules/.pnpm/filesize@10.1.6/node_modules/filesize/dist/filesize.esm.js","../../webcomponents/src/drone-game/math.ts","../../webcomponents/src/drone-game/match-replay.ts","../../webcomponents/src/drone-game/drone-spawn.ts"],"sourcesContent":["// Copyright 2021-2024 Buf Technologies, Inc.\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 * Determine whether the given `arg` is a message.\n * If `desc` is set, determine whether `arg` is this specific message.\n */\nexport function isMessage(arg, schema) {\n const isMessage = arg !== null &&\n typeof arg == \"object\" &&\n \"$typeName\" in arg &&\n typeof arg.$typeName == \"string\";\n if (!isMessage) {\n return false;\n }\n if (schema === undefined) {\n return true;\n }\n return schema.typeName === arg.$typeName;\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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 * Scalar value types. This is a subset of field types declared by protobuf\n * enum google.protobuf.FieldDescriptorProto.Type The types GROUP and MESSAGE\n * are omitted, but the numerical values are identical.\n */\nexport var ScalarType;\n(function (ScalarType) {\n // 0 is reserved for errors.\n // Order is weird for historical reasons.\n ScalarType[ScalarType[\"DOUBLE\"] = 1] = \"DOUBLE\";\n ScalarType[ScalarType[\"FLOAT\"] = 2] = \"FLOAT\";\n // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if\n // negative values are likely.\n ScalarType[ScalarType[\"INT64\"] = 3] = \"INT64\";\n ScalarType[ScalarType[\"UINT64\"] = 4] = \"UINT64\";\n // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if\n // negative values are likely.\n ScalarType[ScalarType[\"INT32\"] = 5] = \"INT32\";\n ScalarType[ScalarType[\"FIXED64\"] = 6] = \"FIXED64\";\n ScalarType[ScalarType[\"FIXED32\"] = 7] = \"FIXED32\";\n ScalarType[ScalarType[\"BOOL\"] = 8] = \"BOOL\";\n ScalarType[ScalarType[\"STRING\"] = 9] = \"STRING\";\n // Tag-delimited aggregate.\n // Group type is deprecated and not supported in proto3. However, Proto3\n // implementations should still be able to parse the group wire format and\n // treat group fields as unknown fields.\n // TYPE_GROUP = 10,\n // TYPE_MESSAGE = 11, // Length-delimited aggregate.\n // New in version 2.\n ScalarType[ScalarType[\"BYTES\"] = 12] = \"BYTES\";\n ScalarType[ScalarType[\"UINT32\"] = 13] = \"UINT32\";\n // TYPE_ENUM = 14,\n ScalarType[ScalarType[\"SFIXED32\"] = 15] = \"SFIXED32\";\n ScalarType[ScalarType[\"SFIXED64\"] = 16] = \"SFIXED64\";\n ScalarType[ScalarType[\"SINT32\"] = 17] = \"SINT32\";\n ScalarType[ScalarType[\"SINT64\"] = 18] = \"SINT64\";\n})(ScalarType || (ScalarType = {}));\n","// Copyright 2008 Google Inc. 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// * 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// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\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// Code generated by the Protocol Buffer compiler is owned by the owner\n// of the input file used when generating it. This code is not\n// standalone and requires a support library to be linked with it. This\n// support library is itself covered by the above license.\n/* eslint-disable prefer-const,@typescript-eslint/restrict-plus-operands */\n/**\n * Read a 64 bit varint as two JS numbers.\n *\n * Returns tuple:\n * [0]: low bits\n * [1]: high bits\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L175\n */\nexport function varint64read() {\n let lowBits = 0;\n let highBits = 0;\n for (let shift = 0; shift < 28; shift += 7) {\n let b = this.buf[this.pos++];\n lowBits |= (b & 0x7f) << shift;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return [lowBits, highBits];\n }\n }\n let middleByte = this.buf[this.pos++];\n // last four bits of the first 32 bit number\n lowBits |= (middleByte & 0x0f) << 28;\n // 3 upper bits are part of the next 32 bit number\n highBits = (middleByte & 0x70) >> 4;\n if ((middleByte & 0x80) == 0) {\n this.assertBounds();\n return [lowBits, highBits];\n }\n for (let shift = 3; shift <= 31; shift += 7) {\n let b = this.buf[this.pos++];\n highBits |= (b & 0x7f) << shift;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return [lowBits, highBits];\n }\n }\n throw new Error(\"invalid varint\");\n}\n/**\n * Write a 64 bit varint, given as two JS numbers, to the given bytes array.\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/writer.js#L344\n */\nexport function varint64write(lo, hi, bytes) {\n for (let i = 0; i < 28; i = i + 7) {\n const shift = lo >>> i;\n const hasNext = !(shift >>> 7 == 0 && hi == 0);\n const byte = (hasNext ? shift | 0x80 : shift) & 0xff;\n bytes.push(byte);\n if (!hasNext) {\n return;\n }\n }\n const splitBits = ((lo >>> 28) & 0x0f) | ((hi & 0x07) << 4);\n const hasMoreBits = !(hi >> 3 == 0);\n bytes.push((hasMoreBits ? splitBits | 0x80 : splitBits) & 0xff);\n if (!hasMoreBits) {\n return;\n }\n for (let i = 3; i < 31; i = i + 7) {\n const shift = hi >>> i;\n const hasNext = !(shift >>> 7 == 0);\n const byte = (hasNext ? shift | 0x80 : shift) & 0xff;\n bytes.push(byte);\n if (!hasNext) {\n return;\n }\n }\n bytes.push((hi >>> 31) & 0x01);\n}\n// constants for binary math\nconst TWO_PWR_32_DBL = 0x100000000;\n/**\n * Parse decimal string of 64 bit integer value as two JS numbers.\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nexport function int64FromString(dec) {\n // Check for minus sign.\n const minus = dec[0] === \"-\";\n if (minus) {\n dec = dec.slice(1);\n }\n // Work 6 decimal digits at a time, acting like we're converting base 1e6\n // digits to binary. This is safe to do with floating point math because\n // Number.isSafeInteger(ALL_32_BITS * 1e6) == true.\n const base = 1e6;\n let lowBits = 0;\n let highBits = 0;\n function add1e6digit(begin, end) {\n // Note: Number('') is 0.\n const digit1e6 = Number(dec.slice(begin, end));\n highBits *= base;\n lowBits = lowBits * base + digit1e6;\n // Carry bits from lowBits to\n if (lowBits >= TWO_PWR_32_DBL) {\n highBits = highBits + ((lowBits / TWO_PWR_32_DBL) | 0);\n lowBits = lowBits % TWO_PWR_32_DBL;\n }\n }\n add1e6digit(-24, -18);\n add1e6digit(-18, -12);\n add1e6digit(-12, -6);\n add1e6digit(-6);\n return minus ? negate(lowBits, highBits) : newBits(lowBits, highBits);\n}\n/**\n * Losslessly converts a 64-bit signed integer in 32:32 split representation\n * into a decimal string.\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nexport function int64ToString(lo, hi) {\n let bits = newBits(lo, hi);\n // If we're treating the input as a signed value and the high bit is set, do\n // a manual two's complement conversion before the decimal conversion.\n const negative = bits.hi & 0x80000000;\n if (negative) {\n bits = negate(bits.lo, bits.hi);\n }\n const result = uInt64ToString(bits.lo, bits.hi);\n return negative ? \"-\" + result : result;\n}\n/**\n * Losslessly converts a 64-bit unsigned integer in 32:32 split representation\n * into a decimal string.\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nexport function uInt64ToString(lo, hi) {\n ({ lo, hi } = toUnsigned(lo, hi));\n // Skip the expensive conversion if the number is small enough to use the\n // built-in conversions.\n // Number.MAX_SAFE_INTEGER = 0x001FFFFF FFFFFFFF, thus any number with\n // highBits <= 0x1FFFFF can be safely expressed with a double and retain\n // integer precision.\n // Proven by: Number.isSafeInteger(0x1FFFFF * 2**32 + 0xFFFFFFFF) == true.\n if (hi <= 0x1fffff) {\n return String(TWO_PWR_32_DBL * hi + lo);\n }\n // What this code is doing is essentially converting the input number from\n // base-2 to base-1e7, which allows us to represent the 64-bit range with\n // only 3 (very large) digits. Those digits are then trivial to convert to\n // a base-10 string.\n // The magic numbers used here are -\n // 2^24 = 16777216 = (1,6777216) in base-1e7.\n // 2^48 = 281474976710656 = (2,8147497,6710656) in base-1e7.\n // Split 32:32 representation into 16:24:24 representation so our\n // intermediate digits don't overflow.\n const low = lo & 0xffffff;\n const mid = ((lo >>> 24) | (hi << 8)) & 0xffffff;\n const high = (hi >> 16) & 0xffff;\n // Assemble our three base-1e7 digits, ignoring carries. The maximum\n // value in a digit at this step is representable as a 48-bit integer, which\n // can be stored in a 64-bit floating point number.\n let digitA = low + mid * 6777216 + high * 6710656;\n let digitB = mid + high * 8147497;\n let digitC = high * 2;\n // Apply carries from A to B and from B to C.\n const base = 10000000;\n if (digitA >= base) {\n digitB += Math.floor(digitA / base);\n digitA %= base;\n }\n if (digitB >= base) {\n digitC += Math.floor(digitB / base);\n digitB %= base;\n }\n // If digitC is 0, then we should have returned in the trivial code path\n // at the top for non-safe integers. Given this, we can assume both digitB\n // and digitA need leading zeros.\n return (digitC.toString() +\n decimalFrom1e7WithLeadingZeros(digitB) +\n decimalFrom1e7WithLeadingZeros(digitA));\n}\nfunction toUnsigned(lo, hi) {\n return { lo: lo >>> 0, hi: hi >>> 0 };\n}\nfunction newBits(lo, hi) {\n return { lo: lo | 0, hi: hi | 0 };\n}\n/**\n * Returns two's compliment negation of input.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Signed_32-bit_integers\n */\nfunction negate(lowBits, highBits) {\n highBits = ~highBits;\n if (lowBits) {\n lowBits = ~lowBits + 1;\n }\n else {\n // If lowBits is 0, then bitwise-not is 0xFFFFFFFF,\n // adding 1 to that, results in 0x100000000, which leaves\n // the low bits 0x0 and simply adds one to the high bits.\n highBits += 1;\n }\n return newBits(lowBits, highBits);\n}\n/**\n * Returns decimal representation of digit1e7 with leading zeros.\n */\nconst decimalFrom1e7WithLeadingZeros = (digit1e7) => {\n const partial = String(digit1e7);\n return \"0000000\".slice(partial.length) + partial;\n};\n/**\n * Write a 32 bit varint, signed or unsigned. Same as `varint64write(0, value, bytes)`\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/1b18833f4f2a2f681f4e4a25cdf3b0a43115ec26/js/binary/encoder.js#L144\n */\nexport function varint32write(value, bytes) {\n if (value >= 0) {\n // write value as varint 32\n while (value > 0x7f) {\n bytes.push((value & 0x7f) | 0x80);\n value = value >>> 7;\n }\n bytes.push(value);\n }\n else {\n for (let i = 0; i < 9; i++) {\n bytes.push((value & 127) | 128);\n value = value >> 7;\n }\n bytes.push(1);\n }\n}\n/**\n * Read an unsigned 32 bit varint.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L220\n */\nexport function varint32read() {\n let b = this.buf[this.pos++];\n let result = b & 0x7f;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return result;\n }\n b = this.buf[this.pos++];\n result |= (b & 0x7f) << 7;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return result;\n }\n b = this.buf[this.pos++];\n result |= (b & 0x7f) << 14;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return result;\n }\n b = this.buf[this.pos++];\n result |= (b & 0x7f) << 21;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return result;\n }\n // Extract only last 4 bits\n b = this.buf[this.pos++];\n result |= (b & 0x0f) << 28;\n for (let readBytes = 5; (b & 0x80) !== 0 && readBytes < 10; readBytes++)\n b = this.buf[this.pos++];\n if ((b & 0x80) != 0)\n throw new Error(\"invalid varint\");\n this.assertBounds();\n // Result can have 32 bits, convert it to unsigned\n return result >>> 0;\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nimport { int64FromString, int64ToString, uInt64ToString, } from \"./wire/varint.js\";\n/**\n * Int64Support for the current environment.\n */\nexport const protoInt64 = /*@__PURE__*/ makeInt64Support();\nfunction makeInt64Support() {\n const dv = new DataView(new ArrayBuffer(8));\n // note that Safari 14 implements BigInt, but not the DataView methods\n const ok = typeof BigInt === \"function\" &&\n typeof dv.getBigInt64 === \"function\" &&\n typeof dv.getBigUint64 === \"function\" &&\n typeof dv.setBigInt64 === \"function\" &&\n typeof dv.setBigUint64 === \"function\" &&\n (typeof process != \"object\" ||\n typeof process.env != \"object\" ||\n process.env.BUF_BIGINT_DISABLE !== \"1\");\n if (ok) {\n const MIN = BigInt(\"-9223372036854775808\"), MAX = BigInt(\"9223372036854775807\"), UMIN = BigInt(\"0\"), UMAX = BigInt(\"18446744073709551615\");\n return {\n zero: BigInt(0),\n supported: true,\n parse(value) {\n const bi = typeof value == \"bigint\" ? value : BigInt(value);\n if (bi > MAX || bi < MIN) {\n throw new Error(`invalid int64: ${value}`);\n }\n return bi;\n },\n uParse(value) {\n const bi = typeof value == \"bigint\" ? value : BigInt(value);\n if (bi > UMAX || bi < UMIN) {\n throw new Error(`invalid uint64: ${value}`);\n }\n return bi;\n },\n enc(value) {\n dv.setBigInt64(0, this.parse(value), true);\n return {\n lo: dv.getInt32(0, true),\n hi: dv.getInt32(4, true),\n };\n },\n uEnc(value) {\n dv.setBigInt64(0, this.uParse(value), true);\n return {\n lo: dv.getInt32(0, true),\n hi: dv.getInt32(4, true),\n };\n },\n dec(lo, hi) {\n dv.setInt32(0, lo, true);\n dv.setInt32(4, hi, true);\n return dv.getBigInt64(0, true);\n },\n uDec(lo, hi) {\n dv.setInt32(0, lo, true);\n dv.setInt32(4, hi, true);\n return dv.getBigUint64(0, true);\n },\n };\n }\n return {\n zero: \"0\",\n supported: false,\n parse(value) {\n if (typeof value != \"string\") {\n value = value.toString();\n }\n assertInt64String(value);\n return value;\n },\n uParse(value) {\n if (typeof value != \"string\") {\n value = value.toString();\n }\n assertUInt64String(value);\n return value;\n },\n enc(value) {\n if (typeof value != \"string\") {\n value = value.toString();\n }\n assertInt64String(value);\n return int64FromString(value);\n },\n uEnc(value) {\n if (typeof value != \"string\") {\n value = value.toString();\n }\n assertUInt64String(value);\n return int64FromString(value);\n },\n dec(lo, hi) {\n return int64ToString(lo, hi);\n },\n uDec(lo, hi) {\n return uInt64ToString(lo, hi);\n },\n };\n}\nfunction assertInt64String(value) {\n if (!/^-?[0-9]+$/.test(value)) {\n throw new Error(\"invalid int64: \" + value);\n }\n}\nfunction assertUInt64String(value) {\n if (!/^[0-9]+$/.test(value)) {\n throw new Error(\"invalid uint64: \" + value);\n }\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nimport { protoInt64 } from \"../proto-int64.js\";\nimport { ScalarType } from \"../descriptors.js\";\n/**\n * Returns true if both scalar values are equal.\n */\nexport function scalarEquals(type, a, b) {\n if (a === b) {\n // This correctly matches equal values except BYTES and (possibly) 64-bit integers.\n return true;\n }\n // Special case BYTES - we need to compare each byte individually\n if (type == ScalarType.BYTES) {\n if (!(a instanceof Uint8Array) || !(b instanceof Uint8Array)) {\n return false;\n }\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n // Special case 64-bit integers - we support number, string and bigint representation.\n // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n switch (type) {\n case ScalarType.UINT64:\n case ScalarType.FIXED64:\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n // Loose comparison will match between 0n, 0 and \"0\".\n return a == b;\n }\n // Anything that hasn't been caught by strict comparison or special cased\n // BYTES and 64-bit integers is not equal.\n return false;\n}\n/**\n * Returns the zero value for the given scalar type.\n */\nexport function scalarZeroValue(type, longAsString) {\n switch (type) {\n case ScalarType.STRING:\n return \"\";\n case ScalarType.BOOL:\n return false;\n default:\n // Handles INT32, UINT32, SINT32, FIXED32, SFIXED32.\n // We do not use individual cases to save a few bytes code size.\n return 0;\n case ScalarType.DOUBLE:\n case ScalarType.FLOAT:\n return 0.0;\n case ScalarType.INT64:\n case ScalarType.UINT64:\n case ScalarType.SFIXED64:\n case ScalarType.FIXED64:\n case ScalarType.SINT64:\n return (longAsString ? \"0\" : protoInt64.zero);\n case ScalarType.BYTES:\n return new Uint8Array(0);\n }\n}\n/**\n * Returns true for a zero-value. For example, an integer has the zero-value `0`,\n * a boolean is `false`, a string is `\"\"`, and bytes is an empty Uint8Array.\n *\n * In proto3, zero-values are not written to the wire, unless the field is\n * optional or repeated.\n */\nexport function isScalarZeroValue(type, value) {\n switch (type) {\n case ScalarType.BOOL:\n return value === false;\n case ScalarType.STRING:\n return value === \"\";\n case ScalarType.BYTES:\n return value instanceof Uint8Array && !value.byteLength;\n default:\n return value == 0; // Loose comparison matches 0n, 0 and \"0\"\n }\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nconst errorNames = [\n \"FieldValueInvalidError\",\n \"FieldListRangeError\",\n \"ForeignFieldError\",\n];\nexport class FieldError extends Error {\n constructor(fieldOrOneof, message, name = \"FieldValueInvalidError\") {\n super(message);\n this.name = name;\n this.field = () => fieldOrOneof;\n }\n}\nexport function isFieldError(arg) {\n return (arg instanceof Error &&\n errorNames.includes(arg.name) &&\n \"field\" in arg &&\n typeof arg.field == \"function\");\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nimport { isScalarZeroValue, scalarZeroValue } from \"./scalar.js\";\n// bootstrap-inject google.protobuf.FeatureSet.FieldPresence.IMPLICIT: const $name: FeatureSet_FieldPresence.$localName = $number;\nconst IMPLICIT = 2;\nexport const unsafeLocal = Symbol.for(\"reflect unsafe local\");\n/**\n * Return the selected field of a oneof group.\n *\n * @private\n */\nexport function unsafeOneofCase(target, // eslint-disable-line @typescript-eslint/no-explicit-any -- `any` is the best choice for dynamic access\noneof) {\n const c = target[oneof.localName].case;\n if (c === undefined) {\n return c;\n }\n return oneof.fields.find((f) => f.localName === c);\n}\n/**\n * Returns true if the field is set.\n *\n * @private\n */\nexport function unsafeIsSet(target, // eslint-disable-line @typescript-eslint/no-explicit-any -- `any` is the best choice for dynamic access\nfield) {\n const name = field.localName;\n if (field.oneof) {\n return target[field.oneof.localName].case === name; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\n }\n if (field.presence != IMPLICIT) {\n // Fields with explicit presence have properties on the prototype chain\n // for default / zero values (except for proto3).\n return (target[name] !== undefined &&\n Object.prototype.hasOwnProperty.call(target, name));\n }\n // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n switch (field.fieldKind) {\n case \"list\":\n return target[name].length > 0;\n case \"map\":\n return Object.keys(target[name]).length > 0; // eslint-disable-line @typescript-eslint/no-unsafe-argument\n case \"scalar\":\n return !isScalarZeroValue(field.scalar, target[name]);\n case \"enum\":\n return target[name] !== field.enum.values[0].number;\n }\n throw new Error(\"message field with implicit presence\");\n}\n/**\n * Returns true if the field is set, but only for singular fields with explicit\n * presence (proto2).\n *\n * @private\n */\nexport function unsafeIsSetExplicit(target, localName) {\n return (Object.prototype.hasOwnProperty.call(target, localName) &&\n target[localName] !== undefined);\n}\n/**\n * Return a field value, respecting oneof groups.\n *\n * @private\n */\nexport function unsafeGet(target, field) {\n if (field.oneof) {\n const oneof = target[field.oneof.localName];\n if (oneof.case === field.localName) {\n return oneof.value;\n }\n return undefined;\n }\n return target[field.localName];\n}\n/**\n * Set a field value, respecting oneof groups.\n *\n * @private\n */\nexport function unsafeSet(target, field, value) {\n if (field.oneof) {\n target[field.oneof.localName] = {\n case: field.localName,\n value: value,\n };\n }\n else {\n target[field.localName] = value;\n }\n}\n/**\n * Resets the field, so that unsafeIsSet() will return false.\n *\n * @private\n */\nexport function unsafeClear(target, // eslint-disable-line @typescript-eslint/no-explicit-any -- `any` is the best choice for dynamic access\nfield) {\n const name = field.localName;\n if (field.oneof) {\n const oneofLocalName = field.oneof.localName;\n if (target[oneofLocalName].case === name) {\n target[oneofLocalName] = { case: undefined };\n }\n }\n else if (field.presence != IMPLICIT) {\n // Fields with explicit presence have properties on the prototype chain\n // for default / zero values (except for proto3). By deleting their own\n // property, the field is reset.\n delete target[name];\n }\n else {\n // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n switch (field.fieldKind) {\n case \"map\":\n target[name] = {};\n break;\n case \"list\":\n target[name] = [];\n break;\n case \"enum\":\n target[name] = field.enum.values[0].number;\n break;\n case \"scalar\":\n target[name] = scalarZeroValue(field.scalar, field.longAsString);\n break;\n }\n }\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nimport { unsafeLocal } from \"./unsafe.js\";\nexport function isObject(arg) {\n return arg !== null && typeof arg == \"object\" && !Array.isArray(arg);\n}\nexport function isOneofADT(arg) {\n return (arg !== null &&\n typeof arg == \"object\" &&\n \"case\" in arg &&\n ((typeof arg.case == \"string\" && \"value\" in arg && arg.value != null) ||\n (arg.case === undefined &&\n (!(\"value\" in arg) || arg.value === undefined))));\n}\nexport function isReflectList(arg, field) {\n var _a, _b, _c, _d;\n if (isObject(arg) &&\n unsafeLocal in arg &&\n \"add\" in arg &&\n \"field\" in arg &&\n typeof arg.field == \"function\") {\n if (field !== undefined) {\n const a = field, b = arg.field();\n return (a.listKind == b.listKind &&\n a.scalar === b.scalar &&\n ((_a = a.message) === null || _a === void 0 ? void 0 : _a.typeName) === ((_b = b.message) === null || _b === void 0 ? void 0 : _b.typeName) &&\n ((_c = a.enum) === null || _c === void 0 ? void 0 : _c.typeName) === ((_d = b.enum) === null || _d === void 0 ? void 0 : _d.typeName));\n }\n return true;\n }\n return false;\n}\nexport function isReflectMap(arg, field) {\n var _a, _b, _c, _d;\n if (isObject(arg) &&\n unsafeLocal in arg &&\n \"has\" in arg &&\n \"field\" in arg &&\n typeof arg.field == \"function\") {\n if (field !== undefined) {\n const a = field, b = arg.field();\n return (a.mapKey === b.mapKey &&\n a.mapKind == b.mapKind &&\n a.scalar === b.scalar &&\n ((_a = a.message) === null || _a === void 0 ? void 0 : _a.typeName) === ((_b = b.message) === null || _b === void 0 ? void 0 : _b.typeName) &&\n ((_c = a.enum) === null || _c === void 0 ? void 0 : _c.typeName) === ((_d = b.enum) === null || _d === void 0 ? void 0 : _d.typeName));\n }\n return true;\n }\n return false;\n}\nexport function isReflectMessage(arg, messageDesc) {\n return (isObject(arg) &&\n unsafeLocal in arg &&\n \"desc\" in arg &&\n isObject(arg.desc) &&\n arg.desc.kind === \"message\" &&\n (messageDesc === undefined || arg.desc.typeName == messageDesc.typeName));\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nexport function isWrapper(arg) {\n return isWrapperTypeName(arg.$typeName);\n}\nexport function isWrapperDesc(messageDesc) {\n const f = messageDesc.fields[0];\n return (isWrapperTypeName(messageDesc.typeName) &&\n f !== undefined &&\n f.fieldKind == \"scalar\" &&\n f.name == \"value\" &&\n f.number == 1);\n}\nfunction isWrapperTypeName(name) {\n return (name.startsWith(\"google.protobuf.\") &&\n [\n \"DoubleValue\",\n \"FloatValue\",\n \"Int64Value\",\n \"UInt64Value\",\n \"Int32Value\",\n \"UInt32Value\",\n \"BoolValue\",\n \"StringValue\",\n \"BytesValue\",\n ].includes(name.substring(16)));\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nimport { isMessage } from \"./is-message.js\";\nimport { ScalarType, } from \"./descriptors.js\";\nimport { scalarZeroValue } from \"./reflect/scalar.js\";\nimport { FieldError } from \"./reflect/error.js\";\nimport { isObject } from \"./reflect/guard.js\";\nimport { unsafeGet, unsafeOneofCase, unsafeSet } from \"./reflect/unsafe.js\";\nimport { isWrapperDesc } from \"./wkt/wrappers.js\";\n// bootstrap-inject google.protobuf.Edition.EDITION_PROTO3: const $name: Edition.$localName = $number;\nconst EDITION_PROTO3 = 999;\n// bootstrap-inject google.protobuf.Edition.EDITION_PROTO2: const $name: Edition.$localName = $number;\nconst EDITION_PROTO2 = 998;\n// bootstrap-inject google.protobuf.FeatureSet.FieldPresence.IMPLICIT: const $name: FeatureSet_FieldPresence.$localName = $number;\nconst IMPLICIT = 2;\n/**\n * Create a new message instance.\n *\n * The second argument is an optional initializer object, where all fields are\n * optional.\n */\nexport function create(schema, init) {\n if (isMessage(init, schema)) {\n return init;\n }\n const message = createZeroMessage(schema);\n if (init !== undefined) {\n initMessage(schema, message, init);\n }\n return message;\n}\n/**\n * Sets field values from a MessageInitShape on a zero message.\n */\nfunction initMessage(messageDesc, message, init) {\n for (const member of messageDesc.members) {\n let value = init[member.localName];\n if (value == null) {\n // intentionally ignore undefined and null\n continue;\n }\n let field;\n if (member.kind == \"oneof\") {\n const oneofField = unsafeOneofCase(init, member);\n if (!oneofField) {\n continue;\n }\n field = oneofField;\n value = unsafeGet(init, oneofField);\n }\n else {\n field = member;\n }\n // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- no need to convert enum\n switch (field.fieldKind) {\n case \"message\":\n value = toMessage(field, value);\n break;\n case \"scalar\":\n value = initScalar(field, value);\n break;\n case \"list\":\n value = initList(field, value);\n break;\n case \"map\":\n value = initMap(field, value);\n break;\n }\n unsafeSet(message, field, value);\n }\n return message;\n}\nfunction initScalar(field, value) {\n if (field.scalar == ScalarType.BYTES) {\n return toU8Arr(value);\n }\n return value;\n}\nfunction initMap(field, value) {\n if (isObject(value)) {\n if (field.scalar == ScalarType.BYTES) {\n return convertObjectValues(value, toU8Arr);\n }\n if (field.mapKind == \"message\") {\n return convertObjectValues(value, (val) => toMessage(field, val));\n }\n }\n return value;\n}\nfunction initList(field, value) {\n if (Array.isArray(value)) {\n if (field.scalar == ScalarType.BYTES) {\n return value.map(toU8Arr);\n }\n if (field.listKind == \"message\") {\n return value.map((item) => toMessage(field, item));\n }\n }\n return value;\n}\nfunction toMessage(field, value) {\n if (field.fieldKind == \"message\" &&\n !field.oneof &&\n isWrapperDesc(field.message)) {\n // Types from google/protobuf/wrappers.proto are unwrapped when used in\n // a singular field that is not part of a oneof group.\n return initScalar(field.message.fields[0], value);\n }\n if (isObject(value)) {\n if (field.message.typeName == \"google.protobuf.Struct\" &&\n field.parent.typeName !== \"google.protobuf.Value\") {\n // google.protobuf.Struct is represented with JsonObject when used in a\n // field, except when used in google.protobuf.Value.\n return value;\n }\n if (!isMessage(value, field.message)) {\n return create(field.message, value);\n }\n }\n return value;\n}\n// converts any ArrayLike to Uint8Array if necessary.\nfunction toU8Arr(value) {\n return Array.isArray(value) ? new Uint8Array(value) : value;\n}\nfunction convertObjectValues(obj, fn) {\n const ret = {};\n for (const entry of Object.entries(obj)) {\n ret[entry[0]] = fn(entry[1]);\n }\n return ret;\n}\nconst tokenZeroMessageField = Symbol();\nconst messagePrototypes = new WeakMap();\n/**\n * Create a zero message.\n */\nfunction createZeroMessage(desc) {\n let msg;\n if (!needsPrototypeChain(desc)) {\n msg = {\n $typeName: desc.typeName,\n };\n for (const member of desc.members) {\n if (member.kind == \"oneof\" || member.presence == IMPLICIT) {\n msg[member.localName] = createZeroField(member);\n }\n }\n }\n else {\n // Support default values and track presence via the prototype chain\n const cached = messagePrototypes.get(desc);\n let prototype;\n let members;\n if (cached) {\n ({ prototype, members } = cached);\n }\n else {\n prototype = {};\n members = new Set();\n for (const member of desc.members) {\n if (member.kind == \"oneof\") {\n // we can only put immutable values on the prototype,\n // oneof ADTs are mutable\n continue;\n }\n if (member.fieldKind != \"scalar\" && member.fieldKind != \"enum\") {\n // only scalar and enum values are immutable, map, list, and message\n // are not\n continue;\n }\n if (member.presence == IMPLICIT) {\n // implicit presence tracks field presence by zero values - e.g. 0, false, \"\", are unset, 1, true, \"x\" are set.\n // message, map, list fields are mutable, and also have IMPLICIT presence.\n continue;\n }\n members.add(member);\n prototype[member.localName] = createZeroField(member);\n }\n messagePrototypes.set(desc, { prototype, members });\n }\n msg = Object.create(prototype);\n msg.$typeName = desc.typeName;\n for (const member of desc.members) {\n if (members.has(member)) {\n continue;\n }\n if (member.kind == \"field\") {\n if (member.fieldKind == \"message\") {\n continue;\n }\n if (member.fieldKind == \"scalar\" || member.fieldKind == \"enum\") {\n if (member.presence != IMPLICIT) {\n continue;\n }\n }\n }\n msg[member.localName] = createZeroField(member);\n }\n }\n return msg;\n}\n/**\n * Do we need the prototype chain to track field presence?\n */\nfunction needsPrototypeChain(desc) {\n switch (desc.file.edition) {\n case EDITION_PROTO3:\n // proto3 always uses implicit presence, we never need the prototype chain.\n return false;\n case EDITION_PROTO2:\n // proto2 never uses implicit presence, we always need the prototype chain.\n return true;\n default:\n // If a message uses scalar or enum fields with explicit presence, we need\n // the prototype chain to track presence. This rule does not apply to fields\n // in a oneof group - they use a different mechanism to track presence.\n return desc.fields.some((f) => f.presence != IMPLICIT && f.fieldKind != \"message\" && !f.oneof);\n }\n}\n/**\n * Returns a zero value for oneof groups, and for every field kind except\n * messages. Scalar and enum fields can have default values.\n */\nfunction createZeroField(field) {\n if (field.kind == \"oneof\") {\n return { case: undefined };\n }\n if (field.fieldKind == \"list\") {\n return [];\n }\n if (field.fieldKind == \"map\") {\n return {}; // Object.create(null) would be desirable here, but is unsupported by react https://react.dev/reference/react/use-server#serializable-parameters-and-return-values\n }\n if (field.fieldKind == \"message\") {\n return tokenZeroMessageField;\n }\n const defaultValue = field.getDefaultValue();\n if (defaultValue !== undefined) {\n return field.fieldKind == \"scalar\" && field.longAsString\n ? defaultValue.toString()\n : defaultValue;\n }\n return field.fieldKind == \"scalar\"\n ? scalarZeroValue(field.scalar, field.longAsString)\n : field.enum.values[0].number;\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nconst symbol = Symbol.for(\"@bufbuild/protobuf/text-encoding\");\n/**\n * Protobuf-ES requires the Text Encoding API to convert UTF-8 from and to\n * binary. This WHATWG API is widely available, but it is not part of the\n * ECMAScript standard. On runtimes where it is not available, use this\n * function to provide your own implementation.\n *\n * Note that the Text Encoding API does not provide a way to validate UTF-8.\n * Our implementation falls back to use encodeURIComponent().\n */\nexport function configureTextEncoding(textEncoding) {\n globalThis[symbol] = textEncoding;\n}\nexport function getTextEncoding() {\n if (globalThis[symbol] == undefined) {\n const te = new globalThis.TextEncoder();\n const td = new globalThis.TextDecoder();\n globalThis[symbol] = {\n encodeUtf8(text) {\n return te.encode(text);\n },\n decodeUtf8(bytes) {\n return td.decode(bytes);\n },\n checkUtf8(text) {\n try {\n encodeURIComponent(text);\n return true;\n }\n catch (e) {\n return false;\n }\n },\n };\n }\n return globalThis[symbol];\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nimport { varint32read, varint32write, varint64read, varint64write, } from \"./varint.js\";\nimport { protoInt64 } from \"../proto-int64.js\";\nimport { getTextEncoding } from \"./text-encoding.js\";\n/* eslint-disable prefer-const,no-case-declarations,@typescript-eslint/restrict-plus-operands */\n/**\n * Protobuf binary format wire types.\n *\n * A wire type provides just enough information to find the length of the\n * following value.\n *\n * See https://developers.google.com/protocol-buffers/docs/encoding#structure\n */\nexport var WireType;\n(function (WireType) {\n /**\n * Used for int32, int64, uint32, uint64, sint32, sint64, bool, enum\n */\n WireType[WireType[\"Varint\"] = 0] = \"Varint\";\n /**\n * Used for fixed64, sfixed64, double.\n * Always 8 bytes with little-endian byte order.\n */\n WireType[WireType[\"Bit64\"] = 1] = \"Bit64\";\n /**\n * Used for string, bytes, embedded messages, packed repeated fields\n *\n * Only repeated numeric types (types which use the varint, 32-bit,\n * or 64-bit wire types) can be packed. In proto3, such fields are\n * packed by default.\n */\n WireType[WireType[\"LengthDelimited\"] = 2] = \"LengthDelimited\";\n /**\n * Start of a tag-delimited aggregate, such as a proto2 group, or a message\n * in editions with message_encoding = DELIMITED.\n */\n WireType[WireType[\"StartGroup\"] = 3] = \"StartGroup\";\n /**\n * End of a tag-delimited aggregate.\n */\n WireType[WireType[\"EndGroup\"] = 4] = \"EndGroup\";\n /**\n * Used for fixed32, sfixed32, float.\n * Always 4 bytes with little-endian byte order.\n */\n WireType[WireType[\"Bit32\"] = 5] = \"Bit32\";\n})(WireType || (WireType = {}));\n/**\n * Maximum value for a 32-bit floating point value (Protobuf FLOAT).\n */\nexport const FLOAT32_MAX = 3.4028234663852886e38;\n/**\n * Minimum value for a 32-bit floating point value (Protobuf FLOAT).\n */\nexport const FLOAT32_MIN = -3.4028234663852886e38;\n/**\n * Maximum value for an unsigned 32-bit integer (Protobuf UINT32, FIXED32).\n */\nexport const UINT32_MAX = 0xffffffff;\n/**\n * Maximum value for a signed 32-bit integer (Protobuf INT32, SFIXED32, SINT32).\n */\nexport const INT32_MAX = 0x7fffffff;\n/**\n * Minimum value for a signed 32-bit integer (Protobuf INT32, SFIXED32, SINT32).\n */\nexport const INT32_MIN = -0x80000000;\nexport class BinaryWriter {\n constructor(encodeUtf8 = getTextEncoding().encodeUtf8) {\n this.encodeUtf8 = encodeUtf8;\n /**\n * Previous fork states.\n */\n this.stack = [];\n this.chunks = [];\n this.buf = [];\n }\n /**\n * Return all bytes written and reset this writer.\n */\n finish() {\n this.chunks.push(new Uint8Array(this.buf)); // flush the buffer\n let len = 0;\n for (let i = 0; i < this.chunks.length; i++)\n len += this.chunks[i].length;\n let bytes = new Uint8Array(len);\n let offset = 0;\n for (let i = 0; i < this.chunks.length; i++) {\n bytes.set(this.chunks[i], offset);\n offset += this.chunks[i].length;\n }\n this.chunks = [];\n return bytes;\n }\n /**\n * Start a new fork for length-delimited data like a message\n * or a packed repeated field.\n *\n * Must be joined later with `join()`.\n */\n fork() {\n this.stack.push({ chunks: this.chunks, buf: this.buf });\n this.chunks = [];\n this.buf = [];\n return this;\n }\n /**\n * Join the last fork. Write its length and bytes, then\n * return to the previous state.\n */\n join() {\n // get chunk of fork\n let chunk = this.finish();\n // restore previous state\n let prev = this.stack.pop();\n if (!prev)\n throw new Error(\"invalid state, fork stack empty\");\n this.chunks = prev.chunks;\n this.buf = prev.buf;\n // write length of chunk as varint\n this.uint32(chunk.byteLength);\n return this.raw(chunk);\n }\n /**\n * Writes a tag (field number and wire type).\n *\n * Equivalent to `uint32( (fieldNo << 3 | type) >>> 0 )`.\n *\n * Generated code should compute the tag ahead of time and call `uint32()`.\n */\n tag(fieldNo, type) {\n return this.uint32(((fieldNo << 3) | type) >>> 0);\n }\n /**\n * Write a chunk of raw bytes.\n */\n raw(chunk) {\n if (this.buf.length) {\n this.chunks.push(new Uint8Array(this.buf));\n this.buf = [];\n }\n this.chunks.push(chunk);\n return this;\n }\n /**\n * Write a `uint32` value, an unsigned 32 bit varint.\n */\n uint32(value) {\n assertUInt32(value);\n // write value as varint 32, inlined for speed\n while (value > 0x7f) {\n this.buf.push((value & 0x7f) | 0x80);\n value = value >>> 7;\n }\n this.buf.push(value);\n return this;\n }\n /**\n * Write a `int32` value, a signed 32 bit varint.\n */\n int32(value) {\n assertInt32(value);\n varint32write(value, this.buf);\n return this;\n }\n /**\n * Write a `bool` value, a variant.\n */\n bool(value) {\n this.buf.push(value ? 1 : 0);\n return this;\n }\n /**\n * Write a `bytes` value, length-delimited arbitrary data.\n */\n bytes(value) {\n this.uint32(value.byteLength); // write length of chunk as varint\n return this.raw(value);\n }\n /**\n * Write a `string` value, length-delimited data converted to UTF-8 text.\n */\n string(value) {\n let chunk = this.encodeUtf8(value);\n this.uint32(chunk.byteLength); // write length of chunk as varint\n return this.raw(chunk);\n }\n /**\n * Write a `float` value, 32-bit floating point number.\n */\n float(value) {\n assertFloat32(value);\n let chunk = new Uint8Array(4);\n new DataView(chunk.buffer).setFloat32(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `double` value, a 64-bit floating point number.\n */\n double(value) {\n let chunk = new Uint8Array(8);\n new DataView(chunk.buffer).setFloat64(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `fixed32` value, an unsigned, fixed-length 32-bit integer.\n */\n fixed32(value) {\n assertUInt32(value);\n let chunk = new Uint8Array(4);\n new DataView(chunk.buffer).setUint32(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `sfixed32` value, a signed, fixed-length 32-bit integer.\n */\n sfixed32(value) {\n assertInt32(value);\n let chunk = new Uint8Array(4);\n new DataView(chunk.buffer).setInt32(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `sint32` value, a signed, zigzag-encoded 32-bit varint.\n */\n sint32(value) {\n assertInt32(value);\n // zigzag encode\n value = ((value << 1) ^ (value >> 31)) >>> 0;\n varint32write(value, this.buf);\n return this;\n }\n /**\n * Write a `fixed64` value, a signed, fixed-length 64-bit integer.\n */\n sfixed64(value) {\n let chunk = new Uint8Array(8), view = new DataView(chunk.buffer), tc = protoInt64.enc(value);\n view.setInt32(0, tc.lo, true);\n view.setInt32(4, tc.hi, true);\n return this.raw(chunk);\n }\n /**\n * Write a `fixed64` value, an unsigned, fixed-length 64 bit integer.\n */\n fixed64(value) {\n let chunk = new Uint8Array(8), view = new DataView(chunk.buffer), tc = protoInt64.uEnc(value);\n view.setInt32(0, tc.lo, true);\n view.setInt32(4, tc.hi, true);\n return this.raw(chunk);\n }\n /**\n * Write a `int64` value, a signed 64-bit varint.\n */\n int64(value) {\n let tc = protoInt64.enc(value);\n varint64write(tc.lo, tc.hi, this.buf);\n return this;\n }\n /**\n * Write a `sint64` value, a signed, zig-zag-encoded 64-bit varint.\n */\n sint64(value) {\n let tc = protoInt64.enc(value), \n // zigzag encode\n sign = tc.hi >> 31, lo = (tc.lo << 1) ^ sign, hi = ((tc.hi << 1) | (tc.lo >>> 31)) ^ sign;\n varint64write(lo, hi, this.buf);\n return this;\n }\n /**\n * Write a `uint64` value, an unsigned 64-bit varint.\n */\n uint64(value) {\n let tc = protoInt64.uEnc(value);\n varint64write(tc.lo, tc.hi, this.buf);\n return this;\n }\n}\nexport class BinaryReader {\n constructor(buf, decodeUtf8 = getTextEncoding().decodeUtf8) {\n this.decodeUtf8 = decodeUtf8;\n this.varint64 = varint64read; // dirty cast for `this`\n /**\n * Read a `uint32` field, an unsigned 32 bit varint.\n */\n this.uint32 = varint32read;\n this.buf = buf;\n this.len = buf.length;\n this.pos = 0;\n this.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n /**\n * Reads a tag - field number and wire type.\n */\n tag() {\n let tag = this.uint32(), fieldNo = tag >>> 3, wireType = tag & 7;\n if (fieldNo <= 0 || wireType < 0 || wireType > 5)\n throw new Error(\"illegal tag: field no \" + fieldNo + \" wire type \" + wireType);\n return [fieldNo, wireType];\n }\n /**\n * Skip one element and return the skipped data.\n *\n * When skipping StartGroup, provide the tags field number to check for\n * matching field number in the EndGroup tag.\n */\n skip(wireType, fieldNo) {\n let start = this.pos;\n switch (wireType) {\n case WireType.Varint:\n while (this.buf[this.pos++] & 0x80) {\n // ignore\n }\n break;\n // eslint-disable-next-line\n // @ts-expect-error TS7029: Fallthrough case in switch\n case WireType.Bit64:\n this.pos += 4;\n // eslint-disable-next-line no-fallthrough\n case WireType.Bit32:\n this.pos += 4;\n break;\n case WireType.LengthDelimited:\n let len = this.uint32();\n this.pos += len;\n break;\n case WireType.StartGroup:\n for (;;) {\n const [fn, wt] = this.tag();\n if (wt === WireType.EndGroup) {\n if (fieldNo !== undefined && fn !== fieldNo) {\n throw new Error(\"invalid end group tag\");\n }\n break;\n }\n this.skip(wt, fn);\n }\n break;\n default:\n throw new Error(\"cant skip wire type \" + wireType);\n }\n this.assertBounds();\n return this.buf.subarray(start, this.pos);\n }\n /**\n * Throws error if position in byte array is out of range.\n */\n assertBounds() {\n if (this.pos > this.len)\n throw new RangeError(\"premature EOF\");\n }\n /**\n * Read a `int32` field, a signed 32 bit varint.\n */\n int32() {\n return this.uint32() | 0;\n }\n /**\n * Read a `sint32` field, a signed, zigzag-encoded 32-bit varint.\n */\n sint32() {\n let zze = this.uint32();\n // decode zigzag\n return (zze >>> 1) ^ -(zze & 1);\n }\n /**\n * Read a `int64` field, a signed 64-bit varint.\n */\n int64() {\n return protoInt64.dec(...this.varint64());\n }\n /**\n * Read a `uint64` field, an unsigned 64-bit varint.\n */\n uint64() {\n return protoInt64.uDec(...this.varint64());\n }\n /**\n * Read a `sint64` field, a signed, zig-zag-encoded 64-bit varint.\n */\n sint64() {\n let [lo, hi] = this.varint64();\n // decode zig zag\n let s = -(lo & 1);\n lo = ((lo >>> 1) | ((hi & 1) << 31)) ^ s;\n hi = (hi >>> 1) ^ s;\n return protoInt64.dec(lo, hi);\n }\n /**\n * Read a `bool` field, a variant.\n */\n bool() {\n let [lo, hi] = this.varint64();\n return lo !== 0 || hi !== 0;\n }\n /**\n * Read a `fixed32` field, an unsigned, fixed-length 32-bit integer.\n */\n fixed32() {\n return this.view.getUint32((this.pos += 4) - 4, true);\n }\n /**\n * Read a `sfixed32` field, a signed, fixed-length 32-bit integer.\n */\n sfixed32() {\n return this.view.getInt32((this.pos += 4) - 4, true);\n }\n /**\n * Read a `fixed64` field, an unsigned, fixed-length 64 bit integer.\n */\n fixed64() {\n return protoInt64.uDec(this.sfixed32(), this.sfixed32());\n }\n /**\n * Read a `fixed64` field, a signed, fixed-length 64-bit integer.\n */\n sfixed64() {\n return protoInt64.dec(this.sfixed32(), this.sfixed32());\n }\n /**\n * Read a `float` field, 32-bit floating point number.\n */\n float() {\n return this.view.getFloat32((this.pos += 4) - 4, true);\n }\n /**\n * Read a `double` field, a 64-bit floating point number.\n */\n double() {\n return this.view.getFloat64((this.pos += 8) - 8, true);\n }\n /**\n * Read a `bytes` field, length-delimited arbitrary data.\n */\n bytes() {\n let len = this.uint32(), start = this.pos;\n this.pos += len;\n this.assertBounds();\n return this.buf.subarray(start, start + len);\n }\n /**\n * Read a `string` field, length-delimited data converted to UTF-8 text.\n */\n string() {\n return this.decodeUtf8(this.bytes());\n }\n}\n/**\n * Assert a valid signed protobuf 32-bit integer as a number or string.\n */\nfunction assertInt32(arg) {\n if (typeof arg == \"string\") {\n arg = Number(arg);\n }\n else if (typeof arg != \"number\") {\n throw new Error(\"invalid int32: \" + typeof arg);\n }\n if (!Number.isInteger(arg) ||\n arg > INT32_MAX ||\n arg < INT32_MIN)\n throw new Error(\"invalid int32: \" + arg);\n}\n/**\n * Assert a valid unsigned protobuf 32-bit integer as a number or string.\n */\nfunction assertUInt32(arg) {\n if (typeof arg == \"string\") {\n arg = Number(arg);\n }\n else if (typeof arg != \"number\") {\n throw new Error(\"invalid uint32: \" + typeof arg);\n }\n if (!Number.isInteger(arg) ||\n arg > UINT32_MAX ||\n arg < 0)\n throw new Error(\"invalid uint32: \" + arg);\n}\n/**\n * Assert a valid protobuf float value as a number or string.\n */\nfunction assertFloat32(arg) {\n if (typeof arg == \"string\") {\n const o = arg;\n arg = Number(arg);\n if (isNaN(arg) && o !== \"NaN\") {\n throw new Error(\"invalid float32: \" + o);\n }\n }\n else if (typeof arg != \"number\") {\n throw new Error(\"invalid float32: \" + typeof arg);\n }\n if (Number.isFinite(arg) &&\n (arg > FLOAT32_MAX || arg < FLOAT32_MIN))\n throw new Error(\"invalid float32: \" + arg);\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nimport { ScalarType, } from \"../descriptors.js\";\nimport { isMessage } from \"../is-message.js\";\nimport { FieldError } from \"./error.js\";\nimport { isReflectList, isReflectMap, isReflectMessage } from \"./guard.js\";\nimport { FLOAT32_MAX, FLOAT32_MIN, INT32_MAX, INT32_MIN, UINT32_MAX, } from \"../wire/binary-encoding.js\";\nimport { getTextEncoding } from \"../wire/text-encoding.js\";\nimport { protoInt64 } from \"../proto-int64.js\";\n/**\n * Check whether the given field value is valid for the reflect API.\n */\nexport function checkField(field, value) {\n const check = field.fieldKind == \"list\"\n ? isReflectList(value, field)\n : field.fieldKind == \"map\"\n ? isReflectMap(value, field)\n : checkSingular(field, value);\n if (check === true) {\n return undefined;\n }\n let reason;\n switch (field.fieldKind) {\n case \"list\":\n reason = `expected ${formatReflectList(field)}, got ${formatVal(value)}`;\n break;\n case \"map\":\n reason = `expected ${formatReflectMap(field)}, got ${formatVal(value)}`;\n break;\n default: {\n reason = reasonSingular(field, value, check);\n }\n }\n return new FieldError(field, reason);\n}\n/**\n * Check whether the given list item is valid for the reflect API.\n */\nexport function checkListItem(field, index, value) {\n const check = checkSingular(field, value);\n if (check !== true) {\n return new FieldError(field, `list item #${index + 1}: ${reasonSingular(field, value, check)}`);\n }\n return undefined;\n}\n/**\n * Check whether the given map key and value are valid for the reflect API.\n */\nexport function checkMapEntry(field, key, value) {\n const checkKey = checkScalarValue(key, field.mapKey);\n if (checkKey !== true) {\n return new FieldError(field, `invalid map key: ${reasonSingular({ scalar: field.mapKey }, key, checkKey)}`);\n }\n const checkVal = checkSingular(field, value);\n if (checkVal !== true) {\n return new FieldError(field, `map entry ${formatVal(key)}: ${reasonSingular(field, value, checkVal)}`);\n }\n return undefined;\n}\nfunction checkSingular(field, value) {\n if (field.scalar !== undefined) {\n return checkScalarValue(value, field.scalar);\n }\n if (field.enum !== undefined) {\n if (field.enum.open) {\n return Number.isInteger(value);\n }\n return field.enum.values.some((v) => v.number === value);\n }\n return isReflectMessage(value, field.message);\n}\nfunction checkScalarValue(value, scalar) {\n switch (scalar) {\n case ScalarType.DOUBLE:\n return typeof value == \"number\";\n case ScalarType.FLOAT:\n if (typeof value != \"number\") {\n return false;\n }\n if (Number.isNaN(value) || !Number.isFinite(value)) {\n return true;\n }\n if (value > FLOAT32_MAX || value < FLOAT32_MIN) {\n return `${value.toFixed()} out of range`;\n }\n return true;\n case ScalarType.INT32:\n case ScalarType.SFIXED32:\n case ScalarType.SINT32:\n // signed\n if (typeof value !== \"number\" || !Number.isInteger(value)) {\n return false;\n }\n if (value > INT32_MAX || value < INT32_MIN) {\n return `${value.toFixed()} out of range`;\n }\n return true;\n case ScalarType.FIXED32:\n case ScalarType.UINT32:\n // unsigned\n if (typeof value !== \"number\" || !Number.isInteger(value)) {\n return false;\n }\n if (value > UINT32_MAX || value < 0) {\n return `${value.toFixed()} out of range`;\n }\n return true;\n case ScalarType.BOOL:\n return typeof value == \"boolean\";\n case ScalarType.STRING:\n if (typeof value != \"string\") {\n return false;\n }\n return getTextEncoding().checkUtf8(value) || \"invalid UTF8\";\n case ScalarType.BYTES:\n return value instanceof Uint8Array;\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n // signed\n if (typeof value != \"string\" &&\n typeof value !== \"bigint\" &&\n typeof value !== \"number\") {\n return false;\n }\n try {\n protoInt64.parse(value);\n }\n catch (e) {\n return `${value} out of range`;\n }\n return true;\n case ScalarType.FIXED64:\n case ScalarType.UINT64:\n // unsigned\n if (typeof value != \"string\" &&\n typeof value !== \"bigint\" &&\n typeof value !== \"number\") {\n return false;\n }\n try {\n protoInt64.uParse(value);\n }\n catch (e) {\n return `${value} out of range`;\n }\n return true;\n }\n}\nfunction reasonSingular(field, val, details) {\n details =\n typeof details == \"string\" ? `: ${details}` : `, got ${formatVal(val)}`;\n if (field.scalar !== undefined) {\n return `expected ${scalarTypeDescription(field.scalar)}` + details;\n }\n else if (field.enum !== undefined) {\n return `expected ${field.enum.toString()}` + details;\n }\n return `expected ${formatReflectMessage(field.message)}` + details;\n}\nexport function formatVal(val) {\n switch (typeof val) {\n case \"object\":\n if (val === null) {\n return \"null\";\n }\n if (val instanceof Uint8Array) {\n return `Uint8Array(${val.length})`;\n }\n if (Array.isArray(val)) {\n return `Array(${val.length})`;\n }\n if (isReflectList(val)) {\n return formatReflectList(val.field());\n }\n if (isReflectMap(val)) {\n return formatReflectMap(val.field());\n }\n if (isReflectMessage(val)) {\n return formatReflectMessage(val.desc);\n }\n if (isMessage(val)) {\n return `message ${val.$typeName}`;\n }\n return \"object\";\n case \"string\":\n return val.length > 30 ? \"string\" : `\"${val.split('\"').join('\\\\\"')}\"`;\n case \"boolean\":\n return String(val);\n case \"number\":\n return String(val);\n case \"bigint\":\n return String(val) + \"n\";\n default:\n // \"symbol\" | \"undefined\" | \"object\" | \"function\"\n return typeof val;\n }\n}\nfunction formatReflectMessage(desc) {\n return `ReflectMessage (${desc.typeName})`;\n}\nfunction formatReflectList(field) {\n switch (field.listKind) {\n case \"message\":\n return `ReflectList (${field.message.toString()})`;\n case \"enum\":\n return `ReflectList (${field.enum.toString()})`;\n case \"scalar\":\n return `ReflectList (${ScalarType[field.scalar]})`;\n }\n}\nfunction formatReflectMap(field) {\n switch (field.mapKind) {\n case \"message\":\n return `ReflectMap (${ScalarType[field.mapKey]}, ${field.message.toString()})`;\n case \"enum\":\n return `ReflectMap (${ScalarType[field.mapKey]}, ${field.enum.toString()})`;\n case \"scalar\":\n return `ReflectMap (${ScalarType[field.mapKey]}, ${ScalarType[field.scalar]})`;\n }\n}\nfunction scalarTypeDescription(scalar) {\n switch (scalar) {\n case ScalarType.STRING:\n return \"string\";\n case ScalarType.BOOL:\n return \"boolean\";\n case ScalarType.INT64:\n case ScalarType.SINT64:\n case ScalarType.SFIXED64:\n return \"bigint (int64)\";\n case ScalarType.UINT64:\n case ScalarType.FIXED64:\n return \"bigint (uint64)\";\n case ScalarType.BYTES:\n return \"Uint8Array\";\n case ScalarType.DOUBLE:\n return \"number (float64)\";\n case ScalarType.FLOAT:\n return \"number (float32)\";\n case ScalarType.FIXED32:\n case ScalarType.UINT32:\n return \"number (uint32)\";\n case ScalarType.INT32:\n case ScalarType.SFIXED32:\n case ScalarType.SINT32:\n return \"number (int32)\";\n }\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nimport { ScalarType, } from \"../descriptors.js\";\nimport { checkField, checkListItem, checkMapEntry } from \"./reflect-check.js\";\nimport { FieldError } from \"./error.js\";\nimport { unsafeClear, unsafeGet, unsafeIsSet, unsafeLocal, unsafeOneofCase, unsafeSet, } from \"./unsafe.js\";\nimport { create } from \"../create.js\";\nimport { isWrapper, isWrapperDesc } from \"../wkt/wrappers.js\";\nimport { scalarZeroValue } from \"./scalar.js\";\nimport { protoInt64 } from \"../proto-int64.js\";\nimport { isObject, isReflectList, isReflectMap, isReflectMessage, } from \"./guard.js\";\n/**\n * Create a ReflectMessage.\n */\nexport function reflect(messageDesc, message, \n/**\n * By default, field values are validated when setting them. For example,\n * a value for an uint32 field must be a ECMAScript Number >= 0.\n *\n * When field values are trusted, performance can be improved by disabling\n * checks.\n */\ncheck = true) {\n return new ReflectMessageImpl(messageDesc, message, check);\n}\nclass ReflectMessageImpl {\n get sortedFields() {\n var _a;\n return ((_a = this._sortedFields) !== null && _a !== void 0 ? _a : (this._sortedFields = this.desc.fields\n .concat()\n .sort((a, b) => a.number - b.number)));\n }\n constructor(messageDesc, message, check = true) {\n this.lists = new Map();\n this.maps = new Map();\n this.check = check;\n this.desc = messageDesc;\n this.message = this[unsafeLocal] = message !== null && message !== void 0 ? message : create(messageDesc);\n this.fields = messageDesc.fields;\n this.oneofs = messageDesc.oneofs;\n this.members = messageDesc.members;\n }\n findNumber(number) {\n if (!this._fieldsByNumber) {\n this._fieldsByNumber = new Map(this.desc.fields.map((f) => [f.number, f]));\n }\n return this._fieldsByNumber.get(number);\n }\n oneofCase(oneof) {\n assertOwn(this.message, oneof);\n return unsafeOneofCase(this.message, oneof);\n }\n isSet(field) {\n assertOwn(this.message, field);\n return unsafeIsSet(this.message, field);\n }\n clear(field) {\n assertOwn(this.message, field);\n unsafeClear(this.message, field);\n }\n get(field) {\n assertOwn(this.message, field);\n const value = unsafeGet(this.message, field);\n switch (field.fieldKind) {\n case \"list\":\n // eslint-disable-next-line no-case-declarations\n let list = this.lists.get(field);\n if (!list || list[unsafeLocal] !== value) {\n this.lists.set(field, (list = new ReflectListImpl(field, value, this.check)));\n }\n return list;\n case \"map\":\n // eslint-disable-next-line no-case-declarations\n let map = this.maps.get(field);\n if (!map || map[unsafeLocal] !== value) {\n this.maps.set(field, (map = new ReflectMapImpl(field, value, this.check)));\n }\n return map;\n case \"message\":\n return messageToReflect(field, value, this.check);\n case \"scalar\":\n return (value === undefined\n ? scalarZeroValue(field.scalar, false)\n : longToReflect(field, value));\n case \"enum\":\n return (value !== null && value !== void 0 ? value : field.enum.values[0].number);\n }\n }\n set(field, value) {\n assertOwn(this.message, field);\n if (this.check) {\n const err = checkField(field, value);\n if (err) {\n throw err;\n }\n }\n let local;\n if (field.fieldKind == \"message\") {\n local = messageToLocal(field, value);\n }\n else if (isReflectMap(value) || isReflectList(value)) {\n local = value[unsafeLocal];\n }\n else {\n local = longToLocal(field, value);\n }\n unsafeSet(this.message, field, local);\n }\n getUnknown() {\n return this.message.$unknown;\n }\n setUnknown(value) {\n this.message.$unknown = value;\n }\n}\nfunction assertOwn(owner, member) {\n if (member.parent.typeName !== owner.$typeName) {\n throw new FieldError(member, `cannot use ${member.toString()} with message ${owner.$typeName}`, \"ForeignFieldError\");\n }\n}\n/**\n * Create a ReflectList.\n */\nexport function reflectList(field, unsafeInput, \n/**\n * By default, field values are validated when setting them. For example,\n * a value for an uint32 field must be a ECMAScript Number >= 0.\n *\n * When field values are trusted, performance can be improved by disabling\n * checks.\n */\ncheck = true) {\n return new ReflectListImpl(field, unsafeInput !== null && unsafeInput !== void 0 ? unsafeInput : [], check);\n}\nclass ReflectListImpl {\n field() {\n return this._field;\n }\n get size() {\n return this._arr.length;\n }\n constructor(field, unsafeInput, check) {\n this._field = field;\n this._arr = this[unsafeLocal] = unsafeInput;\n this.check = check;\n }\n get(index) {\n const item = this._arr[index];\n return item === undefined\n ? undefined\n : listItemToReflect(this._field, item, this.check);\n }\n set(index, item) {\n if (index < 0 || index >= this._arr.length) {\n throw new FieldError(this._field, `list item #${index + 1}: out of range`);\n }\n if (this.check) {\n const err = checkListItem(this._field, index, item);\n if (err) {\n throw err;\n }\n }\n this._arr[index] = listItemToLocal(this._field, item);\n }\n add(item) {\n if (this.check) {\n const err = checkListItem(this._field, this._arr.length, item);\n if (err) {\n throw err;\n }\n }\n this._arr.push(listItemToLocal(this._field, item));\n return undefined;\n }\n clear() {\n this._arr.splice(0, this._arr.length);\n }\n [Symbol.iterator]() {\n return this.values();\n }\n keys() {\n return this._arr.keys();\n }\n *values() {\n for (const item of this._arr) {\n yield listItemToReflect(this._field, item, this.check);\n }\n }\n *entries() {\n for (let i = 0; i < this._arr.length; i++) {\n yield [i, listItemToReflect(this._field, this._arr[i], this.check)];\n }\n }\n}\n/**\n * Create a ReflectMap.\n */\nexport function reflectMap(field, unsafeInput, \n/**\n * By default, field values are validated when setting them. For example,\n * a value for an uint32 field must be a ECMAScript Number >= 0.\n *\n * When field values are trusted, performance can be improved by disabling\n * checks.\n */\ncheck = true) {\n return new ReflectMapImpl(field, unsafeInput, check);\n}\nclass ReflectMapImpl {\n constructor(field, unsafeInput, check = true) {\n this.obj = this[unsafeLocal] = unsafeInput !== null && unsafeInput !== void 0 ? unsafeInput : {};\n this.check = check;\n this._field = field;\n }\n field() {\n return this._field;\n }\n set(key, value) {\n if (this.check) {\n const err = checkMapEntry(this._field, key, value);\n if (err) {\n throw err;\n }\n }\n this.obj[mapKeyToLocal(key)] = mapValueToLocal(this._field, value);\n return this;\n }\n delete(key) {\n const k = mapKeyToLocal(key);\n const has = Object.prototype.hasOwnProperty.call(this.obj, k);\n if (has) {\n delete this.obj[k];\n }\n return has;\n }\n clear() {\n for (const key of Object.keys(this.obj)) {\n delete this.obj[key];\n }\n }\n get(key) {\n let val = this.obj[mapKeyToLocal(key)];\n if (val !== undefined) {\n val = mapValueToReflect(this._field, val, this.check);\n }\n return val;\n }\n has(key) {\n return Object.prototype.hasOwnProperty.call(this.obj, mapKeyToLocal(key));\n }\n *keys() {\n for (const objKey of Object.keys(this.obj)) {\n yield mapKeyToReflect(objKey, this._field.mapKey);\n }\n }\n *entries() {\n for (const objEntry of Object.entries(this.obj)) {\n yield [\n mapKeyToReflect(objEntry[0], this._field.mapKey),\n mapValueToReflect(this._field, objEntry[1], this.check),\n ];\n }\n }\n [Symbol.iterator]() {\n return this.entries();\n }\n get size() {\n return Object.keys(this.obj).length;\n }\n *values() {\n for (const val of Object.values(this.obj)) {\n yield mapValueToReflect(this._field, val, this.check);\n }\n }\n forEach(callbackfn, thisArg) {\n for (const mapEntry of this.entries()) {\n callbackfn.call(thisArg, mapEntry[1], mapEntry[0], this);\n }\n }\n}\nfunction messageToLocal(field, value) {\n if (!isReflectMessage(value)) {\n return value;\n }\n if (isWrapper(value.message) &&\n !field.oneof &&\n field.fieldKind == \"message\") {\n // Types from google/protobuf/wrappers.proto are unwrapped when used in\n // a singular field that is not part of a oneof group.\n return value.message.value;\n }\n if (value.desc.typeName == \"google.protobuf.Struct\" &&\n field.parent.typeName != \"google.protobuf.Value\") {\n // google.protobuf.Struct is represented with JsonObject when used in a\n // field, except when used in google.protobuf.Value.\n return wktStructToLocal(value.message);\n }\n return value.message;\n}\nfunction messageToReflect(field, value, check) {\n if (value !== undefined) {\n if (isWrapperDesc(field.message) &&\n !field.oneof &&\n field.fieldKind == \"message\") {\n // Types from google/protobuf/wrappers.proto are unwrapped when used in\n // a singular field that is not part of a oneof group.\n value = {\n $typeName: field.message.typeName,\n value: longToReflect(field.message.fields[0], value),\n };\n }\n else if (field.message.typeName == \"google.protobuf.Struct\" &&\n field.parent.typeName != \"google.protobuf.Value\" &&\n isObject(value)) {\n // google.protobuf.Struct is represented with JsonObject when used in a\n // field, except when used in google.protobuf.Value.\n value = wktStructToReflect(value);\n }\n }\n return new ReflectMessageImpl(field.message, value, check);\n}\nfunction listItemToLocal(field, value) {\n if (field.listKind == \"message\") {\n return messageToLocal(field, value);\n }\n return longToLocal(field, value);\n}\nfunction listItemToReflect(field, value, check) {\n if (field.listKind == \"message\") {\n return messageToReflect(field, value, check);\n }\n return longToReflect(field, value);\n}\nfunction mapValueToLocal(field, value) {\n if (field.mapKind == \"message\") {\n return messageToLocal(field, value);\n }\n return longToLocal(field, value);\n}\nfunction mapValueToReflect(field, value, check) {\n if (field.mapKind == \"message\") {\n return messageToReflect(field, value, check);\n }\n return value;\n}\nfunction mapKeyToLocal(key) {\n return typeof key == \"string\" || typeof key == \"number\" ? key : String(key);\n}\n/**\n * Converts a map key (any scalar value except float, double, or bytes) from its\n * representation in a message (string or number, the only possible object key\n * types) to the closest possible type in ECMAScript.\n */\nfunction mapKeyToReflect(key, type) {\n switch (type) {\n case ScalarType.STRING:\n return key;\n case ScalarType.INT32:\n case ScalarType.FIXED32:\n case ScalarType.UINT32:\n case ScalarType.SFIXED32:\n case ScalarType.SINT32: {\n const n = Number.parseInt(key);\n if (Number.isFinite(n)) {\n return n;\n }\n break;\n }\n case ScalarType.BOOL:\n switch (key) {\n case \"true\":\n return true;\n case \"false\":\n return false;\n }\n break;\n case ScalarType.UINT64:\n case ScalarType.FIXED64:\n try {\n return protoInt64.uParse(key);\n }\n catch (_a) {\n //\n }\n break;\n default:\n // INT64, SFIXED64, SINT64\n try {\n return protoInt64.parse(key);\n }\n catch (_b) {\n //\n }\n break;\n }\n return key;\n}\nfunction longToReflect(field, value) {\n // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n switch (field.scalar) {\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n if (\"longAsString\" in field &&\n field.longAsString &&\n typeof value == \"string\") {\n value = protoInt64.parse(value);\n }\n break;\n case ScalarType.FIXED64:\n case ScalarType.UINT64:\n if (\"longAsString\" in field &&\n field.longAsString &&\n typeof value == \"string\") {\n value = protoInt64.uParse(value);\n }\n break;\n }\n return value;\n}\nfunction longToLocal(field, value) {\n // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n switch (field.scalar) {\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n if (\"longAsString\" in field && field.longAsString) {\n value = String(value);\n }\n else if (typeof value == \"string\" || typeof value == \"number\") {\n value = protoInt64.parse(value);\n }\n break;\n case ScalarType.FIXED64:\n case ScalarType.UINT64:\n if (\"longAsString\" in field && field.longAsString) {\n value = String(value);\n }\n else if (typeof value == \"string\" || typeof value == \"number\") {\n value = protoInt64.uParse(value);\n }\n break;\n }\n return value;\n}\nfunction wktStructToReflect(json) {\n const struct = {\n $typeName: \"google.protobuf.Struct\",\n fields: {},\n };\n if (isObject(json)) {\n for (const [k, v] of Object.entries(json)) {\n struct.fields[k] = wktValueToReflect(v);\n }\n }\n return struct;\n}\nfunction wktStructToLocal(val) {\n const json = {};\n for (const [k, v] of Object.entries(val.fields)) {\n json[k] = wktValueToLocal(v);\n }\n return json;\n}\nfunction wktValueToLocal(val) {\n switch (val.kind.case) {\n case \"structValue\":\n return wktStructToLocal(val.kind.value);\n case \"listValue\":\n return val.kind.value.values.map(wktValueToLocal);\n case \"nullValue\":\n case undefined:\n return null;\n default:\n return val.kind.value;\n }\n}\nfunction wktValueToReflect(json) {\n const value = {\n $typeName: \"google.protobuf.Value\",\n kind: { case: undefined },\n };\n // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- invalid input is unselected kind\n switch (typeof json) {\n case \"number\":\n value.kind = { case: \"numberValue\", value: json };\n break;\n case \"string\":\n value.kind = { case: \"stringValue\", value: json };\n break;\n case \"boolean\":\n value.kind = { case: \"boolValue\", value: json };\n break;\n case \"object\":\n if (json === null) {\n const nullValue = 0;\n value.kind = { case: \"nullValue\", value: nullValue };\n }\n else if (Array.isArray(json)) {\n const listValue = {\n $typeName: \"google.protobuf.ListValue\",\n values: [],\n };\n if (Array.isArray(json)) {\n for (const e of json) {\n listValue.values.push(wktValueToReflect(e));\n }\n }\n value.kind = {\n case: \"listValue\",\n value: listValue,\n };\n }\n else {\n value.kind = {\n case: \"structValue\",\n value: wktStructToReflect(json),\n };\n }\n break;\n }\n return value;\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nimport { ScalarType } from \"../descriptors.js\";\nimport { protoInt64 } from \"../proto-int64.js\";\n/* eslint-disable @typescript-eslint/restrict-template-expressions */\n/**\n * Parse an enum value from the Protobuf text format.\n *\n * @private\n */\nexport function parseTextFormatEnumValue(descEnum, value) {\n const enumValue = descEnum.values.find((v) => v.name === value);\n if (!enumValue) {\n throw new Error(`cannot parse ${descEnum} default value: ${value}`);\n }\n return enumValue.number;\n}\n/**\n * Parse a scalar value from the Protobuf text format.\n *\n * @private\n */\nexport function parseTextFormatScalarValue(type, value) {\n switch (type) {\n case ScalarType.STRING:\n return value;\n case ScalarType.BYTES: {\n const u = unescapeBytesDefaultValue(value);\n if (u === false) {\n throw new Error(`cannot parse ${ScalarType[type]} default value: ${value}`);\n }\n return u;\n }\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n return protoInt64.parse(value);\n case ScalarType.UINT64:\n case ScalarType.FIXED64:\n return protoInt64.uParse(value);\n case ScalarType.DOUBLE:\n case ScalarType.FLOAT:\n switch (value) {\n case \"inf\":\n return Number.POSITIVE_INFINITY;\n case \"-inf\":\n return Number.NEGATIVE_INFINITY;\n case \"nan\":\n return Number.NaN;\n default:\n return parseFloat(value);\n }\n case ScalarType.BOOL:\n return value === \"true\";\n case ScalarType.INT32:\n case ScalarType.UINT32:\n case ScalarType.SINT32:\n case ScalarType.FIXED32:\n case ScalarType.SFIXED32:\n return parseInt(value, 10);\n }\n}\n/**\n * Parses a text-encoded default value (proto2) of a BYTES field.\n */\nfunction unescapeBytesDefaultValue(str) {\n const b = [];\n const input = {\n tail: str,\n c: \"\",\n next() {\n if (this.tail.length == 0) {\n return false;\n }\n this.c = this.tail[0];\n this.tail = this.tail.substring(1);\n return true;\n },\n take(n) {\n if (this.tail.length >= n) {\n const r = this.tail.substring(0, n);\n this.tail = this.tail.substring(n);\n return r;\n }\n return false;\n },\n };\n while (input.next()) {\n switch (input.c) {\n case \"\\\\\":\n if (input.next()) {\n switch (input.c) {\n case \"\\\\\":\n b.push(input.c.charCodeAt(0));\n break;\n case \"b\":\n b.push(0x08);\n break;\n case \"f\":\n b.push(0x0c);\n break;\n case \"n\":\n b.push(0x0a);\n break;\n case \"r\":\n b.push(0x0d);\n break;\n case \"t\":\n b.push(0x09);\n break;\n case \"v\":\n b.push(0x0b);\n break;\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\": {\n const s = input.c;\n const t = input.take(2);\n if (t === false) {\n return false;\n }\n const n = parseInt(s + t, 8);\n if (isNaN(n)) {\n return false;\n }\n b.push(n);\n break;\n }\n case \"x\": {\n const s = input.c;\n const t = input.take(2);\n if (t === false) {\n return false;\n }\n const n = parseInt(s + t, 16);\n if (isNaN(n)) {\n return false;\n }\n b.push(n);\n break;\n }\n case \"u\": {\n const s = input.c;\n const t = input.take(4);\n if (t === false) {\n return false;\n }\n const n = parseInt(s + t, 16);\n if (isNaN(n)) {\n return false;\n }\n const chunk = new Uint8Array(4);\n const view = new DataView(chunk.buffer);\n view.setInt32(0, n, true);\n b.push(chunk[0], chunk[1], chunk[2], chunk[3]);\n break;\n }\n case \"U\": {\n const s = input.c;\n const t = input.take(8);\n if (t === false) {\n return false;\n }\n const tc = protoInt64.uEnc(s + t);\n const chunk = new Uint8Array(8);\n const view = new DataView(chunk.buffer);\n view.setInt32(0, tc.lo, true);\n view.setInt32(4, tc.hi, true);\n b.push(chunk[0], chunk[1], chunk[2], chunk[3], chunk[4], chunk[5], chunk[6], chunk[7]);\n break;\n }\n }\n }\n break;\n default:\n b.push(input.c.charCodeAt(0));\n }\n }\n return new Uint8Array(b);\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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 * Iterate over all types - enumerations, extensions, services, messages -\n * and enumerations, extensions and messages nested in messages.\n */\nexport function* nestedTypes(desc) {\n switch (desc.kind) {\n case \"file\":\n for (const message of desc.messages) {\n yield message;\n yield* nestedTypes(message);\n }\n yield* desc.enums;\n yield* desc.services;\n yield* desc.extensions;\n break;\n case \"message\":\n for (const message of desc.nestedMessages) {\n yield message;\n yield* nestedTypes(message);\n }\n yield* desc.nestedEnums;\n yield* desc.nestedExtensions;\n break;\n }\n}\n/**\n * Returns the ancestors of a given Protobuf element, up to the file.\n */\nexport function parentTypes(desc) {\n const parents = [];\n while (desc.kind !== \"file\") {\n const p = parent(desc);\n desc = p;\n parents.push(p);\n }\n return parents;\n}\nfunction parent(desc) {\n var _a;\n switch (desc.kind) {\n case \"enum_value\":\n case \"field\":\n case \"oneof\":\n case \"rpc\":\n return desc.parent;\n case \"service\":\n return desc.file;\n case \"extension\":\n case \"enum\":\n case \"message\":\n return (_a = desc.parent) !== null && _a !== void 0 ? _a : desc.file;\n }\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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 * Converts snake_case to protoCamelCase according to the convention\n * used by protoc to convert a field name to a JSON name.\n */\nexport function protoCamelCase(snakeCase) {\n let capNext = false;\n const b = [];\n for (let i = 0; i < snakeCase.length; i++) {\n let c = snakeCase.charAt(i);\n switch (c) {\n case \"_\":\n capNext = true;\n break;\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\":\n b.push(c);\n capNext = false;\n break;\n default:\n if (capNext) {\n capNext = false;\n c = c.toUpperCase();\n }\n b.push(c);\n break;\n }\n }\n return b.join(\"\");\n}\n/**\n * Names that cannot be used for object properties because they are reserved\n * by built-in JavaScript properties.\n */\nconst reservedObjectProperties = new Set([\n // names reserved by JavaScript\n \"constructor\",\n \"toString\",\n \"toJSON\",\n \"valueOf\",\n]);\n/**\n * Escapes names that are reserved for ECMAScript built-in object properties.\n *\n * Also see safeIdentifier() from @bufbuild/protoplugin.\n */\nexport function safeObjectProperty(name) {\n return reservedObjectProperties.has(name) ? name + \"$\" : name;\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nimport { ScalarType, } from \"./descriptors.js\";\nimport { parseTextFormatEnumValue, parseTextFormatScalarValue, } from \"./wire/text-format.js\";\nimport { nestedTypes } from \"./reflect/nested-types.js\";\nimport { unsafeIsSetExplicit } from \"./reflect/unsafe.js\";\nimport { protoCamelCase, safeObjectProperty } from \"./reflect/names.js\";\n/**\n * Create a registry from the given inputs.\n *\n * An input can be:\n * - Any message, enum, service, or extension descriptor, which adds just the\n * descriptor for this type.\n * - A file descriptor, which adds all typed defined in this file.\n * - A registry, which adds all types from the registry.\n *\n * For duplicate descriptors (same type name), the one given last wins.\n */\nexport function createRegistry(...input) {\n return initBaseRegistry(input);\n}\n/**\n * Create a registry that allows adding and removing descriptors.\n */\nexport function createMutableRegistry(...input) {\n const reg = initBaseRegistry(input);\n return Object.assign(Object.assign({}, reg), { remove(desc) {\n var _a;\n if (desc.kind == \"extension\") {\n (_a = reg.extendees.get(desc.extendee.typeName)) === null || _a === void 0 ? void 0 : _a.delete(desc.number);\n }\n reg.types.delete(desc.typeName);\n } });\n}\nexport function createFileRegistry(...args) {\n const registry = createBaseRegistry();\n if (!args.length) {\n return registry;\n }\n if (\"$typeName\" in args[0] &&\n args[0].$typeName == \"google.protobuf.FileDescriptorSet\") {\n for (const file of args[0].file) {\n addFile(file, registry);\n }\n return registry;\n }\n if (\"$typeName\" in args[0]) {\n const input = args[0];\n const resolve = args[1];\n const seen = new Set();\n // eslint-disable-next-line no-inner-declarations\n function recurseDeps(file) {\n const deps = [];\n for (const protoFileName of file.dependency) {\n if (registry.getFile(protoFileName) != undefined) {\n continue;\n }\n if (seen.has(protoFileName)) {\n continue;\n }\n const dep = resolve(protoFileName);\n if (!dep) {\n throw new Error(`Unable to resolve ${protoFileName}, imported by ${file.name}`);\n }\n if (\"kind\" in dep) {\n registry.addFile(dep, false, true);\n }\n else {\n seen.add(dep.name);\n deps.push(dep);\n }\n }\n return deps.concat(...deps.map(recurseDeps));\n }\n for (const file of [input, ...recurseDeps(input)].reverse()) {\n addFile(file, registry);\n }\n }\n else {\n for (const fileReg of args) {\n for (const file of fileReg.files) {\n registry.addFile(file);\n }\n }\n }\n return registry;\n}\n/**\n * @private\n */\nfunction createBaseRegistry() {\n const types = new Map();\n const extendees = new Map();\n const files = new Map();\n return {\n kind: \"registry\",\n types,\n extendees,\n [Symbol.iterator]() {\n return types.values();\n },\n get files() {\n return files.values();\n },\n addFile(file, skipTypes, withDeps) {\n files.set(file.proto.name, file);\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (!skipTypes) {\n for (const type of nestedTypes(file)) {\n this.add(type);\n }\n }\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (withDeps) {\n for (const f of file.dependencies) {\n this.addFile(f, skipTypes, withDeps);\n }\n }\n },\n add(desc) {\n if (desc.kind == \"extension\") {\n let numberToExt = extendees.get(desc.extendee.typeName);\n if (!numberToExt) {\n extendees.set(desc.extendee.typeName, (numberToExt = new Map()));\n }\n numberToExt.set(desc.number, desc);\n }\n types.set(desc.typeName, desc);\n },\n get(typeName) {\n return types.get(typeName);\n },\n getFile(fileName) {\n return files.get(fileName);\n },\n getMessage(typeName) {\n const t = types.get(typeName);\n return (t === null || t === void 0 ? void 0 : t.kind) == \"message\" ? t : undefined;\n },\n getEnum(typeName) {\n const t = types.get(typeName);\n return (t === null || t === void 0 ? void 0 : t.kind) == \"enum\" ? t : undefined;\n },\n getExtension(typeName) {\n const t = types.get(typeName);\n return (t === null || t === void 0 ? void 0 : t.kind) == \"extension\" ? t : undefined;\n },\n getExtensionFor(extendee, no) {\n var _a;\n return (_a = extendees.get(extendee.typeName)) === null || _a === void 0 ? void 0 : _a.get(no);\n },\n getService(typeName) {\n const t = types.get(typeName);\n return (t === null || t === void 0 ? void 0 : t.kind) == \"service\" ? t : undefined;\n },\n };\n}\n/**\n * @private\n */\nfunction initBaseRegistry(inputs) {\n const registry = createBaseRegistry();\n for (const input of inputs) {\n switch (input.kind) {\n case \"registry\":\n for (const n of input) {\n registry.add(n);\n }\n break;\n case \"file\":\n registry.addFile(input);\n break;\n default:\n registry.add(input);\n break;\n }\n }\n return registry;\n}\n// bootstrap-inject google.protobuf.Edition.EDITION_PROTO2: const $name: Edition.$localName = $number;\nconst EDITION_PROTO2 = 998;\n// bootstrap-inject google.protobuf.Edition.EDITION_PROTO3: const $name: Edition.$localName = $number;\nconst EDITION_PROTO3 = 999;\n// bootstrap-inject google.protobuf.FieldDescriptorProto.Type.TYPE_STRING: const $name: FieldDescriptorProto_Type.$localName = $number;\nconst TYPE_STRING = 9;\n// bootstrap-inject google.protobuf.FieldDescriptorProto.Type.TYPE_GROUP: const $name: FieldDescriptorProto_Type.$localName = $number;\nconst TYPE_GROUP = 10;\n// bootstrap-inject google.protobuf.FieldDescriptorProto.Type.TYPE_MESSAGE: const $name: FieldDescriptorProto_Type.$localName = $number;\nconst TYPE_MESSAGE = 11;\n// bootstrap-inject google.protobuf.FieldDescriptorProto.Type.TYPE_BYTES: const $name: FieldDescriptorProto_Type.$localName = $number;\nconst TYPE_BYTES = 12;\n// bootstrap-inject google.protobuf.FieldDescriptorProto.Type.TYPE_ENUM: const $name: FieldDescriptorProto_Type.$localName = $number;\nconst TYPE_ENUM = 14;\n// bootstrap-inject google.protobuf.FieldDescriptorProto.Label.LABEL_REPEATED: const $name: FieldDescriptorProto_Label.$localName = $number;\nconst LABEL_REPEATED = 3;\n// bootstrap-inject google.protobuf.FieldDescriptorProto.Label.LABEL_REQUIRED: const $name: FieldDescriptorProto_Label.$localName = $number;\nconst LABEL_REQUIRED = 2;\n// bootstrap-inject google.protobuf.FieldOptions.JSType.JS_STRING: const $name: FieldOptions_JSType.$localName = $number;\nconst JS_STRING = 1;\n// bootstrap-inject google.protobuf.MethodOptions.IdempotencyLevel.IDEMPOTENCY_UNKNOWN: const $name: MethodOptions_IdempotencyLevel.$localName = $number;\nconst IDEMPOTENCY_UNKNOWN = 0;\n// bootstrap-inject google.protobuf.FeatureSet.FieldPresence.EXPLICIT: const $name: FeatureSet_FieldPresence.$localName = $number;\nconst EXPLICIT = 1;\n// bootstrap-inject google.protobuf.FeatureSet.FieldPresence.IMPLICIT: const $name: FeatureSet_FieldPresence.$localName = $number;\nconst IMPLICIT = 2;\n// bootstrap-inject google.protobuf.FeatureSet.FieldPresence.LEGACY_REQUIRED: const $name: FeatureSet_FieldPresence.$localName = $number;\nconst LEGACY_REQUIRED = 3;\n// bootstrap-inject google.protobuf.FeatureSet.RepeatedFieldEncoding.PACKED: const $name: FeatureSet_RepeatedFieldEncoding.$localName = $number;\nconst PACKED = 1;\n// bootstrap-inject google.protobuf.FeatureSet.MessageEncoding.DELIMITED: const $name: FeatureSet_MessageEncoding.$localName = $number;\nconst DELIMITED = 2;\n// bootstrap-inject google.protobuf.FeatureSet.EnumType.OPEN: const $name: FeatureSet_EnumType.$localName = $number;\nconst OPEN = 1;\n// prettier-ignore\n// bootstrap-inject defaults: EDITION_PROTO2 to EDITION_2023: export const minimumEdition: SupportedEdition = $minimumEdition, maximumEdition: SupportedEdition = $maximumEdition;\n// generated from protoc v28.0\nexport const minimumEdition = 998, maximumEdition = 1000;\nconst featureDefaults = {\n // EDITION_PROTO2\n 998: {\n fieldPresence: 1, // EXPLICIT,\n enumType: 2, // CLOSED,\n repeatedFieldEncoding: 2, // EXPANDED,\n utf8Validation: 3, // NONE,\n messageEncoding: 1, // LENGTH_PREFIXED,\n jsonFormat: 2, // LEGACY_BEST_EFFORT,\n },\n // EDITION_PROTO3\n 999: {\n fieldPresence: 2, // IMPLICIT,\n enumType: 1, // OPEN,\n repeatedFieldEncoding: 1, // PACKED,\n utf8Validation: 2, // VERIFY,\n messageEncoding: 1, // LENGTH_PREFIXED,\n jsonFormat: 1, // ALLOW,\n },\n // EDITION_2023\n 1000: {\n fieldPresence: 1, // EXPLICIT,\n enumType: 1, // OPEN,\n repeatedFieldEncoding: 1, // PACKED,\n utf8Validation: 2, // VERIFY,\n messageEncoding: 1, // LENGTH_PREFIXED,\n jsonFormat: 1, // ALLOW,\n },\n};\n/**\n * Create a descriptor for a file, add it to the registry.\n */\nfunction addFile(proto, reg) {\n var _a, _b;\n const file = {\n kind: \"file\",\n proto,\n deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,\n edition: getFileEdition(proto),\n name: proto.name.replace(/\\.proto$/, \"\"),\n dependencies: findFileDependencies(proto, reg),\n enums: [],\n messages: [],\n extensions: [],\n services: [],\n toString() {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions -- we asserted above\n return `file ${proto.name}`;\n },\n };\n const mapEntriesStore = new Map();\n const mapEntries = {\n get(typeName) {\n return mapEntriesStore.get(typeName);\n },\n add(desc) {\n var _a;\n assert(((_a = desc.proto.options) === null || _a === void 0 ? void 0 : _a.mapEntry) === true);\n mapEntriesStore.set(desc.typeName, desc);\n },\n };\n for (const enumProto of proto.enumType) {\n addEnum(enumProto, file, undefined, reg);\n }\n for (const messageProto of proto.messageType) {\n addMessage(messageProto, file, undefined, reg, mapEntries);\n }\n for (const serviceProto of proto.service) {\n addService(serviceProto, file, reg);\n }\n addExtensions(file, reg);\n for (const mapEntry of mapEntriesStore.values()) {\n // to create a map field, we need access to the map entry's fields\n addFields(mapEntry, reg, mapEntries);\n }\n for (const message of file.messages) {\n addFields(message, reg, mapEntries);\n addExtensions(message, reg);\n }\n reg.addFile(file, true);\n}\n/**\n * Create descriptors for extensions, and add them to the message / file,\n * and to our cart.\n * Recurses into nested types.\n */\nfunction addExtensions(desc, reg) {\n switch (desc.kind) {\n case \"file\":\n for (const proto of desc.proto.extension) {\n const ext = newField(proto, desc, reg);\n desc.extensions.push(ext);\n reg.add(ext);\n }\n break;\n case \"message\":\n for (const proto of desc.proto.extension) {\n const ext = newField(proto, desc, reg);\n desc.nestedExtensions.push(ext);\n reg.add(ext);\n }\n for (const message of desc.nestedMessages) {\n addExtensions(message, reg);\n }\n break;\n }\n}\n/**\n * Create descriptors for fields and oneof groups, and add them to the message.\n * Recurses into nested types.\n */\nfunction addFields(message, reg, mapEntries) {\n const allOneofs = message.proto.oneofDecl.map((proto) => newOneof(proto, message));\n const oneofsSeen = new Set();\n for (const proto of message.proto.field) {\n const oneof = findOneof(proto, allOneofs);\n const field = newField(proto, message, reg, oneof, mapEntries);\n message.fields.push(field);\n message.field[field.localName] = field;\n if (oneof === undefined) {\n message.members.push(field);\n }\n else {\n oneof.fields.push(field);\n if (!oneofsSeen.has(oneof)) {\n oneofsSeen.add(oneof);\n message.members.push(oneof);\n }\n }\n }\n for (const oneof of allOneofs.filter((o) => oneofsSeen.has(o))) {\n message.oneofs.push(oneof);\n }\n for (const child of message.nestedMessages) {\n addFields(child, reg, mapEntries);\n }\n}\n/**\n * Create a descriptor for an enumeration, and add it our cart and to the\n * parent type, if any.\n */\nfunction addEnum(proto, file, parent, reg) {\n var _a, _b, _c;\n const sharedPrefix = findEnumSharedPrefix(proto.name, proto.value);\n const desc = {\n kind: \"enum\",\n proto,\n deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,\n file,\n parent,\n open: true,\n name: proto.name,\n typeName: makeTypeName(proto, parent, file),\n value: {},\n values: [],\n sharedPrefix,\n toString() {\n return `enum ${this.typeName}`;\n },\n };\n desc.open = isEnumOpen(desc);\n reg.add(desc);\n proto.value.forEach((proto) => {\n var _a, _b;\n const name = proto.name;\n desc.values.push((desc.value[proto.number] = {\n kind: \"enum_value\",\n proto,\n deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,\n parent: desc,\n name,\n localName: safeObjectProperty(sharedPrefix == undefined\n ? name\n : name.substring(sharedPrefix.length)),\n number: proto.number,\n toString() {\n return `enum value ${desc.typeName}.${name}`;\n },\n }));\n });\n ((_c = parent === null || parent === void 0 ? void 0 : parent.nestedEnums) !== null && _c !== void 0 ? _c : file.enums).push(desc);\n}\n/**\n * Create a descriptor for a message, including nested types, and add it to our\n * cart. Note that this does not create descriptors fields.\n */\nfunction addMessage(proto, file, parent, reg, mapEntries) {\n var _a, _b, _c, _d;\n const desc = {\n kind: \"message\",\n proto,\n deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,\n file,\n parent,\n name: proto.name,\n typeName: makeTypeName(proto, parent, file),\n fields: [],\n field: {},\n oneofs: [],\n members: [],\n nestedEnums: [],\n nestedMessages: [],\n nestedExtensions: [],\n toString() {\n return `message ${this.typeName}`;\n },\n };\n if (((_c = proto.options) === null || _c === void 0 ? void 0 : _c.mapEntry) === true) {\n mapEntries.add(desc);\n }\n else {\n ((_d = parent === null || parent === void 0 ? void 0 : parent.nestedMessages) !== null && _d !== void 0 ? _d : file.messages).push(desc);\n reg.add(desc);\n }\n for (const enumProto of proto.enumType) {\n addEnum(enumProto, file, desc, reg);\n }\n for (const messageProto of proto.nestedType) {\n addMessage(messageProto, file, desc, reg, mapEntries);\n }\n}\n/**\n * Create a descriptor for a service, including methods, and add it to our\n * cart.\n */\nfunction addService(proto, file, reg) {\n var _a, _b;\n const desc = {\n kind: \"service\",\n proto,\n deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,\n file,\n name: proto.name,\n typeName: makeTypeName(proto, undefined, file),\n methods: [],\n method: {},\n toString() {\n return `service ${this.typeName}`;\n },\n };\n file.services.push(desc);\n reg.add(desc);\n for (const methodProto of proto.method) {\n const method = newMethod(methodProto, desc, reg);\n desc.methods.push(method);\n desc.method[method.localName] = method;\n }\n}\n/**\n * Create a descriptor for a method.\n */\nfunction newMethod(proto, parent, reg) {\n var _a, _b, _c, _d;\n let methodKind;\n if (proto.clientStreaming && proto.serverStreaming) {\n methodKind = \"bidi_streaming\";\n }\n else if (proto.clientStreaming) {\n methodKind = \"client_streaming\";\n }\n else if (proto.serverStreaming) {\n methodKind = \"server_streaming\";\n }\n else {\n methodKind = \"unary\";\n }\n const input = reg.getMessage(trimLeadingDot(proto.inputType));\n const output = reg.getMessage(trimLeadingDot(proto.outputType));\n assert(input, `invalid MethodDescriptorProto: input_type ${proto.inputType} not found`);\n assert(output, `invalid MethodDescriptorProto: output_type ${proto.inputType} not found`);\n const name = proto.name;\n return {\n kind: \"rpc\",\n proto,\n deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,\n parent,\n name,\n localName: safeObjectProperty(name.length\n ? safeObjectProperty(name[0].toLowerCase() + name.substring(1))\n : name),\n methodKind,\n input,\n output,\n idempotency: (_d = (_c = proto.options) === null || _c === void 0 ? void 0 : _c.idempotencyLevel) !== null && _d !== void 0 ? _d : IDEMPOTENCY_UNKNOWN,\n toString() {\n return `rpc ${parent.typeName}.${name}`;\n },\n };\n}\n/**\n * Create a descriptor for a oneof group.\n */\nfunction newOneof(proto, parent) {\n return {\n kind: \"oneof\",\n proto,\n deprecated: false,\n parent,\n fields: [],\n name: proto.name,\n localName: safeObjectProperty(protoCamelCase(proto.name)),\n toString() {\n return `oneof ${parent.typeName}.${this.name}`;\n },\n };\n}\nfunction newField(proto, parentOrFile, reg, oneof, mapEntries) {\n var _a, _b, _c;\n const isExtension = mapEntries === undefined;\n const field = {\n kind: \"field\",\n proto,\n deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,\n name: proto.name,\n number: proto.number,\n scalar: undefined,\n message: undefined,\n enum: undefined,\n presence: getFieldPresence(proto, oneof, isExtension, parentOrFile),\n listKind: undefined,\n mapKind: undefined,\n mapKey: undefined,\n delimitedEncoding: undefined,\n packed: undefined,\n longAsString: false,\n getDefaultValue: undefined,\n };\n if (isExtension) {\n // extension field\n const file = parentOrFile.kind == \"file\" ? parentOrFile : parentOrFile.file;\n const parent = parentOrFile.kind == \"file\" ? undefined : parentOrFile;\n const typeName = makeTypeName(proto, parent, file);\n field.kind = \"extension\";\n field.file = file;\n field.parent = parent;\n field.oneof = undefined;\n field.typeName = typeName;\n field.jsonName = `[${typeName}]`; // option json_name is not allowed on extension fields\n field.toString = () => `extension ${typeName}`;\n const extendee = reg.getMessage(trimLeadingDot(proto.extendee));\n assert(extendee, `invalid FieldDescriptorProto: extendee ${proto.extendee} not found`);\n field.extendee = extendee;\n }\n else {\n // regular field\n const parent = parentOrFile;\n assert(parent.kind == \"message\");\n field.parent = parent;\n field.oneof = oneof;\n field.localName = oneof\n ? protoCamelCase(proto.name)\n : safeObjectProperty(protoCamelCase(proto.name));\n field.jsonName = proto.jsonName;\n field.toString = () => `field ${parent.typeName}.${proto.name}`;\n }\n const label = proto.label;\n const type = proto.type;\n const jstype = (_c = proto.options) === null || _c === void 0 ? void 0 : _c.jstype;\n if (label === LABEL_REPEATED) {\n // list or map field\n const mapEntry = type == TYPE_MESSAGE\n ? mapEntries === null || mapEntries === void 0 ? void 0 : mapEntries.get(trimLeadingDot(proto.typeName))\n : undefined;\n if (mapEntry) {\n // map field\n field.fieldKind = \"map\";\n const { key, value } = findMapEntryFields(mapEntry);\n field.mapKey = key.scalar;\n field.mapKind = value.fieldKind;\n field.message = value.message;\n field.delimitedEncoding = false; // map fields are always LENGTH_PREFIXED\n field.enum = value.enum;\n field.scalar = value.scalar;\n return field;\n }\n // list field\n field.fieldKind = \"list\";\n switch (type) {\n case TYPE_MESSAGE:\n case TYPE_GROUP:\n field.listKind = \"message\";\n field.message = reg.getMessage(trimLeadingDot(proto.typeName));\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n assert(field.message);\n field.delimitedEncoding = isDelimitedEncoding(proto, parentOrFile);\n break;\n case TYPE_ENUM:\n field.listKind = \"enum\";\n field.enum = reg.getEnum(trimLeadingDot(proto.typeName));\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n assert(field.enum);\n break;\n default:\n field.listKind = \"scalar\";\n field.scalar = type;\n field.longAsString = jstype == JS_STRING;\n break;\n }\n field.packed = isPackedField(proto, parentOrFile);\n return field;\n }\n // singular\n switch (type) {\n case TYPE_MESSAGE:\n case TYPE_GROUP:\n field.fieldKind = \"message\";\n field.message = reg.getMessage(trimLeadingDot(proto.typeName));\n assert(\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n field.message, `invalid FieldDescriptorProto: type_name ${proto.typeName} not found`);\n field.delimitedEncoding = isDelimitedEncoding(proto, parentOrFile);\n field.getDefaultValue = () => undefined;\n break;\n case TYPE_ENUM: {\n const enumeration = reg.getEnum(trimLeadingDot(proto.typeName));\n assert(enumeration !== undefined, `invalid FieldDescriptorProto: type_name ${proto.typeName} not found`);\n field.fieldKind = \"enum\";\n field.enum = reg.getEnum(trimLeadingDot(proto.typeName));\n field.getDefaultValue = () => {\n return unsafeIsSetExplicit(proto, \"defaultValue\")\n ? parseTextFormatEnumValue(enumeration, proto.defaultValue)\n : undefined;\n };\n break;\n }\n default: {\n field.fieldKind = \"scalar\";\n field.scalar = type;\n field.longAsString = jstype == JS_STRING;\n field.getDefaultValue = () => {\n return unsafeIsSetExplicit(proto, \"defaultValue\")\n ? parseTextFormatScalarValue(type, proto.defaultValue)\n : undefined;\n };\n break;\n }\n }\n return field;\n}\n/**\n * Parse the \"syntax\" and \"edition\" fields, returning one of the supported\n * editions.\n */\nfunction getFileEdition(proto) {\n switch (proto.syntax) {\n case \"\":\n case \"proto2\":\n return EDITION_PROTO2;\n case \"proto3\":\n return EDITION_PROTO3;\n case \"editions\":\n if (proto.edition in featureDefaults) {\n return proto.edition;\n }\n throw new Error(`${proto.name}: unsupported edition`);\n default:\n throw new Error(`${proto.name}: unsupported syntax \"${proto.syntax}\"`);\n }\n}\n/**\n * Resolve dependencies of FileDescriptorProto to DescFile.\n */\nfunction findFileDependencies(proto, reg) {\n return proto.dependency.map((wantName) => {\n const dep = reg.getFile(wantName);\n if (!dep) {\n throw new Error(`Cannot find ${wantName}, imported by ${proto.name}`);\n }\n return dep;\n });\n}\n/**\n * Finds a prefix shared by enum values, for example `my_enum_` for\n * `enum MyEnum {MY_ENUM_A=0; MY_ENUM_B=1;}`.\n */\nfunction findEnumSharedPrefix(enumName, values) {\n const prefix = camelToSnakeCase(enumName) + \"_\";\n for (const value of values) {\n if (!value.name.toLowerCase().startsWith(prefix)) {\n return undefined;\n }\n const shortName = value.name.substring(prefix.length);\n if (shortName.length == 0) {\n return undefined;\n }\n if (/^\\d/.test(shortName)) {\n // identifiers must not start with numbers\n return undefined;\n }\n }\n return prefix;\n}\n/**\n * Converts lowerCamelCase or UpperCamelCase into lower_snake_case.\n * This is used to find shared prefixes in an enum.\n */\nfunction camelToSnakeCase(camel) {\n return (camel.substring(0, 1) + camel.substring(1).replace(/[A-Z]/g, (c) => \"_\" + c)).toLowerCase();\n}\n/**\n * Create a fully qualified name for a protobuf type or extension field.\n *\n * The fully qualified name for messages, enumerations, and services is\n * constructed by concatenating the package name (if present), parent\n * message names (for nested types), and the type name. We omit the leading\n * dot added by protobuf compilers. Examples:\n * - mypackage.MyMessage\n * - mypackage.MyMessage.NestedMessage\n *\n * The fully qualified name for extension fields is constructed by\n * concatenating the package name (if present), parent message names (for\n * extensions declared within a message), and the field name. Examples:\n * - mypackage.extfield\n * - mypackage.MyMessage.extfield\n */\nfunction makeTypeName(proto, parent, file) {\n let typeName;\n if (parent) {\n typeName = `${parent.typeName}.${proto.name}`;\n }\n else if (file.proto.package.length > 0) {\n typeName = `${file.proto.package}.${proto.name}`;\n }\n else {\n typeName = `${proto.name}`;\n }\n return typeName;\n}\n/**\n * Remove the leading dot from a fully qualified type name.\n */\nfunction trimLeadingDot(typeName) {\n return typeName.startsWith(\".\") ? typeName.substring(1) : typeName;\n}\n/**\n * Did the user put the field in a oneof group?\n * Synthetic oneofs for proto3 optionals are ignored.\n */\nfunction findOneof(proto, allOneofs) {\n if (!unsafeIsSetExplicit(proto, \"oneofIndex\")) {\n return undefined;\n }\n if (proto.proto3Optional) {\n return undefined;\n }\n const oneof = allOneofs[proto.oneofIndex];\n assert(\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n oneof, `invalid FieldDescriptorProto: oneof #${proto.oneofIndex} for field #${proto.number} not found`);\n return oneof;\n}\n/**\n * Presence of the field.\n * See https://protobuf.dev/programming-guides/field_presence/\n */\nfunction getFieldPresence(proto, oneof, isExtension, parent) {\n if (proto.label == LABEL_REQUIRED) {\n // proto2 required is LEGACY_REQUIRED\n return LEGACY_REQUIRED;\n }\n if (proto.label == LABEL_REPEATED) {\n // repeated fields (including maps) do not track presence\n return IMPLICIT;\n }\n if (!!oneof || proto.proto3Optional) {\n // oneof is always explicit\n return EXPLICIT;\n }\n if (proto.type == TYPE_MESSAGE) {\n // singular message field cannot be implicit\n return EXPLICIT;\n }\n if (isExtension) {\n // extensions always track presence\n return EXPLICIT;\n }\n return resolveFeature(\"fieldPresence\", { proto, parent });\n}\n/**\n * Pack this repeated field?\n */\nfunction isPackedField(proto, parent) {\n if (proto.label != LABEL_REPEATED) {\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n switch (proto.type) {\n case TYPE_STRING:\n case TYPE_BYTES:\n case TYPE_GROUP:\n case TYPE_MESSAGE:\n // length-delimited types cannot be packed\n return false;\n }\n const o = proto.options;\n if (o && unsafeIsSetExplicit(o, \"packed\")) {\n // prefer the field option over edition features\n return o.packed;\n }\n return (PACKED ==\n resolveFeature(\"repeatedFieldEncoding\", {\n proto,\n parent,\n }));\n}\n/**\n * Find the key and value fields of a synthetic map entry message.\n */\nfunction findMapEntryFields(mapEntry) {\n const key = mapEntry.fields.find((f) => f.number === 1);\n const value = mapEntry.fields.find((f) => f.number === 2);\n assert(key &&\n key.fieldKind == \"scalar\" &&\n key.scalar != ScalarType.BYTES &&\n key.scalar != ScalarType.FLOAT &&\n key.scalar != ScalarType.DOUBLE &&\n value &&\n value.fieldKind != \"list\" &&\n value.fieldKind != \"map\");\n return { key, value };\n}\n/**\n * Enumerations can be open or closed.\n * See https://protobuf.dev/programming-guides/enum/\n */\nfunction isEnumOpen(desc) {\n var _a;\n return (OPEN ==\n resolveFeature(\"enumType\", {\n proto: desc.proto,\n parent: (_a = desc.parent) !== null && _a !== void 0 ? _a : desc.file,\n }));\n}\n/**\n * Encode the message delimited (a.k.a. proto2 group encoding), or\n * length-prefixed?\n */\nfunction isDelimitedEncoding(proto, parent) {\n if (proto.type == TYPE_GROUP) {\n return true;\n }\n return (DELIMITED ==\n resolveFeature(\"messageEncoding\", {\n proto,\n parent,\n }));\n}\nfunction resolveFeature(name, ref) {\n var _a, _b;\n const featureSet = (_a = ref.proto.options) === null || _a === void 0 ? void 0 : _a.features;\n if (featureSet) {\n const val = featureSet[name];\n if (val != 0) {\n return val;\n }\n }\n if (\"kind\" in ref) {\n if (ref.kind == \"message\") {\n return resolveFeature(name, (_b = ref.parent) !== null && _b !== void 0 ? _b : ref.file);\n }\n const editionDefaults = featureDefaults[ref.edition];\n if (!editionDefaults) {\n throw new Error(`feature default for edition ${ref.edition} not found`);\n }\n return editionDefaults[name];\n }\n return resolveFeature(name, ref.parent);\n}\n/**\n * Assert that condition is truthy or throw error (with message)\n */\nfunction assert(condition, msg) {\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions -- we want the implicit conversion to boolean\n if (!condition) {\n throw new Error(msg);\n }\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nimport { reflect } from \"./reflect/reflect.js\";\nimport { BinaryWriter, WireType } from \"./wire/binary-encoding.js\";\nimport { ScalarType } from \"./descriptors.js\";\n// bootstrap-inject google.protobuf.FeatureSet.FieldPresence.LEGACY_REQUIRED: const $name: FeatureSet_FieldPresence.$localName = $number;\nconst LEGACY_REQUIRED = 3;\n// Default options for serializing binary data.\nconst writeDefaults = {\n writeUnknownFields: true,\n};\nfunction makeWriteOptions(options) {\n return options ? Object.assign(Object.assign({}, writeDefaults), options) : writeDefaults;\n}\nexport function toBinary(schema, message, options) {\n return writeFields(new BinaryWriter(), makeWriteOptions(options), reflect(schema, message)).finish();\n}\nfunction writeFields(writer, opts, msg) {\n var _a;\n for (const f of msg.sortedFields) {\n if (!msg.isSet(f)) {\n if (f.presence == LEGACY_REQUIRED) {\n throw new Error(`cannot encode field ${msg.desc.typeName}.${f.name} to binary: required field not set`);\n }\n continue;\n }\n writeField(writer, opts, msg, f);\n }\n if (opts.writeUnknownFields) {\n for (const { no, wireType, data } of (_a = msg.getUnknown()) !== null && _a !== void 0 ? _a : []) {\n writer.tag(no, wireType).raw(data);\n }\n }\n return writer;\n}\n/**\n * @private\n */\nexport function writeField(writer, opts, msg, field) {\n var _a;\n switch (field.fieldKind) {\n case \"scalar\":\n case \"enum\":\n writeScalar(writer, (_a = field.scalar) !== null && _a !== void 0 ? _a : ScalarType.INT32, field.number, msg.get(field));\n break;\n case \"list\":\n writeListField(writer, opts, field, msg.get(field));\n break;\n case \"message\":\n writeMessageField(writer, opts, field, msg.get(field));\n break;\n case \"map\":\n for (const [key, val] of msg.get(field)) {\n writeMapEntry(writer, opts, field, key, val);\n }\n break;\n }\n}\nfunction writeScalar(writer, scalarType, fieldNo, value) {\n writeScalarValue(writer.tag(fieldNo, writeTypeOfScalar(scalarType)), scalarType, value);\n}\nfunction writeMessageField(writer, opts, field, message) {\n if (field.delimitedEncoding) {\n writeFields(writer.tag(field.number, WireType.StartGroup), opts, message).tag(field.number, WireType.EndGroup);\n }\n else {\n writeFields(writer.tag(field.number, WireType.LengthDelimited).fork(), opts, message).join();\n }\n}\nfunction writeListField(writer, opts, field, list) {\n var _a;\n if (field.listKind == \"message\") {\n for (const item of list) {\n writeMessageField(writer, opts, field, item);\n }\n return;\n }\n const scalarType = (_a = field.scalar) !== null && _a !== void 0 ? _a : ScalarType.INT32;\n if (field.packed) {\n if (!list.size) {\n return;\n }\n writer.tag(field.number, WireType.LengthDelimited).fork();\n for (const item of list) {\n writeScalarValue(writer, scalarType, item);\n }\n writer.join();\n return;\n }\n for (const item of list) {\n writeScalar(writer, scalarType, field.number, item);\n }\n}\nfunction writeMapEntry(writer, opts, field, key, value) {\n var _a;\n writer.tag(field.number, WireType.LengthDelimited).fork();\n // write key, expecting key field number = 1\n writeScalar(writer, field.mapKey, 1, key);\n // write value, expecting value field number = 2\n switch (field.mapKind) {\n case \"scalar\":\n case \"enum\":\n writeScalar(writer, (_a = field.scalar) !== null && _a !== void 0 ? _a : ScalarType.INT32, 2, value);\n break;\n case \"message\":\n writeFields(writer.tag(2, WireType.LengthDelimited).fork(), opts, value).join();\n break;\n }\n writer.join();\n}\nfunction writeScalarValue(writer, type, value) {\n switch (type) {\n case ScalarType.STRING:\n writer.string(value);\n break;\n case ScalarType.BOOL:\n writer.bool(value);\n break;\n case ScalarType.DOUBLE:\n writer.double(value);\n break;\n case ScalarType.FLOAT:\n writer.float(value);\n break;\n case ScalarType.INT32:\n writer.int32(value);\n break;\n case ScalarType.INT64:\n writer.int64(value);\n break;\n case ScalarType.UINT64:\n writer.uint64(value);\n break;\n case ScalarType.FIXED64:\n writer.fixed64(value);\n break;\n case ScalarType.BYTES:\n writer.bytes(value);\n break;\n case ScalarType.FIXED32:\n writer.fixed32(value);\n break;\n case ScalarType.SFIXED32:\n writer.sfixed32(value);\n break;\n case ScalarType.SFIXED64:\n writer.sfixed64(value);\n break;\n case ScalarType.SINT64:\n writer.sint64(value);\n break;\n case ScalarType.UINT32:\n writer.uint32(value);\n break;\n case ScalarType.SINT32:\n writer.sint32(value);\n break;\n }\n}\nfunction writeTypeOfScalar(type) {\n switch (type) {\n case ScalarType.BYTES:\n case ScalarType.STRING:\n return WireType.LengthDelimited;\n case ScalarType.DOUBLE:\n case ScalarType.FIXED64:\n case ScalarType.SFIXED64:\n return WireType.Bit64;\n case ScalarType.FIXED32:\n case ScalarType.SFIXED32:\n case ScalarType.FLOAT:\n return WireType.Bit32;\n default:\n return WireType.Varint;\n }\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nimport { ScalarType } from \"./descriptors.js\";\nimport { scalarZeroValue } from \"./reflect/scalar.js\";\nimport { reflect } from \"./reflect/reflect.js\";\nimport { BinaryReader, WireType } from \"./wire/binary-encoding.js\";\n// Default options for parsing binary data.\nconst readDefaults = {\n readUnknownFields: true,\n};\nfunction makeReadOptions(options) {\n return options ? Object.assign(Object.assign({}, readDefaults), options) : readDefaults;\n}\n/**\n * Parse serialized binary data.\n */\nexport function fromBinary(schema, bytes, options) {\n const msg = reflect(schema, undefined, false);\n readMessage(msg, new BinaryReader(bytes), makeReadOptions(options), false, bytes.byteLength);\n return msg.message;\n}\n/**\n * Parse from binary data, merging fields.\n *\n * Repeated fields are appended. Map entries are added, overwriting\n * existing keys.\n *\n * If a message field is already present, it will be merged with the\n * new data.\n */\nexport function mergeFromBinary(schema, target, bytes, options) {\n readMessage(reflect(schema, target, false), new BinaryReader(bytes), makeReadOptions(options), false, bytes.byteLength);\n return target;\n}\n/**\n * If `delimited` is false, read the length given in `lengthOrDelimitedFieldNo`.\n *\n * If `delimited` is true, read until an EndGroup tag. `lengthOrDelimitedFieldNo`\n * is the expected field number.\n *\n * @private\n */\nfunction readMessage(message, reader, options, delimited, lengthOrDelimitedFieldNo) {\n var _a;\n const end = delimited ? reader.len : reader.pos + lengthOrDelimitedFieldNo;\n let fieldNo, wireType;\n const unknownFields = (_a = message.getUnknown()) !== null && _a !== void 0 ? _a : [];\n while (reader.pos < end) {\n [fieldNo, wireType] = reader.tag();\n if (delimited && wireType == WireType.EndGroup) {\n break;\n }\n const field = message.findNumber(fieldNo);\n if (!field) {\n const data = reader.skip(wireType, fieldNo);\n if (options.readUnknownFields) {\n unknownFields.push({ no: fieldNo, wireType, data });\n }\n continue;\n }\n readField(message, reader, field, wireType, options);\n }\n if (delimited) {\n if (wireType != WireType.EndGroup || fieldNo !== lengthOrDelimitedFieldNo) {\n throw new Error(`invalid end group tag`);\n }\n }\n if (unknownFields.length > 0) {\n message.setUnknown(unknownFields);\n }\n}\n/**\n * @private\n */\nexport function readField(message, reader, field, wireType, options) {\n switch (field.fieldKind) {\n case \"scalar\":\n message.set(field, readScalar(reader, field.scalar));\n break;\n case \"enum\":\n message.set(field, readScalar(reader, ScalarType.INT32));\n break;\n case \"message\":\n message.set(field, readMessageField(reader, options, field, message.get(field)));\n break;\n case \"list\":\n readListField(reader, wireType, message.get(field), options);\n break;\n case \"map\":\n readMapEntry(reader, message.get(field), options);\n break;\n }\n}\n// Read a map field, expecting key field = 1, value field = 2\nfunction readMapEntry(reader, map, options) {\n const field = map.field();\n let key, val;\n const end = reader.pos + reader.uint32();\n while (reader.pos < end) {\n const [fieldNo] = reader.tag();\n switch (fieldNo) {\n case 1:\n key = readScalar(reader, field.mapKey);\n break;\n case 2:\n switch (field.mapKind) {\n case \"scalar\":\n val = readScalar(reader, field.scalar);\n break;\n case \"enum\":\n val = reader.int32();\n break;\n case \"message\":\n val = readMessageField(reader, options, field);\n break;\n }\n break;\n }\n }\n if (key === undefined) {\n key = scalarZeroValue(field.mapKey, false);\n }\n if (val === undefined) {\n switch (field.mapKind) {\n case \"scalar\":\n val = scalarZeroValue(field.scalar, false);\n break;\n case \"enum\":\n val = field.enum.values[0].number;\n break;\n case \"message\":\n val = reflect(field.message, undefined, false);\n break;\n }\n }\n map.set(key, val);\n}\nfunction readListField(reader, wireType, list, options) {\n var _a;\n const field = list.field();\n if (field.listKind === \"message\") {\n list.add(readMessageField(reader, options, field));\n return;\n }\n const scalarType = (_a = field.scalar) !== null && _a !== void 0 ? _a : ScalarType.INT32;\n const packed = wireType == WireType.LengthDelimited &&\n scalarType != ScalarType.STRING &&\n scalarType != ScalarType.BYTES;\n if (!packed) {\n list.add(readScalar(reader, scalarType));\n return;\n }\n const e = reader.uint32() + reader.pos;\n while (reader.pos < e) {\n list.add(readScalar(reader, scalarType));\n }\n}\nfunction readMessageField(reader, options, field, mergeMessage) {\n const delimited = field.delimitedEncoding;\n const message = mergeMessage !== null && mergeMessage !== void 0 ? mergeMessage : reflect(field.message, undefined, false);\n readMessage(message, reader, options, delimited, delimited ? field.number : reader.uint32());\n return message;\n}\nfunction readScalar(reader, type) {\n switch (type) {\n case ScalarType.STRING:\n return reader.string();\n case ScalarType.BOOL:\n return reader.bool();\n case ScalarType.DOUBLE:\n return reader.double();\n case ScalarType.FLOAT:\n return reader.float();\n case ScalarType.INT32:\n return reader.int32();\n case ScalarType.INT64:\n return reader.int64();\n case ScalarType.UINT64:\n return reader.uint64();\n case ScalarType.FIXED64:\n return reader.fixed64();\n case ScalarType.BYTES:\n return reader.bytes();\n case ScalarType.FIXED32:\n return reader.fixed32();\n case ScalarType.SFIXED32:\n return reader.sfixed32();\n case ScalarType.SFIXED64:\n return reader.sfixed64();\n case ScalarType.SINT64:\n return reader.sint64();\n case ScalarType.UINT32:\n return reader.uint32();\n case ScalarType.SINT32:\n return reader.sint32();\n }\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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/* eslint-disable @typescript-eslint/ban-ts-comment, @typescript-eslint/no-unnecessary-condition, prefer-const */\n/**\n * Decodes a base64 string to a byte array.\n *\n * - ignores white-space, including line breaks and tabs\n * - allows inner padding (can decode concatenated base64 strings)\n * - does not require padding\n * - understands base64url encoding:\n * \"-\" instead of \"+\",\n * \"_\" instead of \"/\",\n * no padding\n */\nexport function base64Decode(base64Str) {\n const table = getDecodeTable();\n // estimate byte size, not accounting for inner padding and whitespace\n let es = (base64Str.length * 3) / 4;\n if (base64Str[base64Str.length - 2] == \"=\")\n es -= 2;\n else if (base64Str[base64Str.length - 1] == \"=\")\n es -= 1;\n let bytes = new Uint8Array(es), bytePos = 0, // position in byte array\n groupPos = 0, // position in base64 group\n b, // current byte\n p = 0; // previous byte\n for (let i = 0; i < base64Str.length; i++) {\n b = table[base64Str.charCodeAt(i)];\n if (b === undefined) {\n switch (base64Str[i]) {\n // @ts-expect-error TS7029: Fallthrough case in switch\n case \"=\":\n groupPos = 0; // reset state when padding found\n // eslint-disable-next-line no-fallthrough\n case \"\\n\":\n case \"\\r\":\n case \"\\t\":\n case \" \":\n continue; // skip white-space, and padding\n default:\n throw Error(\"invalid base64 string\");\n }\n }\n switch (groupPos) {\n case 0:\n p = b;\n groupPos = 1;\n break;\n case 1:\n bytes[bytePos++] = (p << 2) | ((b & 48) >> 4);\n p = b;\n groupPos = 2;\n break;\n case 2:\n bytes[bytePos++] = ((p & 15) << 4) | ((b & 60) >> 2);\n p = b;\n groupPos = 3;\n break;\n case 3:\n bytes[bytePos++] = ((p & 3) << 6) | b;\n groupPos = 0;\n break;\n }\n }\n if (groupPos == 1)\n throw Error(\"invalid base64 string\");\n return bytes.subarray(0, bytePos);\n}\n/**\n * Encode a byte array to a base64 string.\n *\n * By default, this function uses the standard base64 encoding with padding.\n *\n * To encode without padding, use encoding = \"std_raw\".\n *\n * To encode with the URL encoding, use encoding = \"url\", which replaces the\n * characters +/ by their URL-safe counterparts -_, and omits padding.\n */\nexport function base64Encode(bytes, encoding = \"std\") {\n const table = getEncodeTable(encoding);\n const pad = encoding == \"std\";\n let base64 = \"\", groupPos = 0, // position in base64 group\n b, // current byte\n p = 0; // carry over from previous byte\n for (let i = 0; i < bytes.length; i++) {\n b = bytes[i];\n switch (groupPos) {\n case 0:\n base64 += table[b >> 2];\n p = (b & 3) << 4;\n groupPos = 1;\n break;\n case 1:\n base64 += table[p | (b >> 4)];\n p = (b & 15) << 2;\n groupPos = 2;\n break;\n case 2:\n base64 += table[p | (b >> 6)];\n base64 += table[b & 63];\n groupPos = 0;\n break;\n }\n }\n // add output padding\n if (groupPos) {\n base64 += table[p];\n if (pad) {\n base64 += \"=\";\n if (groupPos == 1)\n base64 += \"=\";\n }\n }\n return base64;\n}\n// lookup table from base64 character to byte\nlet encodeTableStd;\nlet encodeTableUrl;\n// lookup table from base64 character *code* to byte because lookup by number is fast\nlet decodeTable;\nfunction getEncodeTable(encoding) {\n if (!encodeTableStd) {\n encodeTableStd =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\".split(\"\");\n encodeTableUrl = encodeTableStd.slice(0, -2).concat(\"-\", \"_\");\n }\n return encoding == \"url\" ? encodeTableUrl : encodeTableStd;\n}\nfunction getDecodeTable() {\n if (!decodeTable) {\n decodeTable = [];\n const encodeTable = getEncodeTable(\"std\");\n for (let i = 0; i < encodeTable.length; i++)\n decodeTable[encodeTable[i].charCodeAt(0)] = i;\n // support base64url variants\n decodeTable[\"-\".charCodeAt(0)] = encodeTable.indexOf(\"+\");\n decodeTable[\"_\".charCodeAt(0)] = encodeTable.indexOf(\"/\");\n }\n return decodeTable;\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nimport { protoCamelCase } from \"../reflect/names.js\";\nimport { unsafeIsSetExplicit } from \"../reflect/unsafe.js\";\n/**\n * @private\n */\nexport function restoreJsonNames(message) {\n for (const f of message.field) {\n if (!unsafeIsSetExplicit(f, \"jsonName\")) {\n f.jsonName = protoCamelCase(f.name);\n }\n }\n message.nestedType.forEach(restoreJsonNames);\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nimport { restoreJsonNames } from \"./restore-json-names.js\";\nimport { createFileRegistry } from \"../registry.js\";\n/**\n * Hydrate a file descriptor for google/protobuf/descriptor.proto from a plain\n * object.\n *\n * See createFileDescriptorProtoBoot() for details.\n *\n * @private\n */\nexport function boot(boot) {\n const root = bootFileDescriptorProto(boot);\n root.messageType.forEach(restoreJsonNames);\n const reg = createFileRegistry(root, () => undefined);\n // non-null assertion because we just created the registry from the file we look up\n return reg.getFile(root.name);\n}\n/**\n * Creates the message google.protobuf.FileDescriptorProto from an object literal.\n *\n * See createFileDescriptorProtoBoot() for details.\n *\n * @private\n */\nexport function bootFileDescriptorProto(init) {\n const proto = Object.create({\n syntax: \"\",\n edition: 0,\n });\n return Object.assign(proto, Object.assign(Object.assign({ $typeName: \"google.protobuf.FileDescriptorProto\", dependency: [], publicDependency: [], weakDependency: [], service: [], extension: [] }, init), { messageType: init.messageType.map(bootDescriptorProto), enumType: init.enumType.map(bootEnumDescriptorProto) }));\n}\nfunction bootDescriptorProto(init) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n return {\n $typeName: \"google.protobuf.DescriptorProto\",\n name: init.name,\n field: (_b = (_a = init.field) === null || _a === void 0 ? void 0 : _a.map(bootFieldDescriptorProto)) !== null && _b !== void 0 ? _b : [],\n extension: [],\n nestedType: (_d = (_c = init.nestedType) === null || _c === void 0 ? void 0 : _c.map(bootDescriptorProto)) !== null && _d !== void 0 ? _d : [],\n enumType: (_f = (_e = init.enumType) === null || _e === void 0 ? void 0 : _e.map(bootEnumDescriptorProto)) !== null && _f !== void 0 ? _f : [],\n extensionRange: (_h = (_g = init.extensionRange) === null || _g === void 0 ? void 0 : _g.map((e) => (Object.assign({ $typeName: \"google.protobuf.DescriptorProto.ExtensionRange\" }, e)))) !== null && _h !== void 0 ? _h : [],\n oneofDecl: [],\n reservedRange: [],\n reservedName: [],\n };\n}\nfunction bootFieldDescriptorProto(init) {\n const proto = Object.create({\n label: 1,\n typeName: \"\",\n extendee: \"\",\n defaultValue: \"\",\n oneofIndex: 0,\n jsonName: \"\",\n proto3Optional: false,\n });\n return Object.assign(proto, Object.assign(Object.assign({ $typeName: \"google.protobuf.FieldDescriptorProto\" }, init), { options: init.options ? bootFieldOptions(init.options) : undefined }));\n}\nfunction bootFieldOptions(init) {\n var _a, _b, _c;\n const proto = Object.create({\n ctype: 0,\n packed: false,\n jstype: 0,\n lazy: false,\n unverifiedLazy: false,\n deprecated: false,\n weak: false,\n debugRedact: false,\n retention: 0,\n });\n return Object.assign(proto, Object.assign(Object.assign({ $typeName: \"google.protobuf.FieldOptions\" }, init), { targets: (_a = init.targets) !== null && _a !== void 0 ? _a : [], editionDefaults: (_c = (_b = init.editionDefaults) === null || _b === void 0 ? void 0 : _b.map((e) => (Object.assign({ $typeName: \"google.protobuf.FieldOptions.EditionDefault\" }, e)))) !== null && _c !== void 0 ? _c : [], uninterpretedOption: [] }));\n}\nfunction bootEnumDescriptorProto(init) {\n return {\n $typeName: \"google.protobuf.EnumDescriptorProto\",\n name: init.name,\n reservedName: [],\n reservedRange: [],\n value: init.value.map((e) => (Object.assign({ $typeName: \"google.protobuf.EnumValueDescriptorProto\" }, e))),\n };\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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 * Hydrate a message descriptor.\n *\n * @private\n */\nexport function messageDesc(file, path, ...paths) {\n return paths.reduce((acc, cur) => acc.nestedMessages[cur], file.messages[path]);\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nimport { boot } from \"../../../../codegenv1/boot.js\";\nimport { messageDesc } from \"../../../../codegenv1/message.js\";\nimport { enumDesc } from \"../../../../codegenv1/enum.js\";\n/**\n * Describes the file google/protobuf/descriptor.proto.\n */\nexport const file_google_protobuf_descriptor = /*@__PURE__*/ boot({ \"name\": \"google/protobuf/descriptor.proto\", \"package\": \"google.protobuf\", \"messageType\": [{ \"name\": \"FileDescriptorSet\", \"field\": [{ \"name\": \"file\", \"number\": 1, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.FileDescriptorProto\" }] }, { \"name\": \"FileDescriptorProto\", \"field\": [{ \"name\": \"name\", \"number\": 1, \"type\": 9, \"label\": 1 }, { \"name\": \"package\", \"number\": 2, \"type\": 9, \"label\": 1 }, { \"name\": \"dependency\", \"number\": 3, \"type\": 9, \"label\": 3 }, { \"name\": \"public_dependency\", \"number\": 10, \"type\": 5, \"label\": 3 }, { \"name\": \"weak_dependency\", \"number\": 11, \"type\": 5, \"label\": 3 }, { \"name\": \"message_type\", \"number\": 4, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.DescriptorProto\" }, { \"name\": \"enum_type\", \"number\": 5, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.EnumDescriptorProto\" }, { \"name\": \"service\", \"number\": 6, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.ServiceDescriptorProto\" }, { \"name\": \"extension\", \"number\": 7, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.FieldDescriptorProto\" }, { \"name\": \"options\", \"number\": 8, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.FileOptions\" }, { \"name\": \"source_code_info\", \"number\": 9, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.SourceCodeInfo\" }, { \"name\": \"syntax\", \"number\": 12, \"type\": 9, \"label\": 1 }, { \"name\": \"edition\", \"number\": 14, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.Edition\" }] }, { \"name\": \"DescriptorProto\", \"field\": [{ \"name\": \"name\", \"number\": 1, \"type\": 9, \"label\": 1 }, { \"name\": \"field\", \"number\": 2, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.FieldDescriptorProto\" }, { \"name\": \"extension\", \"number\": 6, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.FieldDescriptorProto\" }, { \"name\": \"nested_type\", \"number\": 3, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.DescriptorProto\" }, { \"name\": \"enum_type\", \"number\": 4, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.EnumDescriptorProto\" }, { \"name\": \"extension_range\", \"number\": 5, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.DescriptorProto.ExtensionRange\" }, { \"name\": \"oneof_decl\", \"number\": 8, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.OneofDescriptorProto\" }, { \"name\": \"options\", \"number\": 7, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.MessageOptions\" }, { \"name\": \"reserved_range\", \"number\": 9, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.DescriptorProto.ReservedRange\" }, { \"name\": \"reserved_name\", \"number\": 10, \"type\": 9, \"label\": 3 }], \"nestedType\": [{ \"name\": \"ExtensionRange\", \"field\": [{ \"name\": \"start\", \"number\": 1, \"type\": 5, \"label\": 1 }, { \"name\": \"end\", \"number\": 2, \"type\": 5, \"label\": 1 }, { \"name\": \"options\", \"number\": 3, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.ExtensionRangeOptions\" }] }, { \"name\": \"ReservedRange\", \"field\": [{ \"name\": \"start\", \"number\": 1, \"type\": 5, \"label\": 1 }, { \"name\": \"end\", \"number\": 2, \"type\": 5, \"label\": 1 }] }] }, { \"name\": \"ExtensionRangeOptions\", \"field\": [{ \"name\": \"uninterpreted_option\", \"number\": 999, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.UninterpretedOption\" }, { \"name\": \"declaration\", \"number\": 2, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.ExtensionRangeOptions.Declaration\", \"options\": { \"retention\": 2 } }, { \"name\": \"features\", \"number\": 50, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.FeatureSet\" }, { \"name\": \"verification\", \"number\": 3, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.ExtensionRangeOptions.VerificationState\", \"defaultValue\": \"UNVERIFIED\", \"options\": { \"retention\": 2 } }], \"nestedType\": [{ \"name\": \"Declaration\", \"field\": [{ \"name\": \"number\", \"number\": 1, \"type\": 5, \"label\": 1 }, { \"name\": \"full_name\", \"number\": 2, \"type\": 9, \"label\": 1 }, { \"name\": \"type\", \"number\": 3, \"type\": 9, \"label\": 1 }, { \"name\": \"reserved\", \"number\": 5, \"type\": 8, \"label\": 1 }, { \"name\": \"repeated\", \"number\": 6, \"type\": 8, \"label\": 1 }] }], \"enumType\": [{ \"name\": \"VerificationState\", \"value\": [{ \"name\": \"DECLARATION\", \"number\": 0 }, { \"name\": \"UNVERIFIED\", \"number\": 1 }] }], \"extensionRange\": [{ \"start\": 1000, \"end\": 536870912 }] }, { \"name\": \"FieldDescriptorProto\", \"field\": [{ \"name\": \"name\", \"number\": 1, \"type\": 9, \"label\": 1 }, { \"name\": \"number\", \"number\": 3, \"type\": 5, \"label\": 1 }, { \"name\": \"label\", \"number\": 4, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.FieldDescriptorProto.Label\" }, { \"name\": \"type\", \"number\": 5, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.FieldDescriptorProto.Type\" }, { \"name\": \"type_name\", \"number\": 6, \"type\": 9, \"label\": 1 }, { \"name\": \"extendee\", \"number\": 2, \"type\": 9, \"label\": 1 }, { \"name\": \"default_value\", \"number\": 7, \"type\": 9, \"label\": 1 }, { \"name\": \"oneof_index\", \"number\": 9, \"type\": 5, \"label\": 1 }, { \"name\": \"json_name\", \"number\": 10, \"type\": 9, \"label\": 1 }, { \"name\": \"options\", \"number\": 8, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.FieldOptions\" }, { \"name\": \"proto3_optional\", \"number\": 17, \"type\": 8, \"label\": 1 }], \"enumType\": [{ \"name\": \"Type\", \"value\": [{ \"name\": \"TYPE_DOUBLE\", \"number\": 1 }, { \"name\": \"TYPE_FLOAT\", \"number\": 2 }, { \"name\": \"TYPE_INT64\", \"number\": 3 }, { \"name\": \"TYPE_UINT64\", \"number\": 4 }, { \"name\": \"TYPE_INT32\", \"number\": 5 }, { \"name\": \"TYPE_FIXED64\", \"number\": 6 }, { \"name\": \"TYPE_FIXED32\", \"number\": 7 }, { \"name\": \"TYPE_BOOL\", \"number\": 8 }, { \"name\": \"TYPE_STRING\", \"number\": 9 }, { \"name\": \"TYPE_GROUP\", \"number\": 10 }, { \"name\": \"TYPE_MESSAGE\", \"number\": 11 }, { \"name\": \"TYPE_BYTES\", \"number\": 12 }, { \"name\": \"TYPE_UINT32\", \"number\": 13 }, { \"name\": \"TYPE_ENUM\", \"number\": 14 }, { \"name\": \"TYPE_SFIXED32\", \"number\": 15 }, { \"name\": \"TYPE_SFIXED64\", \"number\": 16 }, { \"name\": \"TYPE_SINT32\", \"number\": 17 }, { \"name\": \"TYPE_SINT64\", \"number\": 18 }] }, { \"name\": \"Label\", \"value\": [{ \"name\": \"LABEL_OPTIONAL\", \"number\": 1 }, { \"name\": \"LABEL_REPEATED\", \"number\": 3 }, { \"name\": \"LABEL_REQUIRED\", \"number\": 2 }] }] }, { \"name\": \"OneofDescriptorProto\", \"field\": [{ \"name\": \"name\", \"number\": 1, \"type\": 9, \"label\": 1 }, { \"name\": \"options\", \"number\": 2, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.OneofOptions\" }] }, { \"name\": \"EnumDescriptorProto\", \"field\": [{ \"name\": \"name\", \"number\": 1, \"type\": 9, \"label\": 1 }, { \"name\": \"value\", \"number\": 2, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.EnumValueDescriptorProto\" }, { \"name\": \"options\", \"number\": 3, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.EnumOptions\" }, { \"name\": \"reserved_range\", \"number\": 4, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.EnumDescriptorProto.EnumReservedRange\" }, { \"name\": \"reserved_name\", \"number\": 5, \"type\": 9, \"label\": 3 }], \"nestedType\": [{ \"name\": \"EnumReservedRange\", \"field\": [{ \"name\": \"start\", \"number\": 1, \"type\": 5, \"label\": 1 }, { \"name\": \"end\", \"number\": 2, \"type\": 5, \"label\": 1 }] }] }, { \"name\": \"EnumValueDescriptorProto\", \"field\": [{ \"name\": \"name\", \"number\": 1, \"type\": 9, \"label\": 1 }, { \"name\": \"number\", \"number\": 2, \"type\": 5, \"label\": 1 }, { \"name\": \"options\", \"number\": 3, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.EnumValueOptions\" }] }, { \"name\": \"ServiceDescriptorProto\", \"field\": [{ \"name\": \"name\", \"number\": 1, \"type\": 9, \"label\": 1 }, { \"name\": \"method\", \"number\": 2, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.MethodDescriptorProto\" }, { \"name\": \"options\", \"number\": 3, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.ServiceOptions\" }] }, { \"name\": \"MethodDescriptorProto\", \"field\": [{ \"name\": \"name\", \"number\": 1, \"type\": 9, \"label\": 1 }, { \"name\": \"input_type\", \"number\": 2, \"type\": 9, \"label\": 1 }, { \"name\": \"output_type\", \"number\": 3, \"type\": 9, \"label\": 1 }, { \"name\": \"options\", \"number\": 4, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.MethodOptions\" }, { \"name\": \"client_streaming\", \"number\": 5, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"server_streaming\", \"number\": 6, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }] }, { \"name\": \"FileOptions\", \"field\": [{ \"name\": \"java_package\", \"number\": 1, \"type\": 9, \"label\": 1 }, { \"name\": \"java_outer_classname\", \"number\": 8, \"type\": 9, \"label\": 1 }, { \"name\": \"java_multiple_files\", \"number\": 10, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"java_generate_equals_and_hash\", \"number\": 20, \"type\": 8, \"label\": 1, \"options\": { \"deprecated\": true } }, { \"name\": \"java_string_check_utf8\", \"number\": 27, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"optimize_for\", \"number\": 9, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.FileOptions.OptimizeMode\", \"defaultValue\": \"SPEED\" }, { \"name\": \"go_package\", \"number\": 11, \"type\": 9, \"label\": 1 }, { \"name\": \"cc_generic_services\", \"number\": 16, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"java_generic_services\", \"number\": 17, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"py_generic_services\", \"number\": 18, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"deprecated\", \"number\": 23, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"cc_enable_arenas\", \"number\": 31, \"type\": 8, \"label\": 1, \"defaultValue\": \"true\" }, { \"name\": \"objc_class_prefix\", \"number\": 36, \"type\": 9, \"label\": 1 }, { \"name\": \"csharp_namespace\", \"number\": 37, \"type\": 9, \"label\": 1 }, { \"name\": \"swift_prefix\", \"number\": 39, \"type\": 9, \"label\": 1 }, { \"name\": \"php_class_prefix\", \"number\": 40, \"type\": 9, \"label\": 1 }, { \"name\": \"php_namespace\", \"number\": 41, \"type\": 9, \"label\": 1 }, { \"name\": \"php_metadata_namespace\", \"number\": 44, \"type\": 9, \"label\": 1 }, { \"name\": \"ruby_package\", \"number\": 45, \"type\": 9, \"label\": 1 }, { \"name\": \"features\", \"number\": 50, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.FeatureSet\" }, { \"name\": \"uninterpreted_option\", \"number\": 999, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.UninterpretedOption\" }], \"enumType\": [{ \"name\": \"OptimizeMode\", \"value\": [{ \"name\": \"SPEED\", \"number\": 1 }, { \"name\": \"CODE_SIZE\", \"number\": 2 }, { \"name\": \"LITE_RUNTIME\", \"number\": 3 }] }], \"extensionRange\": [{ \"start\": 1000, \"end\": 536870912 }] }, { \"name\": \"MessageOptions\", \"field\": [{ \"name\": \"message_set_wire_format\", \"number\": 1, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"no_standard_descriptor_accessor\", \"number\": 2, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"deprecated\", \"number\": 3, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"map_entry\", \"number\": 7, \"type\": 8, \"label\": 1 }, { \"name\": \"deprecated_legacy_json_field_conflicts\", \"number\": 11, \"type\": 8, \"label\": 1, \"options\": { \"deprecated\": true } }, { \"name\": \"features\", \"number\": 12, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.FeatureSet\" }, { \"name\": \"uninterpreted_option\", \"number\": 999, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.UninterpretedOption\" }], \"extensionRange\": [{ \"start\": 1000, \"end\": 536870912 }] }, { \"name\": \"FieldOptions\", \"field\": [{ \"name\": \"ctype\", \"number\": 1, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.FieldOptions.CType\", \"defaultValue\": \"STRING\" }, { \"name\": \"packed\", \"number\": 2, \"type\": 8, \"label\": 1 }, { \"name\": \"jstype\", \"number\": 6, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.FieldOptions.JSType\", \"defaultValue\": \"JS_NORMAL\" }, { \"name\": \"lazy\", \"number\": 5, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"unverified_lazy\", \"number\": 15, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"deprecated\", \"number\": 3, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"weak\", \"number\": 10, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"debug_redact\", \"number\": 16, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"retention\", \"number\": 17, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.FieldOptions.OptionRetention\" }, { \"name\": \"targets\", \"number\": 19, \"type\": 14, \"label\": 3, \"typeName\": \".google.protobuf.FieldOptions.OptionTargetType\" }, { \"name\": \"edition_defaults\", \"number\": 20, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.FieldOptions.EditionDefault\" }, { \"name\": \"features\", \"number\": 21, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.FeatureSet\" }, { \"name\": \"feature_support\", \"number\": 22, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.FieldOptions.FeatureSupport\" }, { \"name\": \"uninterpreted_option\", \"number\": 999, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.UninterpretedOption\" }], \"nestedType\": [{ \"name\": \"EditionDefault\", \"field\": [{ \"name\": \"edition\", \"number\": 3, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.Edition\" }, { \"name\": \"value\", \"number\": 2, \"type\": 9, \"label\": 1 }] }, { \"name\": \"FeatureSupport\", \"field\": [{ \"name\": \"edition_introduced\", \"number\": 1, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.Edition\" }, { \"name\": \"edition_deprecated\", \"number\": 2, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.Edition\" }, { \"name\": \"deprecation_warning\", \"number\": 3, \"type\": 9, \"label\": 1 }, { \"name\": \"edition_removed\", \"number\": 4, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.Edition\" }] }], \"enumType\": [{ \"name\": \"CType\", \"value\": [{ \"name\": \"STRING\", \"number\": 0 }, { \"name\": \"CORD\", \"number\": 1 }, { \"name\": \"STRING_PIECE\", \"number\": 2 }] }, { \"name\": \"JSType\", \"value\": [{ \"name\": \"JS_NORMAL\", \"number\": 0 }, { \"name\": \"JS_STRING\", \"number\": 1 }, { \"name\": \"JS_NUMBER\", \"number\": 2 }] }, { \"name\": \"OptionRetention\", \"value\": [{ \"name\": \"RETENTION_UNKNOWN\", \"number\": 0 }, { \"name\": \"RETENTION_RUNTIME\", \"number\": 1 }, { \"name\": \"RETENTION_SOURCE\", \"number\": 2 }] }, { \"name\": \"OptionTargetType\", \"value\": [{ \"name\": \"TARGET_TYPE_UNKNOWN\", \"number\": 0 }, { \"name\": \"TARGET_TYPE_FILE\", \"number\": 1 }, { \"name\": \"TARGET_TYPE_EXTENSION_RANGE\", \"number\": 2 }, { \"name\": \"TARGET_TYPE_MESSAGE\", \"number\": 3 }, { \"name\": \"TARGET_TYPE_FIELD\", \"number\": 4 }, { \"name\": \"TARGET_TYPE_ONEOF\", \"number\": 5 }, { \"name\": \"TARGET_TYPE_ENUM\", \"number\": 6 }, { \"name\": \"TARGET_TYPE_ENUM_ENTRY\", \"number\": 7 }, { \"name\": \"TARGET_TYPE_SERVICE\", \"number\": 8 }, { \"name\": \"TARGET_TYPE_METHOD\", \"number\": 9 }] }], \"extensionRange\": [{ \"start\": 1000, \"end\": 536870912 }] }, { \"name\": \"OneofOptions\", \"field\": [{ \"name\": \"features\", \"number\": 1, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.FeatureSet\" }, { \"name\": \"uninterpreted_option\", \"number\": 999, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.UninterpretedOption\" }], \"extensionRange\": [{ \"start\": 1000, \"end\": 536870912 }] }, { \"name\": \"EnumOptions\", \"field\": [{ \"name\": \"allow_alias\", \"number\": 2, \"type\": 8, \"label\": 1 }, { \"name\": \"deprecated\", \"number\": 3, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"deprecated_legacy_json_field_conflicts\", \"number\": 6, \"type\": 8, \"label\": 1, \"options\": { \"deprecated\": true } }, { \"name\": \"features\", \"number\": 7, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.FeatureSet\" }, { \"name\": \"uninterpreted_option\", \"number\": 999, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.UninterpretedOption\" }], \"extensionRange\": [{ \"start\": 1000, \"end\": 536870912 }] }, { \"name\": \"EnumValueOptions\", \"field\": [{ \"name\": \"deprecated\", \"number\": 1, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"features\", \"number\": 2, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.FeatureSet\" }, { \"name\": \"debug_redact\", \"number\": 3, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"feature_support\", \"number\": 4, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.FieldOptions.FeatureSupport\" }, { \"name\": \"uninterpreted_option\", \"number\": 999, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.UninterpretedOption\" }], \"extensionRange\": [{ \"start\": 1000, \"end\": 536870912 }] }, { \"name\": \"ServiceOptions\", \"field\": [{ \"name\": \"features\", \"number\": 34, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.FeatureSet\" }, { \"name\": \"deprecated\", \"number\": 33, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"uninterpreted_option\", \"number\": 999, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.UninterpretedOption\" }], \"extensionRange\": [{ \"start\": 1000, \"end\": 536870912 }] }, { \"name\": \"MethodOptions\", \"field\": [{ \"name\": \"deprecated\", \"number\": 33, \"type\": 8, \"label\": 1, \"defaultValue\": \"false\" }, { \"name\": \"idempotency_level\", \"number\": 34, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.MethodOptions.IdempotencyLevel\", \"defaultValue\": \"IDEMPOTENCY_UNKNOWN\" }, { \"name\": \"features\", \"number\": 35, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.FeatureSet\" }, { \"name\": \"uninterpreted_option\", \"number\": 999, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.UninterpretedOption\" }], \"enumType\": [{ \"name\": \"IdempotencyLevel\", \"value\": [{ \"name\": \"IDEMPOTENCY_UNKNOWN\", \"number\": 0 }, { \"name\": \"NO_SIDE_EFFECTS\", \"number\": 1 }, { \"name\": \"IDEMPOTENT\", \"number\": 2 }] }], \"extensionRange\": [{ \"start\": 1000, \"end\": 536870912 }] }, { \"name\": \"UninterpretedOption\", \"field\": [{ \"name\": \"name\", \"number\": 2, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.UninterpretedOption.NamePart\" }, { \"name\": \"identifier_value\", \"number\": 3, \"type\": 9, \"label\": 1 }, { \"name\": \"positive_int_value\", \"number\": 4, \"type\": 4, \"label\": 1 }, { \"name\": \"negative_int_value\", \"number\": 5, \"type\": 3, \"label\": 1 }, { \"name\": \"double_value\", \"number\": 6, \"type\": 1, \"label\": 1 }, { \"name\": \"string_value\", \"number\": 7, \"type\": 12, \"label\": 1 }, { \"name\": \"aggregate_value\", \"number\": 8, \"type\": 9, \"label\": 1 }], \"nestedType\": [{ \"name\": \"NamePart\", \"field\": [{ \"name\": \"name_part\", \"number\": 1, \"type\": 9, \"label\": 2 }, { \"name\": \"is_extension\", \"number\": 2, \"type\": 8, \"label\": 2 }] }] }, { \"name\": \"FeatureSet\", \"field\": [{ \"name\": \"field_presence\", \"number\": 1, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.FeatureSet.FieldPresence\", \"options\": { \"retention\": 1, \"targets\": [4, 1], \"editionDefaults\": [{ \"value\": \"EXPLICIT\", \"edition\": 900 }, { \"value\": \"IMPLICIT\", \"edition\": 999 }, { \"value\": \"EXPLICIT\", \"edition\": 1000 }] } }, { \"name\": \"enum_type\", \"number\": 2, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.FeatureSet.EnumType\", \"options\": { \"retention\": 1, \"targets\": [6, 1], \"editionDefaults\": [{ \"value\": \"CLOSED\", \"edition\": 900 }, { \"value\": \"OPEN\", \"edition\": 999 }] } }, { \"name\": \"repeated_field_encoding\", \"number\": 3, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.FeatureSet.RepeatedFieldEncoding\", \"options\": { \"retention\": 1, \"targets\": [4, 1], \"editionDefaults\": [{ \"value\": \"EXPANDED\", \"edition\": 900 }, { \"value\": \"PACKED\", \"edition\": 999 }] } }, { \"name\": \"utf8_validation\", \"number\": 4, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.FeatureSet.Utf8Validation\", \"options\": { \"retention\": 1, \"targets\": [4, 1], \"editionDefaults\": [{ \"value\": \"NONE\", \"edition\": 900 }, { \"value\": \"VERIFY\", \"edition\": 999 }] } }, { \"name\": \"message_encoding\", \"number\": 5, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.FeatureSet.MessageEncoding\", \"options\": { \"retention\": 1, \"targets\": [4, 1], \"editionDefaults\": [{ \"value\": \"LENGTH_PREFIXED\", \"edition\": 900 }] } }, { \"name\": \"json_format\", \"number\": 6, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.FeatureSet.JsonFormat\", \"options\": { \"retention\": 1, \"targets\": [3, 6, 1], \"editionDefaults\": [{ \"value\": \"LEGACY_BEST_EFFORT\", \"edition\": 900 }, { \"value\": \"ALLOW\", \"edition\": 999 }] } }], \"enumType\": [{ \"name\": \"FieldPresence\", \"value\": [{ \"name\": \"FIELD_PRESENCE_UNKNOWN\", \"number\": 0 }, { \"name\": \"EXPLICIT\", \"number\": 1 }, { \"name\": \"IMPLICIT\", \"number\": 2 }, { \"name\": \"LEGACY_REQUIRED\", \"number\": 3 }] }, { \"name\": \"EnumType\", \"value\": [{ \"name\": \"ENUM_TYPE_UNKNOWN\", \"number\": 0 }, { \"name\": \"OPEN\", \"number\": 1 }, { \"name\": \"CLOSED\", \"number\": 2 }] }, { \"name\": \"RepeatedFieldEncoding\", \"value\": [{ \"name\": \"REPEATED_FIELD_ENCODING_UNKNOWN\", \"number\": 0 }, { \"name\": \"PACKED\", \"number\": 1 }, { \"name\": \"EXPANDED\", \"number\": 2 }] }, { \"name\": \"Utf8Validation\", \"value\": [{ \"name\": \"UTF8_VALIDATION_UNKNOWN\", \"number\": 0 }, { \"name\": \"VERIFY\", \"number\": 2 }, { \"name\": \"NONE\", \"number\": 3 }] }, { \"name\": \"MessageEncoding\", \"value\": [{ \"name\": \"MESSAGE_ENCODING_UNKNOWN\", \"number\": 0 }, { \"name\": \"LENGTH_PREFIXED\", \"number\": 1 }, { \"name\": \"DELIMITED\", \"number\": 2 }] }, { \"name\": \"JsonFormat\", \"value\": [{ \"name\": \"JSON_FORMAT_UNKNOWN\", \"number\": 0 }, { \"name\": \"ALLOW\", \"number\": 1 }, { \"name\": \"LEGACY_BEST_EFFORT\", \"number\": 2 }] }], \"extensionRange\": [{ \"start\": 1000, \"end\": 9995 }, { \"start\": 9995, \"end\": 10000 }, { \"start\": 10000, \"end\": 10001 }] }, { \"name\": \"FeatureSetDefaults\", \"field\": [{ \"name\": \"defaults\", \"number\": 1, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault\" }, { \"name\": \"minimum_edition\", \"number\": 4, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.Edition\" }, { \"name\": \"maximum_edition\", \"number\": 5, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.Edition\" }], \"nestedType\": [{ \"name\": \"FeatureSetEditionDefault\", \"field\": [{ \"name\": \"edition\", \"number\": 3, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.Edition\" }, { \"name\": \"overridable_features\", \"number\": 4, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.FeatureSet\" }, { \"name\": \"fixed_features\", \"number\": 5, \"type\": 11, \"label\": 1, \"typeName\": \".google.protobuf.FeatureSet\" }] }] }, { \"name\": \"SourceCodeInfo\", \"field\": [{ \"name\": \"location\", \"number\": 1, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.SourceCodeInfo.Location\" }], \"nestedType\": [{ \"name\": \"Location\", \"field\": [{ \"name\": \"path\", \"number\": 1, \"type\": 5, \"label\": 3, \"options\": { \"packed\": true } }, { \"name\": \"span\", \"number\": 2, \"type\": 5, \"label\": 3, \"options\": { \"packed\": true } }, { \"name\": \"leading_comments\", \"number\": 3, \"type\": 9, \"label\": 1 }, { \"name\": \"trailing_comments\", \"number\": 4, \"type\": 9, \"label\": 1 }, { \"name\": \"leading_detached_comments\", \"number\": 6, \"type\": 9, \"label\": 3 }] }] }, { \"name\": \"GeneratedCodeInfo\", \"field\": [{ \"name\": \"annotation\", \"number\": 1, \"type\": 11, \"label\": 3, \"typeName\": \".google.protobuf.GeneratedCodeInfo.Annotation\" }], \"nestedType\": [{ \"name\": \"Annotation\", \"field\": [{ \"name\": \"path\", \"number\": 1, \"type\": 5, \"label\": 3, \"options\": { \"packed\": true } }, { \"name\": \"source_file\", \"number\": 2, \"type\": 9, \"label\": 1 }, { \"name\": \"begin\", \"number\": 3, \"type\": 5, \"label\": 1 }, { \"name\": \"end\", \"number\": 4, \"type\": 5, \"label\": 1 }, { \"name\": \"semantic\", \"number\": 5, \"type\": 14, \"label\": 1, \"typeName\": \".google.protobuf.GeneratedCodeInfo.Annotation.Semantic\" }], \"enumType\": [{ \"name\": \"Semantic\", \"value\": [{ \"name\": \"NONE\", \"number\": 0 }, { \"name\": \"SET\", \"number\": 1 }, { \"name\": \"ALIAS\", \"number\": 2 }] }] }] }], \"enumType\": [{ \"name\": \"Edition\", \"value\": [{ \"name\": \"EDITION_UNKNOWN\", \"number\": 0 }, { \"name\": \"EDITION_LEGACY\", \"number\": 900 }, { \"name\": \"EDITION_PROTO2\", \"number\": 998 }, { \"name\": \"EDITION_PROTO3\", \"number\": 999 }, { \"name\": \"EDITION_2023\", \"number\": 1000 }, { \"name\": \"EDITION_2024\", \"number\": 1001 }, { \"name\": \"EDITION_1_TEST_ONLY\", \"number\": 1 }, { \"name\": \"EDITION_2_TEST_ONLY\", \"number\": 2 }, { \"name\": \"EDITION_99997_TEST_ONLY\", \"number\": 99997 }, { \"name\": \"EDITION_99998_TEST_ONLY\", \"number\": 99998 }, { \"name\": \"EDITION_99999_TEST_ONLY\", \"number\": 99999 }, { \"name\": \"EDITION_MAX\", \"number\": 2147483647 }] }] });\n/**\n * Describes the message google.protobuf.FileDescriptorSet.\n * Use `create(FileDescriptorSetSchema)` to create a new message.\n */\nexport const FileDescriptorSetSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 0);\n/**\n * Describes the message google.protobuf.FileDescriptorProto.\n * Use `create(FileDescriptorProtoSchema)` to create a new message.\n */\nexport const FileDescriptorProtoSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 1);\n/**\n * Describes the message google.protobuf.DescriptorProto.\n * Use `create(DescriptorProtoSchema)` to create a new message.\n */\nexport const DescriptorProtoSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 2);\n/**\n * Describes the message google.protobuf.DescriptorProto.ExtensionRange.\n * Use `create(DescriptorProto_ExtensionRangeSchema)` to create a new message.\n */\nexport const DescriptorProto_ExtensionRangeSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 2, 0);\n/**\n * Describes the message google.protobuf.DescriptorProto.ReservedRange.\n * Use `create(DescriptorProto_ReservedRangeSchema)` to create a new message.\n */\nexport const DescriptorProto_ReservedRangeSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 2, 1);\n/**\n * Describes the message google.protobuf.ExtensionRangeOptions.\n * Use `create(ExtensionRangeOptionsSchema)` to create a new message.\n */\nexport const ExtensionRangeOptionsSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 3);\n/**\n * Describes the message google.protobuf.ExtensionRangeOptions.Declaration.\n * Use `create(ExtensionRangeOptions_DeclarationSchema)` to create a new message.\n */\nexport const ExtensionRangeOptions_DeclarationSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 3, 0);\n/**\n * The verification state of the extension range.\n *\n * @generated from enum google.protobuf.ExtensionRangeOptions.VerificationState\n */\nexport var ExtensionRangeOptions_VerificationState;\n(function (ExtensionRangeOptions_VerificationState) {\n /**\n * All the extensions of the range must be declared.\n *\n * @generated from enum value: DECLARATION = 0;\n */\n ExtensionRangeOptions_VerificationState[ExtensionRangeOptions_VerificationState[\"DECLARATION\"] = 0] = \"DECLARATION\";\n /**\n * @generated from enum value: UNVERIFIED = 1;\n */\n ExtensionRangeOptions_VerificationState[ExtensionRangeOptions_VerificationState[\"UNVERIFIED\"] = 1] = \"UNVERIFIED\";\n})(ExtensionRangeOptions_VerificationState || (ExtensionRangeOptions_VerificationState = {}));\n/**\n * Describes the enum google.protobuf.ExtensionRangeOptions.VerificationState.\n */\nexport const ExtensionRangeOptions_VerificationStateSchema = /*@__PURE__*/ enumDesc(file_google_protobuf_descriptor, 3, 0);\n/**\n * Describes the message google.protobuf.FieldDescriptorProto.\n * Use `create(FieldDescriptorProtoSchema)` to create a new message.\n */\nexport const FieldDescriptorProtoSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 4);\n/**\n * @generated from enum google.protobuf.FieldDescriptorProto.Type\n */\nexport var FieldDescriptorProto_Type;\n(function (FieldDescriptorProto_Type) {\n /**\n * 0 is reserved for errors.\n * Order is weird for historical reasons.\n *\n * @generated from enum value: TYPE_DOUBLE = 1;\n */\n FieldDescriptorProto_Type[FieldDescriptorProto_Type[\"DOUBLE\"] = 1] = \"DOUBLE\";\n /**\n * @generated from enum value: TYPE_FLOAT = 2;\n */\n FieldDescriptorProto_Type[FieldDescriptorProto_Type[\"FLOAT\"] = 2] = \"FLOAT\";\n /**\n * Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if\n * negative values are likely.\n *\n * @generated from enum value: TYPE_INT64 = 3;\n */\n FieldDescriptorProto_Type[FieldDescriptorProto_Type[\"INT64\"] = 3] = \"INT64\";\n /**\n * @generated from enum value: TYPE_UINT64 = 4;\n */\n FieldDescriptorProto_Type[FieldDescriptorProto_Type[\"UINT64\"] = 4] = \"UINT64\";\n /**\n * Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if\n * negative values are likely.\n *\n * @generated from enum value: TYPE_INT32 = 5;\n */\n FieldDescriptorProto_Type[FieldDescriptorProto_Type[\"INT32\"] = 5] = \"INT32\";\n /**\n * @generated from enum value: TYPE_FIXED64 = 6;\n */\n FieldDescriptorProto_Type[FieldDescriptorProto_Type[\"FIXED64\"] = 6] = \"FIXED64\";\n /**\n * @generated from enum value: TYPE_FIXED32 = 7;\n */\n FieldDescriptorProto_Type[FieldDescriptorProto_Type[\"FIXED32\"] = 7] = \"FIXED32\";\n /**\n * @generated from enum value: TYPE_BOOL = 8;\n */\n FieldDescriptorProto_Type[FieldDescriptorProto_Type[\"BOOL\"] = 8] = \"BOOL\";\n /**\n * @generated from enum value: TYPE_STRING = 9;\n */\n FieldDescriptorProto_Type[FieldDescriptorProto_Type[\"STRING\"] = 9] = \"STRING\";\n /**\n * Tag-delimited aggregate.\n * Group type is deprecated and not supported after google.protobuf. However, Proto3\n * implementations should still be able to parse the group wire format and\n * treat group fields as unknown fields. In Editions, the group wire format\n * can be enabled via the `message_encoding` feature.\n *\n * @generated from enum value: TYPE_GROUP = 10;\n */\n FieldDescriptorProto_Type[FieldDescriptorProto_Type[\"GROUP\"] = 10] = \"GROUP\";\n /**\n * Length-delimited aggregate.\n *\n * @generated from enum value: TYPE_MESSAGE = 11;\n */\n FieldDescriptorProto_Type[FieldDescriptorProto_Type[\"MESSAGE\"] = 11] = \"MESSAGE\";\n /**\n * New in version 2.\n *\n * @generated from enum value: TYPE_BYTES = 12;\n */\n FieldDescriptorProto_Type[FieldDescriptorProto_Type[\"BYTES\"] = 12] = \"BYTES\";\n /**\n * @generated from enum value: TYPE_UINT32 = 13;\n */\n FieldDescriptorProto_Type[FieldDescriptorProto_Type[\"UINT32\"] = 13] = \"UINT32\";\n /**\n * @generated from enum value: TYPE_ENUM = 14;\n */\n FieldDescriptorProto_Type[FieldDescriptorProto_Type[\"ENUM\"] = 14] = \"ENUM\";\n /**\n * @generated from enum value: TYPE_SFIXED32 = 15;\n */\n FieldDescriptorProto_Type[FieldDescriptorProto_Type[\"SFIXED32\"] = 15] = \"SFIXED32\";\n /**\n * @generated from enum value: TYPE_SFIXED64 = 16;\n */\n FieldDescriptorProto_Type[FieldDescriptorProto_Type[\"SFIXED64\"] = 16] = \"SFIXED64\";\n /**\n * Uses ZigZag encoding.\n *\n * @generated from enum value: TYPE_SINT32 = 17;\n */\n FieldDescriptorProto_Type[FieldDescriptorProto_Type[\"SINT32\"] = 17] = \"SINT32\";\n /**\n * Uses ZigZag encoding.\n *\n * @generated from enum value: TYPE_SINT64 = 18;\n */\n FieldDescriptorProto_Type[FieldDescriptorProto_Type[\"SINT64\"] = 18] = \"SINT64\";\n})(FieldDescriptorProto_Type || (FieldDescriptorProto_Type = {}));\n/**\n * Describes the enum google.protobuf.FieldDescriptorProto.Type.\n */\nexport const FieldDescriptorProto_TypeSchema = /*@__PURE__*/ enumDesc(file_google_protobuf_descriptor, 4, 0);\n/**\n * @generated from enum google.protobuf.FieldDescriptorProto.Label\n */\nexport var FieldDescriptorProto_Label;\n(function (FieldDescriptorProto_Label) {\n /**\n * 0 is reserved for errors\n *\n * @generated from enum value: LABEL_OPTIONAL = 1;\n */\n FieldDescriptorProto_Label[FieldDescriptorProto_Label[\"OPTIONAL\"] = 1] = \"OPTIONAL\";\n /**\n * @generated from enum value: LABEL_REPEATED = 3;\n */\n FieldDescriptorProto_Label[FieldDescriptorProto_Label[\"REPEATED\"] = 3] = \"REPEATED\";\n /**\n * The required label is only allowed in google.protobuf. In proto3 and Editions\n * it's explicitly prohibited. In Editions, the `field_presence` feature\n * can be used to get this behavior.\n *\n * @generated from enum value: LABEL_REQUIRED = 2;\n */\n FieldDescriptorProto_Label[FieldDescriptorProto_Label[\"REQUIRED\"] = 2] = \"REQUIRED\";\n})(FieldDescriptorProto_Label || (FieldDescriptorProto_Label = {}));\n/**\n * Describes the enum google.protobuf.FieldDescriptorProto.Label.\n */\nexport const FieldDescriptorProto_LabelSchema = /*@__PURE__*/ enumDesc(file_google_protobuf_descriptor, 4, 1);\n/**\n * Describes the message google.protobuf.OneofDescriptorProto.\n * Use `create(OneofDescriptorProtoSchema)` to create a new message.\n */\nexport const OneofDescriptorProtoSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 5);\n/**\n * Describes the message google.protobuf.EnumDescriptorProto.\n * Use `create(EnumDescriptorProtoSchema)` to create a new message.\n */\nexport const EnumDescriptorProtoSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 6);\n/**\n * Describes the message google.protobuf.EnumDescriptorProto.EnumReservedRange.\n * Use `create(EnumDescriptorProto_EnumReservedRangeSchema)` to create a new message.\n */\nexport const EnumDescriptorProto_EnumReservedRangeSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 6, 0);\n/**\n * Describes the message google.protobuf.EnumValueDescriptorProto.\n * Use `create(EnumValueDescriptorProtoSchema)` to create a new message.\n */\nexport const EnumValueDescriptorProtoSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 7);\n/**\n * Describes the message google.protobuf.ServiceDescriptorProto.\n * Use `create(ServiceDescriptorProtoSchema)` to create a new message.\n */\nexport const ServiceDescriptorProtoSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 8);\n/**\n * Describes the message google.protobuf.MethodDescriptorProto.\n * Use `create(MethodDescriptorProtoSchema)` to create a new message.\n */\nexport const MethodDescriptorProtoSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 9);\n/**\n * Describes the message google.protobuf.FileOptions.\n * Use `create(FileOptionsSchema)` to create a new message.\n */\nexport const FileOptionsSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 10);\n/**\n * Generated classes can be optimized for speed or code size.\n *\n * @generated from enum google.protobuf.FileOptions.OptimizeMode\n */\nexport var FileOptions_OptimizeMode;\n(function (FileOptions_OptimizeMode) {\n /**\n * Generate complete code for parsing, serialization,\n *\n * @generated from enum value: SPEED = 1;\n */\n FileOptions_OptimizeMode[FileOptions_OptimizeMode[\"SPEED\"] = 1] = \"SPEED\";\n /**\n * etc.\n *\n * Use ReflectionOps to implement these methods.\n *\n * @generated from enum value: CODE_SIZE = 2;\n */\n FileOptions_OptimizeMode[FileOptions_OptimizeMode[\"CODE_SIZE\"] = 2] = \"CODE_SIZE\";\n /**\n * Generate code using MessageLite and the lite runtime.\n *\n * @generated from enum value: LITE_RUNTIME = 3;\n */\n FileOptions_OptimizeMode[FileOptions_OptimizeMode[\"LITE_RUNTIME\"] = 3] = \"LITE_RUNTIME\";\n})(FileOptions_OptimizeMode || (FileOptions_OptimizeMode = {}));\n/**\n * Describes the enum google.protobuf.FileOptions.OptimizeMode.\n */\nexport const FileOptions_OptimizeModeSchema = /*@__PURE__*/ enumDesc(file_google_protobuf_descriptor, 10, 0);\n/**\n * Describes the message google.protobuf.MessageOptions.\n * Use `create(MessageOptionsSchema)` to create a new message.\n */\nexport const MessageOptionsSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 11);\n/**\n * Describes the message google.protobuf.FieldOptions.\n * Use `create(FieldOptionsSchema)` to create a new message.\n */\nexport const FieldOptionsSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 12);\n/**\n * Describes the message google.protobuf.FieldOptions.EditionDefault.\n * Use `create(FieldOptions_EditionDefaultSchema)` to create a new message.\n */\nexport const FieldOptions_EditionDefaultSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 12, 0);\n/**\n * Describes the message google.protobuf.FieldOptions.FeatureSupport.\n * Use `create(FieldOptions_FeatureSupportSchema)` to create a new message.\n */\nexport const FieldOptions_FeatureSupportSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 12, 1);\n/**\n * @generated from enum google.protobuf.FieldOptions.CType\n */\nexport var FieldOptions_CType;\n(function (FieldOptions_CType) {\n /**\n * Default mode.\n *\n * @generated from enum value: STRING = 0;\n */\n FieldOptions_CType[FieldOptions_CType[\"STRING\"] = 0] = \"STRING\";\n /**\n * The option [ctype=CORD] may be applied to a non-repeated field of type\n * \"bytes\". It indicates that in C++, the data should be stored in a Cord\n * instead of a string. For very large strings, this may reduce memory\n * fragmentation. It may also allow better performance when parsing from a\n * Cord, or when parsing with aliasing enabled, as the parsed Cord may then\n * alias the original buffer.\n *\n * @generated from enum value: CORD = 1;\n */\n FieldOptions_CType[FieldOptions_CType[\"CORD\"] = 1] = \"CORD\";\n /**\n * @generated from enum value: STRING_PIECE = 2;\n */\n FieldOptions_CType[FieldOptions_CType[\"STRING_PIECE\"] = 2] = \"STRING_PIECE\";\n})(FieldOptions_CType || (FieldOptions_CType = {}));\n/**\n * Describes the enum google.protobuf.FieldOptions.CType.\n */\nexport const FieldOptions_CTypeSchema = /*@__PURE__*/ enumDesc(file_google_protobuf_descriptor, 12, 0);\n/**\n * @generated from enum google.protobuf.FieldOptions.JSType\n */\nexport var FieldOptions_JSType;\n(function (FieldOptions_JSType) {\n /**\n * Use the default type.\n *\n * @generated from enum value: JS_NORMAL = 0;\n */\n FieldOptions_JSType[FieldOptions_JSType[\"JS_NORMAL\"] = 0] = \"JS_NORMAL\";\n /**\n * Use JavaScript strings.\n *\n * @generated from enum value: JS_STRING = 1;\n */\n FieldOptions_JSType[FieldOptions_JSType[\"JS_STRING\"] = 1] = \"JS_STRING\";\n /**\n * Use JavaScript numbers.\n *\n * @generated from enum value: JS_NUMBER = 2;\n */\n FieldOptions_JSType[FieldOptions_JSType[\"JS_NUMBER\"] = 2] = \"JS_NUMBER\";\n})(FieldOptions_JSType || (FieldOptions_JSType = {}));\n/**\n * Describes the enum google.protobuf.FieldOptions.JSType.\n */\nexport const FieldOptions_JSTypeSchema = /*@__PURE__*/ enumDesc(file_google_protobuf_descriptor, 12, 1);\n/**\n * If set to RETENTION_SOURCE, the option will be omitted from the binary.\n * Note: as of January 2023, support for this is in progress and does not yet\n * have an effect (b/264593489).\n *\n * @generated from enum google.protobuf.FieldOptions.OptionRetention\n */\nexport var FieldOptions_OptionRetention;\n(function (FieldOptions_OptionRetention) {\n /**\n * @generated from enum value: RETENTION_UNKNOWN = 0;\n */\n FieldOptions_OptionRetention[FieldOptions_OptionRetention[\"RETENTION_UNKNOWN\"] = 0] = \"RETENTION_UNKNOWN\";\n /**\n * @generated from enum value: RETENTION_RUNTIME = 1;\n */\n FieldOptions_OptionRetention[FieldOptions_OptionRetention[\"RETENTION_RUNTIME\"] = 1] = \"RETENTION_RUNTIME\";\n /**\n * @generated from enum value: RETENTION_SOURCE = 2;\n */\n FieldOptions_OptionRetention[FieldOptions_OptionRetention[\"RETENTION_SOURCE\"] = 2] = \"RETENTION_SOURCE\";\n})(FieldOptions_OptionRetention || (FieldOptions_OptionRetention = {}));\n/**\n * Describes the enum google.protobuf.FieldOptions.OptionRetention.\n */\nexport const FieldOptions_OptionRetentionSchema = /*@__PURE__*/ enumDesc(file_google_protobuf_descriptor, 12, 2);\n/**\n * This indicates the types of entities that the field may apply to when used\n * as an option. If it is unset, then the field may be freely used as an\n * option on any kind of entity. Note: as of January 2023, support for this is\n * in progress and does not yet have an effect (b/264593489).\n *\n * @generated from enum google.protobuf.FieldOptions.OptionTargetType\n */\nexport var FieldOptions_OptionTargetType;\n(function (FieldOptions_OptionTargetType) {\n /**\n * @generated from enum value: TARGET_TYPE_UNKNOWN = 0;\n */\n FieldOptions_OptionTargetType[FieldOptions_OptionTargetType[\"TARGET_TYPE_UNKNOWN\"] = 0] = \"TARGET_TYPE_UNKNOWN\";\n /**\n * @generated from enum value: TARGET_TYPE_FILE = 1;\n */\n FieldOptions_OptionTargetType[FieldOptions_OptionTargetType[\"TARGET_TYPE_FILE\"] = 1] = \"TARGET_TYPE_FILE\";\n /**\n * @generated from enum value: TARGET_TYPE_EXTENSION_RANGE = 2;\n */\n FieldOptions_OptionTargetType[FieldOptions_OptionTargetType[\"TARGET_TYPE_EXTENSION_RANGE\"] = 2] = \"TARGET_TYPE_EXTENSION_RANGE\";\n /**\n * @generated from enum value: TARGET_TYPE_MESSAGE = 3;\n */\n FieldOptions_OptionTargetType[FieldOptions_OptionTargetType[\"TARGET_TYPE_MESSAGE\"] = 3] = \"TARGET_TYPE_MESSAGE\";\n /**\n * @generated from enum value: TARGET_TYPE_FIELD = 4;\n */\n FieldOptions_OptionTargetType[FieldOptions_OptionTargetType[\"TARGET_TYPE_FIELD\"] = 4] = \"TARGET_TYPE_FIELD\";\n /**\n * @generated from enum value: TARGET_TYPE_ONEOF = 5;\n */\n FieldOptions_OptionTargetType[FieldOptions_OptionTargetType[\"TARGET_TYPE_ONEOF\"] = 5] = \"TARGET_TYPE_ONEOF\";\n /**\n * @generated from enum value: TARGET_TYPE_ENUM = 6;\n */\n FieldOptions_OptionTargetType[FieldOptions_OptionTargetType[\"TARGET_TYPE_ENUM\"] = 6] = \"TARGET_TYPE_ENUM\";\n /**\n * @generated from enum value: TARGET_TYPE_ENUM_ENTRY = 7;\n */\n FieldOptions_OptionTargetType[FieldOptions_OptionTargetType[\"TARGET_TYPE_ENUM_ENTRY\"] = 7] = \"TARGET_TYPE_ENUM_ENTRY\";\n /**\n * @generated from enum value: TARGET_TYPE_SERVICE = 8;\n */\n FieldOptions_OptionTargetType[FieldOptions_OptionTargetType[\"TARGET_TYPE_SERVICE\"] = 8] = \"TARGET_TYPE_SERVICE\";\n /**\n * @generated from enum value: TARGET_TYPE_METHOD = 9;\n */\n FieldOptions_OptionTargetType[FieldOptions_OptionTargetType[\"TARGET_TYPE_METHOD\"] = 9] = \"TARGET_TYPE_METHOD\";\n})(FieldOptions_OptionTargetType || (FieldOptions_OptionTargetType = {}));\n/**\n * Describes the enum google.protobuf.FieldOptions.OptionTargetType.\n */\nexport const FieldOptions_OptionTargetTypeSchema = /*@__PURE__*/ enumDesc(file_google_protobuf_descriptor, 12, 3);\n/**\n * Describes the message google.protobuf.OneofOptions.\n * Use `create(OneofOptionsSchema)` to create a new message.\n */\nexport const OneofOptionsSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 13);\n/**\n * Describes the message google.protobuf.EnumOptions.\n * Use `create(EnumOptionsSchema)` to create a new message.\n */\nexport const EnumOptionsSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 14);\n/**\n * Describes the message google.protobuf.EnumValueOptions.\n * Use `create(EnumValueOptionsSchema)` to create a new message.\n */\nexport const EnumValueOptionsSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 15);\n/**\n * Describes the message google.protobuf.ServiceOptions.\n * Use `create(ServiceOptionsSchema)` to create a new message.\n */\nexport const ServiceOptionsSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 16);\n/**\n * Describes the message google.protobuf.MethodOptions.\n * Use `create(MethodOptionsSchema)` to create a new message.\n */\nexport const MethodOptionsSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 17);\n/**\n * Is this method side-effect-free (or safe in HTTP parlance), or idempotent,\n * or neither? HTTP based RPC implementation may choose GET verb for safe\n * methods, and PUT verb for idempotent methods instead of the default POST.\n *\n * @generated from enum google.protobuf.MethodOptions.IdempotencyLevel\n */\nexport var MethodOptions_IdempotencyLevel;\n(function (MethodOptions_IdempotencyLevel) {\n /**\n * @generated from enum value: IDEMPOTENCY_UNKNOWN = 0;\n */\n MethodOptions_IdempotencyLevel[MethodOptions_IdempotencyLevel[\"IDEMPOTENCY_UNKNOWN\"] = 0] = \"IDEMPOTENCY_UNKNOWN\";\n /**\n * implies idempotent\n *\n * @generated from enum value: NO_SIDE_EFFECTS = 1;\n */\n MethodOptions_IdempotencyLevel[MethodOptions_IdempotencyLevel[\"NO_SIDE_EFFECTS\"] = 1] = \"NO_SIDE_EFFECTS\";\n /**\n * idempotent, but may have side effects\n *\n * @generated from enum value: IDEMPOTENT = 2;\n */\n MethodOptions_IdempotencyLevel[MethodOptions_IdempotencyLevel[\"IDEMPOTENT\"] = 2] = \"IDEMPOTENT\";\n})(MethodOptions_IdempotencyLevel || (MethodOptions_IdempotencyLevel = {}));\n/**\n * Describes the enum google.protobuf.MethodOptions.IdempotencyLevel.\n */\nexport const MethodOptions_IdempotencyLevelSchema = /*@__PURE__*/ enumDesc(file_google_protobuf_descriptor, 17, 0);\n/**\n * Describes the message google.protobuf.UninterpretedOption.\n * Use `create(UninterpretedOptionSchema)` to create a new message.\n */\nexport const UninterpretedOptionSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 18);\n/**\n * Describes the message google.protobuf.UninterpretedOption.NamePart.\n * Use `create(UninterpretedOption_NamePartSchema)` to create a new message.\n */\nexport const UninterpretedOption_NamePartSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 18, 0);\n/**\n * Describes the message google.protobuf.FeatureSet.\n * Use `create(FeatureSetSchema)` to create a new message.\n */\nexport const FeatureSetSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 19);\n/**\n * @generated from enum google.protobuf.FeatureSet.FieldPresence\n */\nexport var FeatureSet_FieldPresence;\n(function (FeatureSet_FieldPresence) {\n /**\n * @generated from enum value: FIELD_PRESENCE_UNKNOWN = 0;\n */\n FeatureSet_FieldPresence[FeatureSet_FieldPresence[\"FIELD_PRESENCE_UNKNOWN\"] = 0] = \"FIELD_PRESENCE_UNKNOWN\";\n /**\n * @generated from enum value: EXPLICIT = 1;\n */\n FeatureSet_FieldPresence[FeatureSet_FieldPresence[\"EXPLICIT\"] = 1] = \"EXPLICIT\";\n /**\n * @generated from enum value: IMPLICIT = 2;\n */\n FeatureSet_FieldPresence[FeatureSet_FieldPresence[\"IMPLICIT\"] = 2] = \"IMPLICIT\";\n /**\n * @generated from enum value: LEGACY_REQUIRED = 3;\n */\n FeatureSet_FieldPresence[FeatureSet_FieldPresence[\"LEGACY_REQUIRED\"] = 3] = \"LEGACY_REQUIRED\";\n})(FeatureSet_FieldPresence || (FeatureSet_FieldPresence = {}));\n/**\n * Describes the enum google.protobuf.FeatureSet.FieldPresence.\n */\nexport const FeatureSet_FieldPresenceSchema = /*@__PURE__*/ enumDesc(file_google_protobuf_descriptor, 19, 0);\n/**\n * @generated from enum google.protobuf.FeatureSet.EnumType\n */\nexport var FeatureSet_EnumType;\n(function (FeatureSet_EnumType) {\n /**\n * @generated from enum value: ENUM_TYPE_UNKNOWN = 0;\n */\n FeatureSet_EnumType[FeatureSet_EnumType[\"ENUM_TYPE_UNKNOWN\"] = 0] = \"ENUM_TYPE_UNKNOWN\";\n /**\n * @generated from enum value: OPEN = 1;\n */\n FeatureSet_EnumType[FeatureSet_EnumType[\"OPEN\"] = 1] = \"OPEN\";\n /**\n * @generated from enum value: CLOSED = 2;\n */\n FeatureSet_EnumType[FeatureSet_EnumType[\"CLOSED\"] = 2] = \"CLOSED\";\n})(FeatureSet_EnumType || (FeatureSet_EnumType = {}));\n/**\n * Describes the enum google.protobuf.FeatureSet.EnumType.\n */\nexport const FeatureSet_EnumTypeSchema = /*@__PURE__*/ enumDesc(file_google_protobuf_descriptor, 19, 1);\n/**\n * @generated from enum google.protobuf.FeatureSet.RepeatedFieldEncoding\n */\nexport var FeatureSet_RepeatedFieldEncoding;\n(function (FeatureSet_RepeatedFieldEncoding) {\n /**\n * @generated from enum value: REPEATED_FIELD_ENCODING_UNKNOWN = 0;\n */\n FeatureSet_RepeatedFieldEncoding[FeatureSet_RepeatedFieldEncoding[\"REPEATED_FIELD_ENCODING_UNKNOWN\"] = 0] = \"REPEATED_FIELD_ENCODING_UNKNOWN\";\n /**\n * @generated from enum value: PACKED = 1;\n */\n FeatureSet_RepeatedFieldEncoding[FeatureSet_RepeatedFieldEncoding[\"PACKED\"] = 1] = \"PACKED\";\n /**\n * @generated from enum value: EXPANDED = 2;\n */\n FeatureSet_RepeatedFieldEncoding[FeatureSet_RepeatedFieldEncoding[\"EXPANDED\"] = 2] = \"EXPANDED\";\n})(FeatureSet_RepeatedFieldEncoding || (FeatureSet_RepeatedFieldEncoding = {}));\n/**\n * Describes the enum google.protobuf.FeatureSet.RepeatedFieldEncoding.\n */\nexport const FeatureSet_RepeatedFieldEncodingSchema = /*@__PURE__*/ enumDesc(file_google_protobuf_descriptor, 19, 2);\n/**\n * @generated from enum google.protobuf.FeatureSet.Utf8Validation\n */\nexport var FeatureSet_Utf8Validation;\n(function (FeatureSet_Utf8Validation) {\n /**\n * @generated from enum value: UTF8_VALIDATION_UNKNOWN = 0;\n */\n FeatureSet_Utf8Validation[FeatureSet_Utf8Validation[\"UTF8_VALIDATION_UNKNOWN\"] = 0] = \"UTF8_VALIDATION_UNKNOWN\";\n /**\n * @generated from enum value: VERIFY = 2;\n */\n FeatureSet_Utf8Validation[FeatureSet_Utf8Validation[\"VERIFY\"] = 2] = \"VERIFY\";\n /**\n * @generated from enum value: NONE = 3;\n */\n FeatureSet_Utf8Validation[FeatureSet_Utf8Validation[\"NONE\"] = 3] = \"NONE\";\n})(FeatureSet_Utf8Validation || (FeatureSet_Utf8Validation = {}));\n/**\n * Describes the enum google.protobuf.FeatureSet.Utf8Validation.\n */\nexport const FeatureSet_Utf8ValidationSchema = /*@__PURE__*/ enumDesc(file_google_protobuf_descriptor, 19, 3);\n/**\n * @generated from enum google.protobuf.FeatureSet.MessageEncoding\n */\nexport var FeatureSet_MessageEncoding;\n(function (FeatureSet_MessageEncoding) {\n /**\n * @generated from enum value: MESSAGE_ENCODING_UNKNOWN = 0;\n */\n FeatureSet_MessageEncoding[FeatureSet_MessageEncoding[\"MESSAGE_ENCODING_UNKNOWN\"] = 0] = \"MESSAGE_ENCODING_UNKNOWN\";\n /**\n * @generated from enum value: LENGTH_PREFIXED = 1;\n */\n FeatureSet_MessageEncoding[FeatureSet_MessageEncoding[\"LENGTH_PREFIXED\"] = 1] = \"LENGTH_PREFIXED\";\n /**\n * @generated from enum value: DELIMITED = 2;\n */\n FeatureSet_MessageEncoding[FeatureSet_MessageEncoding[\"DELIMITED\"] = 2] = \"DELIMITED\";\n})(FeatureSet_MessageEncoding || (FeatureSet_MessageEncoding = {}));\n/**\n * Describes the enum google.protobuf.FeatureSet.MessageEncoding.\n */\nexport const FeatureSet_MessageEncodingSchema = /*@__PURE__*/ enumDesc(file_google_protobuf_descriptor, 19, 4);\n/**\n * @generated from enum google.protobuf.FeatureSet.JsonFormat\n */\nexport var FeatureSet_JsonFormat;\n(function (FeatureSet_JsonFormat) {\n /**\n * @generated from enum value: JSON_FORMAT_UNKNOWN = 0;\n */\n FeatureSet_JsonFormat[FeatureSet_JsonFormat[\"JSON_FORMAT_UNKNOWN\"] = 0] = \"JSON_FORMAT_UNKNOWN\";\n /**\n * @generated from enum value: ALLOW = 1;\n */\n FeatureSet_JsonFormat[FeatureSet_JsonFormat[\"ALLOW\"] = 1] = \"ALLOW\";\n /**\n * @generated from enum value: LEGACY_BEST_EFFORT = 2;\n */\n FeatureSet_JsonFormat[FeatureSet_JsonFormat[\"LEGACY_BEST_EFFORT\"] = 2] = \"LEGACY_BEST_EFFORT\";\n})(FeatureSet_JsonFormat || (FeatureSet_JsonFormat = {}));\n/**\n * Describes the enum google.protobuf.FeatureSet.JsonFormat.\n */\nexport const FeatureSet_JsonFormatSchema = /*@__PURE__*/ enumDesc(file_google_protobuf_descriptor, 19, 5);\n/**\n * Describes the message google.protobuf.FeatureSetDefaults.\n * Use `create(FeatureSetDefaultsSchema)` to create a new message.\n */\nexport const FeatureSetDefaultsSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 20);\n/**\n * Describes the message google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.\n * Use `create(FeatureSetDefaults_FeatureSetEditionDefaultSchema)` to create a new message.\n */\nexport const FeatureSetDefaults_FeatureSetEditionDefaultSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 20, 0);\n/**\n * Describes the message google.protobuf.SourceCodeInfo.\n * Use `create(SourceCodeInfoSchema)` to create a new message.\n */\nexport const SourceCodeInfoSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 21);\n/**\n * Describes the message google.protobuf.SourceCodeInfo.Location.\n * Use `create(SourceCodeInfo_LocationSchema)` to create a new message.\n */\nexport const SourceCodeInfo_LocationSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 21, 0);\n/**\n * Describes the message google.protobuf.GeneratedCodeInfo.\n * Use `create(GeneratedCodeInfoSchema)` to create a new message.\n */\nexport const GeneratedCodeInfoSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 22);\n/**\n * Describes the message google.protobuf.GeneratedCodeInfo.Annotation.\n * Use `create(GeneratedCodeInfo_AnnotationSchema)` to create a new message.\n */\nexport const GeneratedCodeInfo_AnnotationSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_descriptor, 22, 0);\n/**\n * Represents the identified object's effect on the element in the original\n * .proto file.\n *\n * @generated from enum google.protobuf.GeneratedCodeInfo.Annotation.Semantic\n */\nexport var GeneratedCodeInfo_Annotation_Semantic;\n(function (GeneratedCodeInfo_Annotation_Semantic) {\n /**\n * There is no effect or the effect is indescribable.\n *\n * @generated from enum value: NONE = 0;\n */\n GeneratedCodeInfo_Annotation_Semantic[GeneratedCodeInfo_Annotation_Semantic[\"NONE\"] = 0] = \"NONE\";\n /**\n * The element is set or otherwise mutated.\n *\n * @generated from enum value: SET = 1;\n */\n GeneratedCodeInfo_Annotation_Semantic[GeneratedCodeInfo_Annotation_Semantic[\"SET\"] = 1] = \"SET\";\n /**\n * An alias to the element is returned.\n *\n * @generated from enum value: ALIAS = 2;\n */\n GeneratedCodeInfo_Annotation_Semantic[GeneratedCodeInfo_Annotation_Semantic[\"ALIAS\"] = 2] = \"ALIAS\";\n})(GeneratedCodeInfo_Annotation_Semantic || (GeneratedCodeInfo_Annotation_Semantic = {}));\n/**\n * Describes the enum google.protobuf.GeneratedCodeInfo.Annotation.Semantic.\n */\nexport const GeneratedCodeInfo_Annotation_SemanticSchema = /*@__PURE__*/ enumDesc(file_google_protobuf_descriptor, 22, 0, 0);\n/**\n * The full set of known editions.\n *\n * @generated from enum google.protobuf.Edition\n */\nexport var Edition;\n(function (Edition) {\n /**\n * A placeholder for an unknown edition value.\n *\n * @generated from enum value: EDITION_UNKNOWN = 0;\n */\n Edition[Edition[\"EDITION_UNKNOWN\"] = 0] = \"EDITION_UNKNOWN\";\n /**\n * A placeholder edition for specifying default behaviors *before* a feature\n * was first introduced. This is effectively an \"infinite past\".\n *\n * @generated from enum value: EDITION_LEGACY = 900;\n */\n Edition[Edition[\"EDITION_LEGACY\"] = 900] = \"EDITION_LEGACY\";\n /**\n * Legacy syntax \"editions\". These pre-date editions, but behave much like\n * distinct editions. These can't be used to specify the edition of proto\n * files, but feature definitions must supply proto2/proto3 defaults for\n * backwards compatibility.\n *\n * @generated from enum value: EDITION_PROTO2 = 998;\n */\n Edition[Edition[\"EDITION_PROTO2\"] = 998] = \"EDITION_PROTO2\";\n /**\n * @generated from enum value: EDITION_PROTO3 = 999;\n */\n Edition[Edition[\"EDITION_PROTO3\"] = 999] = \"EDITION_PROTO3\";\n /**\n * Editions that have been released. The specific values are arbitrary and\n * should not be depended on, but they will always be time-ordered for easy\n * comparison.\n *\n * @generated from enum value: EDITION_2023 = 1000;\n */\n Edition[Edition[\"EDITION_2023\"] = 1000] = \"EDITION_2023\";\n /**\n * @generated from enum value: EDITION_2024 = 1001;\n */\n Edition[Edition[\"EDITION_2024\"] = 1001] = \"EDITION_2024\";\n /**\n * Placeholder editions for testing feature resolution. These should not be\n * used or relyed on outside of tests.\n *\n * @generated from enum value: EDITION_1_TEST_ONLY = 1;\n */\n Edition[Edition[\"EDITION_1_TEST_ONLY\"] = 1] = \"EDITION_1_TEST_ONLY\";\n /**\n * @generated from enum value: EDITION_2_TEST_ONLY = 2;\n */\n Edition[Edition[\"EDITION_2_TEST_ONLY\"] = 2] = \"EDITION_2_TEST_ONLY\";\n /**\n * @generated from enum value: EDITION_99997_TEST_ONLY = 99997;\n */\n Edition[Edition[\"EDITION_99997_TEST_ONLY\"] = 99997] = \"EDITION_99997_TEST_ONLY\";\n /**\n * @generated from enum value: EDITION_99998_TEST_ONLY = 99998;\n */\n Edition[Edition[\"EDITION_99998_TEST_ONLY\"] = 99998] = \"EDITION_99998_TEST_ONLY\";\n /**\n * @generated from enum value: EDITION_99999_TEST_ONLY = 99999;\n */\n Edition[Edition[\"EDITION_99999_TEST_ONLY\"] = 99999] = \"EDITION_99999_TEST_ONLY\";\n /**\n * Placeholder for specifying unbounded edition support. This should only\n * ever be used by plugins that can expect to never require any changes to\n * support a new edition.\n *\n * @generated from enum value: EDITION_MAX = 2147483647;\n */\n Edition[Edition[\"EDITION_MAX\"] = 2147483647] = \"EDITION_MAX\";\n})(Edition || (Edition = {}));\n/**\n * Describes the enum google.protobuf.Edition.\n */\nexport const EditionSchema = /*@__PURE__*/ enumDesc(file_google_protobuf_descriptor, 0);\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nimport { base64Decode } from \"../wire/base64-encoding.js\";\nimport { FileDescriptorProtoSchema } from \"../wkt/gen/google/protobuf/descriptor_pb.js\";\nimport { createFileRegistry } from \"../registry.js\";\nimport { restoreJsonNames } from \"./restore-json-names.js\";\nimport { fromBinary } from \"../from-binary.js\";\n/**\n * Hydrate a file descriptor.\n *\n * @private\n */\nexport function fileDesc(b64, imports) {\n var _a;\n const root = fromBinary(FileDescriptorProtoSchema, base64Decode(b64));\n root.messageType.forEach(restoreJsonNames);\n root.dependency = (_a = imports === null || imports === void 0 ? void 0 : imports.map((f) => f.proto.name)) !== null && _a !== void 0 ? _a : [];\n const reg = createFileRegistry(root, (protoFileName) => imports === null || imports === void 0 ? void 0 : imports.find((f) => f.proto.name === protoFileName));\n // non-null assertion because we just created the registry from the file we look up\n return reg.getFile(root.name);\n}\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nimport { fileDesc } from \"../../../../codegenv1/file.js\";\nimport { messageDesc } from \"../../../../codegenv1/message.js\";\n/**\n * Describes the file google/protobuf/timestamp.proto.\n */\nexport const file_google_protobuf_timestamp = /*@__PURE__*/ fileDesc(\"Ch9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvEg9nb29nbGUucHJvdG9idWYiKwoJVGltZXN0YW1wEg8KB3NlY29uZHMYASABKAMSDQoFbmFub3MYAiABKAVChQEKE2NvbS5nb29nbGUucHJvdG9idWZCDlRpbWVzdGFtcFByb3RvUAFaMmdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL3RpbWVzdGFtcHBi+AEBogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzYgZwcm90bzM\");\n/**\n * Describes the message google.protobuf.Timestamp.\n * Use `create(TimestampSchema)` to create a new message.\n */\nexport const TimestampSchema = /*@__PURE__*/ messageDesc(file_google_protobuf_timestamp, 0);\n","// Copyright 2021-2024 Buf Technologies, Inc.\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.\nimport { TimestampSchema } from \"./gen/google/protobuf/timestamp_pb.js\";\nimport { create } from \"../create.js\";\nimport { protoInt64 } from \"../proto-int64.js\";\n/**\n * Create a google.protobuf.Timestamp for the current time.\n */\nexport function timestampNow() {\n return timestampFromDate(new Date());\n}\n/**\n * Create a google.protobuf.Timestamp message from an ECMAScript Date.\n */\nexport function timestampFromDate(date) {\n return timestampFromMs(date.getTime());\n}\n/**\n * Convert a google.protobuf.Timestamp message to an ECMAScript Date.\n */\nexport function timestampDate(timestamp) {\n return new Date(timestampMs(timestamp));\n}\n/**\n * Create a google.protobuf.Timestamp message from a Unix timestamp in milliseconds.\n */\nexport function timestampFromMs(timestampMs) {\n return create(TimestampSchema, {\n seconds: protoInt64.parse(Math.floor(timestampMs / 1000)),\n nanos: (timestampMs % 1000) * 1000000,\n });\n}\n/**\n * Convert a google.protobuf.Timestamp to a Unix timestamp in milliseconds.\n */\nexport function timestampMs(timestamp) {\n return (Number(timestamp.seconds) * 1000 + Math.ceil(timestamp.nanos / 1000000));\n}\n","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nclass s extends Event{constructor(s,t,e){super(\"context-request\",{bubbles:!0,composed:!0}),this.context=s,this.callback=t,this.subscribe=e??!1}}export{s as ContextRequestEvent};\n//# sourceMappingURL=context-request-event.js.map\n","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nfunction n(n){return n}export{n as createContext};\n//# sourceMappingURL=create-context.js.map\n","import{ContextRequestEvent as t}from\"../context-request-event.js\";\n/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class s{constructor(t,s,i,h){if(this.subscribe=!1,this.provided=!1,this.value=void 0,this.t=(t,s)=>{this.unsubscribe&&(this.unsubscribe!==s&&(this.provided=!1,this.unsubscribe()),this.subscribe||this.unsubscribe()),this.value=t,this.host.requestUpdate(),this.provided&&!this.subscribe||(this.provided=!0,this.callback&&this.callback(t,s)),this.unsubscribe=s},this.host=t,void 0!==s.context){const t=s;this.context=t.context,this.callback=t.callback,this.subscribe=t.subscribe??!1}else this.context=s,this.callback=i,this.subscribe=h??!1;this.host.addController(this)}hostConnected(){this.dispatchRequest()}hostDisconnected(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=void 0)}dispatchRequest(){this.host.dispatchEvent(new t(this.context,this.t,this.subscribe))}}export{s as ContextConsumer};\n//# sourceMappingURL=context-consumer.js.map\n","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nclass s{get value(){return this.o}set value(s){this.setValue(s)}setValue(s,t=!1){const i=t||!Object.is(s,this.o);this.o=s,i&&this.updateObservers()}constructor(s){this.subscriptions=new Map,this.updateObservers=()=>{for(const[s,{disposer:t}]of this.subscriptions)s(this.o,t)},void 0!==s&&(this.value=s)}addCallback(s,t,i){if(!i)return void s(this.value);this.subscriptions.has(s)||this.subscriptions.set(s,{disposer:()=>{this.subscriptions.delete(s)},consumerHost:t});const{disposer:h}=this.subscriptions.get(s);s(this.value,h)}clearCallbacks(){this.subscriptions.clear()}}export{s as ValueNotifier};\n//# sourceMappingURL=value-notifier.js.map\n","import{ContextRequestEvent as t}from\"../context-request-event.js\";import{ValueNotifier as s}from\"../value-notifier.js\";\n/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class e extends Event{constructor(t){super(\"context-provider\",{bubbles:!0,composed:!0}),this.context=t}}class i extends s{constructor(s,e,i){super(void 0!==e.context?e.initialValue:i),this.onContextRequest=t=>{const s=t.composedPath()[0];t.context===this.context&&s!==this.host&&(t.stopPropagation(),this.addCallback(t.callback,s,t.subscribe))},this.onProviderRequest=s=>{const e=s.composedPath()[0];if(s.context!==this.context||e===this.host)return;const i=new Set;for(const[s,{consumerHost:e}]of this.subscriptions)i.has(s)||(i.add(s),e.dispatchEvent(new t(this.context,s,!0)));s.stopPropagation()},this.host=s,void 0!==e.context?this.context=e.context:this.context=e,this.attachListeners(),this.host.addController?.(this)}attachListeners(){this.host.addEventListener(\"context-request\",this.onContextRequest),this.host.addEventListener(\"context-provider\",this.onProviderRequest)}hostConnected(){this.host.dispatchEvent(new e(this.context))}}export{i as ContextProvider,e as ContextProviderEvent};\n//# sourceMappingURL=context-provider.js.map\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce(((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1]),t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet));else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,adoptStyles,css,getCompatibleStyle,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:r,getOwnPropertyNames:h,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),y={attribute:!0,type:String,converter:u,reflect:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class b extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=y){if(s.state&&(s.attribute=!1),this._$Ei(),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),r=this.getPropertyDescriptor(t,i,s);void 0!==r&&e(this.prototype,t,r)}}static getPropertyDescriptor(t,s,i){const{get:e,set:h}=r(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get(){return e?.call(this)},set(s){const r=e?.call(this);h.call(this,s),this.requestUpdate(t,r,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??y}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...h(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach((t=>t(this)))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach((t=>t.hostConnected?.()))}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach((t=>t.hostDisconnected?.()))}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$EC(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const r=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==r?this.removeAttribute(e):this.setAttribute(e,r),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),r=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e,this[e]=r.fromAttribute(s,t.type),this._$Em=null}}requestUpdate(t,s,i){if(void 0!==t){if(i??=this.constructor.getPropertyOptions(t),!(i.hasChanged??f)(this[t],s))return;this.P(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$ET())}P(t,s,i){this._$AL.has(t)||this._$AL.set(t,s),!0===i.reflect&&this._$Em!==t&&(this._$Ej??=new Set).add(t)}async _$ET(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t)!0!==i.wrapped||this._$AL.has(s)||void 0===this[s]||this.P(s,this[s],i)}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach((t=>t.hostUpdate?.())),this.update(s)):this._$EU()}catch(s){throw t=!1,this._$EU(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach((t=>t.hostUpdated?.())),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EU(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Ej&&=this._$Ej.forEach((t=>this._$EC(t,this[t]))),this._$EU()}updated(t){}firstUpdated(t){}}b.elementStyles=[],b.shadowRootOptions={mode:\"open\"},b[d(\"elementProperties\")]=new Map,b[d(\"finalized\")]=new Map,p?.({ReactiveElement:b}),(a.reactiveElementVersions??=[]).push(\"2.0.4\");export{b as ReactiveElement,u as defaultConverter,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst n=globalThis,c=n.trustedTypes,h=c?c.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,f=\"$lit$\",v=`lit$${Math.random().toFixed(9).slice(2)}$`,m=\"?\"+v,_=`<${m}>`,w=document,lt=()=>w.createComment(\"\"),st=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,g=Array.isArray,$=t=>g(t)||\"function\"==typeof t?.[Symbol.iterator],x=\"[ \\t\\n\\f\\r]\",T=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,E=/-->/g,k=/>/g,O=RegExp(`>|${x}(?:([^\\\\s\"'>=/]+)(${x}*=${x}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),S=/'/g,j=/\"/g,M=/^(?:script|style|textarea|title)$/i,P=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),ke=P(1),Oe=P(2),Se=P(3),R=Symbol.for(\"lit-noChange\"),D=Symbol.for(\"lit-nothing\"),V=new WeakMap,I=w.createTreeWalker(w,129);function N(t,i){if(!g(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==h?h.createHTML(i):i}const U=(t,i)=>{const s=t.length-1,e=[];let h,o=2===i?\"\":3===i?\"\":\"\",n=T;for(let i=0;i\"===l[0]?(n=h??T,c=-1):void 0===l[1]?c=-2:(c=n.lastIndex-l[2].length,r=l[1],n=void 0===l[3]?O:'\"'===l[3]?j:S):n===j||n===S?n=O:n===E||n===k?n=T:(n=O,h=void 0);const u=n===O&&t[i+1].startsWith(\"/>\")?\" \":\"\";o+=n===T?s+_:c>=0?(e.push(r),s.slice(0,c)+f+s.slice(c)+v+u):s+v+(-2===c?i:u)}return[N(t,o+(t[s]||\"\")+(2===i?\"\":3===i?\"\":\"\")),e]};class B{constructor({strings:t,_$litType$:i},s){let e;this.parts=[];let h=0,o=0;const n=t.length-1,r=this.parts,[l,a]=U(t,i);if(this.el=B.createElement(l,s),I.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(e=I.nextNode())&&r.length0){e.textContent=c?c.emptyScript:\"\";for(let s=0;s2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=D}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=z(this,t,i,0),o=!st(t)||t!==this._$AH&&t!==R,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new et(i.insertBefore(lt(),t),t,void 0,s??{})}return h._$AI(t),h};export{si as _$LH,ke as html,Se as mathml,R as noChange,D as nothing,Q as render,Oe as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as e}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as n,noChange as l}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class h extends e{constructor(){super(...arguments),this.renderOptions={host:this},this.o=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this.o=n(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this.o?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this.o?.setConnected(!1)}render(){return l}}h._$litElement$=!0,h[\"finalized\"]=!0,globalThis.litElementHydrateSupport?.({LitElement:h});const f=globalThis.litElementPolyfillSupport;f?.({LitElement:h});const x={_$AK:(t,e,s)=>{t._$AK(e,s)},_$AL:t=>t._$AL};(globalThis.litElementVersions??=[]).push(\"4.1.0\");export{h as LitElement,x as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer((()=>{customElements.define(t,e)})):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","import{defaultConverter as t,notEqual as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:t,reflect:!1,hasChanged:e},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t)},init(e){return void 0!==e&&this.P(o,void 0,t),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,r?{...t,wrapped:!0}:t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{_$LH as io}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{I:et}=io,st=o=>null===o||\"object\"!=typeof o&&\"function\"!=typeof o,no={HTML:1,SVG:2,MATHML:3},nt=(o,t)=>void 0===t?void 0!==o?._$litType$:o?._$litType$===t,ot=o=>null!=o?._$litType$?.h,eo=o=>void 0!==o?._$litDirective$,lo=o=>o?._$litDirective$,rt=o=>void 0===o.strings,lt=()=>document.createComment(\"\"),at=(o,t,i)=>{const n=o._$AA.parentNode,e=void 0===t?o._$AB:t._$AA;if(void 0===i){const t=n.insertBefore(lt(),e),l=n.insertBefore(lt(),e);i=new et(t,l,o,o.options)}else{const t=i._$AB.nextSibling,l=i._$AM,c=l!==o;if(c){let t;i._$AQ?.(o),i._$AM=o,void 0!==i._$AP&&(t=o._$AU)!==l._$AU&&i._$AP(t)}if(t!==e||c){let o=i._$AA;for(;o!==t;){const t=o.nextSibling;n.insertBefore(o,e),o=t}}}return i},ct=(o,t,i=o)=>(o._$AI(t,i),o),ht={},dt=(o,t=ht)=>o._$AH=t,ut=o=>o._$AH,pt=o=>{o._$AP?.(!1,!0);let t=o._$AA;const i=o._$AB.nextSibling;for(;t!==i;){const o=t.nextSibling;t.remove(),t=o}},ft=o=>{o._$AR()};export{no as TemplateResultType,ft as clearPart,ut as getCommittedValue,lo as getDirectiveClass,at as insertPart,ot as isCompiledTemplateResult,eo as isDirectiveResult,st as isPrimitive,rt as isSingleExpression,nt as isTemplateResult,pt as removePart,ct as setChildPartValue,dt as setCommittedValue};\n//# sourceMappingURL=directive-helpers.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this.t=t,this._$AM=e,this.i=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{isSingleExpression as rt}from\"./directive-helpers.js\";import{Directive as i,PartType as t}from\"./directive.js\";export{directive}from\"./directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const mt=(i,t)=>{const e=i._$AN;if(void 0===e)return!1;for(const i of e)i._$AO?.(t,!1),mt(i,t);return!0},_t=i=>{let t,e;do{if(void 0===(t=i._$AM))break;e=t._$AN,e.delete(i),i=t}while(0===e?.size)},wt=i=>{for(let t;t=i._$AM;i=t){let e=t._$AN;if(void 0===e)t._$AN=e=new Set;else if(e.has(i))break;e.add(i),gt(t)}};function bt(i){void 0!==this._$AN?(_t(this),this._$AM=i,wt(this)):this._$AM=i}function yt(i,t=!1,e=0){const s=this._$AH,o=this._$AN;if(void 0!==o&&0!==o.size)if(t)if(Array.isArray(s))for(let i=e;i{i.type==t.CHILD&&(i._$AP??=yt,i._$AQ??=bt)};class $t extends i{constructor(){super(...arguments),this._$AN=void 0}_$AT(i,t,e){super._$AT(i,t,e),wt(this),this.isConnected=i._$AU}_$AO(i,t=!0){i!==this.isConnected&&(this.isConnected=i,i?this.reconnected?.():this.disconnected?.()),t&&(mt(this,i),_t(this))}setValue(i){if(rt(this.t))this.t._$AI(i,this);else{const t=[...this.t._$AH];t[this.i]=i,this.t._$AI(t,this,0)}}disconnected(){}reconnected(){}}export{$t as AsyncDirective,i as Directive,t as PartType};\n//# sourceMappingURL=async-directive.js.map\n","import{nothing as D}from\"../lit-html.js\";import{AsyncDirective as $t}from\"../async-directive.js\";import{directive as e}from\"../directive.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const ii=()=>new Zt;class Zt{}const qt=new WeakMap,Kt=e(class extends $t{render(t){return D}update(t,[i]){const s=i!==this.Y;return s&&void 0!==this.Y&&this.rt(void 0),(s||this.lt!==this.ct)&&(this.Y=i,this.ht=t.options?.host,this.rt(this.ct=t.element)),D}rt(t){if(this.isConnected||(t=void 0),\"function\"==typeof this.Y){const i=this.ht??globalThis;let s=qt.get(i);void 0===s&&(s=new WeakMap,qt.set(i,s)),void 0!==s.get(this.Y)&&this.Y.call(this.ht,void 0),s.set(this.Y,t),void 0!==t&&this.Y.call(this.ht,t)}else this.Y.value=t}get lt(){return\"function\"==typeof this.Y?qt.get(this.ht??globalThis)?.get(this.Y):this.Y?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}});export{ii as createRef,Kt as ref};\n//# sourceMappingURL=ref.js.map\n","import {\n\tControls,\n\tMOUSE,\n\tQuaternion,\n\tSpherical,\n\tTOUCH,\n\tVector2,\n\tVector3,\n\tPlane,\n\tRay,\n\tMathUtils\n} from 'three';\n\n// OrbitControls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n// Orbit - left mouse / touch: one-finger move\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\n\nconst _changeEvent = { type: 'change' };\nconst _startEvent = { type: 'start' };\nconst _endEvent = { type: 'end' };\nconst _ray = new Ray();\nconst _plane = new Plane();\nconst _TILT_LIMIT = Math.cos( 70 * MathUtils.DEG2RAD );\n\nconst _v = new Vector3();\nconst _twoPI = 2 * Math.PI;\n\nconst _STATE = {\n\tNONE: - 1,\n\tROTATE: 0,\n\tDOLLY: 1,\n\tPAN: 2,\n\tTOUCH_ROTATE: 3,\n\tTOUCH_PAN: 4,\n\tTOUCH_DOLLY_PAN: 5,\n\tTOUCH_DOLLY_ROTATE: 6\n};\nconst _EPS = 0.000001;\n\nclass OrbitControls extends Controls {\n\n\tconstructor( object, domElement = null ) {\n\n\t\tsuper( object, domElement );\n\n\t\tthis.state = _STATE.NONE;\n\n\t\t// Set to false to disable this control\n\t\tthis.enabled = true;\n\n\t\t// \"target\" sets the location of focus, where the object orbits around\n\t\tthis.target = new Vector3();\n\n\t\t// Sets the 3D cursor (similar to Blender), from which the maxTargetRadius takes effect\n\t\tthis.cursor = new Vector3();\n\n\t\t// How far you can dolly in and out ( PerspectiveCamera only )\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\n\t\t// How far you can zoom in and out ( OrthographicCamera only )\n\t\tthis.minZoom = 0;\n\t\tthis.maxZoom = Infinity;\n\n\t\t// Limit camera target within a spherical area around the cursor\n\t\tthis.minTargetRadius = 0;\n\t\tthis.maxTargetRadius = Infinity;\n\n\t\t// How far you can orbit vertically, upper and lower limits.\n\t\t// Range is 0 to Math.PI radians.\n\t\tthis.minPolarAngle = 0; // radians\n\t\tthis.maxPolarAngle = Math.PI; // radians\n\n\t\t// How far you can orbit horizontally, upper and lower limits.\n\t\t// If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI )\n\t\tthis.minAzimuthAngle = - Infinity; // radians\n\t\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t\t// Set to true to enable damping (inertia)\n\t\t// If damping is enabled, you must call controls.update() in your animation loop\n\t\tthis.enableDamping = false;\n\t\tthis.dampingFactor = 0.05;\n\n\t\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t\t// Set to false to disable zooming\n\t\tthis.enableZoom = true;\n\t\tthis.zoomSpeed = 1.0;\n\n\t\t// Set to false to disable rotating\n\t\tthis.enableRotate = true;\n\t\tthis.rotateSpeed = 1.0;\n\n\t\t// Set to false to disable panning\n\t\tthis.enablePan = true;\n\t\tthis.panSpeed = 1.0;\n\t\tthis.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up\n\t\tthis.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\n\t\tthis.zoomToCursor = false;\n\n\t\t// Set to true to automatically rotate around the target\n\t\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\t\tthis.autoRotate = false;\n\t\tthis.autoRotateSpeed = 2.0; // 30 seconds per orbit when fps is 60\n\n\t\t// The four arrow keys\n\t\tthis.keys = { LEFT: 'ArrowLeft', UP: 'ArrowUp', RIGHT: 'ArrowRight', BOTTOM: 'ArrowDown' };\n\n\t\t// Mouse buttons\n\t\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n\t\t// Touch fingers\n\t\tthis.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };\n\n\t\t// for reset\n\t\tthis.target0 = this.target.clone();\n\t\tthis.position0 = this.object.position.clone();\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\t// the target DOM element for key events\n\t\tthis._domElementKeyEvents = null;\n\n\t\t// internals\n\n\t\tthis._lastPosition = new Vector3();\n\t\tthis._lastQuaternion = new Quaternion();\n\t\tthis._lastTargetPosition = new Vector3();\n\n\t\t// so camera.up is the orbit axis\n\t\tthis._quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );\n\t\tthis._quatInverse = this._quat.clone().invert();\n\n\t\t// current position in spherical coordinates\n\t\tthis._spherical = new Spherical();\n\t\tthis._sphericalDelta = new Spherical();\n\n\t\tthis._scale = 1;\n\t\tthis._panOffset = new Vector3();\n\n\t\tthis._rotateStart = new Vector2();\n\t\tthis._rotateEnd = new Vector2();\n\t\tthis._rotateDelta = new Vector2();\n\n\t\tthis._panStart = new Vector2();\n\t\tthis._panEnd = new Vector2();\n\t\tthis._panDelta = new Vector2();\n\n\t\tthis._dollyStart = new Vector2();\n\t\tthis._dollyEnd = new Vector2();\n\t\tthis._dollyDelta = new Vector2();\n\n\t\tthis._dollyDirection = new Vector3();\n\t\tthis._mouse = new Vector2();\n\t\tthis._performCursorZoom = false;\n\n\t\tthis._pointers = [];\n\t\tthis._pointerPositions = {};\n\n\t\tthis._controlActive = false;\n\n\t\t// event listeners\n\n\t\tthis._onPointerMove = onPointerMove.bind( this );\n\t\tthis._onPointerDown = onPointerDown.bind( this );\n\t\tthis._onPointerUp = onPointerUp.bind( this );\n\t\tthis._onContextMenu = onContextMenu.bind( this );\n\t\tthis._onMouseWheel = onMouseWheel.bind( this );\n\t\tthis._onKeyDown = onKeyDown.bind( this );\n\n\t\tthis._onTouchStart = onTouchStart.bind( this );\n\t\tthis._onTouchMove = onTouchMove.bind( this );\n\n\t\tthis._onMouseDown = onMouseDown.bind( this );\n\t\tthis._onMouseMove = onMouseMove.bind( this );\n\n\t\tthis._interceptControlDown = interceptControlDown.bind( this );\n\t\tthis._interceptControlUp = interceptControlUp.bind( this );\n\n\t\t//\n\n\t\tif ( this.domElement !== null ) {\n\n\t\t\tthis.connect();\n\n\t\t}\n\n\t\tthis.update();\n\n\t}\n\n\tconnect() {\n\n\t\tthis.domElement.addEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.addEventListener( 'pointercancel', this._onPointerUp );\n\n\t\tthis.domElement.addEventListener( 'contextmenu', this._onContextMenu );\n\t\tthis.domElement.addEventListener( 'wheel', this._onMouseWheel, { passive: false } );\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\t\tdocument.addEventListener( 'keydown', this._interceptControlDown, { passive: true, capture: true } );\n\n\t\tthis.domElement.style.touchAction = 'none'; // disable touch scroll\n\n\t}\n\n\tdisconnect() {\n\n\t\tthis.domElement.removeEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.removeEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.removeEventListener( 'pointerup', this._onPointerUp );\n\t\tthis.domElement.removeEventListener( 'pointercancel', this._onPointerUp );\n\n\t\tthis.domElement.removeEventListener( 'wheel', this._onMouseWheel );\n\t\tthis.domElement.removeEventListener( 'contextmenu', this._onContextMenu );\n\n\t\tthis.stopListenToKeyEvents();\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\t\tdocument.removeEventListener( 'keydown', this._interceptControlDown, { capture: true } );\n\n\t\tthis.domElement.style.touchAction = 'auto';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.disconnect();\n\n\t}\n\n\tgetPolarAngle() {\n\n\t\treturn this._spherical.phi;\n\n\t}\n\n\tgetAzimuthalAngle() {\n\n\t\treturn this._spherical.theta;\n\n\t}\n\n\tgetDistance() {\n\n\t\treturn this.object.position.distanceTo( this.target );\n\n\t}\n\n\tlistenToKeyEvents( domElement ) {\n\n\t\tdomElement.addEventListener( 'keydown', this._onKeyDown );\n\t\tthis._domElementKeyEvents = domElement;\n\n\t}\n\n\tstopListenToKeyEvents() {\n\n\t\tif ( this._domElementKeyEvents !== null ) {\n\n\t\t\tthis._domElementKeyEvents.removeEventListener( 'keydown', this._onKeyDown );\n\t\t\tthis._domElementKeyEvents = null;\n\n\t\t}\n\n\t}\n\n\tsaveState() {\n\n\t\tthis.target0.copy( this.target );\n\t\tthis.position0.copy( this.object.position );\n\t\tthis.zoom0 = this.object.zoom;\n\n\t}\n\n\treset() {\n\n\t\tthis.target.copy( this.target0 );\n\t\tthis.object.position.copy( this.position0 );\n\t\tthis.object.zoom = this.zoom0;\n\n\t\tthis.object.updateProjectionMatrix();\n\t\tthis.dispatchEvent( _changeEvent );\n\n\t\tthis.update();\n\n\t\tthis.state = _STATE.NONE;\n\n\t}\n\n\tupdate( deltaTime = null ) {\n\n\t\tconst position = this.object.position;\n\n\t\t_v.copy( position ).sub( this.target );\n\n\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t_v.applyQuaternion( this._quat );\n\n\t\t// angle from z-axis around y-axis\n\t\tthis._spherical.setFromVector3( _v );\n\n\t\tif ( this.autoRotate && this.state === _STATE.NONE ) {\n\n\t\t\tthis._rotateLeft( this._getAutoRotationAngle( deltaTime ) );\n\n\t\t}\n\n\t\tif ( this.enableDamping ) {\n\n\t\t\tthis._spherical.theta += this._sphericalDelta.theta * this.dampingFactor;\n\t\t\tthis._spherical.phi += this._sphericalDelta.phi * this.dampingFactor;\n\n\t\t} else {\n\n\t\t\tthis._spherical.theta += this._sphericalDelta.theta;\n\t\t\tthis._spherical.phi += this._sphericalDelta.phi;\n\n\t\t}\n\n\t\t// restrict theta to be between desired limits\n\n\t\tlet min = this.minAzimuthAngle;\n\t\tlet max = this.maxAzimuthAngle;\n\n\t\tif ( isFinite( min ) && isFinite( max ) ) {\n\n\t\t\tif ( min < - Math.PI ) min += _twoPI; else if ( min > Math.PI ) min -= _twoPI;\n\n\t\t\tif ( max < - Math.PI ) max += _twoPI; else if ( max > Math.PI ) max -= _twoPI;\n\n\t\t\tif ( min <= max ) {\n\n\t\t\t\tthis._spherical.theta = Math.max( min, Math.min( max, this._spherical.theta ) );\n\n\t\t\t} else {\n\n\t\t\t\tthis._spherical.theta = ( this._spherical.theta > ( min + max ) / 2 ) ?\n\t\t\t\t\tMath.max( min, this._spherical.theta ) :\n\t\t\t\t\tMath.min( max, this._spherical.theta );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// restrict phi to be between desired limits\n\t\tthis._spherical.phi = Math.max( this.minPolarAngle, Math.min( this.maxPolarAngle, this._spherical.phi ) );\n\n\t\tthis._spherical.makeSafe();\n\n\n\t\t// move target to panned location\n\n\t\tif ( this.enableDamping === true ) {\n\n\t\t\tthis.target.addScaledVector( this._panOffset, this.dampingFactor );\n\n\t\t} else {\n\n\t\t\tthis.target.add( this._panOffset );\n\n\t\t}\n\n\t\t// Limit the target distance from the cursor to create a sphere around the center of interest\n\t\tthis.target.sub( this.cursor );\n\t\tthis.target.clampLength( this.minTargetRadius, this.maxTargetRadius );\n\t\tthis.target.add( this.cursor );\n\n\t\tlet zoomChanged = false;\n\t\t// adjust the camera position based on zoom only if we're not zooming to the cursor or if it's an ortho camera\n\t\t// we adjust zoom later in these cases\n\t\tif ( this.zoomToCursor && this._performCursorZoom || this.object.isOrthographicCamera ) {\n\n\t\t\tthis._spherical.radius = this._clampDistance( this._spherical.radius );\n\n\t\t} else {\n\n\t\t\tconst prevRadius = this._spherical.radius;\n\t\t\tthis._spherical.radius = this._clampDistance( this._spherical.radius * this._scale );\n\t\t\tzoomChanged = prevRadius != this._spherical.radius;\n\n\t\t}\n\n\t\t_v.setFromSpherical( this._spherical );\n\n\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t_v.applyQuaternion( this._quatInverse );\n\n\t\tposition.copy( this.target ).add( _v );\n\n\t\tthis.object.lookAt( this.target );\n\n\t\tif ( this.enableDamping === true ) {\n\n\t\t\tthis._sphericalDelta.theta *= ( 1 - this.dampingFactor );\n\t\t\tthis._sphericalDelta.phi *= ( 1 - this.dampingFactor );\n\n\t\t\tthis._panOffset.multiplyScalar( 1 - this.dampingFactor );\n\n\t\t} else {\n\n\t\t\tthis._sphericalDelta.set( 0, 0, 0 );\n\n\t\t\tthis._panOffset.set( 0, 0, 0 );\n\n\t\t}\n\n\t\t// adjust camera position\n\t\tif ( this.zoomToCursor && this._performCursorZoom ) {\n\n\t\t\tlet newRadius = null;\n\t\t\tif ( this.object.isPerspectiveCamera ) {\n\n\t\t\t\t// move the camera down the pointer ray\n\t\t\t\t// this method avoids floating point error\n\t\t\t\tconst prevRadius = _v.length();\n\t\t\t\tnewRadius = this._clampDistance( prevRadius * this._scale );\n\n\t\t\t\tconst radiusDelta = prevRadius - newRadius;\n\t\t\t\tthis.object.position.addScaledVector( this._dollyDirection, radiusDelta );\n\t\t\t\tthis.object.updateMatrixWorld();\n\n\t\t\t\tzoomChanged = !! radiusDelta;\n\n\t\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\t\t// adjust the ortho camera position based on zoom changes\n\t\t\t\tconst mouseBefore = new Vector3( this._mouse.x, this._mouse.y, 0 );\n\t\t\t\tmouseBefore.unproject( this.object );\n\n\t\t\t\tconst prevZoom = this.object.zoom;\n\t\t\t\tthis.object.zoom = Math.max( this.minZoom, Math.min( this.maxZoom, this.object.zoom / this._scale ) );\n\t\t\t\tthis.object.updateProjectionMatrix();\n\n\t\t\t\tzoomChanged = prevZoom !== this.object.zoom;\n\n\t\t\t\tconst mouseAfter = new Vector3( this._mouse.x, this._mouse.y, 0 );\n\t\t\t\tmouseAfter.unproject( this.object );\n\n\t\t\t\tthis.object.position.sub( mouseAfter ).add( mouseBefore );\n\t\t\t\tthis.object.updateMatrixWorld();\n\n\t\t\t\tnewRadius = _v.length();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.' );\n\t\t\t\tthis.zoomToCursor = false;\n\n\t\t\t}\n\n\t\t\t// handle the placement of the target\n\t\t\tif ( newRadius !== null ) {\n\n\t\t\t\tif ( this.screenSpacePanning ) {\n\n\t\t\t\t\t// position the orbit target in front of the new camera position\n\t\t\t\t\tthis.target.set( 0, 0, - 1 )\n\t\t\t\t\t\t.transformDirection( this.object.matrix )\n\t\t\t\t\t\t.multiplyScalar( newRadius )\n\t\t\t\t\t\t.add( this.object.position );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// get the ray and translation plane to compute target\n\t\t\t\t\t_ray.origin.copy( this.object.position );\n\t\t\t\t\t_ray.direction.set( 0, 0, - 1 ).transformDirection( this.object.matrix );\n\n\t\t\t\t\t// if the camera is 20 degrees above the horizon then don't adjust the focus target to avoid\n\t\t\t\t\t// extremely large values\n\t\t\t\t\tif ( Math.abs( this.object.up.dot( _ray.direction ) ) < _TILT_LIMIT ) {\n\n\t\t\t\t\t\tthis.object.lookAt( this.target );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_plane.setFromNormalAndCoplanarPoint( this.object.up, this.target );\n\t\t\t\t\t\t_ray.intersectPlane( _plane, this.target );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\tconst prevZoom = this.object.zoom;\n\t\t\tthis.object.zoom = Math.max( this.minZoom, Math.min( this.maxZoom, this.object.zoom / this._scale ) );\n\n\t\t\tif ( prevZoom !== this.object.zoom ) {\n\n\t\t\t\tthis.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._scale = 1;\n\t\tthis._performCursorZoom = false;\n\n\t\t// update condition is:\n\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\tif ( zoomChanged ||\n\t\t\tthis._lastPosition.distanceToSquared( this.object.position ) > _EPS ||\n\t\t\t8 * ( 1 - this._lastQuaternion.dot( this.object.quaternion ) ) > _EPS ||\n\t\t\tthis._lastTargetPosition.distanceToSquared( this.target ) > _EPS ) {\n\n\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\tthis._lastPosition.copy( this.object.position );\n\t\t\tthis._lastQuaternion.copy( this.object.quaternion );\n\t\t\tthis._lastTargetPosition.copy( this.target );\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t_getAutoRotationAngle( deltaTime ) {\n\n\t\tif ( deltaTime !== null ) {\n\n\t\t\treturn ( _twoPI / 60 * this.autoRotateSpeed ) * deltaTime;\n\n\t\t} else {\n\n\t\t\treturn _twoPI / 60 / 60 * this.autoRotateSpeed;\n\n\t\t}\n\n\t}\n\n\t_getZoomScale( delta ) {\n\n\t\tconst normalizedDelta = Math.abs( delta * 0.01 );\n\t\treturn Math.pow( 0.95, this.zoomSpeed * normalizedDelta );\n\n\t}\n\n\t_rotateLeft( angle ) {\n\n\t\tthis._sphericalDelta.theta -= angle;\n\n\t}\n\n\t_rotateUp( angle ) {\n\n\t\tthis._sphericalDelta.phi -= angle;\n\n\t}\n\n\t_panLeft( distance, objectMatrix ) {\n\n\t\t_v.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n\t\t_v.multiplyScalar( - distance );\n\n\t\tthis._panOffset.add( _v );\n\n\t}\n\n\t_panUp( distance, objectMatrix ) {\n\n\t\tif ( this.screenSpacePanning === true ) {\n\n\t\t\t_v.setFromMatrixColumn( objectMatrix, 1 );\n\n\t\t} else {\n\n\t\t\t_v.setFromMatrixColumn( objectMatrix, 0 );\n\t\t\t_v.crossVectors( this.object.up, _v );\n\n\t\t}\n\n\t\t_v.multiplyScalar( distance );\n\n\t\tthis._panOffset.add( _v );\n\n\t}\n\n\t// deltaX and deltaY are in pixels; right and down are positive\n\t_pan( deltaX, deltaY ) {\n\n\t\tconst element = this.domElement;\n\n\t\tif ( this.object.isPerspectiveCamera ) {\n\n\t\t\t// perspective\n\t\t\tconst position = this.object.position;\n\t\t\t_v.copy( position ).sub( this.target );\n\t\t\tlet targetDistance = _v.length();\n\n\t\t\t// half of the fov is center to top of screen\n\t\t\ttargetDistance *= Math.tan( ( this.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\n\t\t\tthis._panLeft( 2 * deltaX * targetDistance / element.clientHeight, this.object.matrix );\n\t\t\tthis._panUp( 2 * deltaY * targetDistance / element.clientHeight, this.object.matrix );\n\n\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\t// orthographic\n\t\t\tthis._panLeft( deltaX * ( this.object.right - this.object.left ) / this.object.zoom / element.clientWidth, this.object.matrix );\n\t\t\tthis._panUp( deltaY * ( this.object.top - this.object.bottom ) / this.object.zoom / element.clientHeight, this.object.matrix );\n\n\t\t} else {\n\n\t\t\t// camera neither orthographic nor perspective\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\t\t\tthis.enablePan = false;\n\n\t\t}\n\n\t}\n\n\t_dollyOut( dollyScale ) {\n\n\t\tif ( this.object.isPerspectiveCamera || this.object.isOrthographicCamera ) {\n\n\t\t\tthis._scale /= dollyScale;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tthis.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\t_dollyIn( dollyScale ) {\n\n\t\tif ( this.object.isPerspectiveCamera || this.object.isOrthographicCamera ) {\n\n\t\t\tthis._scale *= dollyScale;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tthis.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\t_updateZoomParameters( x, y ) {\n\n\t\tif ( ! this.zoomToCursor ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._performCursorZoom = true;\n\n\t\tconst rect = this.domElement.getBoundingClientRect();\n\t\tconst dx = x - rect.left;\n\t\tconst dy = y - rect.top;\n\t\tconst w = rect.width;\n\t\tconst h = rect.height;\n\n\t\tthis._mouse.x = ( dx / w ) * 2 - 1;\n\t\tthis._mouse.y = - ( dy / h ) * 2 + 1;\n\n\t\tthis._dollyDirection.set( this._mouse.x, this._mouse.y, 1 ).unproject( this.object ).sub( this.object.position ).normalize();\n\n\t}\n\n\t_clampDistance( dist ) {\n\n\t\treturn Math.max( this.minDistance, Math.min( this.maxDistance, dist ) );\n\n\t}\n\n\t//\n\t// event callbacks - update the object state\n\t//\n\n\t_handleMouseDownRotate( event ) {\n\n\t\tthis._rotateStart.set( event.clientX, event.clientY );\n\n\t}\n\n\t_handleMouseDownDolly( event ) {\n\n\t\tthis._updateZoomParameters( event.clientX, event.clientX );\n\t\tthis._dollyStart.set( event.clientX, event.clientY );\n\n\t}\n\n\t_handleMouseDownPan( event ) {\n\n\t\tthis._panStart.set( event.clientX, event.clientY );\n\n\t}\n\n\t_handleMouseMoveRotate( event ) {\n\n\t\tthis._rotateEnd.set( event.clientX, event.clientY );\n\n\t\tthis._rotateDelta.subVectors( this._rotateEnd, this._rotateStart ).multiplyScalar( this.rotateSpeed );\n\n\t\tconst element = this.domElement;\n\n\t\tthis._rotateLeft( _twoPI * this._rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\tthis._rotateUp( _twoPI * this._rotateDelta.y / element.clientHeight );\n\n\t\tthis._rotateStart.copy( this._rotateEnd );\n\n\t\tthis.update();\n\n\t}\n\n\t_handleMouseMoveDolly( event ) {\n\n\t\tthis._dollyEnd.set( event.clientX, event.clientY );\n\n\t\tthis._dollyDelta.subVectors( this._dollyEnd, this._dollyStart );\n\n\t\tif ( this._dollyDelta.y > 0 ) {\n\n\t\t\tthis._dollyOut( this._getZoomScale( this._dollyDelta.y ) );\n\n\t\t} else if ( this._dollyDelta.y < 0 ) {\n\n\t\t\tthis._dollyIn( this._getZoomScale( this._dollyDelta.y ) );\n\n\t\t}\n\n\t\tthis._dollyStart.copy( this._dollyEnd );\n\n\t\tthis.update();\n\n\t}\n\n\t_handleMouseMovePan( event ) {\n\n\t\tthis._panEnd.set( event.clientX, event.clientY );\n\n\t\tthis._panDelta.subVectors( this._panEnd, this._panStart ).multiplyScalar( this.panSpeed );\n\n\t\tthis._pan( this._panDelta.x, this._panDelta.y );\n\n\t\tthis._panStart.copy( this._panEnd );\n\n\t\tthis.update();\n\n\t}\n\n\t_handleMouseWheel( event ) {\n\n\t\tthis._updateZoomParameters( event.clientX, event.clientY );\n\n\t\tif ( event.deltaY < 0 ) {\n\n\t\t\tthis._dollyIn( this._getZoomScale( event.deltaY ) );\n\n\t\t} else if ( event.deltaY > 0 ) {\n\n\t\t\tthis._dollyOut( this._getZoomScale( event.deltaY ) );\n\n\t\t}\n\n\t\tthis.update();\n\n\t}\n\n\t_handleKeyDown( event ) {\n\n\t\tlet needsUpdate = false;\n\n\t\tswitch ( event.code ) {\n\n\t\t\tcase this.keys.UP:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tthis._rotateUp( _twoPI * this.rotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._pan( 0, this.keyPanSpeed );\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase this.keys.BOTTOM:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tthis._rotateUp( - _twoPI * this.rotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._pan( 0, - this.keyPanSpeed );\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase this.keys.LEFT:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tthis._rotateLeft( _twoPI * this.rotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._pan( this.keyPanSpeed, 0 );\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase this.keys.RIGHT:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tthis._rotateLeft( - _twoPI * this.rotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._pan( - this.keyPanSpeed, 0 );\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( needsUpdate ) {\n\n\t\t\t// prevent the browser from scrolling on cursor keys\n\t\t\tevent.preventDefault();\n\n\t\t\tthis.update();\n\n\t\t}\n\n\n\t}\n\n\t_handleTouchStartRotate( event ) {\n\n\t\tif ( this._pointers.length === 1 ) {\n\n\t\t\tthis._rotateStart.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._rotateStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\t_handleTouchStartPan( event ) {\n\n\t\tif ( this._pointers.length === 1 ) {\n\n\t\t\tthis._panStart.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._panStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\t_handleTouchStartDolly( event ) {\n\n\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\tconst dx = event.pageX - position.x;\n\t\tconst dy = event.pageY - position.y;\n\n\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tthis._dollyStart.set( 0, distance );\n\n\t}\n\n\t_handleTouchStartDollyPan( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchStartDolly( event );\n\n\t\tif ( this.enablePan ) this._handleTouchStartPan( event );\n\n\t}\n\n\t_handleTouchStartDollyRotate( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchStartDolly( event );\n\n\t\tif ( this.enableRotate ) this._handleTouchStartRotate( event );\n\n\t}\n\n\t_handleTouchMoveRotate( event ) {\n\n\t\tif ( this._pointers.length == 1 ) {\n\n\t\t\tthis._rotateEnd.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._rotateEnd.set( x, y );\n\n\t\t}\n\n\t\tthis._rotateDelta.subVectors( this._rotateEnd, this._rotateStart ).multiplyScalar( this.rotateSpeed );\n\n\t\tconst element = this.domElement;\n\n\t\tthis._rotateLeft( _twoPI * this._rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\tthis._rotateUp( _twoPI * this._rotateDelta.y / element.clientHeight );\n\n\t\tthis._rotateStart.copy( this._rotateEnd );\n\n\t}\n\n\t_handleTouchMovePan( event ) {\n\n\t\tif ( this._pointers.length === 1 ) {\n\n\t\t\tthis._panEnd.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._panEnd.set( x, y );\n\n\t\t}\n\n\t\tthis._panDelta.subVectors( this._panEnd, this._panStart ).multiplyScalar( this.panSpeed );\n\n\t\tthis._pan( this._panDelta.x, this._panDelta.y );\n\n\t\tthis._panStart.copy( this._panEnd );\n\n\t}\n\n\t_handleTouchMoveDolly( event ) {\n\n\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\tconst dx = event.pageX - position.x;\n\t\tconst dy = event.pageY - position.y;\n\n\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tthis._dollyEnd.set( 0, distance );\n\n\t\tthis._dollyDelta.set( 0, Math.pow( this._dollyEnd.y / this._dollyStart.y, this.zoomSpeed ) );\n\n\t\tthis._dollyOut( this._dollyDelta.y );\n\n\t\tthis._dollyStart.copy( this._dollyEnd );\n\n\t\tconst centerX = ( event.pageX + position.x ) * 0.5;\n\t\tconst centerY = ( event.pageY + position.y ) * 0.5;\n\n\t\tthis._updateZoomParameters( centerX, centerY );\n\n\t}\n\n\t_handleTouchMoveDollyPan( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchMoveDolly( event );\n\n\t\tif ( this.enablePan ) this._handleTouchMovePan( event );\n\n\t}\n\n\t_handleTouchMoveDollyRotate( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchMoveDolly( event );\n\n\t\tif ( this.enableRotate ) this._handleTouchMoveRotate( event );\n\n\t}\n\n\t// pointers\n\n\t_addPointer( event ) {\n\n\t\tthis._pointers.push( event.pointerId );\n\n\t}\n\n\t_removePointer( event ) {\n\n\t\tdelete this._pointerPositions[ event.pointerId ];\n\n\t\tfor ( let i = 0; i < this._pointers.length; i ++ ) {\n\n\t\t\tif ( this._pointers[ i ] == event.pointerId ) {\n\n\t\t\t\tthis._pointers.splice( i, 1 );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_isTrackingPointer( event ) {\n\n\t\tfor ( let i = 0; i < this._pointers.length; i ++ ) {\n\n\t\t\tif ( this._pointers[ i ] == event.pointerId ) return true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t_trackPointer( event ) {\n\n\t\tlet position = this._pointerPositions[ event.pointerId ];\n\n\t\tif ( position === undefined ) {\n\n\t\t\tposition = new Vector2();\n\t\t\tthis._pointerPositions[ event.pointerId ] = position;\n\n\t\t}\n\n\t\tposition.set( event.pageX, event.pageY );\n\n\t}\n\n\t_getSecondPointerPosition( event ) {\n\n\t\tconst pointerId = ( event.pointerId === this._pointers[ 0 ] ) ? this._pointers[ 1 ] : this._pointers[ 0 ];\n\n\t\treturn this._pointerPositions[ pointerId ];\n\n\t}\n\n\t//\n\n\t_customWheelEvent( event ) {\n\n\t\tconst mode = event.deltaMode;\n\n\t\t// minimal wheel event altered to meet delta-zoom demand\n\t\tconst newEvent = {\n\t\t\tclientX: event.clientX,\n\t\t\tclientY: event.clientY,\n\t\t\tdeltaY: event.deltaY,\n\t\t};\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase 1: // LINE_MODE\n\t\t\t\tnewEvent.deltaY *= 16;\n\t\t\t\tbreak;\n\n\t\t\tcase 2: // PAGE_MODE\n\t\t\t\tnewEvent.deltaY *= 100;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\t// detect if event was triggered by pinching\n\t\tif ( event.ctrlKey && ! this._controlActive ) {\n\n\t\t\tnewEvent.deltaY *= 10;\n\n\t\t}\n\n\t\treturn newEvent;\n\n\t}\n\n}\n\nfunction onPointerDown( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( this._pointers.length === 0 ) {\n\n\t\tthis.domElement.setPointerCapture( event.pointerId );\n\n\t\tthis.domElement.addEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.addEventListener( 'pointerup', this._onPointerUp );\n\n\t}\n\n\t//\n\n\tif ( this._isTrackingPointer( event ) ) return;\n\n\t//\n\n\tthis._addPointer( event );\n\n\tif ( event.pointerType === 'touch' ) {\n\n\t\tthis._onTouchStart( event );\n\n\t} else {\n\n\t\tthis._onMouseDown( event );\n\n\t}\n\n}\n\nfunction onPointerMove( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( event.pointerType === 'touch' ) {\n\n\t\tthis._onTouchMove( event );\n\n\t} else {\n\n\t\tthis._onMouseMove( event );\n\n\t}\n\n}\n\nfunction onPointerUp( event ) {\n\n\tthis._removePointer( event );\n\n\tswitch ( this._pointers.length ) {\n\n\t\tcase 0:\n\n\t\t\tthis.domElement.releasePointerCapture( event.pointerId );\n\n\t\t\tthis.domElement.removeEventListener( 'pointermove', this._onPointerMove );\n\t\t\tthis.domElement.removeEventListener( 'pointerup', this._onPointerUp );\n\n\t\t\tthis.dispatchEvent( _endEvent );\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t\t\tbreak;\n\n\t\tcase 1:\n\n\t\t\tconst pointerId = this._pointers[ 0 ];\n\t\t\tconst position = this._pointerPositions[ pointerId ];\n\n\t\t\t// minimal placeholder event - allows state correction on pointer-up\n\t\t\tthis._onTouchStart( { pointerId: pointerId, pageX: position.x, pageY: position.y } );\n\n\t\t\tbreak;\n\n\t}\n\n}\n\nfunction onMouseDown( event ) {\n\n\tlet mouseAction;\n\n\tswitch ( event.button ) {\n\n\t\tcase 0:\n\n\t\t\tmouseAction = this.mouseButtons.LEFT;\n\t\t\tbreak;\n\n\t\tcase 1:\n\n\t\t\tmouseAction = this.mouseButtons.MIDDLE;\n\t\t\tbreak;\n\n\t\tcase 2:\n\n\t\t\tmouseAction = this.mouseButtons.RIGHT;\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tmouseAction = - 1;\n\n\t}\n\n\tswitch ( mouseAction ) {\n\n\t\tcase MOUSE.DOLLY:\n\n\t\t\tif ( this.enableZoom === false ) return;\n\n\t\t\tthis._handleMouseDownDolly( event );\n\n\t\t\tthis.state = _STATE.DOLLY;\n\n\t\t\tbreak;\n\n\t\tcase MOUSE.ROTATE:\n\n\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\t\tthis._handleMouseDownPan( event );\n\n\t\t\t\tthis.state = _STATE.PAN;\n\n\t\t\t} else {\n\n\t\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\t\tthis._handleMouseDownRotate( event );\n\n\t\t\t\tthis.state = _STATE.ROTATE;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase MOUSE.PAN:\n\n\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\t\tthis._handleMouseDownRotate( event );\n\n\t\t\t\tthis.state = _STATE.ROTATE;\n\n\t\t\t} else {\n\n\t\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\t\tthis._handleMouseDownPan( event );\n\n\t\t\t\tthis.state = _STATE.PAN;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t}\n\n\tif ( this.state !== _STATE.NONE ) {\n\n\t\tthis.dispatchEvent( _startEvent );\n\n\t}\n\n}\n\nfunction onMouseMove( event ) {\n\n\tswitch ( this.state ) {\n\n\t\tcase _STATE.ROTATE:\n\n\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\tthis._handleMouseMoveRotate( event );\n\n\t\t\tbreak;\n\n\t\tcase _STATE.DOLLY:\n\n\t\t\tif ( this.enableZoom === false ) return;\n\n\t\t\tthis._handleMouseMoveDolly( event );\n\n\t\t\tbreak;\n\n\t\tcase _STATE.PAN:\n\n\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\tthis._handleMouseMovePan( event );\n\n\t\t\tbreak;\n\n\t}\n\n}\n\nfunction onMouseWheel( event ) {\n\n\tif ( this.enabled === false || this.enableZoom === false || this.state !== _STATE.NONE ) return;\n\n\tevent.preventDefault();\n\n\tthis.dispatchEvent( _startEvent );\n\n\tthis._handleMouseWheel( this._customWheelEvent( event ) );\n\n\tthis.dispatchEvent( _endEvent );\n\n}\n\nfunction onKeyDown( event ) {\n\n\tif ( this.enabled === false || this.enablePan === false ) return;\n\n\tthis._handleKeyDown( event );\n\n}\n\nfunction onTouchStart( event ) {\n\n\tthis._trackPointer( event );\n\n\tswitch ( this._pointers.length ) {\n\n\t\tcase 1:\n\n\t\t\tswitch ( this.touches.ONE ) {\n\n\t\t\t\tcase TOUCH.ROTATE:\n\n\t\t\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartRotate( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_ROTATE;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TOUCH.PAN:\n\n\t\t\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartPan( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_PAN;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tthis.state = _STATE.NONE;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase 2:\n\n\t\t\tswitch ( this.touches.TWO ) {\n\n\t\t\t\tcase TOUCH.DOLLY_PAN:\n\n\t\t\t\t\tif ( this.enableZoom === false && this.enablePan === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartDollyPan( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_DOLLY_PAN;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TOUCH.DOLLY_ROTATE:\n\n\t\t\t\t\tif ( this.enableZoom === false && this.enableRotate === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartDollyRotate( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_DOLLY_ROTATE;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tthis.state = _STATE.NONE;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t}\n\n\tif ( this.state !== _STATE.NONE ) {\n\n\t\tthis.dispatchEvent( _startEvent );\n\n\t}\n\n}\n\nfunction onTouchMove( event ) {\n\n\tthis._trackPointer( event );\n\n\tswitch ( this.state ) {\n\n\t\tcase _STATE.TOUCH_ROTATE:\n\n\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\tthis._handleTouchMoveRotate( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tcase _STATE.TOUCH_PAN:\n\n\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\tthis._handleTouchMovePan( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tcase _STATE.TOUCH_DOLLY_PAN:\n\n\t\t\tif ( this.enableZoom === false && this.enablePan === false ) return;\n\n\t\t\tthis._handleTouchMoveDollyPan( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tcase _STATE.TOUCH_DOLLY_ROTATE:\n\n\t\t\tif ( this.enableZoom === false && this.enableRotate === false ) return;\n\n\t\t\tthis._handleTouchMoveDollyRotate( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t}\n\n}\n\nfunction onContextMenu( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tevent.preventDefault();\n\n}\n\nfunction interceptControlDown( event ) {\n\n\tif ( event.key === 'Control' ) {\n\n\t\tthis._controlActive = true;\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\n\t\tdocument.addEventListener( 'keyup', this._interceptControlUp, { passive: true, capture: true } );\n\n\t}\n\n}\n\nfunction interceptControlUp( event ) {\n\n\tif ( event.key === 'Control' ) {\n\n\t\tthis._controlActive = false;\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\n\t\tdocument.removeEventListener( 'keyup', this._interceptControlUp, { passive: true, capture: true } );\n\n\t}\n\n}\n\nexport { OrbitControls };\n","import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tInstancedBufferAttribute,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tTrianglesDrawMode,\n\tVector3,\n} from 'three';\n\nfunction computeMikkTSpaceTangents( geometry, MikkTSpace, negateSign = true ) {\n\n\tif ( ! MikkTSpace || ! MikkTSpace.isReady ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Initialized MikkTSpace library required.' );\n\n\t}\n\n\tif ( ! geometry.hasAttribute( 'position' ) || ! geometry.hasAttribute( 'normal' ) || ! geometry.hasAttribute( 'uv' ) ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Tangents require \"position\", \"normal\", and \"uv\" attributes.' );\n\n\t}\n\n\tfunction getAttributeArray( attribute ) {\n\n\t\tif ( attribute.normalized || attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst dstArray = new Float32Array( attribute.count * attribute.itemSize );\n\n\t\t\tfor ( let i = 0, j = 0; i < attribute.count; i ++ ) {\n\n\t\t\t\tdstArray[ j ++ ] = attribute.getX( i );\n\t\t\t\tdstArray[ j ++ ] = attribute.getY( i );\n\n\t\t\t\tif ( attribute.itemSize > 2 ) {\n\n\t\t\t\t\tdstArray[ j ++ ] = attribute.getZ( i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn dstArray;\n\n\t\t}\n\n\t\tif ( attribute.array instanceof Float32Array ) {\n\n\t\t\treturn attribute.array;\n\n\t\t}\n\n\t\treturn new Float32Array( attribute.array );\n\n\t}\n\n\t// MikkTSpace algorithm requires non-indexed input.\n\n\tconst _geometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\n\t// Compute vertex tangents.\n\n\tconst tangents = MikkTSpace.generateTangents(\n\n\t\tgetAttributeArray( _geometry.attributes.position ),\n\t\tgetAttributeArray( _geometry.attributes.normal ),\n\t\tgetAttributeArray( _geometry.attributes.uv )\n\n\t);\n\n\t// Texture coordinate convention of glTF differs from the apparent\n\t// default of the MikkTSpace library; .w component must be flipped.\n\n\tif ( negateSign ) {\n\n\t\tfor ( let i = 3; i < tangents.length; i += 4 ) {\n\n\t\t\ttangents[ i ] *= - 1;\n\n\t\t}\n\n\t}\n\n\t//\n\n\t_geometry.setAttribute( 'tangent', new BufferAttribute( tangents, 4 ) );\n\n\tif ( geometry !== _geometry ) {\n\n\t\tgeometry.copy( _geometry );\n\n\t}\n\n\treturn geometry;\n\n}\n\n/**\n * @param {Array} geometries\n * @param {Boolean} useGroups\n * @return {BufferGeometry}\n */\nfunction mergeGeometries( geometries, useGroups = false ) {\n\n\tconst isIndexed = geometries[ 0 ].index !== null;\n\n\tconst attributesUsed = new Set( Object.keys( geometries[ 0 ].attributes ) );\n\tconst morphAttributesUsed = new Set( Object.keys( geometries[ 0 ].morphAttributes ) );\n\n\tconst attributes = {};\n\tconst morphAttributes = {};\n\n\tconst morphTargetsRelative = geometries[ 0 ].morphTargetsRelative;\n\n\tconst mergedGeometry = new BufferGeometry();\n\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\tconst geometry = geometries[ i ];\n\t\tlet attributesCount = 0;\n\n\t\t// ensure that all geometries are indexed, or none\n\n\t\tif ( isIndexed !== ( geometry.index !== null ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather attributes, exit early if they're different\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tif ( ! attributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure \"' + name + '\" attribute exists among all geometries, or in none of them.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( attributes[ name ] === undefined ) attributes[ name ] = [];\n\n\t\t\tattributes[ name ].push( geometry.attributes[ name ] );\n\n\t\t\tattributesCount ++;\n\n\t\t}\n\n\t\t// ensure geometries have the same number of attributes\n\n\t\tif ( attributesCount !== attributesUsed.size ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. Make sure all geometries have the same number of attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather morph attributes, exit early if they're different\n\n\t\tif ( morphTargetsRelative !== geometry.morphTargetsRelative ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphTargetsRelative must be consistent throughout all geometries.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfor ( const name in geometry.morphAttributes ) {\n\n\t\t\tif ( ! morphAttributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphAttributes must be consistent throughout all geometries.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( morphAttributes[ name ] === undefined ) morphAttributes[ name ] = [];\n\n\t\t\tmorphAttributes[ name ].push( geometry.morphAttributes[ name ] );\n\n\t\t}\n\n\t\tif ( useGroups ) {\n\n\t\t\tlet count;\n\n\t\t\tif ( isIndexed ) {\n\n\t\t\t\tcount = geometry.index.count;\n\n\t\t\t} else if ( geometry.attributes.position !== undefined ) {\n\n\t\t\t\tcount = geometry.attributes.position.count;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. The geometry must have either an index or a position attribute' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.addGroup( offset, count, i );\n\n\t\t\toffset += count;\n\n\t\t}\n\n\t}\n\n\t// merge indices\n\n\tif ( isIndexed ) {\n\n\t\tlet indexOffset = 0;\n\t\tconst mergedIndex = [];\n\n\t\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\t\tconst index = geometries[ i ].index;\n\n\t\t\tfor ( let j = 0; j < index.count; ++ j ) {\n\n\t\t\t\tmergedIndex.push( index.getX( j ) + indexOffset );\n\n\t\t\t}\n\n\t\t\tindexOffset += geometries[ i ].attributes.position.count;\n\n\t\t}\n\n\t\tmergedGeometry.setIndex( mergedIndex );\n\n\t}\n\n\t// merge attributes\n\n\tfor ( const name in attributes ) {\n\n\t\tconst mergedAttribute = mergeAttributes( attributes[ name ] );\n\n\t\tif ( ! mergedAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' attribute.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tmergedGeometry.setAttribute( name, mergedAttribute );\n\n\t}\n\n\t// merge morph attributes\n\n\tfor ( const name in morphAttributes ) {\n\n\t\tconst numMorphTargets = morphAttributes[ name ][ 0 ].length;\n\n\t\tif ( numMorphTargets === 0 ) break;\n\n\t\tmergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\n\t\tmergedGeometry.morphAttributes[ name ] = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; ++ i ) {\n\n\t\t\tconst morphAttributesToMerge = [];\n\n\t\t\tfor ( let j = 0; j < morphAttributes[ name ].length; ++ j ) {\n\n\t\t\t\tmorphAttributesToMerge.push( morphAttributes[ name ][ j ][ i ] );\n\n\t\t\t}\n\n\t\t\tconst mergedMorphAttribute = mergeAttributes( morphAttributesToMerge );\n\n\t\t\tif ( ! mergedMorphAttribute ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' morphAttribute.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.morphAttributes[ name ].push( mergedMorphAttribute );\n\n\t\t}\n\n\t}\n\n\treturn mergedGeometry;\n\n}\n\n/**\n * @param {Array} attributes\n * @return {BufferAttribute}\n */\nfunction mergeAttributes( attributes ) {\n\n\tlet TypedArray;\n\tlet itemSize;\n\tlet normalized;\n\tlet gpuType = - 1;\n\tlet arrayLength = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( itemSize === undefined ) itemSize = attribute.itemSize;\n\t\tif ( itemSize !== attribute.itemSize ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( normalized === undefined ) normalized = attribute.normalized;\n\t\tif ( normalized !== attribute.normalized ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( gpuType === - 1 ) gpuType = attribute.gpuType;\n\t\tif ( gpuType !== attribute.gpuType ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.count * itemSize;\n\n\t}\n\n\tconst array = new TypedArray( arrayLength );\n\tconst result = new BufferAttribute( array, itemSize, normalized );\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst tupleOffset = offset / itemSize;\n\t\t\tfor ( let j = 0, l = attribute.count; j < l; j ++ ) {\n\n\t\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\t\tconst value = attribute.getComponent( j, c );\n\t\t\t\t\tresult.setComponent( j + tupleOffset, c, value );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tarray.set( attribute.array, offset );\n\n\t\t}\n\n\t\toffset += attribute.count * itemSize;\n\n\t}\n\n\tif ( gpuType !== undefined ) {\n\n\t\tresult.gpuType = gpuType;\n\n\t}\n\n\treturn result;\n\n}\n\n/**\n * @param {BufferAttribute}\n * @return {BufferAttribute}\n */\nexport function deepCloneAttribute( attribute ) {\n\n\tif ( attribute.isInstancedInterleavedBufferAttribute || attribute.isInterleavedBufferAttribute ) {\n\n\t\treturn deinterleaveAttribute( attribute );\n\n\t}\n\n\tif ( attribute.isInstancedBufferAttribute ) {\n\n\t\treturn new InstancedBufferAttribute().copy( attribute );\n\n\t}\n\n\treturn new BufferAttribute().copy( attribute );\n\n}\n\n/**\n * @param {Array} attributes\n * @return {Array}\n */\nfunction interleaveAttributes( attributes ) {\n\n\t// Interleaves the provided attributes into an InterleavedBuffer and returns\n\t// a set of InterleavedBufferAttributes for each attribute\n\tlet TypedArray;\n\tlet arrayLength = 0;\n\tlet stride = 0;\n\n\t// calculate the length and type of the interleavedBuffer\n\tfor ( let i = 0, l = attributes.length; i < l; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'AttributeBuffers of different types cannot be interleaved' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.array.length;\n\t\tstride += attribute.itemSize;\n\n\t}\n\n\t// Create the set of buffer attributes\n\tconst interleavedBuffer = new InterleavedBuffer( new TypedArray( arrayLength ), stride );\n\tlet offset = 0;\n\tconst res = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\tfor ( let j = 0, l = attributes.length; j < l; j ++ ) {\n\n\t\tconst attribute = attributes[ j ];\n\t\tconst itemSize = attribute.itemSize;\n\t\tconst count = attribute.count;\n\t\tconst iba = new InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, attribute.normalized );\n\t\tres.push( iba );\n\n\t\toffset += itemSize;\n\n\t\t// Move the data for each attribute into the new interleavedBuffer\n\t\t// at the appropriate offset\n\t\tfor ( let c = 0; c < count; c ++ ) {\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\tiba[ setters[ k ] ]( c, attribute[ getters[ k ] ]( c ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn res;\n\n}\n\n// returns a new, non-interleaved version of the provided attribute\nexport function deinterleaveAttribute( attribute ) {\n\n\tconst cons = attribute.data.array.constructor;\n\tconst count = attribute.count;\n\tconst itemSize = attribute.itemSize;\n\tconst normalized = attribute.normalized;\n\n\tconst array = new cons( count * itemSize );\n\tlet newAttribute;\n\tif ( attribute.isInstancedInterleavedBufferAttribute ) {\n\n\t\tnewAttribute = new InstancedBufferAttribute( array, itemSize, normalized, attribute.meshPerAttribute );\n\n\t} else {\n\n\t\tnewAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t}\n\n\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\tnewAttribute.setX( i, attribute.getX( i ) );\n\n\t\tif ( itemSize >= 2 ) {\n\n\t\t\tnewAttribute.setY( i, attribute.getY( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 3 ) {\n\n\t\t\tnewAttribute.setZ( i, attribute.getZ( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 4 ) {\n\n\t\t\tnewAttribute.setW( i, attribute.getW( i ) );\n\n\t\t}\n\n\t}\n\n\treturn newAttribute;\n\n}\n\n// deinterleaves all attributes on the geometry\nexport function deinterleaveGeometry( geometry ) {\n\n\tconst attributes = geometry.attributes;\n\tconst morphTargets = geometry.morphTargets;\n\tconst attrMap = new Map();\n\n\tfor ( const key in attributes ) {\n\n\t\tconst attr = attributes[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tattributes[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n\tfor ( const key in morphTargets ) {\n\n\t\tconst attr = morphTargets[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tmorphTargets[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @return {number}\n */\nfunction estimateBytesUsed( geometry ) {\n\n\t// Return the estimated memory used by this geometry in bytes\n\t// Calculate using itemSize, count, and BYTES_PER_ELEMENT to account\n\t// for InterleavedBufferAttributes.\n\tlet mem = 0;\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst attr = geometry.getAttribute( name );\n\t\tmem += attr.count * attr.itemSize * attr.array.BYTES_PER_ELEMENT;\n\n\t}\n\n\tconst indices = geometry.getIndex();\n\tmem += indices ? indices.count * indices.itemSize * indices.array.BYTES_PER_ELEMENT : 0;\n\treturn mem;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {number} tolerance\n * @return {BufferGeometry}\n */\nfunction mergeVertices( geometry, tolerance = 1e-4 ) {\n\n\ttolerance = Math.max( tolerance, Number.EPSILON );\n\n\t// Generate an index buffer if the geometry doesn't have one, or optimize it\n\t// if it's already available.\n\tconst hashToIndex = {};\n\tconst indices = geometry.getIndex();\n\tconst positions = geometry.getAttribute( 'position' );\n\tconst vertexCount = indices ? indices.count : positions.count;\n\n\t// next value for triangle indices\n\tlet nextIndex = 0;\n\n\t// attributes and new attribute arrays\n\tconst attributeNames = Object.keys( geometry.attributes );\n\tconst tmpAttributes = {};\n\tconst tmpMorphAttributes = {};\n\tconst newIndices = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\t// Initialize the arrays, allocating space conservatively. Extra\n\t// space will be trimmed in the last step.\n\tfor ( let i = 0, l = attributeNames.length; i < l; i ++ ) {\n\n\t\tconst name = attributeNames[ i ];\n\t\tconst attr = geometry.attributes[ name ];\n\n\t\ttmpAttributes[ name ] = new attr.constructor(\n\t\t\tnew attr.array.constructor( attr.count * attr.itemSize ),\n\t\t\tattr.itemSize,\n\t\t\tattr.normalized\n\t\t);\n\n\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\tif ( morphAttributes ) {\n\n\t\t\tif ( ! tmpMorphAttributes[ name ] ) tmpMorphAttributes[ name ] = [];\n\t\t\tmorphAttributes.forEach( ( morphAttr, i ) => {\n\n\t\t\t\tconst array = new morphAttr.array.constructor( morphAttr.count * morphAttr.itemSize );\n\t\t\t\ttmpMorphAttributes[ name ][ i ] = new morphAttr.constructor( array, morphAttr.itemSize, morphAttr.normalized );\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t// convert the error tolerance to an amount of decimal places to truncate to\n\tconst halfTolerance = tolerance * 0.5;\n\tconst exponent = Math.log10( 1 / tolerance );\n\tconst hashMultiplier = Math.pow( 10, exponent );\n\tconst hashAdditive = halfTolerance * hashMultiplier;\n\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\tconst index = indices ? indices.getX( i ) : i;\n\n\t\t// Generate a hash for the vertex attributes at the current index 'i'\n\t\tlet hash = '';\n\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\tconst name = attributeNames[ j ];\n\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\tconst itemSize = attribute.itemSize;\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t// double tilde truncates the decimal value\n\t\t\t\thash += `${ ~ ~ ( attribute[ getters[ k ] ]( index ) * hashMultiplier + hashAdditive ) },`;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Add another reference to the vertex if it's already\n\t\t// used by another index\n\t\tif ( hash in hashToIndex ) {\n\n\t\t\tnewIndices.push( hashToIndex[ hash ] );\n\n\t\t} else {\n\n\t\t\t// copy data to the new index in the temporary attributes\n\t\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\t\tconst name = attributeNames[ j ];\n\t\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\t\t\tconst itemSize = attribute.itemSize;\n\t\t\t\tconst newArray = tmpAttributes[ name ];\n\t\t\t\tconst newMorphArrays = tmpMorphAttributes[ name ];\n\n\t\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t\tconst getterFunc = getters[ k ];\n\t\t\t\t\tconst setterFunc = setters[ k ];\n\t\t\t\t\tnewArray[ setterFunc ]( nextIndex, attribute[ getterFunc ]( index ) );\n\n\t\t\t\t\tif ( morphAttributes ) {\n\n\t\t\t\t\t\tfor ( let m = 0, ml = morphAttributes.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\t\tnewMorphArrays[ m ][ setterFunc ]( nextIndex, morphAttributes[ m ][ getterFunc ]( index ) );\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}\n\n\t\t\thashToIndex[ hash ] = nextIndex;\n\t\t\tnewIndices.push( nextIndex );\n\t\t\tnextIndex ++;\n\n\t\t}\n\n\t}\n\n\t// generate result BufferGeometry\n\tconst result = geometry.clone();\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst tmpAttribute = tmpAttributes[ name ];\n\n\t\tresult.setAttribute( name, new tmpAttribute.constructor(\n\t\t\ttmpAttribute.array.slice( 0, nextIndex * tmpAttribute.itemSize ),\n\t\t\ttmpAttribute.itemSize,\n\t\t\ttmpAttribute.normalized,\n\t\t) );\n\n\t\tif ( ! ( name in tmpMorphAttributes ) ) continue;\n\n\t\tfor ( let j = 0; j < tmpMorphAttributes[ name ].length; j ++ ) {\n\n\t\t\tconst tmpMorphAttribute = tmpMorphAttributes[ name ][ j ];\n\n\t\t\tresult.morphAttributes[ name ][ j ] = new tmpMorphAttribute.constructor(\n\t\t\t\ttmpMorphAttribute.array.slice( 0, nextIndex * tmpMorphAttribute.itemSize ),\n\t\t\t\ttmpMorphAttribute.itemSize,\n\t\t\t\ttmpMorphAttribute.normalized,\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tresult.setIndex( newIndices );\n\n\treturn result;\n\n}\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\n/**\n * Calculates the morphed attributes of a morphed/skinned BufferGeometry.\n * Helpful for Raytracing or Decals.\n * @param {Mesh | Line | Points} object An instance of Mesh, Line or Points.\n * @return {Object} An Object with original position/normal attributes and morphed ones.\n */\nfunction computeMorphedAttributes( object ) {\n\n\tconst _vA = new Vector3();\n\tconst _vB = new Vector3();\n\tconst _vC = new Vector3();\n\n\tconst _tempA = new Vector3();\n\tconst _tempB = new Vector3();\n\tconst _tempC = new Vector3();\n\n\tconst _morphA = new Vector3();\n\tconst _morphB = new Vector3();\n\tconst _morphC = new Vector3();\n\n\tfunction _calculateMorphedAttributeData(\n\t\tobject,\n\t\tattribute,\n\t\tmorphAttribute,\n\t\tmorphTargetsRelative,\n\t\ta,\n\t\tb,\n\t\tc,\n\t\tmodifiedAttributeArray\n\t) {\n\n\t\t_vA.fromBufferAttribute( attribute, a );\n\t\t_vB.fromBufferAttribute( attribute, b );\n\t\t_vC.fromBufferAttribute( attribute, c );\n\n\t\tconst morphInfluences = object.morphTargetInfluences;\n\n\t\tif ( morphAttribute && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\t\t\t_morphB.set( 0, 0, 0 );\n\t\t\t_morphC.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morph = morphAttribute[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morph, a );\n\t\t\t\t_tempB.fromBufferAttribute( morph, b );\n\t\t\t\t_tempC.fromBufferAttribute( morph, c );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA ), influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB ), influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_vA.add( _morphA );\n\t\t\t_vB.add( _morphB );\n\t\t\t_vC.add( _morphC );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tobject.applyBoneTransform( a, _vA );\n\t\t\tobject.applyBoneTransform( b, _vB );\n\t\t\tobject.applyBoneTransform( c, _vC );\n\n\t\t}\n\n\t\tmodifiedAttributeArray[ a * 3 + 0 ] = _vA.x;\n\t\tmodifiedAttributeArray[ a * 3 + 1 ] = _vA.y;\n\t\tmodifiedAttributeArray[ a * 3 + 2 ] = _vA.z;\n\t\tmodifiedAttributeArray[ b * 3 + 0 ] = _vB.x;\n\t\tmodifiedAttributeArray[ b * 3 + 1 ] = _vB.y;\n\t\tmodifiedAttributeArray[ b * 3 + 2 ] = _vB.z;\n\t\tmodifiedAttributeArray[ c * 3 + 0 ] = _vC.x;\n\t\tmodifiedAttributeArray[ c * 3 + 1 ] = _vC.y;\n\t\tmodifiedAttributeArray[ c * 3 + 2 ] = _vC.z;\n\n\t}\n\n\tconst geometry = object.geometry;\n\tconst material = object.material;\n\n\tlet a, b, c;\n\tconst index = geometry.index;\n\tconst positionAttribute = geometry.attributes.position;\n\tconst morphPosition = geometry.morphAttributes.position;\n\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\tconst normalAttribute = geometry.attributes.normal;\n\tconst morphNormal = geometry.morphAttributes.position;\n\n\tconst groups = geometry.groups;\n\tconst drawRange = geometry.drawRange;\n\tlet i, j, il, jl;\n\tlet group;\n\tlet start, end;\n\n\tconst modifiedPosition = new Float32Array( positionAttribute.count * positionAttribute.itemSize );\n\tconst modifiedNormal = new Float32Array( normalAttribute.count * normalAttribute.itemSize );\n\n\tif ( index !== null ) {\n\n\t\t// indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = index.getX( j );\n\t\t\t\t\tb = index.getX( j + 1 );\n\t\t\t\t\tc = index.getX( j + 2 );\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\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\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = index.getX( i );\n\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\tc = index.getX( i + 2 );\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\t// non-indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = j;\n\t\t\t\t\tb = j + 1;\n\t\t\t\t\tc = j + 2;\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\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\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = i;\n\t\t\t\tb = i + 1;\n\t\t\t\tc = i + 2;\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst morphedPositionAttribute = new Float32BufferAttribute( modifiedPosition, 3 );\n\tconst morphedNormalAttribute = new Float32BufferAttribute( modifiedNormal, 3 );\n\n\treturn {\n\n\t\tpositionAttribute: positionAttribute,\n\t\tnormalAttribute: normalAttribute,\n\t\tmorphedPositionAttribute: morphedPositionAttribute,\n\t\tmorphedNormalAttribute: morphedNormalAttribute\n\n\t};\n\n}\n\nfunction mergeGroups( geometry ) {\n\n\tif ( geometry.groups.length === 0 ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.mergeGroups(): No groups are defined. Nothing to merge.' );\n\t\treturn geometry;\n\n\t}\n\n\tlet groups = geometry.groups;\n\n\t// sort groups by material index\n\n\tgroups = groups.sort( ( a, b ) => {\n\n\t\tif ( a.materialIndex !== b.materialIndex ) return a.materialIndex - b.materialIndex;\n\n\t\treturn a.start - b.start;\n\n\t} );\n\n\t// create index for non-indexed geometries\n\n\tif ( geometry.getIndex() === null ) {\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\t\tconst indices = [];\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i += 3 ) {\n\n\t\t\tindices.push( i, i + 1, i + 2 );\n\n\t\t}\n\n\t\tgeometry.setIndex( indices );\n\n\t}\n\n\t// sort index\n\n\tconst index = geometry.getIndex();\n\n\tconst newIndices = [];\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tconst groupStart = group.start;\n\t\tconst groupLength = groupStart + group.count;\n\n\t\tfor ( let j = groupStart; j < groupLength; j ++ ) {\n\n\t\t\tnewIndices.push( index.getX( j ) );\n\n\t\t}\n\n\t}\n\n\tgeometry.dispose(); // Required to force buffer recreation\n\tgeometry.setIndex( newIndices );\n\n\t// update groups indices\n\n\tlet start = 0;\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tgroup.start = start;\n\t\tstart += group.count;\n\n\t}\n\n\t// merge groups\n\n\tlet currentGroup = groups[ 0 ];\n\n\tgeometry.groups = [ currentGroup ];\n\n\tfor ( let i = 1; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tif ( currentGroup.materialIndex === group.materialIndex ) {\n\n\t\t\tcurrentGroup.count += group.count;\n\n\t\t} else {\n\n\t\t\tcurrentGroup = group;\n\t\t\tgeometry.groups.push( currentGroup );\n\n\t\t}\n\n\t}\n\n\treturn geometry;\n\n}\n\n\n/**\n * Modifies the supplied geometry if it is non-indexed, otherwise creates a new,\n * non-indexed geometry. Returns the geometry with smooth normals everywhere except\n * faces that meet at an angle greater than the crease angle.\n *\n * @param {BufferGeometry} geometry\n * @param {number} [creaseAngle]\n * @return {BufferGeometry}\n */\nfunction toCreasedNormals( geometry, creaseAngle = Math.PI / 3 /* 60 degrees */ ) {\n\n\tconst creaseDot = Math.cos( creaseAngle );\n\tconst hashMultiplier = ( 1 + 1e-10 ) * 1e2;\n\n\t// reusable vectors\n\tconst verts = [ new Vector3(), new Vector3(), new Vector3() ];\n\tconst tempVec1 = new Vector3();\n\tconst tempVec2 = new Vector3();\n\tconst tempNorm = new Vector3();\n\tconst tempNorm2 = new Vector3();\n\n\t// hashes a vector\n\tfunction hashVertex( v ) {\n\n\t\tconst x = ~ ~ ( v.x * hashMultiplier );\n\t\tconst y = ~ ~ ( v.y * hashMultiplier );\n\t\tconst z = ~ ~ ( v.z * hashMultiplier );\n\t\treturn `${x},${y},${z}`;\n\n\t}\n\n\t// BufferGeometry.toNonIndexed() warns if the geometry is non-indexed\n\t// and returns the original geometry\n\tconst resultGeometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\tconst posAttr = resultGeometry.attributes.position;\n\tconst vertexMap = {};\n\n\t// find all the normals shared by commonly located vertices\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\t// add the normal to the map for all vertices\n\t\tconst normal = new Vector3().crossVectors( tempVec1, tempVec2 ).normalize();\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tif ( ! ( hash in vertexMap ) ) {\n\n\t\t\t\tvertexMap[ hash ] = [];\n\n\t\t\t}\n\n\t\t\tvertexMap[ hash ].push( normal );\n\n\t\t}\n\n\t}\n\n\t// average normals from all vertices that share a common location if they are within the\n\t// provided crease threshold\n\tconst normalArray = new Float32Array( posAttr.count * 3 );\n\tconst normAttr = new BufferAttribute( normalArray, 3, false );\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\t// get the face normal for this vertex\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\ttempNorm.crossVectors( tempVec1, tempVec2 ).normalize();\n\n\t\t// average all normals that meet the threshold and set the normal value\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tconst otherNormals = vertexMap[ hash ];\n\t\t\ttempNorm2.set( 0, 0, 0 );\n\n\t\t\tfor ( let k = 0, lk = otherNormals.length; k < lk; k ++ ) {\n\n\t\t\t\tconst otherNorm = otherNormals[ k ];\n\t\t\t\tif ( tempNorm.dot( otherNorm ) > creaseDot ) {\n\n\t\t\t\t\ttempNorm2.add( otherNorm );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttempNorm2.normalize();\n\t\t\tnormAttr.setXYZ( i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z );\n\n\t\t}\n\n\t}\n\n\tresultGeometry.setAttribute( 'normal', normAttr );\n\treturn resultGeometry;\n\n}\n\nexport {\n\tcomputeMikkTSpaceTangents,\n\tmergeGeometries,\n\tmergeAttributes,\n\tinterleaveAttributes,\n\testimateBytesUsed,\n\tmergeVertices,\n\ttoTrianglesDrawMode,\n\tcomputeMorphedAttributes,\n\tmergeGroups,\n\ttoCreasedNormals\n};\n","import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tColorManagement,\n\tFileLoader,\n\tLoader,\n\tLinearSRGBColorSpace,\n\tSRGBColorSpace\n} from 'three';\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\n\tparse( buffer, onLoad, onError = ()=>{} ) {\n\n\t\tthis.decodeDracoFile( buffer, onLoad, null, null, SRGBColorSpace, onError ).catch( onError );\n\n\t}\n\n\tdecodeDracoFile( buffer, callback, attributeIDs, attributeTypes, vertexColorSpace = LinearSRGBColorSpace, onError = () => {} ) {\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 ).catch( onError );\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 );\n\t\t\tColorManagement.toWorkingColorSpace( _color, SRGBColorSpace );\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","import {\n\tAnimationClip,\n\tBone,\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tColorManagement,\n\tDirectionalLight,\n\tDoubleSide,\n\tFileLoader,\n\tFrontSide,\n\tGroup,\n\tImageBitmapLoader,\n\tInstancedMesh,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tInterpolant,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tLine,\n\tLineBasicMaterial,\n\tLineLoop,\n\tLineSegments,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tLinearSRGBColorSpace,\n\tLoader,\n\tLoaderUtils,\n\tMaterial,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshPhysicalMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tNumberKeyframeTrack,\n\tObject3D,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tPoints,\n\tPointsMaterial,\n\tPropertyBinding,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tSkeleton,\n\tSkinnedMesh,\n\tSphere,\n\tSpotLight,\n\tTexture,\n\tTextureLoader,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tVector2,\n\tVector3,\n\tVectorKeyframeTrack,\n\tSRGBColorSpace,\n\tInstancedBufferAttribute\n} from 'three';\nimport { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';\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 GLTFMaterialsDispersionExtension( 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 GLTFMaterialsBumpExtension( 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\t// If a base path is set, resources will be relative paths from that plus the relative path of the gltf file\n\t\t\t// Example path = 'https://my-cnd-server.com/', url = 'assets/models/model.gltf'\n\t\t\t// resourcePath = 'https://my-cnd-server.com/assets/models/'\n\t\t\t// referenced resource 'model.bin' will be loaded from 'https://my-cnd-server.com/assets/models/model.bin'\n\t\t\t// referenced resource '../textures/texture.png' will be loaded from 'https://my-cnd-server.com/assets/textures/texture.png'\n\t\t\tconst relativeUrl = LoaderUtils.extractUrlBase( url );\n\t\t\tresourcePath = LoaderUtils.resolveURL( relativeUrl, 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\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\n\t\t\tif ( ! plugin.name ) console.error( 'THREE.GLTFLoader: Invalid plugin found: missing name' );\n\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_DISPERSION: 'KHR_materials_dispersion',\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_MATERIALS_BUMP: 'EXT_materials_bump',\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.setRGB( lightDef.color[ 0 ], lightDef.color[ 1 ], lightDef.color[ 2 ], LinearSRGBColorSpace );\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.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );\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 * Materials dispersion Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_dispersion\n */\nclass GLTFMaterialsDispersionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_DISPERSION;\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.dispersion = extension.dispersion !== undefined ? extension.dispersion : 0;\n\n\t\treturn Promise.resolve();\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\tconst colorFactor = extension.sheenColorFactor;\n\t\t\tmaterialParams.sheenColor.setRGB( colorFactor[ 0 ], colorFactor[ 1 ], colorFactor[ 2 ], LinearSRGBColorSpace );\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().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );\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().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );\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/**\n * Materials bump Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_materials_bump\n */\nclass GLTFMaterialsBumpExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_MATERIALS_BUMP;\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.bumpScale = extension.bumpFactor !== undefined ? extension.bumpFactor : 1.0;\n\n\t\tif ( extension.bumpTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'bumpMap', extension.bumpTexture ) );\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 === '_COLOR_0' ) {\n\n\t\t\t\t\t\tconst attr = attributes[ attributeName ];\n\t\t\t\t\t\tinstancedMesh.instanceColor = new InstancedBufferAttribute( attr.array, attr.itemSize, attr.normalized );\n\n\t\t\t\t\t} else if ( 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, reject ) {\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, LinearSRGBColorSpace, reject );\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} targets\n * @param {GLTFParser} parser\n * @return {Promise}\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 safariVersion = - 1;\n\t\tlet isFirefox = false;\n\t\tlet firefoxVersion = - 1;\n\n\t\tif ( typeof navigator !== 'undefined' ) {\n\n\t\t\tconst userAgent = navigator.userAgent;\n\n\t\t\tisSafari = /^((?!chrome|android).)*safari/i.test( userAgent ) === true;\n\t\t\tconst safariMatch = userAgent.match( /Version\\/(\\d+)/ );\n\t\t\tsafariVersion = isSafari && safariMatch ? parseInt( safariMatch[ 1 ], 10 ) : - 1;\n\n\t\t\tisFirefox = userAgent.indexOf( 'Firefox' ) > - 1;\n\t\t\tfirefoxVersion = isFirefox ? userAgent.match( /Firefox\\/([0-9]+)\\./ )[ 1 ] : - 1;\n\n\t\t}\n\n\t\tif ( typeof createImageBitmap === 'undefined' || ( isSafari && safariVersion < 17 ) || ( 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\treturn Promise.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\tfor ( const scene of result.scenes ) {\n\n\t\t\t\t\tscene.updateMatrixWorld();\n\n\t\t\t\t}\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}\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>}\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}\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}\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}\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\t// Ignore normalized since we copy from sparse\n\t\t\t\tbufferAttribute.normalized = false;\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\tbufferAttribute.normalized = normalized;\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}\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\tassignExtrasToUserData( texture, sourceDef );\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}\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}\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.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );\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\tconst emissiveFactor = materialDef.emissiveFactor;\n\t\t\tmaterialParams.emissive = new Color().setRGB( emissiveFactor[ 0 ], emissiveFactor[ 1 ], emissiveFactor[ 2 ], LinearSRGBColorSpace );\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} primitives\n\t * @return {Promise>}\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}\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}\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}\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}\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}\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}\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}\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\tif ( ColorManagement.workingColorSpace !== LinearSRGBColorSpace && 'COLOR_0' in attributes ) {\n\n\t\tconsole.warn( `THREE.GLTFLoader: Converting vertex colors from \"srgb-linear\" to \"${ColorManagement.workingColorSpace}\" not supported.` );\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","import {\n\tDataTextureLoader,\n\tDataUtils,\n\tFloatType,\n\tHalfFloatType,\n\tLinearFilter,\n\tLinearSRGBColorSpace\n} from 'three';\n\n// https://github.com/mrdoob/three.js/issues/5552\n// http://en.wikipedia.org/wiki/RGBE_image_format\n\nclass RGBELoader extends DataTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = HalfFloatType;\n\n\t}\n\n\t// adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html\n\n\tparse( buffer ) {\n\n\t\tconst\n\t\t\t/* default error routine. change this to change error handling */\n\t\t\trgbe_read_error = 1,\n\t\t\trgbe_write_error = 2,\n\t\t\trgbe_format_error = 3,\n\t\t\trgbe_memory_error = 4,\n\t\t\trgbe_error = function ( rgbe_error_code, msg ) {\n\n\t\t\t\tswitch ( rgbe_error_code ) {\n\n\t\t\t\t\tcase rgbe_read_error: throw new Error( 'THREE.RGBELoader: Read Error: ' + ( msg || '' ) );\n\t\t\t\t\tcase rgbe_write_error: throw new Error( 'THREE.RGBELoader: Write Error: ' + ( msg || '' ) );\n\t\t\t\t\tcase rgbe_format_error: throw new Error( 'THREE.RGBELoader: Bad File Format: ' + ( msg || '' ) );\n\t\t\t\t\tdefault:\n\t\t\t\t\tcase rgbe_memory_error: throw new Error( 'THREE.RGBELoader: Memory Error: ' + ( msg || '' ) );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\t/* offsets to red, green, and blue components in a data (float) pixel */\n\t\t\t//RGBE_DATA_RED = 0,\n\t\t\t//RGBE_DATA_GREEN = 1,\n\t\t\t//RGBE_DATA_BLUE = 2,\n\n\t\t\t/* number of floats per pixel, use 4 since stored in rgba image format */\n\t\t\t//RGBE_DATA_SIZE = 4,\n\n\t\t\t/* flags indicating which fields in an rgbe_header_info are valid */\n\t\t\tRGBE_VALID_PROGRAMTYPE = 1,\n\t\t\tRGBE_VALID_FORMAT = 2,\n\t\t\tRGBE_VALID_DIMENSIONS = 4,\n\n\t\t\tNEWLINE = '\\n',\n\n\t\t\tfgets = function ( buffer, lineLimit, consume ) {\n\n\t\t\t\tconst chunkSize = 128;\n\n\t\t\t\tlineLimit = ! lineLimit ? 1024 : lineLimit;\n\t\t\t\tlet p = buffer.pos,\n\t\t\t\t\ti = - 1, len = 0, s = '',\n\t\t\t\t\tchunk = String.fromCharCode.apply( null, new Uint16Array( buffer.subarray( p, p + chunkSize ) ) );\n\n\t\t\t\twhile ( ( 0 > ( i = chunk.indexOf( NEWLINE ) ) ) && ( len < lineLimit ) && ( p < buffer.byteLength ) ) {\n\n\t\t\t\t\ts += chunk; len += chunk.length;\n\t\t\t\t\tp += chunkSize;\n\t\t\t\t\tchunk += String.fromCharCode.apply( null, new Uint16Array( buffer.subarray( p, p + chunkSize ) ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( - 1 < i ) {\n\n\t\t\t\t\t/*for (i=l-1; i>=0; i--) {\n\t\t\t\t\t\tbyteCode = m.charCodeAt(i);\n\t\t\t\t\t\tif (byteCode > 0x7f && byteCode <= 0x7ff) byteLen++;\n\t\t\t\t\t\telse if (byteCode > 0x7ff && byteCode <= 0xffff) byteLen += 2;\n\t\t\t\t\t\tif (byteCode >= 0xDC00 && byteCode <= 0xDFFF) i--; //trail surrogate\n\t\t\t\t\t}*/\n\t\t\t\t\tif ( false !== consume ) buffer.pos += len + i + 1;\n\t\t\t\t\treturn s + chunk.slice( 0, i );\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t},\n\n\t\t\t/* minimal header reading. modify if you want to parse more information */\n\t\t\tRGBE_ReadHeader = function ( buffer ) {\n\n\n\t\t\t\t// regexes to parse header info fields\n\t\t\t\tconst magic_token_re = /^#\\?(\\S+)/,\n\t\t\t\t\tgamma_re = /^\\s*GAMMA\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n\t\t\t\t\texposure_re = /^\\s*EXPOSURE\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n\t\t\t\t\tformat_re = /^\\s*FORMAT=(\\S+)\\s*$/,\n\t\t\t\t\tdimensions_re = /^\\s*\\-Y\\s+(\\d+)\\s+\\+X\\s+(\\d+)\\s*$/,\n\n\t\t\t\t\t// RGBE format header struct\n\t\t\t\t\theader = {\n\n\t\t\t\t\t\tvalid: 0, /* indicate which fields are valid */\n\n\t\t\t\t\t\tstring: '', /* the actual header string */\n\n\t\t\t\t\t\tcomments: '', /* comments found in header */\n\n\t\t\t\t\t\tprogramtype: 'RGBE', /* listed at beginning of file to identify it after \"#?\". defaults to \"RGBE\" */\n\n\t\t\t\t\t\tformat: '', /* RGBE format, default 32-bit_rle_rgbe */\n\n\t\t\t\t\t\tgamma: 1.0, /* image has already been gamma corrected with given gamma. defaults to 1.0 (no correction) */\n\n\t\t\t\t\t\texposure: 1.0, /* a value of 1.0 in an image corresponds to watts/steradian/m^2. defaults to 1.0 */\n\n\t\t\t\t\t\twidth: 0, height: 0 /* image dimensions, width/height */\n\n\t\t\t\t\t};\n\n\t\t\t\tlet line, match;\n\n\t\t\t\tif ( buffer.pos >= buffer.byteLength || ! ( line = fgets( buffer ) ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_read_error, 'no header found' );\n\n\t\t\t\t}\n\n\t\t\t\t/* if you want to require the magic token then uncomment the next line */\n\t\t\t\tif ( ! ( match = line.match( magic_token_re ) ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'bad initial token' );\n\n\t\t\t\t}\n\n\t\t\t\theader.valid |= RGBE_VALID_PROGRAMTYPE;\n\t\t\t\theader.programtype = match[ 1 ];\n\t\t\t\theader.string += line + '\\n';\n\n\t\t\t\twhile ( true ) {\n\n\t\t\t\t\tline = fgets( buffer );\n\t\t\t\t\tif ( false === line ) break;\n\t\t\t\t\theader.string += line + '\\n';\n\n\t\t\t\t\tif ( '#' === line.charAt( 0 ) ) {\n\n\t\t\t\t\t\theader.comments += line + '\\n';\n\t\t\t\t\t\tcontinue; // comment line\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( gamma_re ) ) {\n\n\t\t\t\t\t\theader.gamma = parseFloat( match[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( exposure_re ) ) {\n\n\t\t\t\t\t\theader.exposure = parseFloat( match[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( format_re ) ) {\n\n\t\t\t\t\t\theader.valid |= RGBE_VALID_FORMAT;\n\t\t\t\t\t\theader.format = match[ 1 ];//'32-bit_rle_rgbe';\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( dimensions_re ) ) {\n\n\t\t\t\t\t\theader.valid |= RGBE_VALID_DIMENSIONS;\n\t\t\t\t\t\theader.height = parseInt( match[ 1 ], 10 );\n\t\t\t\t\t\theader.width = parseInt( match[ 2 ], 10 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( header.valid & RGBE_VALID_FORMAT ) && ( header.valid & RGBE_VALID_DIMENSIONS ) ) break;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! ( header.valid & RGBE_VALID_FORMAT ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'missing format specifier' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! ( header.valid & RGBE_VALID_DIMENSIONS ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'missing image size specifier' );\n\n\t\t\t\t}\n\n\t\t\t\treturn header;\n\n\t\t\t},\n\n\t\t\tRGBE_ReadPixels_RLE = function ( buffer, w, h ) {\n\n\t\t\t\tconst scanline_width = w;\n\n\t\t\t\tif (\n\t\t\t\t\t// run length encoding is not allowed so read flat\n\t\t\t\t\t( ( scanline_width < 8 ) || ( scanline_width > 0x7fff ) ) ||\n\t\t\t\t\t// this file is not run length encoded\n\t\t\t\t\t( ( 2 !== buffer[ 0 ] ) || ( 2 !== buffer[ 1 ] ) || ( buffer[ 2 ] & 0x80 ) )\n\t\t\t\t) {\n\n\t\t\t\t\t// return the flat buffer\n\t\t\t\t\treturn new Uint8Array( buffer );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scanline_width !== ( ( buffer[ 2 ] << 8 ) | buffer[ 3 ] ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'wrong scanline width' );\n\n\t\t\t\t}\n\n\t\t\t\tconst data_rgba = new Uint8Array( 4 * w * h );\n\n\t\t\t\tif ( ! data_rgba.length ) {\n\n\t\t\t\t\trgbe_error( rgbe_memory_error, 'unable to allocate buffer space' );\n\n\t\t\t\t}\n\n\t\t\t\tlet offset = 0, pos = 0;\n\n\t\t\t\tconst ptr_end = 4 * scanline_width;\n\t\t\t\tconst rgbeStart = new Uint8Array( 4 );\n\t\t\t\tconst scanline_buffer = new Uint8Array( ptr_end );\n\t\t\t\tlet num_scanlines = h;\n\n\t\t\t\t// read in each successive scanline\n\t\t\t\twhile ( ( num_scanlines > 0 ) && ( pos < buffer.byteLength ) ) {\n\n\t\t\t\t\tif ( pos + 4 > buffer.byteLength ) {\n\n\t\t\t\t\t\trgbe_error( rgbe_read_error );\n\n\t\t\t\t\t}\n\n\t\t\t\t\trgbeStart[ 0 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 1 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 2 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 3 ] = buffer[ pos ++ ];\n\n\t\t\t\t\tif ( ( 2 != rgbeStart[ 0 ] ) || ( 2 != rgbeStart[ 1 ] ) || ( ( ( rgbeStart[ 2 ] << 8 ) | rgbeStart[ 3 ] ) != scanline_width ) ) {\n\n\t\t\t\t\t\trgbe_error( rgbe_format_error, 'bad rgbe scanline format' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// read each of the four channels for the scanline into the buffer\n\t\t\t\t\t// first red, then green, then blue, then exponent\n\t\t\t\t\tlet ptr = 0, count;\n\n\t\t\t\t\twhile ( ( ptr < ptr_end ) && ( pos < buffer.byteLength ) ) {\n\n\t\t\t\t\t\tcount = buffer[ pos ++ ];\n\t\t\t\t\t\tconst isEncodedRun = count > 128;\n\t\t\t\t\t\tif ( isEncodedRun ) count -= 128;\n\n\t\t\t\t\t\tif ( ( 0 === count ) || ( ptr + count > ptr_end ) ) {\n\n\t\t\t\t\t\t\trgbe_error( rgbe_format_error, 'bad scanline data' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( isEncodedRun ) {\n\n\t\t\t\t\t\t\t// a (encoded) run of the same value\n\t\t\t\t\t\t\tconst byteValue = buffer[ pos ++ ];\n\t\t\t\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\t\t\t\tscanline_buffer[ ptr ++ ] = byteValue;\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//ptr += count;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// a literal-run\n\t\t\t\t\t\t\tscanline_buffer.set( buffer.subarray( pos, pos + count ), ptr );\n\t\t\t\t\t\t\tptr += count; pos += count;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// now convert data from buffer into rgba\n\t\t\t\t\t// first red, then green, then blue, then exponent (alpha)\n\t\t\t\t\tconst l = scanline_width; //scanline_buffer.byteLength;\n\t\t\t\t\tfor ( let i = 0; i < l; i ++ ) {\n\n\t\t\t\t\t\tlet off = 0;\n\t\t\t\t\t\tdata_rgba[ offset ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 1 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 2 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 3 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toffset += 4;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnum_scanlines --;\n\n\t\t\t\t}\n\n\t\t\t\treturn data_rgba;\n\n\t\t\t};\n\n\t\tconst RGBEByteToRGBFloat = function ( sourceArray, sourceOffset, destArray, destOffset ) {\n\n\t\t\tconst e = sourceArray[ sourceOffset + 3 ];\n\t\t\tconst scale = Math.pow( 2.0, e - 128.0 ) / 255.0;\n\n\t\t\tdestArray[ destOffset + 0 ] = sourceArray[ sourceOffset + 0 ] * scale;\n\t\t\tdestArray[ destOffset + 1 ] = sourceArray[ sourceOffset + 1 ] * scale;\n\t\t\tdestArray[ destOffset + 2 ] = sourceArray[ sourceOffset + 2 ] * scale;\n\t\t\tdestArray[ destOffset + 3 ] = 1;\n\n\t\t};\n\n\t\tconst RGBEByteToRGBHalf = function ( sourceArray, sourceOffset, destArray, destOffset ) {\n\n\t\t\tconst e = sourceArray[ sourceOffset + 3 ];\n\t\t\tconst scale = Math.pow( 2.0, e - 128.0 ) / 255.0;\n\n\t\t\t// clamping to 65504, the maximum representable value in float16\n\t\t\tdestArray[ destOffset + 0 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 0 ] * scale, 65504 ) );\n\t\t\tdestArray[ destOffset + 1 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 1 ] * scale, 65504 ) );\n\t\t\tdestArray[ destOffset + 2 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 2 ] * scale, 65504 ) );\n\t\t\tdestArray[ destOffset + 3 ] = DataUtils.toHalfFloat( 1 );\n\n\t\t};\n\n\t\tconst byteArray = new Uint8Array( buffer );\n\t\tbyteArray.pos = 0;\n\t\tconst rgbe_header_info = RGBE_ReadHeader( byteArray );\n\n\t\tconst w = rgbe_header_info.width,\n\t\t\th = rgbe_header_info.height,\n\t\t\timage_rgba_data = RGBE_ReadPixels_RLE( byteArray.subarray( byteArray.pos ), w, h );\n\n\n\t\tlet data, type;\n\t\tlet numElements;\n\n\t\tswitch ( this.type ) {\n\n\t\t\tcase FloatType:\n\n\t\t\t\tnumElements = image_rgba_data.length / 4;\n\t\t\t\tconst floatArray = new Float32Array( numElements * 4 );\n\n\t\t\t\tfor ( let j = 0; j < numElements; j ++ ) {\n\n\t\t\t\t\tRGBEByteToRGBFloat( image_rgba_data, j * 4, floatArray, j * 4 );\n\n\t\t\t\t}\n\n\t\t\t\tdata = floatArray;\n\t\t\t\ttype = FloatType;\n\t\t\t\tbreak;\n\n\t\t\tcase HalfFloatType:\n\n\t\t\t\tnumElements = image_rgba_data.length / 4;\n\t\t\t\tconst halfArray = new Uint16Array( numElements * 4 );\n\n\t\t\t\tfor ( let j = 0; j < numElements; j ++ ) {\n\n\t\t\t\t\tRGBEByteToRGBHalf( image_rgba_data, j * 4, halfArray, j * 4 );\n\n\t\t\t\t}\n\n\t\t\t\tdata = halfArray;\n\t\t\t\ttype = HalfFloatType;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tthrow new Error( 'THREE.RGBELoader: Unsupported type: ' + this.type );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\treturn {\n\t\t\twidth: w, height: h,\n\t\t\tdata: data,\n\t\t\theader: rgbe_header_info.string,\n\t\t\tgamma: rgbe_header_info.gamma,\n\t\t\texposure: rgbe_header_info.exposure,\n\t\t\ttype: type\n\t\t};\n\n\t}\n\n\tsetDataType( value ) {\n\n\t\tthis.type = value;\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tfunction onLoadCallback( texture, texData ) {\n\n\t\t\tswitch ( texture.type ) {\n\n\t\t\t\tcase FloatType:\n\t\t\t\tcase HalfFloatType:\n\n\t\t\t\t\ttexture.colorSpace = LinearSRGBColorSpace;\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttexture.flipY = true;\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}\n\n\t\treturn super.load( url, onLoadCallback, onProgress, onError );\n\n\t}\n\n}\n\nexport { RGBELoader };\n","import {\n\tAnimationClip,\n\tAnimationMixer,\n\tMatrix4,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tSkeletonHelper,\n\tVector3,\n\tVectorKeyframeTrack\n} from 'three';\n\nfunction getBoneName( bone, options ) {\n\n\tif ( options.getBoneName !== undefined ) {\n\n\t\treturn options.getBoneName( bone );\n\n\t}\n\n\treturn options.names[ bone.name ];\n\n}\n\nfunction retarget( target, source, options = {} ) {\n\n\tconst quat = new Quaternion(),\n\t\tscale = new Vector3(),\n\t\trelativeMatrix = new Matrix4(),\n\t\tglobalMatrix = new Matrix4();\n\n\toptions.preserveBoneMatrix = options.preserveBoneMatrix !== undefined ? options.preserveBoneMatrix : true;\n\toptions.preserveBonePositions = options.preserveBonePositions !== undefined ? options.preserveBonePositions : true;\n\toptions.useTargetMatrix = options.useTargetMatrix !== undefined ? options.useTargetMatrix : false;\n\toptions.hip = options.hip !== undefined ? options.hip : 'hip';\n\toptions.hipInfluence = options.hipInfluence !== undefined ? options.hipInfluence : new Vector3( 1, 1, 1 );\n\toptions.scale = options.scale !== undefined ? options.scale : 1;\n\toptions.names = options.names || {};\n\n\tconst sourceBones = source.isObject3D ? source.skeleton.bones : getBones( source ),\n\t\tbones = target.isObject3D ? target.skeleton.bones : getBones( target );\n\n\tlet bone, name, boneTo,\n\t\tbonesPosition;\n\n\t// reset bones\n\n\tif ( target.isObject3D ) {\n\n\t\ttarget.skeleton.pose();\n\n\t} else {\n\n\t\toptions.useTargetMatrix = true;\n\t\toptions.preserveBoneMatrix = false;\n\n\t}\n\n\tif ( options.preserveBonePositions ) {\n\n\t\tbonesPosition = [];\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tbonesPosition.push( bones[ i ].position.clone() );\n\n\t\t}\n\n\t}\n\n\tif ( options.preserveBoneMatrix ) {\n\n\t\t// reset matrix\n\n\t\ttarget.updateMatrixWorld();\n\n\t\ttarget.matrixWorld.identity();\n\n\t\t// reset children matrix\n\n\t\tfor ( let i = 0; i < target.children.length; ++ i ) {\n\n\t\t\ttarget.children[ i ].updateMatrixWorld( true );\n\n\t\t}\n\n\t}\n\n\tfor ( let i = 0; i < bones.length; ++ i ) {\n\n\t\tbone = bones[ i ];\n\t\tname = getBoneName( bone, options );\n\n\t\tboneTo = getBoneByName( name, sourceBones );\n\n\t\tglobalMatrix.copy( bone.matrixWorld );\n\n\t\tif ( boneTo ) {\n\n\t\t\tboneTo.updateMatrixWorld();\n\n\t\t\tif ( options.useTargetMatrix ) {\n\n\t\t\t\trelativeMatrix.copy( boneTo.matrixWorld );\n\n\t\t\t} else {\n\n\t\t\t\trelativeMatrix.copy( target.matrixWorld ).invert();\n\t\t\t\trelativeMatrix.multiply( boneTo.matrixWorld );\n\n\t\t\t}\n\n\t\t\t// ignore scale to extract rotation\n\n\t\t\tscale.setFromMatrixScale( relativeMatrix );\n\t\t\trelativeMatrix.scale( scale.set( 1 / scale.x, 1 / scale.y, 1 / scale.z ) );\n\n\t\t\t// apply to global matrix\n\n\t\t\tglobalMatrix.makeRotationFromQuaternion( quat.setFromRotationMatrix( relativeMatrix ) );\n\n\t\t\tif ( target.isObject3D ) {\n\n\t\t\t\tif ( options.localOffsets ) {\n\n\t\t\t\t\tif ( options.localOffsets[ bone.name ] ) {\n\n\t\t\t\t\t\tglobalMatrix.multiply( options.localOffsets[ bone.name ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tglobalMatrix.copyPosition( relativeMatrix );\n\n\t\t}\n\n\t\tif ( name === options.hip ) {\n\n\t\t\tglobalMatrix.elements[ 12 ] *= options.scale * options.hipInfluence.x;\n\t\t\tglobalMatrix.elements[ 13 ] *= options.scale * options.hipInfluence.y;\n\t\t\tglobalMatrix.elements[ 14 ] *= options.scale * options.hipInfluence.z;\n\n\t\t\tif ( options.hipPosition !== undefined ) {\n\n\t\t\t\tglobalMatrix.elements[ 12 ] += options.hipPosition.x * options.scale;\n\t\t\t\tglobalMatrix.elements[ 13 ] += options.hipPosition.y * options.scale;\n\t\t\t\tglobalMatrix.elements[ 14 ] += options.hipPosition.z * options.scale;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( bone.parent ) {\n\n\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\tbone.matrix.multiply( globalMatrix );\n\n\t\t} else {\n\n\t\t\tbone.matrix.copy( globalMatrix );\n\n\t\t}\n\n\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\tbone.updateMatrixWorld();\n\n\t}\n\n\tif ( options.preserveBonePositions ) {\n\n\t\tfor ( let i = 0; i < bones.length; ++ i ) {\n\n\t\t\tbone = bones[ i ];\n\t\t\tname = getBoneName( bone, options ) || bone.name;\n\n\t\t\tif ( name !== options.hip ) {\n\n\t\t\t\tbone.position.copy( bonesPosition[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tif ( options.preserveBoneMatrix ) {\n\n\t\t// restore matrix\n\n\t\ttarget.updateMatrixWorld( true );\n\n\t}\n\n}\n\nfunction retargetClip( target, source, clip, options = {} ) {\n\n\toptions.useFirstFramePosition = options.useFirstFramePosition !== undefined ? options.useFirstFramePosition : false;\n\n\t// Calculate the fps from the source clip based on the track with the most frames, unless fps is already provided.\n\toptions.fps = options.fps !== undefined ? options.fps : ( Math.max( ...clip.tracks.map( track => track.times.length ) ) / clip.duration );\n\toptions.names = options.names || [];\n\n\tif ( ! source.isObject3D ) {\n\n\t\tsource = getHelperFromSkeleton( source );\n\n\t}\n\n\tconst numFrames = Math.round( clip.duration * ( options.fps / 1000 ) * 1000 ),\n\t\tdelta = clip.duration / ( numFrames - 1 ),\n\t\tconvertedTracks = [],\n\t\tmixer = new AnimationMixer( source ),\n\t\tbones = getBones( target.skeleton ),\n\t\tboneDatas = [];\n\n\tlet positionOffset,\n\t\tbone, boneTo, boneData,\n\t\tname;\n\n\tmixer.clipAction( clip ).play();\n\n\t// trim\n\n\tlet start = 0, end = numFrames;\n\n\tif ( options.trim !== undefined ) {\n\n\t\tstart = Math.round( options.trim[ 0 ] * options.fps );\n\t\tend = Math.min( Math.round( options.trim[ 1 ] * options.fps ), numFrames ) - start;\n\n\t\tmixer.update( options.trim[ 0 ] );\n\n\t} else {\n\n\t\tmixer.update( 0 );\n\n\t}\n\n\tsource.updateMatrixWorld();\n\n\t//\n\n\tfor ( let frame = 0; frame < end; ++ frame ) {\n\n\t\tconst time = frame * delta;\n\n\t\tretarget( target, source, options );\n\n\t\tfor ( let j = 0; j < bones.length; ++ j ) {\n\n\t\t\tbone = bones[ j ];\n\t\t\tname = getBoneName( bone, options ) || bone.name;\n\t\t\tboneTo = getBoneByName( name, source.skeleton );\n\n\t\t\tif ( boneTo ) {\n\n\t\t\t\tboneData = boneDatas[ j ] = boneDatas[ j ] || { bone: bone };\n\n\t\t\t\tif ( options.hip === name ) {\n\n\t\t\t\t\tif ( ! boneData.pos ) {\n\n\t\t\t\t\t\tboneData.pos = {\n\t\t\t\t\t\t\ttimes: new Float32Array( end ),\n\t\t\t\t\t\t\tvalues: new Float32Array( end * 3 )\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( options.useFirstFramePosition ) {\n\n\t\t\t\t\t\tif ( frame === 0 ) {\n\n\t\t\t\t\t\t\tpositionOffset = bone.position.clone();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbone.position.sub( positionOffset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tboneData.pos.times[ frame ] = time;\n\n\t\t\t\t\tbone.position.toArray( boneData.pos.values, frame * 3 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! boneData.quat ) {\n\n\t\t\t\t\tboneData.quat = {\n\t\t\t\t\t\ttimes: new Float32Array( end ),\n\t\t\t\t\t\tvalues: new Float32Array( end * 4 )\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tboneData.quat.times[ frame ] = time;\n\n\t\t\t\tbone.quaternion.toArray( boneData.quat.values, frame * 4 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( frame === end - 2 ) {\n\n\t\t\t// last mixer update before final loop iteration\n\t\t\t// make sure we do not go over or equal to clip duration\n\t\t\tmixer.update( delta - 0.0000001 );\n\n\t\t} else {\n\n\t\t\tmixer.update( delta );\n\n\t\t}\n\n\t\tsource.updateMatrixWorld();\n\n\t}\n\n\tfor ( let i = 0; i < boneDatas.length; ++ i ) {\n\n\t\tboneData = boneDatas[ i ];\n\n\t\tif ( boneData ) {\n\n\t\t\tif ( boneData.pos ) {\n\n\t\t\t\tconvertedTracks.push( new VectorKeyframeTrack(\n\t\t\t\t\t'.bones[' + boneData.bone.name + '].position',\n\t\t\t\t\tboneData.pos.times,\n\t\t\t\t\tboneData.pos.values\n\t\t\t\t) );\n\n\t\t\t}\n\n\t\t\tconvertedTracks.push( new QuaternionKeyframeTrack(\n\t\t\t\t'.bones[' + boneData.bone.name + '].quaternion',\n\t\t\t\tboneData.quat.times,\n\t\t\t\tboneData.quat.values\n\t\t\t) );\n\n\t\t}\n\n\t}\n\n\tmixer.uncacheAction( clip );\n\n\treturn new AnimationClip( clip.name, - 1, convertedTracks );\n\n}\n\nfunction clone( source ) {\n\n\tconst sourceLookup = new Map();\n\tconst cloneLookup = new Map();\n\n\tconst clone = source.clone();\n\n\tparallelTraverse( source, clone, function ( sourceNode, clonedNode ) {\n\n\t\tsourceLookup.set( clonedNode, sourceNode );\n\t\tcloneLookup.set( sourceNode, clonedNode );\n\n\t} );\n\n\tclone.traverse( function ( node ) {\n\n\t\tif ( ! node.isSkinnedMesh ) return;\n\n\t\tconst clonedMesh = node;\n\t\tconst sourceMesh = sourceLookup.get( node );\n\t\tconst sourceBones = sourceMesh.skeleton.bones;\n\n\t\tclonedMesh.skeleton = sourceMesh.skeleton.clone();\n\t\tclonedMesh.bindMatrix.copy( sourceMesh.bindMatrix );\n\n\t\tclonedMesh.skeleton.bones = sourceBones.map( function ( bone ) {\n\n\t\t\treturn cloneLookup.get( bone );\n\n\t\t} );\n\n\t\tclonedMesh.bind( clonedMesh.skeleton, clonedMesh.bindMatrix );\n\n\t} );\n\n\treturn clone;\n\n}\n\n// internal helper\n\nfunction getBoneByName( name, skeleton ) {\n\n\tfor ( let i = 0, bones = getBones( skeleton ); i < bones.length; i ++ ) {\n\n\t\tif ( name === bones[ i ].name )\n\n\t\t\treturn bones[ i ];\n\n\t}\n\n}\n\nfunction getBones( skeleton ) {\n\n\treturn Array.isArray( skeleton ) ? skeleton : skeleton.bones;\n\n}\n\n\nfunction getHelperFromSkeleton( skeleton ) {\n\n\tconst source = new SkeletonHelper( skeleton.bones[ 0 ] );\n\tsource.skeleton = skeleton;\n\n\treturn source;\n\n}\n\nfunction parallelTraverse( a, b, callback ) {\n\n\tcallback( a, b );\n\n\tfor ( let i = 0; i < a.children.length; i ++ ) {\n\n\t\tparallelTraverse( a.children[ i ], b.children[ i ], callback );\n\n\t}\n\n}\n\nexport {\n\tretarget,\n\tretargetClip,\n\tclone,\n};\n","const _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 to range \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 interval\nfunction randInt( low, high ) {\n\n\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n}\n\n// Random float from 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\nexport {\n\tDEG2RAD,\n\tRAD2DEG,\n\tgenerateUUID,\n\tclamp,\n\teuclideanModulo,\n\tmapLinear,\n\tinverseLerp,\n\tlerp,\n\tdamp,\n\tpingpong,\n\tsmoothstep,\n\tsmootherstep,\n\trandInt,\n\trandFloat,\n\trandFloatSpread,\n\tseededRandom,\n\tdegToRad,\n\tradToDeg,\n\tisPowerOfTwo,\n\tceilPowerOfTwo,\n\tfloorPowerOfTwo,\n\tsetQuaternionFromProperEuler,\n\tnormalize,\n\tdenormalize,\n\tMathUtils\n};\n","// @generated by protoc-gen-es v2.1.0 with parameter \"target=ts\"\n// @generated from file dronegame/v1/shared.proto (package dronegame.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv1\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv1\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file dronegame/v1/shared.proto.\n */\nexport const file_dronegame_v1_shared: GenFile = /*@__PURE__*/\n fileDesc(\"Chlkcm9uZWdhbWUvdjEvc2hhcmVkLnByb3RvEgxkcm9uZWdhbWUudjEiJAoEVXNlchIKCgJpZBgBIAEoAxIQCghuaWNrbmFtZRgCIAEoCSI4CgpRdWF0ZXJuaW9uEgkKAXgYASABKAISCQoBeRgCIAEoAhIJCgF6GAMgASgCEgkKAXcYBCABKAIiKgoHVmVjdG9yMxIJCgF4GAEgASgCEgkKAXkYAiABKAISCQoBehgDIAEoAiJcCgVTY29yZRISCgp0aW1lX2JvbnVzGAEgASgCEhYKDmRpc3RhbmNlX2JvbnVzGAIgASgCEhQKDG1pc3NfcGVuYWx0eRgDIAEoAhIRCgloaXRfYm9udXMYBCABKAJCmwEKEGNvbS5kcm9uZWdhbWUudjFCC1NoYXJlZFByb3RvUAFaKWRyb25lZ2FtZS9wYi9nZW4vZHJvbmVnYW1lL3YxO2Ryb25lZ2FtZXBiogIDRFhYqgIMRHJvbmVnYW1lLlYxygIMRHJvbmVnYW1lXFYx4gIYRHJvbmVnYW1lXFYxXEdQQk1ldGFkYXRh6gINRHJvbmVnYW1lOjpWMWIGcHJvdG8z\", [file_google_protobuf_timestamp]);\n\n/**\n * @generated from message dronegame.v1.User\n */\nexport type User = Message<\"dronegame.v1.User\"> & {\n /**\n * @generated from field: int64 id = 1;\n */\n id: bigint;\n\n /**\n * @generated from field: string nickname = 2;\n */\n nickname: string;\n};\n\n/**\n * Describes the message dronegame.v1.User.\n * Use `create(UserSchema)` to create a new message.\n */\nexport const UserSchema: GenMessage = /*@__PURE__*/\n messageDesc(file_dronegame_v1_shared, 0);\n\n/**\n * @generated from message dronegame.v1.Quaternion\n */\nexport type Quaternion = Message<\"dronegame.v1.Quaternion\"> & {\n /**\n * @generated from field: float x = 1;\n */\n x: number;\n\n /**\n * @generated from field: float y = 2;\n */\n y: number;\n\n /**\n * @generated from field: float z = 3;\n */\n z: number;\n\n /**\n * @generated from field: float w = 4;\n */\n w: number;\n};\n\n/**\n * Describes the message dronegame.v1.Quaternion.\n * Use `create(QuaternionSchema)` to create a new message.\n */\nexport const QuaternionSchema: GenMessage = /*@__PURE__*/\n messageDesc(file_dronegame_v1_shared, 1);\n\n/**\n * @generated from message dronegame.v1.Vector3\n */\nexport type Vector3 = Message<\"dronegame.v1.Vector3\"> & {\n /**\n * @generated from field: float x = 1;\n */\n x: number;\n\n /**\n * @generated from field: float y = 2;\n */\n y: number;\n\n /**\n * @generated from field: float z = 3;\n */\n z: number;\n};\n\n/**\n * Describes the message dronegame.v1.Vector3.\n * Use `create(Vector3Schema)` to create a new message.\n */\nexport const Vector3Schema: GenMessage = /*@__PURE__*/\n messageDesc(file_dronegame_v1_shared, 2);\n\n/**\n * @generated from message dronegame.v1.Score\n */\nexport type Score = Message<\"dronegame.v1.Score\"> & {\n /**\n * @generated from field: float time_bonus = 1;\n */\n timeBonus: number;\n\n /**\n * @generated from field: float distance_bonus = 2;\n */\n distanceBonus: number;\n\n /**\n * @generated from field: float miss_penalty = 3;\n */\n missPenalty: number;\n\n /**\n * @generated from field: float hit_bonus = 4;\n */\n hitBonus: number;\n};\n\n/**\n * Describes the message dronegame.v1.Score.\n * Use `create(ScoreSchema)` to create a new message.\n */\nexport const ScoreSchema: GenMessage = /*@__PURE__*/\n messageDesc(file_dronegame_v1_shared, 3);\n\n","// @generated by protoc-gen-es v2.1.0 with parameter \"target=ts\"\n// @generated from file dronegame/v1/matches.proto (package dronegame.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv1\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv1\";\nimport type { Timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { Quaternion, Score, User, Vector3 } from \"./shared_pb\";\nimport { file_dronegame_v1_shared } from \"./shared_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file dronegame/v1/matches.proto.\n */\nexport const file_dronegame_v1_matches: GenFile = /*@__PURE__*/\n fileDesc(\"Chpkcm9uZWdhbWUvdjEvbWF0Y2hlcy5wcm90bxIMZHJvbmVnYW1lLnYxIoECCgVNYXRjaBIKCgJpZBgBIAEoAxIgCgR1c2VyGAIgASgLMhIuZHJvbmVnYW1lLnYxLlVzZXISMAoMY3JlYXRlZF90aW1lGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIWCg5kcm9uZXNfc3Bhd25lZBgEIAEoDRIuCgpzdGFydF90aW1lGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIsCghlbmRfdGltZRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASIgoFc2NvcmUYByABKAsyEy5kcm9uZWdhbWUudjEuU2NvcmUihgcKDk1hdGNoRGF0YVBvaW50Ei0KCXRpbWVzdGFtcBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDwoFc3RhcnQYAiABKAhIABI0CgRkYXRhGAMgASgLMiQuZHJvbmVnYW1lLnYxLk1hdGNoRGF0YVBvaW50LlNlbnNvcnNIABI2CgRzaG90GAQgASgLMiYuZHJvbmVnYW1lLnYxLk1hdGNoRGF0YVBvaW50LlNob3RUYWtlbkgAEjoKA2hpdBgFIAEoCzIrLmRyb25lZ2FtZS52MS5NYXRjaERhdGFQb2ludC5Ecm9uZURlc3Ryb3llZEgAEhMKCWVuZF9tYXRjaBgGIAEoCEgAGrUDCgdTZW5zb3JzEjsKBmNhbWVyYRgCIAEoCzIrLmRyb25lZ2FtZS52MS5NYXRjaERhdGFQb2ludC5TZW5zb3JzLkNhbWVyYRI7CgZkcm9uZXMYAyADKAsyKy5kcm9uZWdhbWUudjEuTWF0Y2hEYXRhUG9pbnQuU2Vuc29ycy5FbnRpdHkSPAoHYnVsbGV0cxgEIAMoCzIrLmRyb25lZ2FtZS52MS5NYXRjaERhdGFQb2ludC5TZW5zb3JzLkVudGl0eRpsCgZFbnRpdHkSCgoCaWQYASABKA0SJwoIcG9zaXRpb24YAiABKAsyFS5kcm9uZWdhbWUudjEuVmVjdG9yMxItCgtvcmllbnRhdGlvbhgDIAEoCzIYLmRyb25lZ2FtZS52MS5RdWF0ZXJuaW9uGoMBCgZDYW1lcmESOwoGZW50aXR5GAEgASgLMisuZHJvbmVnYW1lLnYxLk1hdGNoRGF0YVBvaW50LlNlbnNvcnMuRW50aXR5EgsKA2ZvdhgCIAEoAhIUCgxhc3BlY3RfcmF0aW8YAyABKAISDAoEbmVhchgEIAEoAhILCgNmYXIYBSABKAIaSwoORHJvbmVEZXN0cm95ZWQSEAoIZHJvbmVfaWQYASABKA0SEAoIZGlzdGFuY2UYAiABKAISFQoNaXNfbGFzdF9kcm9uZRgDIAEoCBpnCglTaG90VGFrZW4SKwoMYWNjZWxlcmF0aW9uGAEgASgLMhUuZHJvbmVnYW1lLnYxLlZlY3RvcjMSLQoLb3JpZW50YXRpb24YAiABKAsyGC5kcm9uZWdhbWUudjEuUXVhdGVybmlvbkIHCgVldmVudCJ6Cg9NYXRjaERhdGFQb2ludHMSEAoIbWF0Y2hfaWQYASABKAMSMQoLZGF0YV9wb2ludHMYAiADKAsyHC5kcm9uZWdhbWUudjEuTWF0Y2hEYXRhUG9pbnQSIgoFc2NvcmUYAyABKAsyEy5kcm9uZWdhbWUudjEuU2NvcmVCnAEKEGNvbS5kcm9uZWdhbWUudjFCDE1hdGNoZXNQcm90b1ABWilkcm9uZWdhbWUvcGIvZ2VuL2Ryb25lZ2FtZS92MTtkcm9uZWdhbWVwYqICA0RYWKoCDERyb25lZ2FtZS5WMcoCDERyb25lZ2FtZVxWMeICGERyb25lZ2FtZVxWMVxHUEJNZXRhZGF0YeoCDURyb25lZ2FtZTo6VjFiBnByb3RvMw\", [file_google_protobuf_timestamp, file_dronegame_v1_shared]);\n\n/**\n * @generated from message dronegame.v1.Match\n */\nexport type Match = Message<\"dronegame.v1.Match\"> & {\n /**\n * @generated from field: int64 id = 1;\n */\n id: bigint;\n\n /**\n * @generated from field: dronegame.v1.User user = 2;\n */\n user?: User;\n\n /**\n * @generated from field: google.protobuf.Timestamp created_time = 3;\n */\n createdTime?: Timestamp;\n\n /**\n * @generated from field: uint32 drones_spawned = 4;\n */\n dronesSpawned: number;\n\n /**\n * @generated from field: google.protobuf.Timestamp start_time = 5;\n */\n startTime?: Timestamp;\n\n /**\n * @generated from field: google.protobuf.Timestamp end_time = 6;\n */\n endTime?: Timestamp;\n\n /**\n * @generated from field: dronegame.v1.Score score = 7;\n */\n score?: Score;\n};\n\n/**\n * Describes the message dronegame.v1.Match.\n * Use `create(MatchSchema)` to create a new message.\n */\nexport const MatchSchema: GenMessage = /*@__PURE__*/\n messageDesc(file_dronegame_v1_matches, 0);\n\n/**\n * @generated from message dronegame.v1.MatchDataPoint\n */\nexport type MatchDataPoint = Message<\"dronegame.v1.MatchDataPoint\"> & {\n /**\n * @generated from field: google.protobuf.Timestamp timestamp = 1;\n */\n timestamp?: Timestamp;\n\n /**\n * @generated from oneof dronegame.v1.MatchDataPoint.event\n */\n event: {\n /**\n * @generated from field: bool start = 2;\n */\n value: boolean;\n case: \"start\";\n } | {\n /**\n * @generated from field: dronegame.v1.MatchDataPoint.Sensors data = 3;\n */\n value: MatchDataPoint_Sensors;\n case: \"data\";\n } | {\n /**\n * @generated from field: dronegame.v1.MatchDataPoint.ShotTaken shot = 4;\n */\n value: MatchDataPoint_ShotTaken;\n case: \"shot\";\n } | {\n /**\n * @generated from field: dronegame.v1.MatchDataPoint.DroneDestroyed hit = 5;\n */\n value: MatchDataPoint_DroneDestroyed;\n case: \"hit\";\n } | {\n /**\n * @generated from field: bool end_match = 6;\n */\n value: boolean;\n case: \"endMatch\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * Describes the message dronegame.v1.MatchDataPoint.\n * Use `create(MatchDataPointSchema)` to create a new message.\n */\nexport const MatchDataPointSchema: GenMessage = /*@__PURE__*/\n messageDesc(file_dronegame_v1_matches, 1);\n\n/**\n * @generated from message dronegame.v1.MatchDataPoint.Sensors\n */\nexport type MatchDataPoint_Sensors = Message<\"dronegame.v1.MatchDataPoint.Sensors\"> & {\n /**\n * @generated from field: dronegame.v1.MatchDataPoint.Sensors.Camera camera = 2;\n */\n camera?: MatchDataPoint_Sensors_Camera;\n\n /**\n * @generated from field: repeated dronegame.v1.MatchDataPoint.Sensors.Entity drones = 3;\n */\n drones: MatchDataPoint_Sensors_Entity[];\n\n /**\n * @generated from field: repeated dronegame.v1.MatchDataPoint.Sensors.Entity bullets = 4;\n */\n bullets: MatchDataPoint_Sensors_Entity[];\n};\n\n/**\n * Describes the message dronegame.v1.MatchDataPoint.Sensors.\n * Use `create(MatchDataPoint_SensorsSchema)` to create a new message.\n */\nexport const MatchDataPoint_SensorsSchema: GenMessage = /*@__PURE__*/\n messageDesc(file_dronegame_v1_matches, 1, 0);\n\n/**\n * @generated from message dronegame.v1.MatchDataPoint.Sensors.Entity\n */\nexport type MatchDataPoint_Sensors_Entity = Message<\"dronegame.v1.MatchDataPoint.Sensors.Entity\"> & {\n /**\n * @generated from field: uint32 id = 1;\n */\n id: number;\n\n /**\n * @generated from field: dronegame.v1.Vector3 position = 2;\n */\n position?: Vector3;\n\n /**\n * @generated from field: dronegame.v1.Quaternion orientation = 3;\n */\n orientation?: Quaternion;\n};\n\n/**\n * Describes the message dronegame.v1.MatchDataPoint.Sensors.Entity.\n * Use `create(MatchDataPoint_Sensors_EntitySchema)` to create a new message.\n */\nexport const MatchDataPoint_Sensors_EntitySchema: GenMessage = /*@__PURE__*/\n messageDesc(file_dronegame_v1_matches, 1, 0, 0);\n\n/**\n * @generated from message dronegame.v1.MatchDataPoint.Sensors.Camera\n */\nexport type MatchDataPoint_Sensors_Camera = Message<\"dronegame.v1.MatchDataPoint.Sensors.Camera\"> & {\n /**\n * @generated from field: dronegame.v1.MatchDataPoint.Sensors.Entity entity = 1;\n */\n entity?: MatchDataPoint_Sensors_Entity;\n\n /**\n * @generated from field: float fov = 2;\n */\n fov: number;\n\n /**\n * @generated from field: float aspect_ratio = 3;\n */\n aspectRatio: number;\n\n /**\n * @generated from field: float near = 4;\n */\n near: number;\n\n /**\n * @generated from field: float far = 5;\n */\n far: number;\n};\n\n/**\n * Describes the message dronegame.v1.MatchDataPoint.Sensors.Camera.\n * Use `create(MatchDataPoint_Sensors_CameraSchema)` to create a new message.\n */\nexport const MatchDataPoint_Sensors_CameraSchema: GenMessage = /*@__PURE__*/\n messageDesc(file_dronegame_v1_matches, 1, 0, 1);\n\n/**\n * @generated from message dronegame.v1.MatchDataPoint.DroneDestroyed\n */\nexport type MatchDataPoint_DroneDestroyed = Message<\"dronegame.v1.MatchDataPoint.DroneDestroyed\"> & {\n /**\n * @generated from field: uint32 drone_id = 1;\n */\n droneId: number;\n\n /**\n * @generated from field: float distance = 2;\n */\n distance: number;\n\n /**\n * @generated from field: bool is_last_drone = 3;\n */\n isLastDrone: boolean;\n};\n\n/**\n * Describes the message dronegame.v1.MatchDataPoint.DroneDestroyed.\n * Use `create(MatchDataPoint_DroneDestroyedSchema)` to create a new message.\n */\nexport const MatchDataPoint_DroneDestroyedSchema: GenMessage = /*@__PURE__*/\n messageDesc(file_dronegame_v1_matches, 1, 1);\n\n/**\n * @generated from message dronegame.v1.MatchDataPoint.ShotTaken\n */\nexport type MatchDataPoint_ShotTaken = Message<\"dronegame.v1.MatchDataPoint.ShotTaken\"> & {\n /**\n * @generated from field: dronegame.v1.Vector3 acceleration = 1;\n */\n acceleration?: Vector3;\n\n /**\n * @generated from field: dronegame.v1.Quaternion orientation = 2;\n */\n orientation?: Quaternion;\n};\n\n/**\n * Describes the message dronegame.v1.MatchDataPoint.ShotTaken.\n * Use `create(MatchDataPoint_ShotTakenSchema)` to create a new message.\n */\nexport const MatchDataPoint_ShotTakenSchema: GenMessage = /*@__PURE__*/\n messageDesc(file_dronegame_v1_matches, 1, 2);\n\n/**\n * @generated from message dronegame.v1.MatchDataPoints\n */\nexport type MatchDataPoints = Message<\"dronegame.v1.MatchDataPoints\"> & {\n /**\n * @generated from field: int64 match_id = 1;\n */\n matchId: bigint;\n\n /**\n * @generated from field: repeated dronegame.v1.MatchDataPoint data_points = 2;\n */\n dataPoints: MatchDataPoint[];\n\n /**\n * @generated from field: dronegame.v1.Score score = 3;\n */\n score?: Score;\n};\n\n/**\n * Describes the message dronegame.v1.MatchDataPoints.\n * Use `create(MatchDataPointsSchema)` to create a new message.\n */\nexport const MatchDataPointsSchema: GenMessage = /*@__PURE__*/\n messageDesc(file_dronegame_v1_matches, 2);\n\n","import { createContext } from '@lit/context'\nimport { Group, Object3DEventMap, PerspectiveCamera, Scene } from 'three'\nimport { GLTFLoader } from 'three/examples/jsm/Addons.js'\n\nexport const sceneContext = createContext(Symbol('scene'))\n\nexport const cameraContext = createContext(Symbol('camera'))\n\nexport const gltfAssetsContext = createContext>(\n Symbol('gltfAssets'),\n)\n\nexport const dimensionsContext = createContext<{\n width: number\n height: number\n}>({\n width: 0,\n height: 0,\n})\n\nexport const gltfLoaderContext = createContext(Symbol('gltfLoader'))\n","import { create, toBinary } from '@bufbuild/protobuf'\nimport { timestampNow } from '@bufbuild/protobuf/wkt'\nimport { ContextProvider } from '@lit/context'\nimport { css, html, LitElement } from 'lit'\n\nimport { customElement, property } from 'lit/decorators.js'\nimport { createRef, ref, Ref } from 'lit/directives/ref.js'\nimport {\n CameraHelper,\n CineonToneMapping,\n Color,\n EquirectangularReflectionMapping,\n Euler,\n Mesh,\n MeshBasicMaterial,\n MeshPhysicalMaterial,\n Object3D,\n PerspectiveCamera,\n Quaternion,\n Raycaster,\n Scene,\n SkinnedMesh,\n Sphere,\n TorusGeometry,\n Vector2,\n Vector3,\n WebGLRenderer,\n} from 'three'\nimport {\n DRACOLoader,\n GLTFLoader,\n RGBELoader,\n} from 'three/examples/jsm/Addons.js'\nimport { DEG2RAD, randFloat } from 'three/src/math/MathUtils.js'\nimport {\n MatchDataPoint,\n MatchDataPoint_Sensors_Entity,\n MatchDataPointSchema,\n} from '../api/dronegame/v1/matches_pb'\nimport {\n Quaternion as PBQuaternion,\n Vector3 as PBVector3,\n} from '../api/dronegame/v1/shared_pb'\nimport {\n cameraContext,\n dimensionsContext,\n gltfLoaderContext,\n sceneContext,\n} from './context'\nimport { Bullet, Drone } from './types'\n\nconst gravity = new Vector3(0, -3, 0)\nconst deadMaterial = new MeshPhysicalMaterial({\n color: Color.NAMES.red,\n metalness: 1,\n roughness: 0,\n})\n\n@customElement('drone-view')\nexport class DroneView extends LitElement {\n @property()\n matchId = 'unknown'\n\n @property({ type: Array<{ x: number; y: number; z: number }> })\n droneSpawnPoints = [{ x: 0, y: 0, z: 0 }]\n\n private scene = new ContextProvider(this, { context: sceneContext })\n private camera = new ContextProvider(this, { context: cameraContext })\n private dimensions = new ContextProvider(this, { context: dimensionsContext })\n private gltfLoader = new ContextProvider(this, { context: gltfLoaderContext })\n\n private canvasRef: Ref = createRef()\n private renderer!: WebGLRenderer\n private camHelper!: CameraHelper\n private camContainer!: Object3D\n private bulletMesh!: Mesh\n private bullets = new Array()\n private drones = new Array()\n\n private attempts = 0\n private misses = 0\n\n private isHdrLoaded = false\n\n private rafID: number | null = null\n\n constructor() {\n super()\n }\n\n private resize() {\n // requestAnimationFrame(() => {\n const canvas = this.canvasRef.value\n\n if (!canvas) throw new Error('canvasRef not found')\n if (!this.parentElement) throw new Error('parentElement not found')\n\n // fill the parent container\n const rect = this.parentElement.getBoundingClientRect()\n const { width, height } = rect\n\n this.renderer.setSize(width, height)\n\n this.dimensions.setValue({ width, height })\n this.renderer.setSize(width, height)\n\n this.camera.value.aspect = width / height\n this.camera.value.updateProjectionMatrix()\n // console.log('resize', width, height)\n // })\n }\n\n firstUpdated() {\n if (!this.canvasRef.value) throw new Error('canvasRef not found')\n\n const observer = new ResizeObserver(() => {\n this.resize()\n })\n observer.observe(this.parentElement as HTMLElement)\n\n this.addEventListener('drone-spawned', (evt) => {\n const droneEvent = evt as CustomEvent\n this.drones.push(droneEvent.detail)\n })\n\n // Setup control via orientation\n const q0 = new Quaternion()\n const q1 = new Quaternion(-Math.sqrt(0.5), 0, 0, Math.sqrt(0.5)) // - PI/2 around the x-axis\n const euler = new Euler()\n const zee = new Vector3(0, 0, 1)\n const baseBeta = 0\n\n const entityWorldQuaternion = new Quaternion()\n const entityWorldPosition = new Vector3()\n const objToDataPointEntity = (id: number, obj: Object3D) => {\n obj.getWorldQuaternion(entityWorldQuaternion)\n obj.getWorldPosition(entityWorldPosition)\n const entity = {\n id,\n orientation: {\n x: entityWorldQuaternion.x,\n y: entityWorldQuaternion.y,\n z: entityWorldQuaternion.z,\n w: entityWorldQuaternion.w,\n } as PBQuaternion,\n position: {\n x: entityWorldPosition.x,\n y: entityWorldPosition.y,\n z: entityWorldPosition.z,\n } as PBVector3,\n } as MatchDataPoint_Sensors_Entity\n return entity\n }\n\n // click to raycast\n const raycaster = new Raycaster()\n const pointer = new Vector2()\n\n window.addEventListener('deviceorientation', (event) => {\n const alpha = (event.alpha || 0) * DEG2RAD\n const beta = (event.beta || 0) * DEG2RAD\n const gamma = (event.gamma || 0) * DEG2RAD\n const { quaternion } = this.camera.value\n euler.set(beta, alpha, -gamma, 'YXZ') // 'ZXY' for the device, but 'YXZ' for us\n quaternion.setFromEuler(euler) // orient the device\n quaternion.multiply(q1) // camera looks out the back of the device, not the top\n quaternion.multiply(q0.setFromAxisAngle(zee, -baseBeta)) // adjust for screen orientation\n this.camHelper.update()\n\n const { aspect: aspectRatio, fov, near, far } = this.camera.value\n\n sendMatchData(\n this.matchId,\n create(MatchDataPointSchema, {\n timestamp: timestampNow(),\n event: {\n case: 'data',\n value: {\n camera: {\n entity: objToDataPointEntity(100_001, this.camera.value),\n aspectRatio,\n fov,\n near,\n far,\n },\n bullets: this.bullets.map((b, i) =>\n objToDataPointEntity(1000 + i, b.basketball),\n ),\n drones: this.drones.map((d, i) => {\n const x = d.instance\n const sm = x.children[0].children[0] as SkinnedMesh\n const rootBone = sm.skeleton.bones[0]\n return objToDataPointEntity(i, rootBone)\n }),\n },\n },\n }),\n )\n })\n\n this.canvasRef.value.addEventListener('click', async () => {\n this.attempts++\n this.misses++\n raycaster.setFromCamera(pointer, this.camera.value)\n\n raycaster.ray.direction\n\n if (!this.bulletMesh) return\n const container = new Object3D()\n container.position.copy(\n raycaster.ray.direction.clone().multiplyScalar(10),\n )\n const basketball = this.bulletMesh.clone()\n basketball.rotation.set(\n randFloat(0, Math.PI * 2),\n randFloat(0, Math.PI * 2),\n randFloat(0, Math.PI * 2),\n )\n container.add(basketball)\n this.scene.value.add(container)\n\n const acceleration = raycaster.ray.direction.clone().multiplyScalar(8)\n this.bullets.push({\n container,\n basketball,\n acceleration,\n time: 0,\n })\n const orientation = this.camHelper.quaternion\n\n sendMatchData(\n this.matchId,\n create(MatchDataPointSchema, {\n timestamp: timestampNow(),\n event: { case: 'shot', value: { acceleration, orientation } },\n }),\n )\n })\n\n requestAnimationFrame(() => {\n this.renderer = new WebGLRenderer({\n canvas: this.canvasRef.value,\n antialias: true,\n })\n this.renderer.toneMapping = CineonToneMapping\n this.renderer.toneMappingExposure = 1\n\n this.scene.setValue(new Scene())\n this.scene.value.background = new Color(0x2e222f)\n this.camera.value = new PerspectiveCamera(75, 1, 0.1, 1000)\n\n const dracoLoader = new DRACOLoader()\n dracoLoader.setDecoderPath(\n 'https://www.gstatic.com/draco/versioned/decoders/1.5.7/',\n )\n dracoLoader.preload()\n\n this.gltfLoader.setValue(new GLTFLoader())\n this.gltfLoader.value.setDRACOLoader(dracoLoader)\n\n this.gltfLoader.value.load('/static/models/message.glb', (gltf) => {\n this.bulletMesh = gltf.scene.getObjectByName('bullet') as Mesh\n if (!this.bulletMesh) throw new Error('bulletMesh not found')\n })\n\n const { clientWidth, clientHeight } = this.canvasRef.value ?? {\n clientWidth: 0,\n clientHeight: 0,\n }\n this.camera.value = new PerspectiveCamera(\n 75,\n clientWidth / clientHeight,\n 1,\n 500,\n )\n this.camera.value.updateProjectionMatrix()\n this.camContainer = new Object3D()\n this.scene.value.add(this.camContainer)\n this.camContainer.add(this.camera.value)\n this.camContainer.lookAt(0, 0, 30)\n this.camHelper = new CameraHelper(this.camera.value)\n // camHelper.visible = false\n this.camContainer.add(this.camHelper)\n\n // Create target\n const r = 0.5\n const ir = r / 8\n const targetGeo = new TorusGeometry(r, ir, 4, 32)\n const targetMat = new MeshBasicMaterial({ color: Color.NAMES.cadetblue })\n const target = new Mesh(targetGeo, targetMat)\n target.position.set(0, 0, -20)\n this.scene.value.add(target)\n this.camHelper.add(target)\n\n // Load HDRI\n new RGBELoader().load(\n '/static/images/textures/kloppenheim_02_puresky_1k.hdr',\n (texture) => {\n texture.mapping = EquirectangularReflectionMapping\n this.scene.value.background = texture\n this.scene.value.environment = texture\n this.isHdrLoaded = true\n this.totalTime = 0\n },\n )\n\n this.resize()\n this.renderFrame()\n })\n }\n\n private lastTime = performance.now()\n private totalTime = 0\n private bulletCollisionSphere = new Sphere(new Vector3(), 1)\n private renderFrame() {\n const time = performance.now()\n const deltaTime = time - this.lastTime\n this.lastTime = time\n this.totalTime += deltaTime\n if (this.isHdrLoaded) {\n // TODO!\n // rightDisplay.value = `${(this.totalTime / 1000).toFixed(1)}s`\n }\n\n const deltaSeconds = deltaTime / 1000\n const gravityTimeSlice = gravity.clone().multiplyScalar(deltaSeconds)\n\n this.drones.forEach((drone) => {\n drone.mixer.update(deltaSeconds)\n const root = drone.mixer.getRoot()\n if (root instanceof Object3D) {\n const sm = root.children[0].children[0] as SkinnedMesh\n sm.skeleton.bones[0].getWorldPosition(drone.collisionSphere.center)\n drone.collisionSphere.center.y += drone.collisionSphere.radius\n }\n })\n\n // update bullets\n this.bullets.forEach((bullet) => {\n bullet.time += deltaSeconds\n const { container, basketball, acceleration, time } = bullet\n const velocity = acceleration.clone().multiplyScalar(time)\n container.position.add(velocity)\n\n // gravity\n bullet.acceleration.add(gravityTimeSlice)\n\n basketball.rotation.x += 5 * deltaSeconds\n basketball.rotation.y += 5 * deltaSeconds\n basketball.rotation.z += 5 * deltaSeconds\n\n // check for collision\n basketball.getWorldPosition(this.bulletCollisionSphere.center)\n\n let shouldRemove = false\n this.drones.forEach((drone) => {\n if (\n drone.collisionSphere.intersectsSphere(this.bulletCollisionSphere)\n // | drone.isAlive // for testing\n ) {\n // remove drone\n drone.instance.traverse((child) => {\n if (child instanceof Mesh) {\n child.material = deadMaterial\n }\n })\n drone.idleAction.crossFadeTo(drone.dieAction, 0.25, true)\n drone.dieAction.play()\n\n drone.mixer.addEventListener('finished', (evt) => {\n if (evt.action !== drone.dieAction) return\n this.scene.value.remove(drone.instance)\n drone.isAlive = false\n })\n drone.collisionSphere.radius = 0\n drone.collisionSphere.center.set(0, -1000, 0)\n this.misses--\n\n const total = this.drones.length\n const hits = this.attempts - this.misses\n const left = total - hits\n\n shouldRemove = true\n const data = create(MatchDataPointSchema, {\n event: {\n case: 'hit',\n value: {\n distance: drone.collisionSphere.center.distanceTo(\n this.bulletCollisionSphere.center,\n ),\n droneId: drone.id,\n isLastDrone: left === 0,\n },\n },\n })\n\n if (left) {\n sendMatchData(this.matchId, data)\n } else {\n ;(async () => {\n await sendMatchData(this.matchId, data)\n window.location.href = `/matches/${this.matchId}`\n })()\n }\n }\n })\n\n if (shouldRemove || container.position.distanceTo(new Vector3()) > 200) {\n // remove bullet\n this.scene.value.remove(bullet.container)\n this.bullets.splice(this.bullets.indexOf(bullet), 1)\n }\n })\n\n this.camHelper.update()\n this.renderer.render(this.scene.value, this.camera.value)\n this.rafID = requestAnimationFrame(this.renderFrame.bind(this))\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n if (this.rafID) cancelAnimationFrame(this.rafID)\n }\n\n static styles = css`\n canvas {\n width: 100%;\n height: 100%;\n display: block;\n }\n `\n\n render() {\n return html`\n \n \n \n `\n }\n}\n\nasync function sendMatchData(matchID: string, data: MatchDataPoint) {\n if (!matchID) return\n\n return await fetch(`/matches/${matchID}/sensors`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: toBinary(MatchDataPointSchema, data),\n })\n}\n","import { Datastar } from '@sudodevnull/datastar'\nimport {\n Color,\n IcosahedronGeometry,\n MeshBasicMaterial,\n Object3D,\n TorusGeometry,\n} from 'three'\n\nexport const bulletGeo = new IcosahedronGeometry(2, 0)\nbulletGeo.name = 'bullet'\nexport const bulletMat = new MeshBasicMaterial({\n color: hslVarToColor('a'),\n wireframe: true,\n})\n\nexport const droneGeo = new TorusGeometry(4, 1, 3, 6)\ndroneGeo.name = 'drone'\nexport const droneMat = new MeshBasicMaterial({\n color: hslVarToColor('p'),\n wireframe: true,\n})\n\nexport interface XForm {\n obj: Object3D\n times: number[]\n positionValues: number[]\n orientationValues: number[]\n visibilityValues: {\n times: number[]\n values: boolean[]\n }\n}\n\nexport function hslVarToColor(hslVar: string) {\n const bgHSLRaw = getComputedStyle(document.documentElement).getPropertyValue(\n `--${hslVar}`,\n )\n const bgHSLParts = bgHSLRaw.split(' ')\n const h = parseInt(bgHSLParts[0]) / 360\n const s = parseInt(bgHSLParts[1].split('%')[0]) / 100\n const l = parseInt(bgHSLParts[2].split('%')[0]) / 100\n return new Color().setHSL(h, s, l)\n}\n\nlet ds: Datastar | null = null\nexport async function waitForDatastar(): Promise {\n if (ds) return ds\n\n const windowAny = window as any\n while (true) {\n if (windowAny.ds) {\n ds = windowAny.ds\n break\n } else {\n await new Promise((resolve) => setTimeout(resolve, 100))\n }\n }\n\n if (!ds) throw new Error('Failed to find Datastar')\n return ds\n}\n","import { fromBinary } from '@bufbuild/protobuf'\nimport { timestampMs } from '@bufbuild/protobuf/wkt'\nimport { css, html, LitElement, PropertyValues } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { createRef, Ref, ref } from 'lit/directives/ref.js'\nimport {\n CameraHelper,\n DoubleSide,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n PerspectiveCamera,\n PlaneGeometry,\n PolarGridHelper,\n Scene,\n WebGLRenderer,\n} from 'three'\nimport { OrbitControls } from 'three/examples/jsm/Addons.js'\nimport {\n MatchDataPoint_Sensors_Entity,\n MatchDataPointsSchema,\n} from '../api/dronegame/v1/matches_pb'\nimport {\n bulletGeo,\n bulletMat,\n droneGeo,\n droneMat,\n hslVarToColor,\n waitForDatastar,\n} from './utils'\n\nconst hitDroneMat = new MeshBasicMaterial({\n color: hslVarToColor('er'),\n wireframe: true,\n})\n\n@customElement('match-live')\nexport class MatchLive extends LitElement {\n @property({ type: String }) b64 = ''\n\n private canvasRef: Ref = createRef()\n\n private renderer!: WebGLRenderer\n private scene = new Scene()\n private cam!: PerspectiveCamera\n private userCamera!: PerspectiveCamera\n private userCameraHelper!: CameraHelper\n private cameraPlane!: Mesh\n private controls!: OrbitControls\n private aliveBulletIds = new Set()\n private aliveDroneIds = new Set()\n private currentMatchID = 0n\n private currentMessageCount = 0\n private currentSensorCount = 0\n\n protected firstUpdated(_changedProperties: PropertyValues): void {\n requestAnimationFrame(async () => {\n this.renderer = new WebGLRenderer({\n antialias: true,\n alpha: true,\n canvas: this.canvasRef.value,\n })\n this.cam = new PerspectiveCamera(90, 1, 0.1, 1000)\n this.cam.position.set(0, 30, 50)\n this.cam.lookAt(0, 0, 0)\n this.controls = new OrbitControls(this.cam, this.renderer.domElement)\n this.controls.listenToKeyEvents(window)\n this.controls.enableDamping = true\n this.controls.dampingFactor = 0.05\n this.controls.screenSpacePanning = false\n this.controls.minDistance = 50\n this.controls.maxDistance = 500\n this.controls.maxPolarAngle = Math.PI / 2\n this.controls.target.set(0, 0, 0)\n\n if (!this.canvasRef.value) throw new Error('canvasRef not found')\n const aspect = this.canvasRef.value.width / this.canvasRef.value.height\n this.userCamera = new PerspectiveCamera(75, aspect, 0.1, 100)\n this.userCameraHelper = new CameraHelper(this.userCamera)\n this.userCameraHelper.name = 'cameraHelper'\n this.userCameraHelper.visible = false\n this.scene.add(this.userCameraHelper)\n\n const helper = new PolarGridHelper(100, 10)\n this.scene.add(helper)\n helper.position.y = -10\n\n const geometry = new PlaneGeometry(1, 1, 9, 16)\n const material = new MeshBasicMaterial({\n color: hslVarToColor('a'),\n side: DoubleSide,\n wireframe: true,\n })\n this.cameraPlane = new Mesh(geometry, material)\n this.scene.add(this.cameraPlane)\n\n const observer = new ResizeObserver(() => {\n this.resize()\n })\n observer.observe(this.parentElement as HTMLElement)\n this.resize()\n\n let lastTime = performance.now()\n const render = () => {\n requestAnimationFrame(render)\n const now = performance.now()\n const deltaTime = now - lastTime\n const deltaTimeSec = deltaTime / 1000\n lastTime = now\n\n this.controls.update(deltaTimeSec)\n this.userCameraHelper.update()\n this.renderer.render(this.scene, this.cam)\n }\n render()\n })\n }\n\n attributeChangedCallback(\n name: string,\n _old: string | null,\n value: string | null,\n ): void {\n if (name !== 'b64' || !!!value?.length) return\n\n // convert b64 to uint8array\n const arr = new Uint8Array(\n atob(value)\n .split('')\n .map((c) => c.charCodeAt(0)),\n )\n const mdp = fromBinary(MatchDataPointsSchema, arr)\n\n const setFromEntity = (\n obj: Object3D,\n entity?: MatchDataPoint_Sensors_Entity,\n ) => {\n if (entity?.position) {\n const p = entity.position\n obj.position.set(p.x, p.y, p.z)\n this.currentSensorCount += 3\n }\n if (entity?.orientation) {\n const o = entity.orientation\n obj.quaternion.set(o.x, o.y, o.z, o.w)\n this.currentSensorCount += 4\n }\n }\n\n if (mdp.dataPoints.length === 0) {\n return\n }\n\n if (mdp.matchId !== this.currentMatchID) {\n this.currentMatchID = mdp.matchId\n this.currentMessageCount = 0\n this.currentSensorCount = 0\n } else {\n this.currentMessageCount++\n }\n\n const dp = mdp.dataPoints[mdp.dataPoints.length - 1]\n switch (dp.event.case) {\n case 'hit':\n const { droneId } = dp.event.value\n const id = `drone-${droneId}`\n const mesh = this.scene.getObjectByName(id) as Mesh\n if (!mesh) {\n console.error(`Could not find drone ${id}!`)\n } else {\n mesh.material = hitDroneMat\n }\n break\n\n case 'data':\n const v = dp.event.value\n\n if (v.camera) {\n this.userCamera.fov = v.camera.fov\n this.userCamera.near = v.camera.near\n this.userCamera.far = v.camera.far\n this.userCamera.aspect = v.camera.aspectRatio\n this.userCamera.updateProjectionMatrix()\n\n // setFromEntity(this.userCameraHelper, v.camera?.entity)\n\n this.currentSensorCount += 4\n\n setFromEntity(this.cameraPlane, v.camera?.entity)\n this.cameraPlane.scale.set(v.camera.aspectRatio, 1, 1)\n this.cameraPlane.scale.multiplyScalar(10)\n }\n\n const removedBulletIds = new Set()\n for (const id of this.aliveBulletIds) {\n removedBulletIds.add(id)\n }\n for (const bullet of v.bullets) {\n const id = bullet.id\n if (!this.aliveBulletIds.has(id)) {\n const mesh = new Mesh(bulletGeo, bulletMat)\n mesh.name = `bullet-${id}`\n this.scene.add(mesh)\n this.aliveBulletIds.add(id)\n }\n const mesh = this.scene.getObjectByName(`bullet-${id}`) as Mesh\n setFromEntity(mesh, bullet)\n\n removedBulletIds.delete(id)\n }\n removedBulletIds.forEach((id) => {\n const mesh = this.scene.getObjectByName(`bullet-${id}`) as Mesh\n this.scene.remove(mesh)\n this.aliveBulletIds.delete(id)\n })\n\n const removedDroneIds = new Set()\n for (const id of this.aliveDroneIds) {\n removedDroneIds.add(id)\n }\n for (const drone of v.drones) {\n const id = drone.id\n if (!this.aliveDroneIds.has(id)) {\n const mesh = new Mesh(droneGeo, droneMat)\n mesh.name = `drone-${id}`\n console.log('adding drone', mesh.name)\n this.scene.add(mesh)\n this.aliveDroneIds.add(id)\n }\n const mesh = this.scene.getObjectByName(`drone-${id}`) as Mesh\n setFromEntity(mesh, drone)\n\n removedDroneIds.delete(id)\n }\n removedDroneIds.forEach((id) => {\n const mesh = this.scene.getObjectByName(`drone-${id}`) as Mesh\n this.scene.remove(mesh)\n this.aliveDroneIds.delete(id)\n })\n break\n }\n\n ;(async () => {\n const delta = Date.now() - (dp.timestamp ? timestampMs(dp.timestamp) : 0)\n\n const matchInfoStr = `Match ${\n mdp.matchId\n } - Last update ${delta}ms ago - ${this.currentMessageCount.toLocaleString()} messages - ${this.currentSensorCount.toLocaleString()} sensors`\n\n const ds = await waitForDatastar()\n if (!ds) throw new Error('ds not found')\n const matchInfo = ds.signalByName('matchInfo')\n matchInfo.value = matchInfoStr\n })()\n }\n\n private resize() {\n if (!this.parentElement) throw new Error('parentElement not found')\n const { width, height } = this.parentElement.getBoundingClientRect()\n this.renderer.setSize(width, height)\n this.cam.aspect = width / height\n this.cam.updateProjectionMatrix()\n // console.log('resize', width, height)\n }\n\n static styles = css`\n canvas {\n width: 100%;\n height: 100%;\n display: block;\n }\n `\n\n render() {\n return html`\n \n \n \n `\n }\n}\n","import{notEqual as t}from\"@lit/reactive-element\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s={INITIAL:0,PENDING:1,COMPLETE:2,ERROR:3},i=Symbol();class h{get taskComplete(){return this.t||(1===this.i?this.t=new Promise(((t,s)=>{this.o=t,this.h=s})):3===this.i?this.t=Promise.reject(this.l):this.t=Promise.resolve(this.u)),this.t}constructor(t,s,i){this.p=0,this.i=0,(this._=t).addController(this);const h=\"object\"==typeof s?s:{task:s,args:i};this.v=h.task,this.j=h.args,this.m=h.argsEqual??r,this.k=h.onComplete,this.A=h.onError,this.autoRun=h.autoRun??!0,\"initialValue\"in h&&(this.u=h.initialValue,this.i=2,this.O=this.T?.())}hostUpdate(){!0===this.autoRun&&this.S()}hostUpdated(){\"afterUpdate\"===this.autoRun&&this.S()}T(){if(void 0===this.j)return;const t=this.j();if(!Array.isArray(t))throw Error(\"The args function must return an array\");return t}async S(){const t=this.T(),s=this.O;this.O=t,t===s||void 0===t||void 0!==s&&this.m(s,t)||await this.run(t)}async run(t){let s,h;t??=this.T(),this.O=t,1===this.i?this.q?.abort():(this.t=void 0,this.o=void 0,this.h=void 0),this.i=1,\"afterUpdate\"===this.autoRun?queueMicrotask((()=>this._.requestUpdate())):this._.requestUpdate();const r=++this.p;this.q=new AbortController;let e=!1;try{s=await this.v(t,{signal:this.q.signal})}catch(t){e=!0,h=t}if(this.p===r){if(s===i)this.i=0;else{if(!1===e){try{this.k?.(s)}catch{}this.i=2,this.o?.(s)}else{try{this.A?.(h)}catch{}this.i=3,this.h?.(h)}this.u=s,this.l=h}this._.requestUpdate()}}abort(t){1===this.i&&this.q?.abort(t)}get value(){return this.u}get error(){return this.l}get status(){return this.i}render(t){switch(this.i){case 0:return t.initial?.();case 1:return t.pending?.();case 2:return t.complete?.(this.value);case 3:return t.error?.(this.error);default:throw Error(\"Unexpected status: \"+this.i)}}}const r=(s,i)=>s===i||s.length===i.length&&s.every(((s,h)=>!t(s,i[h])));export{h as Task,s as TaskStatus,i as initialState,r as shallowArrayEquals};\n//# sourceMappingURL=task.js.map\n","/**\n * filesize\n *\n * @copyright 2024 Jason Mulligan \n * @license BSD-3-Clause\n * @version 10.1.6\n */\nconst ARRAY = \"array\";\r\nconst BIT = \"bit\";\r\nconst BITS = \"bits\";\r\nconst BYTE = \"byte\";\r\nconst BYTES = \"bytes\";\r\nconst EMPTY = \"\";\r\nconst EXPONENT = \"exponent\";\r\nconst FUNCTION = \"function\";\r\nconst IEC = \"iec\";\r\nconst INVALID_NUMBER = \"Invalid number\";\r\nconst INVALID_ROUND = \"Invalid rounding method\";\r\nconst JEDEC = \"jedec\";\r\nconst OBJECT = \"object\";\r\nconst PERIOD = \".\";\r\nconst ROUND = \"round\";\r\nconst S = \"s\";\r\nconst SI = \"si\";\r\nconst SI_KBIT = \"kbit\";\r\nconst SI_KBYTE = \"kB\";\r\nconst SPACE = \" \";\r\nconst STRING = \"string\";\r\nconst ZERO = \"0\";\r\nconst STRINGS = {\r\n\tsymbol: {\r\n\t\tiec: {\r\n\t\t\tbits: [\"bit\", \"Kibit\", \"Mibit\", \"Gibit\", \"Tibit\", \"Pibit\", \"Eibit\", \"Zibit\", \"Yibit\"],\r\n\t\t\tbytes: [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\", \"EiB\", \"ZiB\", \"YiB\"]\r\n\t\t},\r\n\t\tjedec: {\r\n\t\t\tbits: [\"bit\", \"Kbit\", \"Mbit\", \"Gbit\", \"Tbit\", \"Pbit\", \"Ebit\", \"Zbit\", \"Ybit\"],\r\n\t\t\tbytes: [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"]\r\n\t\t}\r\n\t},\r\n\tfullform: {\r\n\t\tiec: [\"\", \"kibi\", \"mebi\", \"gibi\", \"tebi\", \"pebi\", \"exbi\", \"zebi\", \"yobi\"],\r\n\t\tjedec: [\"\", \"kilo\", \"mega\", \"giga\", \"tera\", \"peta\", \"exa\", \"zetta\", \"yotta\"]\r\n\t}\r\n};function filesize (arg, {\r\n\tbits = false,\r\n\tpad = false,\r\n\tbase = -1,\r\n\tround = 2,\r\n\tlocale = EMPTY,\r\n\tlocaleOptions = {},\r\n\tseparator = EMPTY,\r\n\tspacer = SPACE,\r\n\tsymbols = {},\r\n\tstandard = EMPTY,\r\n\toutput = STRING,\r\n\tfullform = false,\r\n\tfullforms = [],\r\n\texponent = -1,\r\n\troundingMethod = ROUND,\r\n\tprecision = 0\r\n} = {}) {\r\n\tlet e = exponent,\r\n\t\tnum = Number(arg),\r\n\t\tresult = [],\r\n\t\tval = 0,\r\n\t\tu = EMPTY;\r\n\r\n\t// Sync base & standard\r\n\tif (standard === SI) {\r\n\t\tbase = 10;\r\n\t\tstandard = JEDEC;\r\n\t} else if (standard === IEC || standard === JEDEC) {\r\n\t\tbase = 2;\r\n\t} else if (base === 2) {\r\n\t\tstandard = IEC;\r\n\t} else {\r\n\t\tbase = 10;\r\n\t\tstandard = JEDEC;\r\n\t}\r\n\r\n\tconst ceil = base === 10 ? 1000 : 1024,\r\n\t\tfull = fullform === true,\r\n\t\tneg = num < 0,\r\n\t\troundingFunc = Math[roundingMethod];\r\n\r\n\tif (typeof arg !== \"bigint\" && isNaN(arg)) {\r\n\t\tthrow new TypeError(INVALID_NUMBER);\r\n\t}\r\n\r\n\tif (typeof roundingFunc !== FUNCTION) {\r\n\t\tthrow new TypeError(INVALID_ROUND);\r\n\t}\r\n\r\n\t// Flipping a negative number to determine the size\r\n\tif (neg) {\r\n\t\tnum = -num;\r\n\t}\r\n\r\n\t// Determining the exponent\r\n\tif (e === -1 || isNaN(e)) {\r\n\t\te = Math.floor(Math.log(num) / Math.log(ceil));\r\n\r\n\t\tif (e < 0) {\r\n\t\t\te = 0;\r\n\t\t}\r\n\t}\r\n\r\n\t// Exceeding supported length, time to reduce & multiply\r\n\tif (e > 8) {\r\n\t\tif (precision > 0) {\r\n\t\t\tprecision += 8 - e;\r\n\t\t}\r\n\r\n\t\te = 8;\r\n\t}\r\n\r\n\tif (output === EXPONENT) {\r\n\t\treturn e;\r\n\t}\r\n\r\n\t// Zero is now a special case because bytes divide by 1\r\n\tif (num === 0) {\r\n\t\tresult[0] = 0;\r\n\t\tu = result[1] = STRINGS.symbol[standard][bits ? BITS : BYTES][e];\r\n\t} else {\r\n\t\tval = num / (base === 2 ? Math.pow(2, e * 10) : Math.pow(1000, e));\r\n\r\n\t\tif (bits) {\r\n\t\t\tval = val * 8;\r\n\r\n\t\t\tif (val >= ceil && e < 8) {\r\n\t\t\t\tval = val / ceil;\r\n\t\t\t\te++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst p = Math.pow(10, e > 0 ? round : 0);\r\n\t\tresult[0] = roundingFunc(val * p) / p;\r\n\r\n\t\tif (result[0] === ceil && e < 8 && exponent === -1) {\r\n\t\t\tresult[0] = 1;\r\n\t\t\te++;\r\n\t\t}\r\n\r\n\t\tu = result[1] = base === 10 && e === 1 ? bits ? SI_KBIT : SI_KBYTE : STRINGS.symbol[standard][bits ? BITS : BYTES][e];\r\n\t}\r\n\r\n\t// Decorating a 'diff'\r\n\tif (neg) {\r\n\t\tresult[0] = -result[0];\r\n\t}\r\n\r\n\t// Setting optional precision\r\n\tif (precision > 0) {\r\n\t\tresult[0] = result[0].toPrecision(precision);\r\n\t}\r\n\r\n\t// Applying custom symbol\r\n\tresult[1] = symbols[result[1]] || result[1];\r\n\r\n\tif (locale === true) {\r\n\t\tresult[0] = result[0].toLocaleString();\r\n\t} else if (locale.length > 0) {\r\n\t\tresult[0] = result[0].toLocaleString(locale, localeOptions);\r\n\t} else if (separator.length > 0) {\r\n\t\tresult[0] = result[0].toString().replace(PERIOD, separator);\r\n\t}\r\n\r\n\tif (pad && round > 0) {\r\n\t\tconst i = result[0].toString(),\r\n\t\t\tx = separator || ((i.match(/(\\D)/g) || []).pop() || PERIOD),\r\n\t\t\ttmp = i.toString().split(x),\r\n\t\t\ts = tmp[1] || EMPTY,\r\n\t\t\tl = s.length,\r\n\t\t\tn = round - l;\r\n\r\n\t\tresult[0] = `${tmp[0]}${x}${s.padEnd(l + n, ZERO)}`;\r\n\t}\r\n\r\n\tif (full) {\r\n\t\tresult[1] = fullforms[e] ? fullforms[e] : STRINGS.fullform[standard][e] + (bits ? BIT : BYTE) + (result[0] === 1 ? EMPTY : S);\r\n\t}\r\n\r\n\t// Returning Array, Object, or String (default)\r\n\treturn output === ARRAY ? result : output === OBJECT ? {\r\n\t\tvalue: result[0],\r\n\t\tsymbol: result[1],\r\n\t\texponent: e,\r\n\t\tunit: u\r\n\t} : result.join(spacer);\r\n}\r\n\r\n// Partial application for functional programming\r\nfunction partial ({\r\n\tbits = false,\r\n\tpad = false,\r\n\tbase = -1,\r\n\tround = 2,\r\n\tlocale = EMPTY,\r\n\tlocaleOptions = {},\r\n\tseparator = EMPTY,\r\n\tspacer = SPACE,\r\n\tsymbols = {},\r\n\tstandard = EMPTY,\r\n\toutput = STRING,\r\n\tfullform = false,\r\n\tfullforms = [],\r\n\texponent = -1,\r\n\troundingMethod = ROUND,\r\n\tprecision = 0\r\n} = {}) {\r\n\treturn arg => filesize(arg, {\r\n\t\tbits,\r\n\t\tpad,\r\n\t\tbase,\r\n\t\tround,\r\n\t\tlocale,\r\n\t\tlocaleOptions,\r\n\t\tseparator,\r\n\t\tspacer,\r\n\t\tsymbols,\r\n\t\tstandard,\r\n\t\toutput,\r\n\t\tfullform,\r\n\t\tfullforms,\r\n\t\texponent,\r\n\t\troundingMethod,\r\n\t\tprecision\r\n\t});\r\n}export{filesize,partial};","export const ceil = Math.ceil\nexport const floor = Math.floor\nexport const pow = Math.pow\nexport const sqrt = Math.sqrt\nexport const sin = Math.sin\nexport const sinh = Math.sinh\nexport const asinh = Math.asinh\nexport const asin = Math.asin\nexport const cos = Math.cos\nexport const acos = Math.acos\nexport const tan = Math.tan\nexport const tanh = Math.tanh\nexport const atan = Math.atan\nexport const atan2 = Math.atan2\nexport const min = Math.min\nexport const max = Math.max\nexport const abs = Math.abs\nexport const exp = Math.exp\nexport const log = Math.log\nexport const log10 = Math.log10\nexport const log2 = Math.log2\nexport const rand = Math.random\nexport const PI = Math.PI\nexport const Tau = 2 * PI\nexport const epsilon = 0.0001\nexport const deg2Rad = Tau / 360\nexport const rad2Deg = 360 / Tau\nexport const round = Math.round\nexport const one60x18 = 10n ** 18n\n\nexport const toRad = (value: number): number => (value * PI) / 180\nexport const toDeg = (value: number): number => (value * 180) / PI\n\n// Linear mapping from range to range \nexport function fit(\n x: number,\n oldMin: number,\n oldMax: number,\n newMin: number,\n newMax: number,\n): number {\n return newMin + ((x - oldMin) * (newMax - newMin)) / (oldMax - oldMin)\n}\n\nexport function fit01(x: number, newMin: number, newMax: number): number {\n return fit(x, 0, 1, newMin, newMax)\n}\n\nexport function roundFit01(x: number, newMin: number, newMax: number): number {\n return round(fit01(x, newMin, newMax))\n}\n\nexport function fitMax(x: number, newMax: number): number {\n return fit01(x, 0, newMax)\n}\n\nexport function clamp(v: number, minimum: number, maximum: number): number {\n let realMin = minimum\n let realMax = maximum\n if (maximum < realMin) {\n realMin = maximum\n realMax = minimum\n }\n return max(realMin, min(realMax, v))\n}\n\nexport function clampFit(\n x: number,\n oldMin: number,\n oldMax: number,\n newMin: number,\n newMax: number,\n): number {\n const f = fit(x, oldMin, oldMax, newMin, newMax)\n return clamp(f, newMin, newMax)\n}\n\nexport function clampFit01(x: number, newMin: number, newMax: number): number {\n const f = fit01(x, newMin, newMax)\n return clamp(f, newMin, newMax)\n}\n\nexport function clamp01(v: number): number {\n return clamp(v, 0, 1)\n}\n\nexport function fitArray(\n arr: ArrayLike,\n oldMin: number,\n oldMax: number,\n newMin: number,\n newMax: number,\n): Array {\n const l = arr.length\n const out = new Array(l)\n for (let i = 0; i < l; i++) {\n out[i] = fit(arr[i], oldMin, oldMax, newMin, newMax)\n }\n return out\n}\n\nexport function randRange(min: number, max: number, int = false): number {\n const n = clamp(rand() * max, min, max)\n if (int) return floor(n)\n return n\n}\n\nexport const alphaNumeric =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n\nexport function randID(length = 16): string {\n const result = new Array()\n for (let i = 0; i < length; i++) {\n result.push(\n alphaNumeric.charAt(Math.floor(Math.random() * alphaNumeric.length)),\n )\n }\n return result.join('')\n}\n","import { fromBinary } from '@bufbuild/protobuf'\nimport { timestampMs } from '@bufbuild/protobuf/wkt'\nimport { Task } from '@lit/task'\nimport { Datastar } from '@sudodevnull/datastar'\nimport { filesize } from 'filesize'\nimport { css, html, LitElement, PropertyValues } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { createRef, ref, Ref } from 'lit/directives/ref.js'\nimport {\n AnimationAction,\n AnimationClip,\n AnimationMixer,\n BooleanKeyframeTrack,\n CameraHelper,\n KeyframeTrack,\n Mesh,\n NumberKeyframeTrack,\n Object3D,\n PerspectiveCamera,\n PolarGridHelper,\n Quaternion,\n QuaternionKeyframeTrack,\n Scene,\n VectorKeyframeTrack,\n WebGLRenderer,\n} from 'three'\nimport { OrbitControls } from 'three/examples/jsm/Addons.js'\nimport {\n MatchDataPoint_Sensors_Entity,\n MatchDataPointsSchema,\n} from '../api/dronegame/v1/matches_pb'\nimport { fit, max, round, sqrt } from './math'\nimport {\n bulletGeo,\n bulletMat,\n droneGeo,\n droneMat,\n waitForDatastar,\n XForm,\n} from './utils'\n\n@customElement('match-replay')\nexport class MatchReplay extends LitElement {\n @property({ attribute: 'match-id' })\n matchId = 'unknown'\n\n private canvasRef: Ref = createRef()\n\n renderer!: WebGLRenderer\n scene = new Scene()\n keyframeTracks = new Array()\n xforms = new Map()\n aliveBulletIds = new Set()\n aliveDroneIds = new Set()\n prevCamRotation = new Quaternion()\n currentCamRotation = new Quaternion()\n userCamera!: PerspectiveCamera\n cam!: PerspectiveCamera\n cameraHelper!: CameraHelper\n controls!: OrbitControls\n maxDistance = 0\n\n cameraXform = {\n times: new Array(),\n fovValues: new Array(),\n aspectValues: new Array(),\n nearValues: new Array(),\n farValues: new Array(),\n }\n visibilityValues = new Map()\n\n private loadDataPoints = new Task(this, {\n task: async ([matchId], { signal }) => {\n const startRes = performance.now()\n const res = await fetch(`/matches/${matchId}/datapoints`, { signal })\n if (!res.ok) throw new Error('Failed to fetch data points')\n\n const buf = await res.arrayBuffer()\n const arr = new Uint8Array(buf)\n const matchInfo = fromBinary(MatchDataPointsSchema, arr)\n const endRes = performance.now()\n\n const ds = await waitForDatastar()\n ds.signalByName('totalSizeBytes').value = filesize(arr.byteLength)\n ds.signalByName('retrievalTimeMs').value = endRes - startRes\n\n const slider = ds.signalByName('slider')\n const misses = ds.signalByName('misses')\n const totalCameraRotationRadians = ds.signalByName(\n 'totalCameraRotationRadians',\n )\n const messageCount = ds.signalByName('messageCount')\n\n let timeOffset = 0\n let firstCameraDataPoint = true\n const parseDataPointsStart = performance.now()\n matchInfo.dataPoints.forEach((dp) => {\n const time = dp.timestamp ? timestampMs(dp.timestamp) : 0\n const offsetTime = time - timeOffset\n const offsetTimeInSeconds = offsetTime / 1000\n\n switch (dp.event.case) {\n case 'start':\n timeOffset = time\n break\n case 'data':\n const v = dp.event.value\n\n const killedBulletIds = new Set(this.aliveBulletIds)\n v.bullets.forEach((bulletData) => {\n const wasBorn = this.aliveBulletIds.has(bulletData.id)\n const xForm = this.upsertXForm(\n ds,\n () => new Mesh(bulletGeo, bulletMat),\n 'bullet',\n bulletData,\n offsetTimeInSeconds,\n )\n\n if (wasBorn) {\n xForm.visibilityValues.times.push(offsetTimeInSeconds - 0.001)\n xForm.visibilityValues.values.push(false)\n xForm.visibilityValues.times.push(offsetTimeInSeconds)\n xForm.visibilityValues.values.push(true)\n }\n this.aliveBulletIds.add(bulletData.id)\n killedBulletIds.delete(bulletData.id)\n })\n killedBulletIds.forEach((id) => {\n const name = `bullet-${id}`\n const xForm = this.xforms.get(name)\n if (!xForm) throw new Error(`Missing xForm for bullet ${id}`)\n\n xForm.visibilityValues.times.push(offsetTimeInSeconds - 0.001)\n xForm.visibilityValues.values.push(true)\n xForm.visibilityValues.times.push(offsetTimeInSeconds)\n xForm.visibilityValues.values.push(false)\n this.aliveBulletIds.delete(id)\n })\n\n v.drones.forEach((droneData) => {\n this.upsertXForm(\n ds,\n () => new Mesh(droneGeo, droneMat),\n 'drone',\n droneData,\n offsetTimeInSeconds,\n )\n this.aliveDroneIds.add(droneData.id)\n })\n\n if (!v.camera?.entity?.orientation)\n throw new Error('Missing camera ')\n this.upsertXForm(\n ds,\n () => this.userCamera,\n 'camera',\n v.camera.entity,\n offsetTimeInSeconds,\n )\n\n const { x, y, z, w } = v.camera.entity.orientation\n if (firstCameraDataPoint) {\n firstCameraDataPoint = false\n this.prevCamRotation.set(x, y, z, w)\n } else {\n this.currentCamRotation.set(x, y, z, w)\n\n const angleRad = this.currentCamRotation.angleTo(\n this.prevCamRotation,\n )\n totalCameraRotationRadians.value += angleRad\n\n this.prevCamRotation.copy(this.currentCamRotation)\n }\n\n this.cameraXform.times.push(offsetTimeInSeconds)\n this.cameraXform.fovValues.push(v.camera.fov)\n this.cameraXform.aspectValues.push(v.camera.aspectRatio)\n this.cameraXform.nearValues.push(v.camera.near)\n this.cameraXform.farValues.push(this.maxDistance)\n this.maxDistance = 0\n ds.signalByName('totalSensorDataPointCount').value += 7\n break\n\n case 'shot':\n misses.value++\n break\n\n case 'hit':\n const { droneId } = dp.event.value\n const name = `drone-${droneId}`\n const xForm = this.xforms.get(name)\n if (!xForm) throw new Error(`Missing xForm for drone ${droneId}`)\n\n xForm.visibilityValues.times.push(offsetTimeInSeconds - 0.001)\n xForm.visibilityValues.values.push(true)\n xForm.visibilityValues.times.push(offsetTimeInSeconds)\n xForm.visibilityValues.values.push(false)\n this.aliveDroneIds.delete(droneId)\n\n misses.value--\n break\n }\n })\n\n this.xforms.forEach((xForm) => {\n const { uuid } = xForm.obj\n const positionTrack = new VectorKeyframeTrack(\n `${uuid}.position`,\n xForm.times,\n xForm.positionValues,\n )\n this.keyframeTracks.push(positionTrack)\n\n const rotationTrack = new QuaternionKeyframeTrack(\n `${uuid}.quaternion`,\n xForm.times,\n xForm.orientationValues,\n )\n this.keyframeTracks.push(rotationTrack)\n\n if (xForm.visibilityValues.times.length) {\n const visibilityTrack = new BooleanKeyframeTrack(\n `${uuid}.visible`,\n xForm.visibilityValues.times,\n xForm.visibilityValues.values,\n )\n this.keyframeTracks.push(visibilityTrack)\n }\n })\n\n if (this.cameraXform.fovValues.length) {\n const cameraFovTrack = new NumberKeyframeTrack(\n `${this.userCamera.uuid}.fov`,\n this.cameraXform.times,\n this.cameraXform.fovValues,\n )\n this.keyframeTracks.push(cameraFovTrack)\n }\n\n if (this.cameraXform.aspectValues.length) {\n const cameraAspectTrack = new NumberKeyframeTrack(\n `${this.userCamera.uuid}.aspect`,\n this.cameraXform.times,\n this.cameraXform.aspectValues,\n )\n this.keyframeTracks.push(cameraAspectTrack)\n }\n\n if (this.cameraXform.nearValues.length) {\n const cameraNearTrack = new NumberKeyframeTrack(\n `${this.userCamera.uuid}.near`,\n this.cameraXform.times,\n this.cameraXform.nearValues,\n )\n this.keyframeTracks.push(cameraNearTrack)\n }\n\n if (this.cameraXform.farValues.length) {\n const cameraFarTrack = new NumberKeyframeTrack(\n `${this.userCamera.uuid}.far`,\n this.cameraXform.times,\n this.cameraXform.farValues,\n )\n this.keyframeTracks.push(cameraFarTrack)\n }\n\n const parseDataPointsEnd = performance.now()\n console.log(\n `Parse data points time: ${\n parseDataPointsEnd - parseDataPointsStart\n }ms`,\n )\n\n const clip = new AnimationClip('default', -1, this.keyframeTracks)\n\n const originalCount = this.keyframeTracks.reduce(\n (acc, track) => acc + track.values.length,\n 0,\n )\n console.log(`Original keyframe count: ${originalCount}`)\n\n clip.optimize()\n const optimizedCount = this.keyframeTracks.reduce(\n (acc, track) => acc + track.values.length,\n 0,\n )\n\n ds.signalByName('optimizedKeyframeCount').value = optimizedCount\n\n const mixer = new AnimationMixer(this.scene)\n\n console.log(`Clip duration: ${clip.duration}`)\n const action = new AnimationAction(mixer, clip)\n action.time = clip.duration / 2\n action.play()\n action.paused = true\n\n ds.reactivity.effect(() => {\n action.time = fit(slider.value, 0, 100, 0, clip.duration)\n })\n\n messageCount.value = matchInfo.dataPoints.length\n\n let lastTime = performance.now()\n const render = () => {\n requestAnimationFrame(render)\n const now = performance.now()\n const deltaTime = now - lastTime\n const deltaTimeSec = deltaTime / 1000\n lastTime = now\n\n mixer.update(deltaTimeSec)\n this.userCamera.updateProjectionMatrix()\n this.cameraHelper.update()\n this.controls.update(deltaTimeSec)\n this.renderer.render(this.scene, this.cam)\n }\n render()\n },\n args: () => [this.matchId],\n })\n\n private resize() {\n if (!this.parentElement) throw new Error('parentElement not found')\n // // fill the parent container\n const rect = this.parentElement.getBoundingClientRect()\n const width = round(rect.width)\n const height = round(width * (9 / 21))\n this.renderer.setSize(width, height)\n this.cam.aspect = width / height\n this.cam.updateProjectionMatrix()\n }\n\n protected firstUpdated(_changedProperties: PropertyValues): void {\n this.loadDataPoints.run()\n\n requestAnimationFrame(() => {\n if (!this.canvasRef.value) throw new Error('canvasRef not found')\n\n this.renderer = new WebGLRenderer({\n antialias: true,\n alpha: true,\n canvas: this.canvasRef.value,\n })\n this.cam = new PerspectiveCamera(90, 1, 0.1, 1000)\n this.cam.position.set(0, 30, 50)\n this.cam.lookAt(0, 0, 0)\n this.controls = new OrbitControls(this.cam, this.renderer.domElement)\n this.controls.listenToKeyEvents(window)\n this.controls.enableDamping = true\n this.controls.dampingFactor = 0.05\n this.controls.screenSpacePanning = false\n this.controls.minDistance = 50\n this.controls.maxDistance = 500\n this.controls.maxPolarAngle = Math.PI / 2\n this.controls.target.set(0, 0, 0)\n\n const aspect = this.canvasRef.value.width / this.canvasRef.value.height\n console.log('aspect', aspect)\n this.userCamera = new PerspectiveCamera(75, aspect, 0.1, 100)\n\n this.cameraHelper = new CameraHelper(this.userCamera)\n this.cameraHelper\n this.cameraHelper.name = 'cameraHelper'\n this.scene.add(this.cameraHelper)\n\n const helper = new PolarGridHelper(100, 10)\n helper.name = 'polarGridHelper'\n this.scene.add(helper)\n helper.position.y = -10\n\n if (!this.matchId.length) throw new Error('matchId not found')\n if (!this.canvasRef.value) throw new Error('canvasRef not found')\n const observer = new ResizeObserver(() => {\n this.resize()\n })\n observer.observe(this.parentElement as HTMLElement)\n this.resize()\n })\n }\n\n private upsertXForm(\n ds: Datastar,\n obj3D: () => Object3D,\n namePrefix: string,\n entity: MatchDataPoint_Sensors_Entity,\n offsetTimeInSeconds: number,\n ) {\n if (!entity.position || !entity.orientation) {\n throw new Error(`Missing position or orientation for bullet ${entity.id}`)\n }\n\n const name = `${namePrefix}-${entity.id}`\n if (!this.xforms.has(name)) {\n const obj = obj3D()\n obj.name = name\n this.scene.add(obj)\n\n const xForm = {\n obj: obj,\n times: [],\n positionValues: [],\n orientationValues: [],\n visibilityValues: {\n times: [],\n values: [],\n },\n }\n this.xforms.set(name, xForm)\n }\n const xForm = this.xforms.get(name)!\n\n xForm.times.push(offsetTimeInSeconds)\n const { x, y, z } = entity.position\n xForm.positionValues.push(x, y, z)\n this.maxDistance = max(this.maxDistance, sqrt(x * x + y * y + z * z))\n xForm.orientationValues.push(\n entity.orientation.x,\n entity.orientation.y,\n entity.orientation.z,\n entity.orientation.w,\n )\n\n ds.signalByName('totalSensorDataPointCount').value += 7\n\n return xForm\n }\n\n static styles = css`\n canvas {\n width: 100%;\n height: 100%;\n display: block;\n }\n `\n\n render() {\n return html`\n \n \n \n `\n }\n}\n","import { ContextConsumer } from '@lit/context'\nimport { LitElement, PropertyValues } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { AnimationAction, AnimationMixer, Sphere, Vector3 } from 'three'\nimport { GLTF } from 'three/examples/jsm/Addons.js'\nimport { clone as skeletonClone } from 'three/examples/jsm/utils/SkeletonUtils.js'\nimport { gltfLoaderContext, sceneContext } from './context'\nimport { Drone } from './types'\n\nconst droneNamePrefix = `drone_`\n\n@customElement('drone-spawn')\nexport class DroneSpawn extends LitElement {\n @property({ type: Number })\n droneId = -1\n\n @property({ type: Number })\n x = 0\n\n @property({ type: Number })\n y = 0\n\n @property({ type: Number })\n z = 0\n\n private scene = new ContextConsumer(this, {\n context: sceneContext,\n subscribe: true,\n })\n private gltfLoader = new ContextConsumer(this, {\n context: gltfLoaderContext,\n subscribe: true,\n })\n\n static gltf: GLTF\n\n protected update(_changedProperties: PropertyValues): void {\n super.update(_changedProperties)\n\n if (!this.scene.value || !this.gltfLoader.value) {\n return\n }\n\n const droneInstanceNamePrefix = `${droneNamePrefix}instance_`\n this.gltfLoader.value.load('/static/models/natsdrone.glb', (gltf) => {\n if (!this.scene.value) throw new Error('scene not found')\n\n const propellersClip = gltf.animations.find(\n (clip) => clip.name === 'propellers',\n )\n if (!propellersClip) throw new Error('propellersClip not found')\n\n const idleClip = gltf.animations.find((clip) => clip.name === 'idle')\n if (!idleClip) throw new Error('idleClip not found')\n idleClip.optimize()\n\n const dieClip = gltf.animations.find((clip) => clip.name === 'die')\n if (!dieClip) throw new Error('dieClip not found')\n dieClip.optimize()\n\n const instance = skeletonClone(gltf.scene)\n instance.name = `${droneInstanceNamePrefix}${this.droneId}`\n instance.position.set(this.x, this.y, this.z)\n instance.lookAt(new Vector3(0, 0.01, 0))\n instance.lookAt(new Vector3(0, this.y, 0))\n this.scene.value.add(instance)\n\n const mixer = new AnimationMixer(instance)\n const idleAction = mixer.clipAction(idleClip)\n idleAction.play().time = Math.random() * idleClip.duration\n mixer.clipAction(propellersClip).play().timeScale = 3\n\n const dieAction = new AnimationAction(mixer, dieClip)\n dieAction.repetitions = 1\n dieAction.clampWhenFinished = true\n\n const collisionSphere = new Sphere(new Vector3(), 3)\n\n const evt = new CustomEvent('drone-spawned', {\n composed: true,\n bubbles: true,\n detail: {\n id: this.droneId,\n instance,\n mixer,\n collisionSphere,\n idleAction,\n dieAction,\n isAlive: true,\n },\n })\n this.dispatchEvent(evt)\n })\n }\n}\n"],"names":["isMessage","arg","schema","ScalarType","varint64read","lowBits","highBits","shift","b","middleByte","varint64write","lo","hi","bytes","i","hasNext","byte","splitBits","hasMoreBits","TWO_PWR_32_DBL","int64FromString","dec","minus","base","add1e6digit","begin","end","digit1e6","negate","newBits","int64ToString","bits","negative","result","uInt64ToString","toUnsigned","low","mid","high","digitA","digitB","digitC","decimalFrom1e7WithLeadingZeros","digit1e7","partial","varint32write","value","varint32read","readBytes","protoInt64","makeInt64Support","dv","MIN","MAX","UMIN","UMAX","bi","assertInt64String","assertUInt64String","scalarZeroValue","type","longAsString","isScalarZeroValue","FieldError","fieldOrOneof","message","name","IMPLICIT","unsafeLocal","unsafeOneofCase","target","oneof","c","f","unsafeIsSet","field","unsafeIsSetExplicit","localName","unsafeGet","unsafeSet","unsafeClear","oneofLocalName","isObject","isReflectList","_a","_b","_c","_d","a","isReflectMap","isReflectMessage","messageDesc","isWrapper","isWrapperTypeName","isWrapperDesc","EDITION_PROTO3","EDITION_PROTO2","create","init","createZeroMessage","initMessage","member","oneofField","toMessage","initScalar","initList","initMap","toU8Arr","convertObjectValues","val","item","obj","fn","ret","entry","tokenZeroMessageField","messagePrototypes","desc","msg","needsPrototypeChain","cached","prototype","members","createZeroField","defaultValue","symbol","getTextEncoding","te","td","text","WireType","FLOAT32_MAX","FLOAT32_MIN","UINT32_MAX","INT32_MAX","INT32_MIN","BinaryWriter","encodeUtf8","len","offset","chunk","prev","fieldNo","assertUInt32","assertInt32","assertFloat32","view","tc","sign","BinaryReader","buf","decodeUtf8","tag","wireType","start","wt","zze","o","checkField","check","checkSingular","reason","formatReflectList","formatVal","formatReflectMap","reasonSingular","checkListItem","index","checkMapEntry","key","checkKey","checkScalarValue","checkVal","v","scalar","details","scalarTypeDescription","formatReflectMessage","reflect","ReflectMessageImpl","number","assertOwn","list","ReflectListImpl","map","ReflectMapImpl","messageToReflect","longToReflect","err","local","messageToLocal","longToLocal","owner","unsafeInput","listItemToReflect","listItemToLocal","mapKeyToLocal","mapValueToLocal","k","has","mapValueToReflect","objKey","mapKeyToReflect","objEntry","callbackfn","thisArg","mapEntry","wktStructToLocal","wktStructToReflect","json","struct","wktValueToReflect","wktValueToLocal","listValue","e","parseTextFormatEnumValue","descEnum","enumValue","parseTextFormatScalarValue","u","unescapeBytesDefaultValue","str","input","n","r","t","nestedTypes","protoCamelCase","snakeCase","capNext","reservedObjectProperties","safeObjectProperty","createFileRegistry","args","registry","createBaseRegistry","file","addFile","recurseDeps","deps","protoFileName","seen","dep","resolve","fileReg","types","extendees","files","skipTypes","withDeps","numberToExt","typeName","fileName","extendee","no","TYPE_STRING","TYPE_GROUP","TYPE_MESSAGE","TYPE_BYTES","TYPE_ENUM","LABEL_REPEATED","LABEL_REQUIRED","JS_STRING","IDEMPOTENCY_UNKNOWN","EXPLICIT","LEGACY_REQUIRED","PACKED","DELIMITED","OPEN","featureDefaults","proto","reg","getFileEdition","findFileDependencies","mapEntriesStore","mapEntries","assert","enumProto","addEnum","messageProto","addMessage","serviceProto","addService","addExtensions","addFields","ext","newField","allOneofs","newOneof","oneofsSeen","findOneof","child","parent","sharedPrefix","findEnumSharedPrefix","makeTypeName","isEnumOpen","methodProto","method","newMethod","methodKind","trimLeadingDot","output","parentOrFile","isExtension","getFieldPresence","label","jstype","findMapEntryFields","isDelimitedEncoding","isPackedField","enumeration","wantName","enumName","values","prefix","camelToSnakeCase","shortName","camel","resolveFeature","ref","featureSet","editionDefaults","condition","writeDefaults","makeWriteOptions","options","toBinary","writeFields","writer","opts","writeField","data","writeScalar","writeListField","writeMessageField","writeMapEntry","scalarType","writeScalarValue","writeTypeOfScalar","readDefaults","makeReadOptions","fromBinary","readMessage","reader","delimited","lengthOrDelimitedFieldNo","unknownFields","readField","readScalar","readMessageField","readListField","readMapEntry","mergeMessage","base64Decode","base64Str","table","getDecodeTable","es","bytePos","groupPos","p","encodeTableStd","decodeTable","getEncodeTable","encoding","encodeTable","restoreJsonNames","boot","root","bootFileDescriptorProto","bootDescriptorProto","bootEnumDescriptorProto","_e","_f","_g","_h","bootFieldDescriptorProto","bootFieldOptions","path","paths","acc","cur","file_google_protobuf_descriptor","FileDescriptorProtoSchema","ExtensionRangeOptions_VerificationState","FieldDescriptorProto_Type","FieldDescriptorProto_Label","FileOptions_OptimizeMode","FieldOptions_CType","FieldOptions_JSType","FieldOptions_OptionRetention","FieldOptions_OptionTargetType","MethodOptions_IdempotencyLevel","FeatureSet_FieldPresence","FeatureSet_EnumType","FeatureSet_RepeatedFieldEncoding","FeatureSet_Utf8Validation","FeatureSet_MessageEncoding","FeatureSet_JsonFormat","GeneratedCodeInfo_Annotation_Semantic","Edition","fileDesc","b64","imports","file_google_protobuf_timestamp","TimestampSchema","timestampNow","timestampFromDate","date","timestampFromMs","timestampMs","timestamp","s","s$2","h","e$3","n$3","S","l","d","y","m","_","w","lt","st","g","$","x","T","E","O","j","M","P","ke","R","D","V","I","N","U","B","Y","Z","q","G","z","F","et","K","Re","Q","h$1","rt","i$1","mt","_t","gt","bt","yt","$t","ii","Zt","qt","Kt","_changeEvent","_startEvent","_endEvent","_ray","Ray","_plane","Plane","_TILT_LIMIT","MathUtils","_v","Vector3","_twoPI","_STATE","_EPS","OrbitControls","Controls","object","domElement","MOUSE","TOUCH","Quaternion","Spherical","Vector2","onPointerMove","onPointerDown","onPointerUp","onContextMenu","onMouseWheel","onKeyDown","onTouchStart","onTouchMove","onMouseDown","onMouseMove","interceptControlDown","interceptControlUp","deltaTime","position","min","max","zoomChanged","prevRadius","newRadius","radiusDelta","mouseBefore","prevZoom","mouseAfter","delta","normalizedDelta","angle","distance","objectMatrix","deltaX","deltaY","element","targetDistance","dollyScale","rect","dx","dy","dist","event","needsUpdate","centerX","centerY","pointerId","mode","newEvent","mouseAction","toTrianglesDrawMode","geometry","drawMode","TrianglesDrawMode","TriangleFanDrawMode","TriangleStripDrawMode","indices","numberOfTriangles","newIndices","newGeometry","_taskCache","DRACOLoader","Loader","manager","config","workerLimit","url","onLoad","onProgress","onError","loader","FileLoader","buffer","SRGBColorSpace","callback","attributeIDs","attributeTypes","vertexColorSpace","LinearSRGBColorSpace","taskConfig","taskKey","cachedTask","worker","taskID","taskCost","geometryPending","_worker","reject","geometryData","BufferGeometry","BufferAttribute","array","itemSize","attribute","inputColorSpace","_color","Color","il","ColorManagement","responseType","useJS","librariesPending","libraries","jsContent","DRACOWorker","body","decoderConfig","decoderPending","draco","module","decoder","decodeGeometry","buffers","attr","error","dracoGeometry","decodingStatus","geometryType","attributeName","attributeType","attributeID","attributeResult","decodeAttribute","decodeIndex","numIndices","byteLength","ptr","numComponents","numValues","dataType","getDracoDataType","GLTFLoader","parser","GLTFMaterialsClearcoatExtension","GLTFMaterialsDispersionExtension","GLTFTextureBasisUExtension","GLTFTextureWebPExtension","GLTFTextureAVIFExtension","GLTFMaterialsSheenExtension","GLTFMaterialsTransmissionExtension","GLTFMaterialsVolumeExtension","GLTFMaterialsIorExtension","GLTFMaterialsEmissiveStrengthExtension","GLTFMaterialsSpecularExtension","GLTFMaterialsIridescenceExtension","GLTFMaterialsAnisotropyExtension","GLTFMaterialsBumpExtension","GLTFLightsExtension","GLTFMeshoptCompression","GLTFMeshGpuInstancing","scope","resourcePath","relativeUrl","LoaderUtils","_onError","gltf","dracoLoader","ktx2Loader","meshoptDecoder","extensions","plugins","textDecoder","BINARY_EXTENSION_HEADER_MAGIC","EXTENSIONS","GLTFBinaryExtension","GLTFParser","plugin","extensionName","extensionsRequired","GLTFMaterialsUnlitExtension","GLTFDracoMeshCompressionExtension","GLTFTextureTransformExtension","GLTFMeshQuantizationExtension","GLTFRegistry","objects","nodeDefs","nodeIndex","nodeLength","nodeDef","lightIndex","cacheKey","dependency","lightDef","lightNode","color","range","DirectionalLight","PointLight","SpotLight","assignExtrasToUserData","self","light","MeshBasicMaterial","materialParams","materialDef","pending","metallicRoughness","materialIndex","emissiveStrength","MeshPhysicalMaterial","extension","scale","colorFactor","colorArray","textureIndex","textureDef","source","handler","isSupported","image","bufferView","extensionDef","res","byteOffset","count","stride","meshDef","primitive","WEBGL_CONSTANTS","attributesDef","attributes","accessor","results","nodeObject","meshes","instancedMeshes","mesh","Matrix4","instancedMesh","InstancedMesh","InstancedBufferAttribute","Object3D","BINARY_EXTENSION_HEADER_LENGTH","BINARY_EXTENSION_CHUNK_TYPES","headerView","chunkContentsLength","chunkView","chunkIndex","chunkLength","chunkType","contentArray","bufferViewIndex","gltfAttributeMap","threeAttributeMap","attributeNormalizedMap","attributeTypeMap","threeAttributeName","ATTRIBUTES","accessorDef","componentType","WEBGL_COMPONENT_TYPES","normalized","texture","transform","GLTFCubicSplineInterpolant","Interpolant","parameterPositions","sampleValues","sampleSize","resultBuffer","valueSize","i1","t0","t1","stride2","stride3","pp","ppp","offset1","offset0","s2","s3","s0","s1","p0","m0","p1","m1","_q","GLTFCubicSplineQuaternionInterpolant","WEBGL_FILTERS","NearestFilter","LinearFilter","NearestMipmapNearestFilter","LinearMipmapNearestFilter","NearestMipmapLinearFilter","LinearMipmapLinearFilter","WEBGL_WRAPPINGS","ClampToEdgeWrapping","MirroredRepeatWrapping","RepeatWrapping","WEBGL_TYPE_SIZES","PATH_PROPERTIES","INTERPOLATION","InterpolateLinear","InterpolateDiscrete","ALPHA_MODES","createDefaultMaterial","cache","MeshStandardMaterial","FrontSide","addUnknownExtensionsToUserData","knownExtensions","objectDef","gltfDef","addMorphTargets","targets","hasMorphPosition","hasMorphNormal","hasMorphColor","pendingPositionAccessors","pendingNormalAccessors","pendingColorAccessors","pendingAccessor","accessors","morphPositions","morphNormals","morphColors","updateMorphTargets","targetNames","createPrimitiveKey","primitiveDef","geometryKey","dracoExtension","createAttributesKey","attributesKey","keys","getNormalizedComponentScale","constructor","getImageURIMimeType","uri","_identityMatrix","isSafari","safariVersion","isFirefox","firefoxVersion","userAgent","safariMatch","TextureLoader","ImageBitmapLoader","dependencies","scene","skinDefs","meshDefs","skinIndex","skinLength","joints","updateMappings","original","clone","mappings","func","defs","def","bufferIndex","bufferDef","bufferViewDef","accessorIndex","TypedArray","pendingBufferViews","bufferViews","elementBytes","itemBytes","byteStride","bufferAttribute","ibSlice","ibCacheKey","ib","InterleavedBuffer","InterleavedBufferAttribute","itemSizeIndices","TypedArrayIndices","byteOffsetIndices","byteOffsetValues","sparseIndices","sparseValues","sourceIndex","sourceDef","promise","sampler","URL","sourceURI","isObjectURL","blob","imageBitmap","Texture","mapName","mapDef","colorSpace","gltfReference","material","useDerivativeTangents","useVertexColors","useFlatShading","pointsMaterial","PointsMaterial","Material","lineMaterial","LineBasicMaterial","cachedMaterial","materialType","materialExtensions","kmuExtension","DoubleSide","alphaMode","emissiveFactor","originalName","sanitizedName","PropertyBinding","primitives","createDracoPrimitive","addPrimitiveAttributes","geometryPromise","meshIndex","materials","geometries","SkinnedMesh","Mesh","LineSegments","Line","LineLoop","Points","group","Group","cameraIndex","camera","cameraDef","params","PerspectiveCamera","OrthographicCamera","skinDef","inverseBindMatrices","jointNodes","bones","boneInverses","jointNode","mat","Skeleton","animationIndex","animationDef","animationName","pendingNodes","pendingInputAccessors","pendingOutputAccessors","pendingSamplers","pendingTargets","channel","nodes","inputAccessors","outputAccessors","samplers","tracks","node","inputAccessor","outputAccessor","createdTracks","AnimationClip","nodePending","childPending","childrenDef","skeletonPending","children","skeleton","nodeName","meshPromise","Bone","matrix","sceneIndex","sceneDef","nodeIds","reduceAssociations","reducedAssociations","targetName","TypedKeyframeTrack","NumberKeyframeTrack","QuaternionKeyframeTrack","VectorKeyframeTrack","interpolation","outputArray","jl","track","scaled","interpolantType","computeBounds","box","Box3","boxScale","maxDisplacement","vector","sphere","Sphere","assignAttributeAccessor","gltfAttributeName","RGBELoader","DataTextureLoader","HalfFloatType","rgbe_error","rgbe_error_code","NEWLINE","fgets","lineLimit","consume","RGBE_ReadHeader","magic_token_re","gamma_re","exposure_re","format_re","dimensions_re","header","line","match","RGBE_ReadPixels_RLE","scanline_width","data_rgba","pos","ptr_end","rgbeStart","scanline_buffer","num_scanlines","isEncodedRun","byteValue","off","RGBEByteToRGBFloat","sourceArray","sourceOffset","destArray","destOffset","RGBEByteToRGBHalf","DataUtils","byteArray","rgbe_header_info","image_rgba_data","numElements","FloatType","floatArray","halfArray","onLoadCallback","texData","sourceLookup","cloneLookup","parallelTraverse","sourceNode","clonedNode","clonedMesh","sourceMesh","sourceBones","bone","DEG2RAD","randFloat","file_dronegame_v1_shared","file_dronegame_v1_matches","MatchDataPointSchema","MatchDataPointsSchema","sceneContext","cameraContext","dimensionsContext","gltfLoaderContext","gravity","deadMaterial","DroneView","LitElement","ContextProvider","createRef","width","height","evt","droneEvent","q0","q1","euler","Euler","zee","baseBeta","entityWorldQuaternion","entityWorldPosition","objToDataPointEntity","id","raycaster","Raycaster","pointer","alpha","beta","gamma","quaternion","aspectRatio","fov","near","far","sendMatchData","rootBone","container","basketball","acceleration","orientation","WebGLRenderer","CineonToneMapping","Scene","clientWidth","clientHeight","CameraHelper","ir","targetGeo","TorusGeometry","targetMat","EquirectangularReflectionMapping","time","deltaSeconds","gravityTimeSlice","drone","bullet","velocity","shouldRemove","total","hits","left","html","css","__decorateClass","property","customElement","matchID","bulletGeo","IcosahedronGeometry","bulletMat","hslVarToColor","droneGeo","droneMat","hslVar","bgHSLParts","ds","waitForDatastar","windowAny","hitDroneMat","MatchLive","_changedProperties","aspect","helper","PolarGridHelper","PlaneGeometry","lastTime","render","now","deltaTimeSec","_old","arr","mdp","setFromEntity","entity","dp","droneId","removedBulletIds","removedDroneIds","matchInfoStr","matchInfo","ARRAY","BIT","BITS","BYTE","BYTES","EMPTY","EXPONENT","FUNCTION","IEC","INVALID_NUMBER","INVALID_ROUND","JEDEC","OBJECT","PERIOD","ROUND","SI","SI_KBIT","SI_KBYTE","SPACE","STRING","ZERO","STRINGS","filesize","pad","round","locale","localeOptions","separator","spacer","symbols","standard","fullform","fullforms","exponent","roundingMethod","precision","num","ceil","full","neg","roundingFunc","tmp","sqrt","fit","oldMin","oldMax","newMin","newMax","MatchReplay","Task","matchId","signal","startRes","endRes","slider","misses","totalCameraRotationRadians","messageCount","timeOffset","firstCameraDataPoint","parseDataPointsStart","offsetTimeInSeconds","killedBulletIds","bulletData","wasBorn","xForm","droneData","angleRad","uuid","positionTrack","rotationTrack","visibilityTrack","BooleanKeyframeTrack","cameraFovTrack","cameraAspectTrack","cameraNearTrack","cameraFarTrack","parseDataPointsEnd","clip","originalCount","optimizedCount","mixer","AnimationMixer","action","AnimationAction","obj3D","namePrefix","droneNamePrefix","DroneSpawn","ContextConsumer","droneInstanceNamePrefix","propellersClip","idleClip","dieClip","instance","skeletonClone","idleAction","dieAction","collisionSphere"],"mappings":"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","x_google_ignoreList":[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,56,57]}