@knime/kds-code-editor 11.4.0 → 11.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/assets/{editor.worker-e3drisr8.js.map → editor.worker-ynKJXNbh.js.map} +1 -1
- package/dist/assets/{json.worker-BxEEOmOS.js.map → json.worker-D0DAGjXV.js.map} +1 -1
- package/dist/{editor.worker-BaqEYUwK.js → editor.worker-DtlMnW0e.js} +2 -2
- package/dist/editor.worker-DtlMnW0e.js.map +1 -0
- package/dist/index.js +58 -2
- package/dist/index.js.map +1 -1
- package/dist/json.worker-CQ_9P0P7.js +21 -0
- package/dist/json.worker-CQ_9P0P7.js.map +1 -0
- package/package.json +3 -3
- package/dist/editor.worker-BaqEYUwK.js.map +0 -1
- package/dist/json.worker-CzwQ13T2.js +0 -21
- package/dist/json.worker-CzwQ13T2.js.map +0 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/language/json/json.worker.js?worker&inline
|
|
2
|
+
var jsContent = "(function() {\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/errors.js\n var ErrorHandler = class {\n constructor() {\n this.listeners = [];\n this.unexpectedErrorHandler = function(e) {\n setTimeout(() => {\n if (e.stack) {\n if (ErrorNoTelemetry.isErrorNoTelemetry(e)) throw new ErrorNoTelemetry(e.message + \"\\n\\n\" + e.stack);\n throw new Error(e.message + \"\\n\\n\" + e.stack);\n }\n throw e;\n }, 0);\n };\n }\n emit(e) {\n this.listeners.forEach((listener) => {\n listener(e);\n });\n }\n onUnexpectedError(e) {\n this.unexpectedErrorHandler(e);\n this.emit(e);\n }\n onUnexpectedExternalError(e) {\n this.unexpectedErrorHandler(e);\n }\n };\n const errorHandler = new ErrorHandler();\n function onUnexpectedError(e) {\n if (!isCancellationError(e)) errorHandler.onUnexpectedError(e);\n }\n function transformErrorForSerialization(error) {\n if (error instanceof Error) {\n const { name, message, cause } = error;\n return {\n $isError: true,\n name,\n message,\n stack: error.stacktrace || error.stack,\n noTelemetry: ErrorNoTelemetry.isErrorNoTelemetry(error),\n cause: cause ? transformErrorForSerialization(cause) : void 0,\n code: error.code\n };\n }\n return error;\n }\n const canceledName = \"Canceled\";\n /**\n * Checks if the given error is a promise in canceled state\n */\n function isCancellationError(error) {\n if (error instanceof CancellationError) return true;\n return error instanceof Error && error.name === \"Canceled\" && error.message === \"Canceled\";\n }\n var CancellationError = class extends Error {\n constructor() {\n super(canceledName);\n this.name = this.message;\n }\n };\n /**\n * Error that when thrown won't be logged in telemetry as an unhandled error.\n */\n var ErrorNoTelemetry = class ErrorNoTelemetry extends Error {\n constructor(msg) {\n super(msg);\n this.name = \"CodeExpectedError\";\n }\n static fromError(err) {\n if (err instanceof ErrorNoTelemetry) return err;\n const result = new ErrorNoTelemetry();\n result.message = err.message;\n result.stack = err.stack;\n return result;\n }\n static isErrorNoTelemetry(err) {\n return err.name === \"CodeExpectedError\";\n }\n };\n /**\n * This error indicates a bug.\n * Do not throw this for invalid user input.\n * Only catch this error to recover gracefully from bugs.\n */\n var BugIndicatingError = class BugIndicatingError extends Error {\n constructor(message) {\n super(message || \"An unexpected bug occurred.\");\n Object.setPrototypeOf(this, BugIndicatingError.prototype);\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/assert.js\n function assertNever(value, message = \"Unreachable\") {\n throw new Error(message);\n }\n /**\n * Asserts that a condition is `truthy`.\n *\n * @throws provided {@linkcode messageOrError} if the {@linkcode condition} is `falsy`.\n *\n * @param condition The condition to assert.\n * @param messageOrError An error message or error object to throw if condition is `falsy`.\n */\n function assert(condition, messageOrError = \"unexpected state\") {\n if (!condition) throw typeof messageOrError === \"string\" ? new BugIndicatingError(`Assertion Failed: ${messageOrError}`) : messageOrError;\n }\n /**\n * condition must be side-effect free!\n */\n function assertFn(condition) {\n if (!condition()) {\n debugger;\n condition();\n onUnexpectedError(new BugIndicatingError(\"Assertion Failed\"));\n }\n }\n function checkAdjacentItems(items, predicate) {\n let i = 0;\n while (i < items.length - 1) {\n const a = items[i];\n const b = items[i + 1];\n if (!predicate(a, b)) return false;\n i++;\n }\n return true;\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/types.js\n /**\n * @returns whether the provided parameter is a JavaScript String or not.\n */\n function isString$1(str) {\n return typeof str === \"string\";\n }\n /**\n * @returns whether the provided parameter is an Iterable, casting to the given generic\n */\n function isIterable(obj) {\n return !!obj && typeof obj[Symbol.iterator] === \"function\";\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/iterator.js\n var Iterable;\n (function(Iterable) {\n function is(thing) {\n return !!thing && typeof thing === \"object\" && typeof thing[Symbol.iterator] === \"function\";\n }\n Iterable.is = is;\n const _empty = Object.freeze([]);\n function empty() {\n return _empty;\n }\n Iterable.empty = empty;\n function* single(element) {\n yield element;\n }\n Iterable.single = single;\n function wrap(iterableOrElement) {\n if (is(iterableOrElement)) return iterableOrElement;\n else return single(iterableOrElement);\n }\n Iterable.wrap = wrap;\n function from(iterable) {\n return iterable || _empty;\n }\n Iterable.from = from;\n function* reverse(array) {\n for (let i = array.length - 1; i >= 0; i--) yield array[i];\n }\n Iterable.reverse = reverse;\n function isEmpty(iterable) {\n return !iterable || iterable[Symbol.iterator]().next().done === true;\n }\n Iterable.isEmpty = isEmpty;\n function first(iterable) {\n return iterable[Symbol.iterator]().next().value;\n }\n Iterable.first = first;\n function some(iterable, predicate) {\n let i = 0;\n for (const element of iterable) if (predicate(element, i++)) return true;\n return false;\n }\n Iterable.some = some;\n function every(iterable, predicate) {\n let i = 0;\n for (const element of iterable) if (!predicate(element, i++)) return false;\n return true;\n }\n Iterable.every = every;\n function find(iterable, predicate) {\n for (const element of iterable) if (predicate(element)) return element;\n }\n Iterable.find = find;\n function* filter(iterable, predicate) {\n for (const element of iterable) if (predicate(element)) yield element;\n }\n Iterable.filter = filter;\n function* map(iterable, fn) {\n let index = 0;\n for (const element of iterable) yield fn(element, index++);\n }\n Iterable.map = map;\n function* flatMap(iterable, fn) {\n let index = 0;\n for (const element of iterable) yield* fn(element, index++);\n }\n Iterable.flatMap = flatMap;\n function* concat(...iterables) {\n for (const item of iterables) if (isIterable(item)) yield* item;\n else yield item;\n }\n Iterable.concat = concat;\n function reduce(iterable, reducer, initialValue) {\n let value = initialValue;\n for (const element of iterable) value = reducer(value, element);\n return value;\n }\n Iterable.reduce = reduce;\n function length(iterable) {\n let count = 0;\n for (const _ of iterable) count++;\n return count;\n }\n Iterable.length = length;\n /**\n * Returns an iterable slice of the array, with the same semantics as `array.slice()`.\n */\n function* slice(arr, from, to = arr.length) {\n if (from < -arr.length) from = 0;\n if (from < 0) from += arr.length;\n if (to < 0) to += arr.length;\n else if (to > arr.length) to = arr.length;\n for (; from < to; from++) yield arr[from];\n }\n Iterable.slice = slice;\n /**\n * Consumes `atMost` elements from iterable and returns the consumed elements,\n * and an iterable for the rest of the elements.\n */\n function consume(iterable, atMost = Number.POSITIVE_INFINITY) {\n const consumed = [];\n if (atMost === 0) return [consumed, iterable];\n const iterator = iterable[Symbol.iterator]();\n for (let i = 0; i < atMost; i++) {\n const next = iterator.next();\n if (next.done) return [consumed, Iterable.empty()];\n consumed.push(next.value);\n }\n return [consumed, { [Symbol.iterator]() {\n return iterator;\n } }];\n }\n Iterable.consume = consume;\n async function asyncToArray(iterable) {\n const result = [];\n for await (const item of iterable) result.push(item);\n return result;\n }\n Iterable.asyncToArray = asyncToArray;\n async function asyncToArrayFlat(iterable) {\n let result = [];\n for await (const item of iterable) result = result.concat(item);\n return result;\n }\n Iterable.asyncToArrayFlat = asyncToArrayFlat;\n })(Iterable || (Iterable = {}));\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/lifecycle.js\n function dispose(arg) {\n if (Iterable.is(arg)) {\n const errors = [];\n for (const d of arg) if (d) try {\n d.dispose();\n } catch (e) {\n errors.push(e);\n }\n if (errors.length === 1) throw errors[0];\n else if (errors.length > 1) throw new AggregateError(errors, \"Encountered errors while disposing of store\");\n return Array.isArray(arg) ? [] : arg;\n } else if (arg) {\n arg.dispose();\n return arg;\n }\n }\n /**\n * Combine multiple disposable values into a single {@link IDisposable}.\n */\n function combinedDisposable(...disposables) {\n return toDisposable(() => dispose(disposables));\n }\n var FunctionDisposable = class {\n constructor(fn) {\n this._isDisposed = false;\n this._fn = fn;\n }\n dispose() {\n if (this._isDisposed) return;\n if (!this._fn) throw new Error(`Unbound disposable context: Need to use an arrow function to preserve the value of this`);\n this._isDisposed = true;\n this._fn();\n }\n };\n /**\n * Turn a function that implements dispose into an {@link IDisposable}.\n *\n * @param fn Clean up function, guaranteed to be called only **once**.\n */\n function toDisposable(fn) {\n return new FunctionDisposable(fn);\n }\n /**\n * Manages a collection of disposable values.\n *\n * This is the preferred way to manage multiple disposables. A `DisposableStore` is safer to work with than an\n * `IDisposable[]` as it considers edge cases, such as registering the same value multiple times or adding an item to a\n * store that has already been disposed of.\n */\n var DisposableStore = class DisposableStore {\n static {\n this.DISABLE_DISPOSED_WARNING = false;\n }\n constructor() {\n this._toDispose = /* @__PURE__ */ new Set();\n this._isDisposed = false;\n }\n /**\n * Dispose of all registered disposables and mark this object as disposed.\n *\n * Any future disposables added to this object will be disposed of on `add`.\n */\n dispose() {\n if (this._isDisposed) return;\n this._isDisposed = true;\n this.clear();\n }\n /**\n * @return `true` if this object has been disposed of.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * Dispose of all registered disposables but do not mark this object as disposed.\n */\n clear() {\n if (this._toDispose.size === 0) return;\n try {\n dispose(this._toDispose);\n } finally {\n this._toDispose.clear();\n }\n }\n /**\n * Add a new {@link IDisposable disposable} to the collection.\n */\n add(o) {\n if (!o || o === Disposable.None) return o;\n if (o === this) throw new Error(\"Cannot register a disposable on itself!\");\n if (this._isDisposed) {\n if (!DisposableStore.DISABLE_DISPOSED_WARNING) console.warn((/* @__PURE__ */ new Error(\"Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!\")).stack);\n } else this._toDispose.add(o);\n return o;\n }\n /**\n * Deletes a disposable from store and disposes of it. This will not throw or warn and proceed to dispose the\n * disposable even when the disposable is not part in the store.\n */\n delete(o) {\n if (!o) return;\n if (o === this) throw new Error(\"Cannot dispose a disposable on itself!\");\n this._toDispose.delete(o);\n o.dispose();\n }\n };\n /**\n * Abstract base class for a {@link IDisposable disposable} object.\n *\n * Subclasses can {@linkcode _register} disposables that will be automatically cleaned up when this object is disposed of.\n */\n var Disposable = class {\n /**\n * A disposable that does nothing when it is disposed of.\n *\n * TODO: This should not be a static property.\n */\n static {\n this.None = Object.freeze({ dispose() {} });\n }\n constructor() {\n this._store = new DisposableStore();\n this._store;\n }\n dispose() {\n this._store.dispose();\n }\n /**\n * Adds `o` to the collection of disposables managed by this object.\n */\n _register(o) {\n if (o === this) throw new Error(\"Cannot register a disposable on itself!\");\n return this._store.add(o);\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/linkedList.js\n var Node = class Node {\n static {\n this.Undefined = new Node(void 0);\n }\n constructor(element) {\n this.element = element;\n this.next = Node.Undefined;\n this.prev = Node.Undefined;\n }\n };\n var LinkedList = class {\n constructor() {\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n this._size = 0;\n }\n get size() {\n return this._size;\n }\n isEmpty() {\n return this._first === Node.Undefined;\n }\n clear() {\n let node = this._first;\n while (node !== Node.Undefined) {\n const next = node.next;\n node.prev = Node.Undefined;\n node.next = Node.Undefined;\n node = next;\n }\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n this._size = 0;\n }\n unshift(element) {\n return this._insert(element, false);\n }\n push(element) {\n return this._insert(element, true);\n }\n _insert(element, atTheEnd) {\n const newNode = new Node(element);\n if (this._first === Node.Undefined) {\n this._first = newNode;\n this._last = newNode;\n } else if (atTheEnd) {\n const oldLast = this._last;\n this._last = newNode;\n newNode.prev = oldLast;\n oldLast.next = newNode;\n } else {\n const oldFirst = this._first;\n this._first = newNode;\n newNode.next = oldFirst;\n oldFirst.prev = newNode;\n }\n this._size += 1;\n let didRemove = false;\n return () => {\n if (!didRemove) {\n didRemove = true;\n this._remove(newNode);\n }\n };\n }\n shift() {\n if (this._first === Node.Undefined) return;\n else {\n const res = this._first.element;\n this._remove(this._first);\n return res;\n }\n }\n pop() {\n if (this._last === Node.Undefined) return;\n else {\n const res = this._last.element;\n this._remove(this._last);\n return res;\n }\n }\n _remove(node) {\n if (node.prev !== Node.Undefined && node.next !== Node.Undefined) {\n const anchor = node.prev;\n anchor.next = node.next;\n node.next.prev = anchor;\n } else if (node.prev === Node.Undefined && node.next === Node.Undefined) {\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n } else if (node.next === Node.Undefined) {\n this._last = this._last.prev;\n this._last.next = Node.Undefined;\n } else if (node.prev === Node.Undefined) {\n this._first = this._first.next;\n this._first.prev = Node.Undefined;\n }\n this._size -= 1;\n }\n *[Symbol.iterator]() {\n let node = this._first;\n while (node !== Node.Undefined) {\n yield node.element;\n node = node.next;\n }\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/stopwatch.js\n const performanceNow = globalThis.performance.now.bind(globalThis.performance);\n var StopWatch = class StopWatch {\n static create(highResolution) {\n return new StopWatch(highResolution);\n }\n constructor(highResolution) {\n this._now = highResolution === false ? Date.now : performanceNow;\n this._startTime = this._now();\n this._stopTime = -1;\n }\n stop() {\n this._stopTime = this._now();\n }\n reset() {\n this._startTime = this._now();\n this._stopTime = -1;\n }\n elapsed() {\n if (this._stopTime !== -1) return this._stopTime - this._startTime;\n return this._now() - this._startTime;\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/event.js\n var Event;\n (function(Event) {\n Event.None = () => Disposable.None;\n /**\n * Given an event, returns another event which debounces calls and defers the listeners to a later task via a shared\n * `setTimeout`. The event is converted into a signal (`Event<void>`) to avoid additional object creation as a\n * result of merging events and to try prevent race conditions that could arise when using related deferred and\n * non-deferred events.\n *\n * This is useful for deferring non-critical work (eg. general UI updates) to ensure it does not block critical work\n * (eg. latency of keypress to text rendered).\n *\n * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n * returned event causes this utility to leak a listener on the original event.\n *\n * @param event The event source for the new event.\n * @param disposable A disposable store to add the new EventEmitter to.\n */\n function defer(event, disposable) {\n return debounce(event, () => void 0, 0, void 0, true, void 0, disposable);\n }\n Event.defer = defer;\n /**\n * Given an event, returns another event which only fires once.\n *\n * @param event The event source for the new event.\n */\n function once(event) {\n return (listener, thisArgs = null, disposables) => {\n let didFire = false;\n let result = void 0;\n result = event((e) => {\n if (didFire) return;\n else if (result) result.dispose();\n else didFire = true;\n return listener.call(thisArgs, e);\n }, null, disposables);\n if (didFire) result.dispose();\n return result;\n };\n }\n Event.once = once;\n /**\n * Given an event, returns another event which only fires once, and only when the condition is met.\n *\n * @param event The event source for the new event.\n */\n function onceIf(event, condition) {\n return Event.once(Event.filter(event, condition));\n }\n Event.onceIf = onceIf;\n /**\n * Maps an event of one type into an event of another type using a mapping function, similar to how\n * `Array.prototype.map` works.\n *\n * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n * returned event causes this utility to leak a listener on the original event.\n *\n * @param event The event source for the new event.\n * @param map The mapping function.\n * @param disposable A disposable store to add the new EventEmitter to.\n */\n function map(event, map, disposable) {\n return snapshot((listener, thisArgs = null, disposables) => event((i) => listener.call(thisArgs, map(i)), null, disposables), disposable);\n }\n Event.map = map;\n /**\n * Wraps an event in another event that performs some function on the event object before firing.\n *\n * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n * returned event causes this utility to leak a listener on the original event.\n *\n * @param event The event source for the new event.\n * @param each The function to perform on the event object.\n * @param disposable A disposable store to add the new EventEmitter to.\n */\n function forEach(event, each, disposable) {\n return snapshot((listener, thisArgs = null, disposables) => event((i) => {\n each(i);\n listener.call(thisArgs, i);\n }, null, disposables), disposable);\n }\n Event.forEach = forEach;\n function filter(event, filter, disposable) {\n return snapshot((listener, thisArgs = null, disposables) => event((e) => filter(e) && listener.call(thisArgs, e), null, disposables), disposable);\n }\n Event.filter = filter;\n /**\n * Given an event, returns the same event but typed as `Event<void>`.\n */\n function signal(event) {\n return event;\n }\n Event.signal = signal;\n function any(...events) {\n return (listener, thisArgs = null, disposables) => {\n return addAndReturnDisposable(combinedDisposable(...events.map((event) => event((e) => listener.call(thisArgs, e)))), disposables);\n };\n }\n Event.any = any;\n /**\n * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n * returned event causes this utility to leak a listener on the original event.\n */\n function reduce(event, merge, initial, disposable) {\n let output = initial;\n return map(event, (e) => {\n output = merge(output, e);\n return output;\n }, disposable);\n }\n Event.reduce = reduce;\n function snapshot(event, disposable) {\n let listener;\n const emitter = new Emitter({\n onWillAddFirstListener() {\n listener = event(emitter.fire, emitter);\n },\n onDidRemoveLastListener() {\n listener?.dispose();\n }\n });\n disposable?.add(emitter);\n return emitter.event;\n }\n /**\n * Adds the IDisposable to the store if it's set, and returns it. Useful to\n * Event function implementation.\n */\n function addAndReturnDisposable(d, store) {\n if (store instanceof Array) store.push(d);\n else if (store) store.add(d);\n return d;\n }\n function debounce(event, merge, delay = 100, leading = false, flushOnListenerRemove = false, leakWarningThreshold, disposable) {\n let subscription;\n let output = void 0;\n let handle = void 0;\n let numDebouncedCalls = 0;\n let doFire;\n const emitter = new Emitter({\n leakWarningThreshold,\n onWillAddFirstListener() {\n subscription = event((cur) => {\n numDebouncedCalls++;\n output = merge(output, cur);\n if (leading && !handle) {\n emitter.fire(output);\n output = void 0;\n }\n doFire = () => {\n const _output = output;\n output = void 0;\n handle = void 0;\n if (!leading || numDebouncedCalls > 1) emitter.fire(_output);\n numDebouncedCalls = 0;\n };\n if (typeof delay === \"number\") {\n if (handle) clearTimeout(handle);\n handle = setTimeout(doFire, delay);\n } else if (handle === void 0) {\n handle = null;\n queueMicrotask(doFire);\n }\n });\n },\n onWillRemoveListener() {\n if (flushOnListenerRemove && numDebouncedCalls > 0) doFire?.();\n },\n onDidRemoveLastListener() {\n doFire = void 0;\n subscription.dispose();\n }\n });\n disposable?.add(emitter);\n return emitter.event;\n }\n Event.debounce = debounce;\n /**\n * Debounces an event, firing after some delay (default=0) with an array of all event original objects.\n *\n * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n * returned event causes this utility to leak a listener on the original event.\n */\n function accumulate(event, delay = 0, disposable) {\n return Event.debounce(event, (last, e) => {\n if (!last) return [e];\n last.push(e);\n return last;\n }, delay, void 0, true, void 0, disposable);\n }\n Event.accumulate = accumulate;\n /**\n * Filters an event such that some condition is _not_ met more than once in a row, effectively ensuring duplicate\n * event objects from different sources do not fire the same event object.\n *\n * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n * returned event causes this utility to leak a listener on the original event.\n *\n * @param event The event source for the new event.\n * @param equals The equality condition.\n * @param disposable A disposable store to add the new EventEmitter to.\n *\n * @example\n * ```\n * // Fire only one time when a single window is opened or focused\n * Event.latch(Event.any(onDidOpenWindow, onDidFocusWindow))\n * ```\n */\n function latch(event, equals = (a, b) => a === b, disposable) {\n let firstCall = true;\n let cache;\n return filter(event, (value) => {\n const shouldEmit = firstCall || !equals(value, cache);\n firstCall = false;\n cache = value;\n return shouldEmit;\n }, disposable);\n }\n Event.latch = latch;\n /**\n * Splits an event whose parameter is a union type into 2 separate events for each type in the union.\n *\n * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n * returned event causes this utility to leak a listener on the original event.\n *\n * @example\n * ```\n * const event = new EventEmitter<number | undefined>().event;\n * const [numberEvent, undefinedEvent] = Event.split(event, isUndefined);\n * ```\n *\n * @param event The event source for the new event.\n * @param isT A function that determines what event is of the first type.\n * @param disposable A disposable store to add the new EventEmitter to.\n */\n function split(event, isT, disposable) {\n return [Event.filter(event, isT, disposable), Event.filter(event, (e) => !isT(e), disposable)];\n }\n Event.split = split;\n /**\n * Buffers an event until it has a listener attached.\n *\n * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n * returned event causes this utility to leak a listener on the original event.\n *\n * @param event The event source for the new event.\n * @param flushAfterTimeout Determines whether to flush the buffer after a timeout immediately or after a\n * `setTimeout` when the first event listener is added.\n * @param _buffer Internal: A source event array used for tests.\n *\n * @example\n * ```\n * // Start accumulating events, when the first listener is attached, flush\n * // the event after a timeout such that multiple listeners attached before\n * // the timeout would receive the event\n * this.onInstallExtension = Event.buffer(service.onInstallExtension, true);\n * ```\n */\n function buffer(event, flushAfterTimeout = false, _buffer = [], disposable) {\n let buffer = _buffer.slice();\n let listener = event((e) => {\n if (buffer) buffer.push(e);\n else emitter.fire(e);\n });\n if (disposable) disposable.add(listener);\n const flush = () => {\n buffer?.forEach((e) => emitter.fire(e));\n buffer = null;\n };\n const emitter = new Emitter({\n onWillAddFirstListener() {\n if (!listener) {\n listener = event((e) => emitter.fire(e));\n if (disposable) disposable.add(listener);\n }\n },\n onDidAddFirstListener() {\n if (buffer) if (flushAfterTimeout) setTimeout(flush);\n else flush();\n },\n onDidRemoveLastListener() {\n if (listener) listener.dispose();\n listener = null;\n }\n });\n if (disposable) disposable.add(emitter);\n return emitter.event;\n }\n Event.buffer = buffer;\n /**\n * Wraps the event in an {@link IChainableEvent}, allowing a more functional programming style.\n *\n * @example\n * ```\n * // Normal\n * const onEnterPressNormal = Event.filter(\n * Event.map(onKeyPress.event, e => new StandardKeyboardEvent(e)),\n * e.keyCode === KeyCode.Enter\n * ).event;\n *\n * // Using chain\n * const onEnterPressChain = Event.chain(onKeyPress.event, $ => $\n * .map(e => new StandardKeyboardEvent(e))\n * .filter(e => e.keyCode === KeyCode.Enter)\n * );\n * ```\n */\n function chain(event, sythensize) {\n const fn = (listener, thisArgs, disposables) => {\n const cs = sythensize(new ChainableSynthesis());\n return event(function(value) {\n const result = cs.evaluate(value);\n if (result !== HaltChainable) listener.call(thisArgs, result);\n }, void 0, disposables);\n };\n return fn;\n }\n Event.chain = chain;\n const HaltChainable = Symbol(\"HaltChainable\");\n class ChainableSynthesis {\n constructor() {\n this.steps = [];\n }\n map(fn) {\n this.steps.push(fn);\n return this;\n }\n forEach(fn) {\n this.steps.push((v) => {\n fn(v);\n return v;\n });\n return this;\n }\n filter(fn) {\n this.steps.push((v) => fn(v) ? v : HaltChainable);\n return this;\n }\n reduce(merge, initial) {\n let last = initial;\n this.steps.push((v) => {\n last = merge(last, v);\n return last;\n });\n return this;\n }\n latch(equals = (a, b) => a === b) {\n let firstCall = true;\n let cache;\n this.steps.push((value) => {\n const shouldEmit = firstCall || !equals(value, cache);\n firstCall = false;\n cache = value;\n return shouldEmit ? value : HaltChainable;\n });\n return this;\n }\n evaluate(value) {\n for (const step of this.steps) {\n value = step(value);\n if (value === HaltChainable) break;\n }\n return value;\n }\n }\n /**\n * Creates an {@link Event} from a node event emitter.\n */\n function fromNodeEventEmitter(emitter, eventName, map = (id) => id) {\n const fn = (...args) => result.fire(map(...args));\n const onFirstListenerAdd = () => emitter.on(eventName, fn);\n const onLastListenerRemove = () => emitter.removeListener(eventName, fn);\n const result = new Emitter({\n onWillAddFirstListener: onFirstListenerAdd,\n onDidRemoveLastListener: onLastListenerRemove\n });\n return result.event;\n }\n Event.fromNodeEventEmitter = fromNodeEventEmitter;\n /**\n * Creates an {@link Event} from a DOM event emitter.\n */\n function fromDOMEventEmitter(emitter, eventName, map = (id) => id) {\n const fn = (...args) => result.fire(map(...args));\n const onFirstListenerAdd = () => emitter.addEventListener(eventName, fn);\n const onLastListenerRemove = () => emitter.removeEventListener(eventName, fn);\n const result = new Emitter({\n onWillAddFirstListener: onFirstListenerAdd,\n onDidRemoveLastListener: onLastListenerRemove\n });\n return result.event;\n }\n Event.fromDOMEventEmitter = fromDOMEventEmitter;\n /**\n * Creates a promise out of an event, using the {@link Event.once} helper.\n */\n function toPromise(event, disposables) {\n let cancelRef;\n const promise = new Promise((resolve, reject) => {\n const listener = once(event)(resolve, null, disposables);\n cancelRef = () => listener.dispose();\n });\n promise.cancel = cancelRef;\n return promise;\n }\n Event.toPromise = toPromise;\n /**\n * A convenience function for forwarding an event to another emitter which\n * improves readability.\n *\n * This is similar to {@link Relay} but allows instantiating and forwarding\n * on a single line and also allows for multiple source events.\n * @param from The event to forward.\n * @param to The emitter to forward the event to.\n * @example\n * Event.forward(event, emitter);\n * // equivalent to\n * event(e => emitter.fire(e));\n * // equivalent to\n * event(emitter.fire, emitter);\n */\n function forward(from, to) {\n return from((e) => to.fire(e));\n }\n Event.forward = forward;\n function runAndSubscribe(event, handler, initial) {\n handler(initial);\n return event((e) => handler(e));\n }\n Event.runAndSubscribe = runAndSubscribe;\n class EmitterObserver {\n constructor(_observable, store) {\n this._observable = _observable;\n this._counter = 0;\n this._hasChanged = false;\n const options = {\n onWillAddFirstListener: () => {\n _observable.addObserver(this);\n this._observable.reportChanges();\n },\n onDidRemoveLastListener: () => {\n _observable.removeObserver(this);\n }\n };\n this.emitter = new Emitter(options);\n if (store) store.add(this.emitter);\n }\n beginUpdate(_observable) {\n this._counter++;\n }\n handlePossibleChange(_observable) {}\n handleChange(_observable, _change) {\n this._hasChanged = true;\n }\n endUpdate(_observable) {\n this._counter--;\n if (this._counter === 0) {\n this._observable.reportChanges();\n if (this._hasChanged) {\n this._hasChanged = false;\n this.emitter.fire(this._observable.get());\n }\n }\n }\n }\n /**\n * Creates an event emitter that is fired when the observable changes.\n * Each listeners subscribes to the emitter.\n */\n function fromObservable(obs, store) {\n return new EmitterObserver(obs, store).emitter.event;\n }\n Event.fromObservable = fromObservable;\n /**\n * Each listener is attached to the observable directly.\n */\n function fromObservableLight(observable) {\n return (listener, thisArgs, disposables) => {\n let count = 0;\n let didChange = false;\n const observer = {\n beginUpdate() {\n count++;\n },\n endUpdate() {\n count--;\n if (count === 0) {\n observable.reportChanges();\n if (didChange) {\n didChange = false;\n listener.call(thisArgs);\n }\n }\n },\n handlePossibleChange() {},\n handleChange() {\n didChange = true;\n }\n };\n observable.addObserver(observer);\n observable.reportChanges();\n const disposable = { dispose() {\n observable.removeObserver(observer);\n } };\n if (disposables instanceof DisposableStore) disposables.add(disposable);\n else if (Array.isArray(disposables)) disposables.push(disposable);\n return disposable;\n };\n }\n Event.fromObservableLight = fromObservableLight;\n })(Event || (Event = {}));\n var EventProfiling = class EventProfiling {\n static {\n this.all = /* @__PURE__ */ new Set();\n }\n static {\n this._idPool = 0;\n }\n constructor(name) {\n this.listenerCount = 0;\n this.invocationCount = 0;\n this.elapsedOverall = 0;\n this.durations = [];\n this.name = `${name}_${EventProfiling._idPool++}`;\n EventProfiling.all.add(this);\n }\n start(listenerCount) {\n this._stopWatch = new StopWatch();\n this.listenerCount = listenerCount;\n }\n stop() {\n if (this._stopWatch) {\n const elapsed = this._stopWatch.elapsed();\n this.durations.push(elapsed);\n this.elapsedOverall += elapsed;\n this.invocationCount += 1;\n this._stopWatch = void 0;\n }\n }\n };\n let _globalLeakWarningThreshold = -1;\n var LeakageMonitor = class LeakageMonitor {\n static {\n this._idPool = 1;\n }\n constructor(_errorHandler, threshold, name = (LeakageMonitor._idPool++).toString(16).padStart(3, \"0\")) {\n this._errorHandler = _errorHandler;\n this.threshold = threshold;\n this.name = name;\n this._warnCountdown = 0;\n }\n dispose() {\n this._stacks?.clear();\n }\n check(stack, listenerCount) {\n const threshold = this.threshold;\n if (threshold <= 0 || listenerCount < threshold) return;\n if (!this._stacks) this._stacks = /* @__PURE__ */ new Map();\n const count = this._stacks.get(stack.value) || 0;\n this._stacks.set(stack.value, count + 1);\n this._warnCountdown -= 1;\n if (this._warnCountdown <= 0) {\n this._warnCountdown = threshold * .5;\n const [topStack, topCount] = this.getMostFrequentStack();\n const message = `[${this.name}] potential listener LEAK detected, having ${listenerCount} listeners already. MOST frequent listener (${topCount}):`;\n console.warn(message);\n console.warn(topStack);\n const error = new ListenerLeakError(message, topStack);\n this._errorHandler(error);\n }\n return () => {\n const count = this._stacks.get(stack.value) || 0;\n this._stacks.set(stack.value, count - 1);\n };\n }\n getMostFrequentStack() {\n if (!this._stacks) return;\n let topStack;\n let topCount = 0;\n for (const [stack, count] of this._stacks) if (!topStack || topCount < count) {\n topStack = [stack, count];\n topCount = count;\n }\n return topStack;\n }\n };\n var Stacktrace = class Stacktrace {\n static create() {\n return new Stacktrace((/* @__PURE__ */ new Error()).stack ?? \"\");\n }\n constructor(value) {\n this.value = value;\n }\n print() {\n console.warn(this.value.split(\"\\n\").slice(2).join(\"\\n\"));\n }\n };\n var ListenerLeakError = class extends Error {\n constructor(message, stack) {\n super(message);\n this.name = \"ListenerLeakError\";\n this.stack = stack;\n }\n };\n var ListenerRefusalError = class extends Error {\n constructor(message, stack) {\n super(message);\n this.name = \"ListenerRefusalError\";\n this.stack = stack;\n }\n };\n var UniqueContainer = class {\n constructor(value) {\n this.value = value;\n }\n };\n const compactionThreshold = 2;\n /**\n * The Emitter can be used to expose an Event to the public\n * to fire it from the insides.\n * Sample:\n class Document {\n \n private readonly _onDidChange = new Emitter<(value:string)=>any>();\n \n public onDidChange = this._onDidChange.event;\n \n // getter-style\n // get onDidChange(): Event<(value:string)=>any> {\n // return this._onDidChange.event;\n // }\n \n private _doIt() {\n //...\n this._onDidChange.fire(value);\n }\n }\n */\n var Emitter = class {\n constructor(options) {\n this._size = 0;\n this._options = options;\n this._leakageMon = this._options?.leakWarningThreshold ? new LeakageMonitor(options?.onListenerError ?? onUnexpectedError, this._options?.leakWarningThreshold ?? _globalLeakWarningThreshold) : void 0;\n this._perfMon = this._options?._profName ? new EventProfiling(this._options._profName) : void 0;\n this._deliveryQueue = this._options?.deliveryQueue;\n }\n dispose() {\n if (!this._disposed) {\n this._disposed = true;\n if (this._deliveryQueue?.current === this) this._deliveryQueue.reset();\n if (this._listeners) {\n this._listeners = void 0;\n this._size = 0;\n }\n this._options?.onDidRemoveLastListener?.();\n this._leakageMon?.dispose();\n }\n }\n /**\n * For the public to allow to subscribe\n * to events from this Emitter\n */\n get event() {\n this._event ??= (callback, thisArgs, disposables) => {\n if (this._leakageMon && this._size > this._leakageMon.threshold ** 2) {\n const message = `[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far (${this._size} vs ${this._leakageMon.threshold})`;\n console.warn(message);\n const tuple = this._leakageMon.getMostFrequentStack() ?? [\"UNKNOWN stack\", -1];\n const error = new ListenerRefusalError(`${message}. HINT: Stack shows most frequent listener (${tuple[1]}-times)`, tuple[0]);\n (this._options?.onListenerError || onUnexpectedError)(error);\n return Disposable.None;\n }\n if (this._disposed) return Disposable.None;\n if (thisArgs) callback = callback.bind(thisArgs);\n const contained = new UniqueContainer(callback);\n let removeMonitor;\n if (this._leakageMon && this._size >= Math.ceil(this._leakageMon.threshold * .2)) {\n contained.stack = Stacktrace.create();\n removeMonitor = this._leakageMon.check(contained.stack, this._size + 1);\n }\n if (!this._listeners) {\n this._options?.onWillAddFirstListener?.(this);\n this._listeners = contained;\n this._options?.onDidAddFirstListener?.(this);\n } else if (this._listeners instanceof UniqueContainer) {\n this._deliveryQueue ??= new EventDeliveryQueuePrivate();\n this._listeners = [this._listeners, contained];\n } else this._listeners.push(contained);\n this._options?.onDidAddListener?.(this);\n this._size++;\n const result = toDisposable(() => {\n removeMonitor?.();\n this._removeListener(contained);\n });\n if (disposables instanceof DisposableStore) disposables.add(result);\n else if (Array.isArray(disposables)) disposables.push(result);\n return result;\n };\n return this._event;\n }\n _removeListener(listener) {\n this._options?.onWillRemoveListener?.(this);\n if (!this._listeners) return;\n if (this._size === 1) {\n this._listeners = void 0;\n this._options?.onDidRemoveLastListener?.(this);\n this._size = 0;\n return;\n }\n const listeners = this._listeners;\n const index = listeners.indexOf(listener);\n if (index === -1) {\n console.log(\"disposed?\", this._disposed);\n console.log(\"size?\", this._size);\n console.log(\"arr?\", JSON.stringify(this._listeners));\n throw new Error(\"Attempted to dispose unknown listener\");\n }\n this._size--;\n listeners[index] = void 0;\n const adjustDeliveryQueue = this._deliveryQueue.current === this;\n if (this._size * compactionThreshold <= listeners.length) {\n let n = 0;\n for (let i = 0; i < listeners.length; i++) if (listeners[i]) listeners[n++] = listeners[i];\n else if (adjustDeliveryQueue && n < this._deliveryQueue.end) {\n this._deliveryQueue.end--;\n if (n < this._deliveryQueue.i) this._deliveryQueue.i--;\n }\n listeners.length = n;\n }\n }\n _deliver(listener, value) {\n if (!listener) return;\n const errorHandler = this._options?.onListenerError || onUnexpectedError;\n if (!errorHandler) {\n listener.value(value);\n return;\n }\n try {\n listener.value(value);\n } catch (e) {\n errorHandler(e);\n }\n }\n /** Delivers items in the queue. Assumes the queue is ready to go. */\n _deliverQueue(dq) {\n const listeners = dq.current._listeners;\n while (dq.i < dq.end) this._deliver(listeners[dq.i++], dq.value);\n dq.reset();\n }\n /**\n * To be kept private to fire an event to\n * subscribers\n */\n fire(event) {\n if (this._deliveryQueue?.current) {\n this._deliverQueue(this._deliveryQueue);\n this._perfMon?.stop();\n }\n this._perfMon?.start(this._size);\n if (!this._listeners);\n else if (this._listeners instanceof UniqueContainer) this._deliver(this._listeners, event);\n else {\n const dq = this._deliveryQueue;\n dq.enqueue(this, event, this._listeners.length);\n this._deliverQueue(dq);\n }\n this._perfMon?.stop();\n }\n hasListeners() {\n return this._size > 0;\n }\n };\n var EventDeliveryQueuePrivate = class {\n constructor() {\n /**\n * Index in current's listener list.\n */\n this.i = -1;\n /**\n * The last index in the listener's list to deliver.\n */\n this.end = 0;\n }\n enqueue(emitter, value, end) {\n this.i = 0;\n this.end = end;\n this.current = emitter;\n this.value = value;\n }\n reset() {\n this.i = this.end;\n this.current = void 0;\n this.value = void 0;\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/nls.messages.js\n function getNLSMessages() {\n return globalThis._VSCODE_NLS_MESSAGES;\n }\n function getNLSLanguage() {\n return globalThis._VSCODE_NLS_LANGUAGE;\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/nls.js\n const isPseudo = getNLSLanguage() === \"pseudo\" || typeof document !== \"undefined\" && document.location && typeof document.location.hash === \"string\" && document.location.hash.indexOf(\"pseudo=true\") >= 0;\n function _format$1(message, args) {\n let result;\n if (args.length === 0) result = message;\n else result = message.replace(/\\{(\\d+)\\}/g, (match, rest) => {\n const arg = args[rest[0]];\n let result = match;\n if (typeof arg === \"string\") result = arg;\n else if (typeof arg === \"number\" || typeof arg === \"boolean\" || arg === void 0 || arg === null) result = String(arg);\n return result;\n });\n if (isPseudo) result = \"[\" + result.replace(/[aouei]/g, \"$&$&\") + \"]\";\n return result;\n }\n /**\n * @skipMangle\n */\n function localize(data, message, ...args) {\n if (typeof data === \"number\") return _format$1(lookupMessage(data, message), args);\n return _format$1(message, args);\n }\n /**\n * Only used when built: Looks up the message in the global NLS table.\n * This table is being made available as a global through bootstrapping\n * depending on the target context.\n */\n function lookupMessage(index, fallback) {\n const message = getNLSMessages()?.[index];\n if (typeof message !== \"string\") {\n if (typeof fallback === \"string\") return fallback;\n throw new Error(`!!! NLS MISSING: ${index} !!!`);\n }\n return message;\n }\n let _isWindows = false;\n let _isMacintosh = false;\n let _isLinux = false;\n let _isWeb = false;\n let _userAgent = void 0;\n const $globalThis = globalThis;\n let nodeProcess = void 0;\n if (typeof $globalThis.vscode !== \"undefined\" && typeof $globalThis.vscode.process !== \"undefined\") nodeProcess = $globalThis.vscode.process;\n else if (typeof process !== \"undefined\" && typeof process?.versions?.node === \"string\") nodeProcess = process;\n const isElectronRenderer = typeof nodeProcess?.versions?.electron === \"string\" && nodeProcess?.type === \"renderer\";\n if (typeof nodeProcess === \"object\") {\n _isWindows = nodeProcess.platform === \"win32\";\n _isMacintosh = nodeProcess.platform === \"darwin\";\n _isLinux = nodeProcess.platform === \"linux\";\n _isLinux && nodeProcess.env[\"SNAP\"] && nodeProcess.env[\"SNAP_REVISION\"];\n nodeProcess.env[\"CI\"] || nodeProcess.env[\"BUILD_ARTIFACTSTAGINGDIRECTORY\"] || nodeProcess.env[\"GITHUB_WORKSPACE\"];\n const rawNlsConfig = nodeProcess.env[\"VSCODE_NLS_CONFIG\"];\n if (rawNlsConfig) try {\n const nlsConfig = JSON.parse(rawNlsConfig);\n nlsConfig.userLocale;\n nlsConfig.osLocale;\n nlsConfig.resolvedLanguage;\n nlsConfig.languagePack?.translationsConfigFile;\n } catch (e) {}\n } else if (typeof navigator === \"object\" && !isElectronRenderer) {\n _userAgent = navigator.userAgent;\n _isWindows = _userAgent.indexOf(\"Windows\") >= 0;\n _isMacintosh = _userAgent.indexOf(\"Macintosh\") >= 0;\n (_userAgent.indexOf(\"Macintosh\") >= 0 || _userAgent.indexOf(\"iPad\") >= 0 || _userAgent.indexOf(\"iPhone\") >= 0) && navigator.maxTouchPoints && navigator.maxTouchPoints;\n _isLinux = _userAgent.indexOf(\"Linux\") >= 0;\n _userAgent?.indexOf(\"Mobi\");\n _isWeb = true;\n getNLSLanguage();\n navigator.language.toLowerCase();\n } else console.error(\"Unable to resolve platform.\");\n if (_isMacintosh);\n else if (_isWindows);\n else if (_isLinux);\n const isWindows = _isWindows;\n const isMacintosh = _isMacintosh;\n _isWeb && typeof $globalThis.importScripts === \"function\" && $globalThis.origin;\n const userAgent = _userAgent;\n const setTimeout0IsFaster = typeof $globalThis.postMessage === \"function\" && !$globalThis.importScripts;\n (() => {\n if (setTimeout0IsFaster) {\n const pending = [];\n $globalThis.addEventListener(\"message\", (e) => {\n if (e.data && e.data.vscodeScheduleAsyncWork) for (let i = 0, len = pending.length; i < len; i++) {\n const candidate = pending[i];\n if (candidate.id === e.data.vscodeScheduleAsyncWork) {\n pending.splice(i, 1);\n candidate.callback();\n return;\n }\n }\n });\n let lastId = 0;\n return (callback) => {\n const myId = ++lastId;\n pending.push({\n id: myId,\n callback\n });\n $globalThis.postMessage({ vscodeScheduleAsyncWork: myId }, \"*\");\n };\n }\n return (callback) => setTimeout(callback);\n })();\n const isChrome = !!(userAgent && userAgent.indexOf(\"Chrome\") >= 0);\n userAgent && userAgent.indexOf(\"Firefox\");\n !isChrome && userAgent && userAgent.indexOf(\"Safari\");\n userAgent && userAgent.indexOf(\"Edg/\");\n userAgent && userAgent.indexOf(\"Android\");\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/cache.js\n function identity(t) {\n return t;\n }\n /**\n * Uses a LRU cache to make a given parametrized function cached.\n * Caches just the last key/value.\n */\n var LRUCachedFunction = class {\n constructor(arg1, arg2) {\n this.lastCache = void 0;\n this.lastArgKey = void 0;\n if (typeof arg1 === \"function\") {\n this._fn = arg1;\n this._computeKey = identity;\n } else {\n this._fn = arg2;\n this._computeKey = arg1.getCacheKey;\n }\n }\n get(arg) {\n const key = this._computeKey(arg);\n if (this.lastArgKey !== key) {\n this.lastArgKey = key;\n this.lastCache = this._fn(arg);\n }\n return this.lastCache;\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/lazy.js\n var LazyValueState;\n (function(LazyValueState) {\n LazyValueState[LazyValueState[\"Uninitialized\"] = 0] = \"Uninitialized\";\n LazyValueState[LazyValueState[\"Running\"] = 1] = \"Running\";\n LazyValueState[LazyValueState[\"Completed\"] = 2] = \"Completed\";\n })(LazyValueState || (LazyValueState = {}));\n var Lazy = class {\n constructor(executor) {\n this.executor = executor;\n this._state = LazyValueState.Uninitialized;\n }\n /**\n * Get the wrapped value.\n *\n * This will force evaluation of the lazy value if it has not been resolved yet. Lazy values are only\n * resolved once. `getValue` will re-throw exceptions that are hit while resolving the value\n */\n get value() {\n if (this._state === LazyValueState.Uninitialized) {\n this._state = LazyValueState.Running;\n try {\n this._value = this.executor();\n } catch (err) {\n this._error = err;\n } finally {\n this._state = LazyValueState.Completed;\n }\n } else if (this._state === LazyValueState.Running) throw new Error(\"Cannot read the value of a lazy that is being initialized\");\n if (this._error) throw this._error;\n return this._value;\n }\n /**\n * Get the wrapped value without forcing evaluation.\n */\n get rawValue() {\n return this._value;\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/strings.js\n /**\n * Escapes regular expression characters in a given string\n */\n function escapeRegExpCharacters(value) {\n return value.replace(/[\\\\\\{\\}\\*\\+\\?\\|\\^\\$\\.\\[\\]\\(\\)]/g, \"\\\\$&\");\n }\n function regExpLeadsToEndlessLoop(regexp) {\n if (regexp.source === \"^\" || regexp.source === \"^$\" || regexp.source === \"$\" || regexp.source === \"^\\\\s*$\") return false;\n return !!(regexp.exec(\"\") && regexp.lastIndex === 0);\n }\n function splitLines(str) {\n return str.split(/\\r\\n|\\r|\\n/);\n }\n /**\n * Returns first index of the string that is not whitespace.\n * If string is empty or contains only whitespaces, returns -1\n */\n function firstNonWhitespaceIndex(str) {\n for (let i = 0, len = str.length; i < len; i++) {\n const chCode = str.charCodeAt(i);\n if (chCode !== 32 && chCode !== 9) return i;\n }\n return -1;\n }\n /**\n * Returns last index of the string that is not whitespace.\n * If string is empty or contains only whitespaces, returns -1\n */\n function lastNonWhitespaceIndex(str, startIndex = str.length - 1) {\n for (let i = startIndex; i >= 0; i--) {\n const chCode = str.charCodeAt(i);\n if (chCode !== 32 && chCode !== 9) return i;\n }\n return -1;\n }\n function isUpperAsciiLetter(code) {\n return code >= 65 && code <= 90;\n }\n /**\n * @returns the length of the common prefix of the two strings.\n */\n function commonPrefixLength(a, b) {\n const len = Math.min(a.length, b.length);\n let i;\n for (i = 0; i < len; i++) if (a.charCodeAt(i) !== b.charCodeAt(i)) return i;\n return len;\n }\n /**\n * @returns the length of the common suffix of the two strings.\n */\n function commonSuffixLength(a, b) {\n const len = Math.min(a.length, b.length);\n let i;\n const aLastIndex = a.length - 1;\n const bLastIndex = b.length - 1;\n for (i = 0; i < len; i++) if (a.charCodeAt(aLastIndex - i) !== b.charCodeAt(bLastIndex - i)) return i;\n return len;\n }\n /**\n * See http://en.wikipedia.org/wiki/Surrogate_pair\n */\n function isHighSurrogate(charCode) {\n return 55296 <= charCode && charCode <= 56319;\n }\n /**\n * See http://en.wikipedia.org/wiki/Surrogate_pair\n */\n function isLowSurrogate(charCode) {\n return 56320 <= charCode && charCode <= 57343;\n }\n /**\n * See http://en.wikipedia.org/wiki/Surrogate_pair\n */\n function computeCodePoint(highSurrogate, lowSurrogate) {\n return (highSurrogate - 55296 << 10) + (lowSurrogate - 56320) + 65536;\n }\n /**\n * get the code point that begins at offset `offset`\n */\n function getNextCodePoint(str, len, offset) {\n const charCode = str.charCodeAt(offset);\n if (isHighSurrogate(charCode) && offset + 1 < len) {\n const nextCharCode = str.charCodeAt(offset + 1);\n if (isLowSurrogate(nextCharCode)) return computeCodePoint(charCode, nextCharCode);\n }\n return charCode;\n }\n const IS_BASIC_ASCII = /^[\\t\\n\\r\\x20-\\x7E]*$/;\n /**\n * Returns true if `str` contains only basic ASCII characters in the range 32 - 126 (including 32 and 126) or \\n, \\r, \\t\n */\n function isBasicASCII(str) {\n return IS_BASIC_ASCII.test(str);\n }\n (class GraphemeBreakTree {\n static {\n this._INSTANCE = null;\n }\n static getInstance() {\n if (!GraphemeBreakTree._INSTANCE) GraphemeBreakTree._INSTANCE = new GraphemeBreakTree();\n return GraphemeBreakTree._INSTANCE;\n }\n constructor() {\n this._data = getGraphemeBreakRawData();\n }\n getGraphemeBreakType(codePoint) {\n if (codePoint < 32) {\n if (codePoint === 10) return 3;\n if (codePoint === 13) return 2;\n return 4;\n }\n if (codePoint < 127) return 0;\n const data = this._data;\n const nodeCount = data.length / 3;\n let nodeIndex = 1;\n while (nodeIndex <= nodeCount) if (codePoint < data[3 * nodeIndex]) nodeIndex = 2 * nodeIndex;\n else if (codePoint > data[3 * nodeIndex + 1]) nodeIndex = 2 * nodeIndex + 1;\n else return data[3 * nodeIndex + 2];\n return 0;\n }\n });\n function getGraphemeBreakRawData() {\n return JSON.parse(\"[0,0,0,51229,51255,12,44061,44087,12,127462,127487,6,7083,7085,5,47645,47671,12,54813,54839,12,128678,128678,14,3270,3270,5,9919,9923,14,45853,45879,12,49437,49463,12,53021,53047,12,71216,71218,7,128398,128399,14,129360,129374,14,2519,2519,5,4448,4519,9,9742,9742,14,12336,12336,14,44957,44983,12,46749,46775,12,48541,48567,12,50333,50359,12,52125,52151,12,53917,53943,12,69888,69890,5,73018,73018,5,127990,127990,14,128558,128559,14,128759,128760,14,129653,129655,14,2027,2035,5,2891,2892,7,3761,3761,5,6683,6683,5,8293,8293,4,9825,9826,14,9999,9999,14,43452,43453,5,44509,44535,12,45405,45431,12,46301,46327,12,47197,47223,12,48093,48119,12,48989,49015,12,49885,49911,12,50781,50807,12,51677,51703,12,52573,52599,12,53469,53495,12,54365,54391,12,65279,65279,4,70471,70472,7,72145,72147,7,119173,119179,5,127799,127818,14,128240,128244,14,128512,128512,14,128652,128652,14,128721,128722,14,129292,129292,14,129445,129450,14,129734,129743,14,1476,1477,5,2366,2368,7,2750,2752,7,3076,3076,5,3415,3415,5,4141,4144,5,6109,6109,5,6964,6964,5,7394,7400,5,9197,9198,14,9770,9770,14,9877,9877,14,9968,9969,14,10084,10084,14,43052,43052,5,43713,43713,5,44285,44311,12,44733,44759,12,45181,45207,12,45629,45655,12,46077,46103,12,46525,46551,12,46973,46999,12,47421,47447,12,47869,47895,12,48317,48343,12,48765,48791,12,49213,49239,12,49661,49687,12,50109,50135,12,50557,50583,12,51005,51031,12,51453,51479,12,51901,51927,12,52349,52375,12,52797,52823,12,53245,53271,12,53693,53719,12,54141,54167,12,54589,54615,12,55037,55063,12,69506,69509,5,70191,70193,5,70841,70841,7,71463,71467,5,72330,72342,5,94031,94031,5,123628,123631,5,127763,127765,14,127941,127941,14,128043,128062,14,128302,128317,14,128465,128467,14,128539,128539,14,128640,128640,14,128662,128662,14,128703,128703,14,128745,128745,14,129004,129007,14,129329,129330,14,129402,129402,14,129483,129483,14,129686,129704,14,130048,131069,14,173,173,4,1757,1757,1,2200,2207,5,2434,2435,7,2631,2632,5,2817,2817,5,3008,3008,5,3201,3201,5,3387,3388,5,3542,3542,5,3902,3903,7,4190,4192,5,6002,6003,5,6439,6440,5,6765,6770,7,7019,7027,5,7154,7155,7,8205,8205,13,8505,8505,14,9654,9654,14,9757,9757,14,9792,9792,14,9852,9853,14,9890,9894,14,9937,9937,14,9981,9981,14,10035,10036,14,11035,11036,14,42654,42655,5,43346,43347,7,43587,43587,5,44006,44007,7,44173,44199,12,44397,44423,12,44621,44647,12,44845,44871,12,45069,45095,12,45293,45319,12,45517,45543,12,45741,45767,12,45965,45991,12,46189,46215,12,46413,46439,12,46637,46663,12,46861,46887,12,47085,47111,12,47309,47335,12,47533,47559,12,47757,47783,12,47981,48007,12,48205,48231,12,48429,48455,12,48653,48679,12,48877,48903,12,49101,49127,12,49325,49351,12,49549,49575,12,49773,49799,12,49997,50023,12,50221,50247,12,50445,50471,12,50669,50695,12,50893,50919,12,51117,51143,12,51341,51367,12,51565,51591,12,51789,51815,12,52013,52039,12,52237,52263,12,52461,52487,12,52685,52711,12,52909,52935,12,53133,53159,12,53357,53383,12,53581,53607,12,53805,53831,12,54029,54055,12,54253,54279,12,54477,54503,12,54701,54727,12,54925,54951,12,55149,55175,12,68101,68102,5,69762,69762,7,70067,70069,7,70371,70378,5,70720,70721,7,71087,71087,5,71341,71341,5,71995,71996,5,72249,72249,7,72850,72871,5,73109,73109,5,118576,118598,5,121505,121519,5,127245,127247,14,127568,127569,14,127777,127777,14,127872,127891,14,127956,127967,14,128015,128016,14,128110,128172,14,128259,128259,14,128367,128368,14,128424,128424,14,128488,128488,14,128530,128532,14,128550,128551,14,128566,128566,14,128647,128647,14,128656,128656,14,128667,128673,14,128691,128693,14,128715,128715,14,128728,128732,14,128752,128752,14,128765,128767,14,129096,129103,14,129311,129311,14,129344,129349,14,129394,129394,14,129413,129425,14,129466,129471,14,129511,129535,14,129664,129666,14,129719,129722,14,129760,129767,14,917536,917631,5,13,13,2,1160,1161,5,1564,1564,4,1807,1807,1,2085,2087,5,2307,2307,7,2382,2383,7,2497,2500,5,2563,2563,7,2677,2677,5,2763,2764,7,2879,2879,5,2914,2915,5,3021,3021,5,3142,3144,5,3263,3263,5,3285,3286,5,3398,3400,7,3530,3530,5,3633,3633,5,3864,3865,5,3974,3975,5,4155,4156,7,4229,4230,5,5909,5909,7,6078,6085,7,6277,6278,5,6451,6456,7,6744,6750,5,6846,6846,5,6972,6972,5,7074,7077,5,7146,7148,7,7222,7223,5,7416,7417,5,8234,8238,4,8417,8417,5,9000,9000,14,9203,9203,14,9730,9731,14,9748,9749,14,9762,9763,14,9776,9783,14,9800,9811,14,9831,9831,14,9872,9873,14,9882,9882,14,9900,9903,14,9929,9933,14,9941,9960,14,9974,9974,14,9989,9989,14,10006,10006,14,10062,10062,14,10160,10160,14,11647,11647,5,12953,12953,14,43019,43019,5,43232,43249,5,43443,43443,5,43567,43568,7,43696,43696,5,43765,43765,7,44013,44013,5,44117,44143,12,44229,44255,12,44341,44367,12,44453,44479,12,44565,44591,12,44677,44703,12,44789,44815,12,44901,44927,12,45013,45039,12,45125,45151,12,45237,45263,12,45349,45375,12,45461,45487,12,45573,45599,12,45685,45711,12,45797,45823,12,45909,45935,12,46021,46047,12,46133,46159,12,46245,46271,12,46357,46383,12,46469,46495,12,46581,46607,12,46693,46719,12,46805,46831,12,46917,46943,12,47029,47055,12,47141,47167,12,47253,47279,12,47365,47391,12,47477,47503,12,47589,47615,12,47701,47727,12,47813,47839,12,47925,47951,12,48037,48063,12,48149,48175,12,48261,48287,12,48373,48399,12,48485,48511,12,48597,48623,12,48709,48735,12,48821,48847,12,48933,48959,12,49045,49071,12,49157,49183,12,49269,49295,12,49381,49407,12,49493,49519,12,49605,49631,12,49717,49743,12,49829,49855,12,49941,49967,12,50053,50079,12,50165,50191,12,50277,50303,12,50389,50415,12,50501,50527,12,50613,50639,12,50725,50751,12,50837,50863,12,50949,50975,12,51061,51087,12,51173,51199,12,51285,51311,12,51397,51423,12,51509,51535,12,51621,51647,12,51733,51759,12,51845,51871,12,51957,51983,12,52069,52095,12,52181,52207,12,52293,52319,12,52405,52431,12,52517,52543,12,52629,52655,12,52741,52767,12,52853,52879,12,52965,52991,12,53077,53103,12,53189,53215,12,53301,53327,12,53413,53439,12,53525,53551,12,53637,53663,12,53749,53775,12,53861,53887,12,53973,53999,12,54085,54111,12,54197,54223,12,54309,54335,12,54421,54447,12,54533,54559,12,54645,54671,12,54757,54783,12,54869,54895,12,54981,55007,12,55093,55119,12,55243,55291,10,66045,66045,5,68325,68326,5,69688,69702,5,69817,69818,5,69957,69958,7,70089,70092,5,70198,70199,5,70462,70462,5,70502,70508,5,70750,70750,5,70846,70846,7,71100,71101,5,71230,71230,7,71351,71351,5,71737,71738,5,72000,72000,7,72160,72160,5,72273,72278,5,72752,72758,5,72882,72883,5,73031,73031,5,73461,73462,7,94192,94193,7,119149,119149,7,121403,121452,5,122915,122916,5,126980,126980,14,127358,127359,14,127535,127535,14,127759,127759,14,127771,127771,14,127792,127793,14,127825,127867,14,127897,127899,14,127945,127945,14,127985,127986,14,128000,128007,14,128021,128021,14,128066,128100,14,128184,128235,14,128249,128252,14,128266,128276,14,128335,128335,14,128379,128390,14,128407,128419,14,128444,128444,14,128481,128481,14,128499,128499,14,128526,128526,14,128536,128536,14,128543,128543,14,128556,128556,14,128564,128564,14,128577,128580,14,128643,128645,14,128649,128649,14,128654,128654,14,128660,128660,14,128664,128664,14,128675,128675,14,128686,128689,14,128695,128696,14,128705,128709,14,128717,128719,14,128725,128725,14,128736,128741,14,128747,128748,14,128755,128755,14,128762,128762,14,128981,128991,14,129009,129023,14,129160,129167,14,129296,129304,14,129320,129327,14,129340,129342,14,129356,129356,14,129388,129392,14,129399,129400,14,129404,129407,14,129432,129442,14,129454,129455,14,129473,129474,14,129485,129487,14,129648,129651,14,129659,129660,14,129671,129679,14,129709,129711,14,129728,129730,14,129751,129753,14,129776,129782,14,917505,917505,4,917760,917999,5,10,10,3,127,159,4,768,879,5,1471,1471,5,1536,1541,1,1648,1648,5,1767,1768,5,1840,1866,5,2070,2073,5,2137,2139,5,2274,2274,1,2363,2363,7,2377,2380,7,2402,2403,5,2494,2494,5,2507,2508,7,2558,2558,5,2622,2624,7,2641,2641,5,2691,2691,7,2759,2760,5,2786,2787,5,2876,2876,5,2881,2884,5,2901,2902,5,3006,3006,5,3014,3016,7,3072,3072,5,3134,3136,5,3157,3158,5,3260,3260,5,3266,3266,5,3274,3275,7,3328,3329,5,3391,3392,7,3405,3405,5,3457,3457,5,3536,3537,7,3551,3551,5,3636,3642,5,3764,3772,5,3895,3895,5,3967,3967,7,3993,4028,5,4146,4151,5,4182,4183,7,4226,4226,5,4253,4253,5,4957,4959,5,5940,5940,7,6070,6070,7,6087,6088,7,6158,6158,4,6432,6434,5,6448,6449,7,6679,6680,5,6742,6742,5,6754,6754,5,6783,6783,5,6912,6915,5,6966,6970,5,6978,6978,5,7042,7042,7,7080,7081,5,7143,7143,7,7150,7150,7,7212,7219,5,7380,7392,5,7412,7412,5,8203,8203,4,8232,8232,4,8265,8265,14,8400,8412,5,8421,8432,5,8617,8618,14,9167,9167,14,9200,9200,14,9410,9410,14,9723,9726,14,9733,9733,14,9745,9745,14,9752,9752,14,9760,9760,14,9766,9766,14,9774,9774,14,9786,9786,14,9794,9794,14,9823,9823,14,9828,9828,14,9833,9850,14,9855,9855,14,9875,9875,14,9880,9880,14,9885,9887,14,9896,9897,14,9906,9916,14,9926,9927,14,9935,9935,14,9939,9939,14,9962,9962,14,9972,9972,14,9978,9978,14,9986,9986,14,9997,9997,14,10002,10002,14,10017,10017,14,10055,10055,14,10071,10071,14,10133,10135,14,10548,10549,14,11093,11093,14,12330,12333,5,12441,12442,5,42608,42610,5,43010,43010,5,43045,43046,5,43188,43203,7,43302,43309,5,43392,43394,5,43446,43449,5,43493,43493,5,43571,43572,7,43597,43597,7,43703,43704,5,43756,43757,5,44003,44004,7,44009,44010,7,44033,44059,12,44089,44115,12,44145,44171,12,44201,44227,12,44257,44283,12,44313,44339,12,44369,44395,12,44425,44451,12,44481,44507,12,44537,44563,12,44593,44619,12,44649,44675,12,44705,44731,12,44761,44787,12,44817,44843,12,44873,44899,12,44929,44955,12,44985,45011,12,45041,45067,12,45097,45123,12,45153,45179,12,45209,45235,12,45265,45291,12,45321,45347,12,45377,45403,12,45433,45459,12,45489,45515,12,45545,45571,12,45601,45627,12,45657,45683,12,45713,45739,12,45769,45795,12,45825,45851,12,45881,45907,12,45937,45963,12,45993,46019,12,46049,46075,12,46105,46131,12,46161,46187,12,46217,46243,12,46273,46299,12,46329,46355,12,46385,46411,12,46441,46467,12,46497,46523,12,46553,46579,12,46609,46635,12,46665,46691,12,46721,46747,12,46777,46803,12,46833,46859,12,46889,46915,12,46945,46971,12,47001,47027,12,47057,47083,12,47113,47139,12,47169,47195,12,47225,47251,12,47281,47307,12,47337,47363,12,47393,47419,12,47449,47475,12,47505,47531,12,47561,47587,12,47617,47643,12,47673,47699,12,47729,47755,12,47785,47811,12,47841,47867,12,47897,47923,12,47953,47979,12,48009,48035,12,48065,48091,12,48121,48147,12,48177,48203,12,48233,48259,12,48289,48315,12,48345,48371,12,48401,48427,12,48457,48483,12,48513,48539,12,48569,48595,12,48625,48651,12,48681,48707,12,48737,48763,12,48793,48819,12,48849,48875,12,48905,48931,12,48961,48987,12,49017,49043,12,49073,49099,12,49129,49155,12,49185,49211,12,49241,49267,12,49297,49323,12,49353,49379,12,49409,49435,12,49465,49491,12,49521,49547,12,49577,49603,12,49633,49659,12,49689,49715,12,49745,49771,12,49801,49827,12,49857,49883,12,49913,49939,12,49969,49995,12,50025,50051,12,50081,50107,12,50137,50163,12,50193,50219,12,50249,50275,12,50305,50331,12,50361,50387,12,50417,50443,12,50473,50499,12,50529,50555,12,50585,50611,12,50641,50667,12,50697,50723,12,50753,50779,12,50809,50835,12,50865,50891,12,50921,50947,12,50977,51003,12,51033,51059,12,51089,51115,12,51145,51171,12,51201,51227,12,51257,51283,12,51313,51339,12,51369,51395,12,51425,51451,12,51481,51507,12,51537,51563,12,51593,51619,12,51649,51675,12,51705,51731,12,51761,51787,12,51817,51843,12,51873,51899,12,51929,51955,12,51985,52011,12,52041,52067,12,52097,52123,12,52153,52179,12,52209,52235,12,52265,52291,12,52321,52347,12,52377,52403,12,52433,52459,12,52489,52515,12,52545,52571,12,52601,52627,12,52657,52683,12,52713,52739,12,52769,52795,12,52825,52851,12,52881,52907,12,52937,52963,12,52993,53019,12,53049,53075,12,53105,53131,12,53161,53187,12,53217,53243,12,53273,53299,12,53329,53355,12,53385,53411,12,53441,53467,12,53497,53523,12,53553,53579,12,53609,53635,12,53665,53691,12,53721,53747,12,53777,53803,12,53833,53859,12,53889,53915,12,53945,53971,12,54001,54027,12,54057,54083,12,54113,54139,12,54169,54195,12,54225,54251,12,54281,54307,12,54337,54363,12,54393,54419,12,54449,54475,12,54505,54531,12,54561,54587,12,54617,54643,12,54673,54699,12,54729,54755,12,54785,54811,12,54841,54867,12,54897,54923,12,54953,54979,12,55009,55035,12,55065,55091,12,55121,55147,12,55177,55203,12,65024,65039,5,65520,65528,4,66422,66426,5,68152,68154,5,69291,69292,5,69633,69633,5,69747,69748,5,69811,69814,5,69826,69826,5,69932,69932,7,70016,70017,5,70079,70080,7,70095,70095,5,70196,70196,5,70367,70367,5,70402,70403,7,70464,70464,5,70487,70487,5,70709,70711,7,70725,70725,7,70833,70834,7,70843,70844,7,70849,70849,7,71090,71093,5,71103,71104,5,71227,71228,7,71339,71339,5,71344,71349,5,71458,71461,5,71727,71735,5,71985,71989,7,71998,71998,5,72002,72002,7,72154,72155,5,72193,72202,5,72251,72254,5,72281,72283,5,72344,72345,5,72766,72766,7,72874,72880,5,72885,72886,5,73023,73029,5,73104,73105,5,73111,73111,5,92912,92916,5,94095,94098,5,113824,113827,4,119142,119142,7,119155,119162,4,119362,119364,5,121476,121476,5,122888,122904,5,123184,123190,5,125252,125258,5,127183,127183,14,127340,127343,14,127377,127386,14,127491,127503,14,127548,127551,14,127744,127756,14,127761,127761,14,127769,127769,14,127773,127774,14,127780,127788,14,127796,127797,14,127820,127823,14,127869,127869,14,127894,127895,14,127902,127903,14,127943,127943,14,127947,127950,14,127972,127972,14,127988,127988,14,127992,127994,14,128009,128011,14,128019,128019,14,128023,128041,14,128064,128064,14,128102,128107,14,128174,128181,14,128238,128238,14,128246,128247,14,128254,128254,14,128264,128264,14,128278,128299,14,128329,128330,14,128348,128359,14,128371,128377,14,128392,128393,14,128401,128404,14,128421,128421,14,128433,128434,14,128450,128452,14,128476,128478,14,128483,128483,14,128495,128495,14,128506,128506,14,128519,128520,14,128528,128528,14,128534,128534,14,128538,128538,14,128540,128542,14,128544,128549,14,128552,128555,14,128557,128557,14,128560,128563,14,128565,128565,14,128567,128576,14,128581,128591,14,128641,128642,14,128646,128646,14,128648,128648,14,128650,128651,14,128653,128653,14,128655,128655,14,128657,128659,14,128661,128661,14,128663,128663,14,128665,128666,14,128674,128674,14,128676,128677,14,128679,128685,14,128690,128690,14,128694,128694,14,128697,128702,14,128704,128704,14,128710,128714,14,128716,128716,14,128720,128720,14,128723,128724,14,128726,128727,14,128733,128735,14,128742,128744,14,128746,128746,14,128749,128751,14,128753,128754,14,128756,128758,14,128761,128761,14,128763,128764,14,128884,128895,14,128992,129003,14,129008,129008,14,129036,129039,14,129114,129119,14,129198,129279,14,129293,129295,14,129305,129310,14,129312,129319,14,129328,129328,14,129331,129338,14,129343,129343,14,129351,129355,14,129357,129359,14,129375,129387,14,129393,129393,14,129395,129398,14,129401,129401,14,129403,129403,14,129408,129412,14,129426,129431,14,129443,129444,14,129451,129453,14,129456,129465,14,129472,129472,14,129475,129482,14,129484,129484,14,129488,129510,14,129536,129647,14,129652,129652,14,129656,129658,14,129661,129663,14,129667,129670,14,129680,129685,14,129705,129708,14,129712,129718,14,129723,129727,14,129731,129733,14,129744,129750,14,129754,129759,14,129768,129775,14,129783,129791,14,917504,917504,4,917506,917535,4,917632,917759,4,918000,921599,4,0,9,4,11,12,4,14,31,4,169,169,14,174,174,14,1155,1159,5,1425,1469,5,1473,1474,5,1479,1479,5,1552,1562,5,1611,1631,5,1750,1756,5,1759,1764,5,1770,1773,5,1809,1809,5,1958,1968,5,2045,2045,5,2075,2083,5,2089,2093,5,2192,2193,1,2250,2273,5,2275,2306,5,2362,2362,5,2364,2364,5,2369,2376,5,2381,2381,5,2385,2391,5,2433,2433,5,2492,2492,5,2495,2496,7,2503,2504,7,2509,2509,5,2530,2531,5,2561,2562,5,2620,2620,5,2625,2626,5,2635,2637,5,2672,2673,5,2689,2690,5,2748,2748,5,2753,2757,5,2761,2761,7,2765,2765,5,2810,2815,5,2818,2819,7,2878,2878,5,2880,2880,7,2887,2888,7,2893,2893,5,2903,2903,5,2946,2946,5,3007,3007,7,3009,3010,7,3018,3020,7,3031,3031,5,3073,3075,7,3132,3132,5,3137,3140,7,3146,3149,5,3170,3171,5,3202,3203,7,3262,3262,7,3264,3265,7,3267,3268,7,3271,3272,7,3276,3277,5,3298,3299,5,3330,3331,7,3390,3390,5,3393,3396,5,3402,3404,7,3406,3406,1,3426,3427,5,3458,3459,7,3535,3535,5,3538,3540,5,3544,3550,7,3570,3571,7,3635,3635,7,3655,3662,5,3763,3763,7,3784,3789,5,3893,3893,5,3897,3897,5,3953,3966,5,3968,3972,5,3981,3991,5,4038,4038,5,4145,4145,7,4153,4154,5,4157,4158,5,4184,4185,5,4209,4212,5,4228,4228,7,4237,4237,5,4352,4447,8,4520,4607,10,5906,5908,5,5938,5939,5,5970,5971,5,6068,6069,5,6071,6077,5,6086,6086,5,6089,6099,5,6155,6157,5,6159,6159,5,6313,6313,5,6435,6438,7,6441,6443,7,6450,6450,5,6457,6459,5,6681,6682,7,6741,6741,7,6743,6743,7,6752,6752,5,6757,6764,5,6771,6780,5,6832,6845,5,6847,6862,5,6916,6916,7,6965,6965,5,6971,6971,7,6973,6977,7,6979,6980,7,7040,7041,5,7073,7073,7,7078,7079,7,7082,7082,7,7142,7142,5,7144,7145,5,7149,7149,5,7151,7153,5,7204,7211,7,7220,7221,7,7376,7378,5,7393,7393,7,7405,7405,5,7415,7415,7,7616,7679,5,8204,8204,5,8206,8207,4,8233,8233,4,8252,8252,14,8288,8292,4,8294,8303,4,8413,8416,5,8418,8420,5,8482,8482,14,8596,8601,14,8986,8987,14,9096,9096,14,9193,9196,14,9199,9199,14,9201,9202,14,9208,9210,14,9642,9643,14,9664,9664,14,9728,9729,14,9732,9732,14,9735,9741,14,9743,9744,14,9746,9746,14,9750,9751,14,9753,9756,14,9758,9759,14,9761,9761,14,9764,9765,14,9767,9769,14,9771,9773,14,9775,9775,14,9784,9785,14,9787,9791,14,9793,9793,14,9795,9799,14,9812,9822,14,9824,9824,14,9827,9827,14,9829,9830,14,9832,9832,14,9851,9851,14,9854,9854,14,9856,9861,14,9874,9874,14,9876,9876,14,9878,9879,14,9881,9881,14,9883,9884,14,9888,9889,14,9895,9895,14,9898,9899,14,9904,9905,14,9917,9918,14,9924,9925,14,9928,9928,14,9934,9934,14,9936,9936,14,9938,9938,14,9940,9940,14,9961,9961,14,9963,9967,14,9970,9971,14,9973,9973,14,9975,9977,14,9979,9980,14,9982,9985,14,9987,9988,14,9992,9996,14,9998,9998,14,10000,10001,14,10004,10004,14,10013,10013,14,10024,10024,14,10052,10052,14,10060,10060,14,10067,10069,14,10083,10083,14,10085,10087,14,10145,10145,14,10175,10175,14,11013,11015,14,11088,11088,14,11503,11505,5,11744,11775,5,12334,12335,5,12349,12349,14,12951,12951,14,42607,42607,5,42612,42621,5,42736,42737,5,43014,43014,5,43043,43044,7,43047,43047,7,43136,43137,7,43204,43205,5,43263,43263,5,43335,43345,5,43360,43388,8,43395,43395,7,43444,43445,7,43450,43451,7,43454,43456,7,43561,43566,5,43569,43570,5,43573,43574,5,43596,43596,5,43644,43644,5,43698,43700,5,43710,43711,5,43755,43755,7,43758,43759,7,43766,43766,5,44005,44005,5,44008,44008,5,44012,44012,7,44032,44032,11,44060,44060,11,44088,44088,11,44116,44116,11,44144,44144,11,44172,44172,11,44200,44200,11,44228,44228,11,44256,44256,11,44284,44284,11,44312,44312,11,44340,44340,11,44368,44368,11,44396,44396,11,44424,44424,11,44452,44452,11,44480,44480,11,44508,44508,11,44536,44536,11,44564,44564,11,44592,44592,11,44620,44620,11,44648,44648,11,44676,44676,11,44704,44704,11,44732,44732,11,44760,44760,11,44788,44788,11,44816,44816,11,44844,44844,11,44872,44872,11,44900,44900,11,44928,44928,11,44956,44956,11,44984,44984,11,45012,45012,11,45040,45040,11,45068,45068,11,45096,45096,11,45124,45124,11,45152,45152,11,45180,45180,11,45208,45208,11,45236,45236,11,45264,45264,11,45292,45292,11,45320,45320,11,45348,45348,11,45376,45376,11,45404,45404,11,45432,45432,11,45460,45460,11,45488,45488,11,45516,45516,11,45544,45544,11,45572,45572,11,45600,45600,11,45628,45628,11,45656,45656,11,45684,45684,11,45712,45712,11,45740,45740,11,45768,45768,11,45796,45796,11,45824,45824,11,45852,45852,11,45880,45880,11,45908,45908,11,45936,45936,11,45964,45964,11,45992,45992,11,46020,46020,11,46048,46048,11,46076,46076,11,46104,46104,11,46132,46132,11,46160,46160,11,46188,46188,11,46216,46216,11,46244,46244,11,46272,46272,11,46300,46300,11,46328,46328,11,46356,46356,11,46384,46384,11,46412,46412,11,46440,46440,11,46468,46468,11,46496,46496,11,46524,46524,11,46552,46552,11,46580,46580,11,46608,46608,11,46636,46636,11,46664,46664,11,46692,46692,11,46720,46720,11,46748,46748,11,46776,46776,11,46804,46804,11,46832,46832,11,46860,46860,11,46888,46888,11,46916,46916,11,46944,46944,11,46972,46972,11,47000,47000,11,47028,47028,11,47056,47056,11,47084,47084,11,47112,47112,11,47140,47140,11,47168,47168,11,47196,47196,11,47224,47224,11,47252,47252,11,47280,47280,11,47308,47308,11,47336,47336,11,47364,47364,11,47392,47392,11,47420,47420,11,47448,47448,11,47476,47476,11,47504,47504,11,47532,47532,11,47560,47560,11,47588,47588,11,47616,47616,11,47644,47644,11,47672,47672,11,47700,47700,11,47728,47728,11,47756,47756,11,47784,47784,11,47812,47812,11,47840,47840,11,47868,47868,11,47896,47896,11,47924,47924,11,47952,47952,11,47980,47980,11,48008,48008,11,48036,48036,11,48064,48064,11,48092,48092,11,48120,48120,11,48148,48148,11,48176,48176,11,48204,48204,11,48232,48232,11,48260,48260,11,48288,48288,11,48316,48316,11,48344,48344,11,48372,48372,11,48400,48400,11,48428,48428,11,48456,48456,11,48484,48484,11,48512,48512,11,48540,48540,11,48568,48568,11,48596,48596,11,48624,48624,11,48652,48652,11,48680,48680,11,48708,48708,11,48736,48736,11,48764,48764,11,48792,48792,11,48820,48820,11,48848,48848,11,48876,48876,11,48904,48904,11,48932,48932,11,48960,48960,11,48988,48988,11,49016,49016,11,49044,49044,11,49072,49072,11,49100,49100,11,49128,49128,11,49156,49156,11,49184,49184,11,49212,49212,11,49240,49240,11,49268,49268,11,49296,49296,11,49324,49324,11,49352,49352,11,49380,49380,11,49408,49408,11,49436,49436,11,49464,49464,11,49492,49492,11,49520,49520,11,49548,49548,11,49576,49576,11,49604,49604,11,49632,49632,11,49660,49660,11,49688,49688,11,49716,49716,11,49744,49744,11,49772,49772,11,49800,49800,11,49828,49828,11,49856,49856,11,49884,49884,11,49912,49912,11,49940,49940,11,49968,49968,11,49996,49996,11,50024,50024,11,50052,50052,11,50080,50080,11,50108,50108,11,50136,50136,11,50164,50164,11,50192,50192,11,50220,50220,11,50248,50248,11,50276,50276,11,50304,50304,11,50332,50332,11,50360,50360,11,50388,50388,11,50416,50416,11,50444,50444,11,50472,50472,11,50500,50500,11,50528,50528,11,50556,50556,11,50584,50584,11,50612,50612,11,50640,50640,11,50668,50668,11,50696,50696,11,50724,50724,11,50752,50752,11,50780,50780,11,50808,50808,11,50836,50836,11,50864,50864,11,50892,50892,11,50920,50920,11,50948,50948,11,50976,50976,11,51004,51004,11,51032,51032,11,51060,51060,11,51088,51088,11,51116,51116,11,51144,51144,11,51172,51172,11,51200,51200,11,51228,51228,11,51256,51256,11,51284,51284,11,51312,51312,11,51340,51340,11,51368,51368,11,51396,51396,11,51424,51424,11,51452,51452,11,51480,51480,11,51508,51508,11,51536,51536,11,51564,51564,11,51592,51592,11,51620,51620,11,51648,51648,11,51676,51676,11,51704,51704,11,51732,51732,11,51760,51760,11,51788,51788,11,51816,51816,11,51844,51844,11,51872,51872,11,51900,51900,11,51928,51928,11,51956,51956,11,51984,51984,11,52012,52012,11,52040,52040,11,52068,52068,11,52096,52096,11,52124,52124,11,52152,52152,11,52180,52180,11,52208,52208,11,52236,52236,11,52264,52264,11,52292,52292,11,52320,52320,11,52348,52348,11,52376,52376,11,52404,52404,11,52432,52432,11,52460,52460,11,52488,52488,11,52516,52516,11,52544,52544,11,52572,52572,11,52600,52600,11,52628,52628,11,52656,52656,11,52684,52684,11,52712,52712,11,52740,52740,11,52768,52768,11,52796,52796,11,52824,52824,11,52852,52852,11,52880,52880,11,52908,52908,11,52936,52936,11,52964,52964,11,52992,52992,11,53020,53020,11,53048,53048,11,53076,53076,11,53104,53104,11,53132,53132,11,53160,53160,11,53188,53188,11,53216,53216,11,53244,53244,11,53272,53272,11,53300,53300,11,53328,53328,11,53356,53356,11,53384,53384,11,53412,53412,11,53440,53440,11,53468,53468,11,53496,53496,11,53524,53524,11,53552,53552,11,53580,53580,11,53608,53608,11,53636,53636,11,53664,53664,11,53692,53692,11,53720,53720,11,53748,53748,11,53776,53776,11,53804,53804,11,53832,53832,11,53860,53860,11,53888,53888,11,53916,53916,11,53944,53944,11,53972,53972,11,54000,54000,11,54028,54028,11,54056,54056,11,54084,54084,11,54112,54112,11,54140,54140,11,54168,54168,11,54196,54196,11,54224,54224,11,54252,54252,11,54280,54280,11,54308,54308,11,54336,54336,11,54364,54364,11,54392,54392,11,54420,54420,11,54448,54448,11,54476,54476,11,54504,54504,11,54532,54532,11,54560,54560,11,54588,54588,11,54616,54616,11,54644,54644,11,54672,54672,11,54700,54700,11,54728,54728,11,54756,54756,11,54784,54784,11,54812,54812,11,54840,54840,11,54868,54868,11,54896,54896,11,54924,54924,11,54952,54952,11,54980,54980,11,55008,55008,11,55036,55036,11,55064,55064,11,55092,55092,11,55120,55120,11,55148,55148,11,55176,55176,11,55216,55238,9,64286,64286,5,65056,65071,5,65438,65439,5,65529,65531,4,66272,66272,5,68097,68099,5,68108,68111,5,68159,68159,5,68900,68903,5,69446,69456,5,69632,69632,7,69634,69634,7,69744,69744,5,69759,69761,5,69808,69810,7,69815,69816,7,69821,69821,1,69837,69837,1,69927,69931,5,69933,69940,5,70003,70003,5,70018,70018,7,70070,70078,5,70082,70083,1,70094,70094,7,70188,70190,7,70194,70195,7,70197,70197,7,70206,70206,5,70368,70370,7,70400,70401,5,70459,70460,5,70463,70463,7,70465,70468,7,70475,70477,7,70498,70499,7,70512,70516,5,70712,70719,5,70722,70724,5,70726,70726,5,70832,70832,5,70835,70840,5,70842,70842,5,70845,70845,5,70847,70848,5,70850,70851,5,71088,71089,7,71096,71099,7,71102,71102,7,71132,71133,5,71219,71226,5,71229,71229,5,71231,71232,5,71340,71340,7,71342,71343,7,71350,71350,7,71453,71455,5,71462,71462,7,71724,71726,7,71736,71736,7,71984,71984,5,71991,71992,7,71997,71997,7,71999,71999,1,72001,72001,1,72003,72003,5,72148,72151,5,72156,72159,7,72164,72164,7,72243,72248,5,72250,72250,1,72263,72263,5,72279,72280,7,72324,72329,1,72343,72343,7,72751,72751,7,72760,72765,5,72767,72767,5,72873,72873,7,72881,72881,7,72884,72884,7,73009,73014,5,73020,73021,5,73030,73030,1,73098,73102,7,73107,73108,7,73110,73110,7,73459,73460,5,78896,78904,4,92976,92982,5,94033,94087,7,94180,94180,5,113821,113822,5,118528,118573,5,119141,119141,5,119143,119145,5,119150,119154,5,119163,119170,5,119210,119213,5,121344,121398,5,121461,121461,5,121499,121503,5,122880,122886,5,122907,122913,5,122918,122922,5,123566,123566,5,125136,125142,5,126976,126979,14,126981,127182,14,127184,127231,14,127279,127279,14,127344,127345,14,127374,127374,14,127405,127461,14,127489,127490,14,127514,127514,14,127538,127546,14,127561,127567,14,127570,127743,14,127757,127758,14,127760,127760,14,127762,127762,14,127766,127768,14,127770,127770,14,127772,127772,14,127775,127776,14,127778,127779,14,127789,127791,14,127794,127795,14,127798,127798,14,127819,127819,14,127824,127824,14,127868,127868,14,127870,127871,14,127892,127893,14,127896,127896,14,127900,127901,14,127904,127940,14,127942,127942,14,127944,127944,14,127946,127946,14,127951,127955,14,127968,127971,14,127973,127984,14,127987,127987,14,127989,127989,14,127991,127991,14,127995,127999,5,128008,128008,14,128012,128014,14,128017,128018,14,128020,128020,14,128022,128022,14,128042,128042,14,128063,128063,14,128065,128065,14,128101,128101,14,128108,128109,14,128173,128173,14,128182,128183,14,128236,128237,14,128239,128239,14,128245,128245,14,128248,128248,14,128253,128253,14,128255,128258,14,128260,128263,14,128265,128265,14,128277,128277,14,128300,128301,14,128326,128328,14,128331,128334,14,128336,128347,14,128360,128366,14,128369,128370,14,128378,128378,14,128391,128391,14,128394,128397,14,128400,128400,14,128405,128406,14,128420,128420,14,128422,128423,14,128425,128432,14,128435,128443,14,128445,128449,14,128453,128464,14,128468,128475,14,128479,128480,14,128482,128482,14,128484,128487,14,128489,128494,14,128496,128498,14,128500,128505,14,128507,128511,14,128513,128518,14,128521,128525,14,128527,128527,14,128529,128529,14,128533,128533,14,128535,128535,14,128537,128537,14]\");\n }\n var AmbiguousCharacters = class AmbiguousCharacters {\n static {\n this.ambiguousCharacterData = new Lazy(() => {\n return JSON.parse(\"{\\\"_common\\\":[8232,32,8233,32,5760,32,8192,32,8193,32,8194,32,8195,32,8196,32,8197,32,8198,32,8200,32,8201,32,8202,32,8287,32,8199,32,8239,32,2042,95,65101,95,65102,95,65103,95,8208,45,8209,45,8210,45,65112,45,1748,45,8259,45,727,45,8722,45,10134,45,11450,45,1549,44,1643,44,184,44,42233,44,894,59,2307,58,2691,58,1417,58,1795,58,1796,58,5868,58,65072,58,6147,58,6153,58,8282,58,1475,58,760,58,42889,58,8758,58,720,58,42237,58,451,33,11601,33,660,63,577,63,2429,63,5038,63,42731,63,119149,46,8228,46,1793,46,1794,46,42510,46,68176,46,1632,46,1776,46,42232,46,1373,96,65287,96,8219,96,1523,96,8242,96,1370,96,8175,96,65344,96,900,96,8189,96,8125,96,8127,96,8190,96,697,96,884,96,712,96,714,96,715,96,756,96,699,96,701,96,700,96,702,96,42892,96,1497,96,2036,96,2037,96,5194,96,5836,96,94033,96,94034,96,65339,91,10088,40,10098,40,12308,40,64830,40,65341,93,10089,41,10099,41,12309,41,64831,41,10100,123,119060,123,10101,125,65342,94,8270,42,1645,42,8727,42,66335,42,5941,47,8257,47,8725,47,8260,47,9585,47,10187,47,10744,47,119354,47,12755,47,12339,47,11462,47,20031,47,12035,47,65340,92,65128,92,8726,92,10189,92,10741,92,10745,92,119311,92,119355,92,12756,92,20022,92,12034,92,42872,38,708,94,710,94,5869,43,10133,43,66203,43,8249,60,10094,60,706,60,119350,60,5176,60,5810,60,5120,61,11840,61,12448,61,42239,61,8250,62,10095,62,707,62,119351,62,5171,62,94015,62,8275,126,732,126,8128,126,8764,126,65372,124,65293,45,118002,50,120784,50,120794,50,120804,50,120814,50,120824,50,130034,50,42842,50,423,50,1000,50,42564,50,5311,50,42735,50,119302,51,118003,51,120785,51,120795,51,120805,51,120815,51,120825,51,130035,51,42923,51,540,51,439,51,42858,51,11468,51,1248,51,94011,51,71882,51,118004,52,120786,52,120796,52,120806,52,120816,52,120826,52,130036,52,5070,52,71855,52,118005,53,120787,53,120797,53,120807,53,120817,53,120827,53,130037,53,444,53,71867,53,118006,54,120788,54,120798,54,120808,54,120818,54,120828,54,130038,54,11474,54,5102,54,71893,54,119314,55,118007,55,120789,55,120799,55,120809,55,120819,55,120829,55,130039,55,66770,55,71878,55,2819,56,2538,56,2666,56,125131,56,118008,56,120790,56,120800,56,120810,56,120820,56,120830,56,130040,56,547,56,546,56,66330,56,2663,57,2920,57,2541,57,3437,57,118009,57,120791,57,120801,57,120811,57,120821,57,120831,57,130041,57,42862,57,11466,57,71884,57,71852,57,71894,57,9082,97,65345,97,119834,97,119886,97,119938,97,119990,97,120042,97,120094,97,120146,97,120198,97,120250,97,120302,97,120354,97,120406,97,120458,97,593,97,945,97,120514,97,120572,97,120630,97,120688,97,120746,97,65313,65,117974,65,119808,65,119860,65,119912,65,119964,65,120016,65,120068,65,120120,65,120172,65,120224,65,120276,65,120328,65,120380,65,120432,65,913,65,120488,65,120546,65,120604,65,120662,65,120720,65,5034,65,5573,65,42222,65,94016,65,66208,65,119835,98,119887,98,119939,98,119991,98,120043,98,120095,98,120147,98,120199,98,120251,98,120303,98,120355,98,120407,98,120459,98,388,98,5071,98,5234,98,5551,98,65314,66,8492,66,117975,66,119809,66,119861,66,119913,66,120017,66,120069,66,120121,66,120173,66,120225,66,120277,66,120329,66,120381,66,120433,66,42932,66,914,66,120489,66,120547,66,120605,66,120663,66,120721,66,5108,66,5623,66,42192,66,66178,66,66209,66,66305,66,65347,99,8573,99,119836,99,119888,99,119940,99,119992,99,120044,99,120096,99,120148,99,120200,99,120252,99,120304,99,120356,99,120408,99,120460,99,7428,99,1010,99,11429,99,43951,99,66621,99,128844,67,71913,67,71922,67,65315,67,8557,67,8450,67,8493,67,117976,67,119810,67,119862,67,119914,67,119966,67,120018,67,120174,67,120226,67,120278,67,120330,67,120382,67,120434,67,1017,67,11428,67,5087,67,42202,67,66210,67,66306,67,66581,67,66844,67,8574,100,8518,100,119837,100,119889,100,119941,100,119993,100,120045,100,120097,100,120149,100,120201,100,120253,100,120305,100,120357,100,120409,100,120461,100,1281,100,5095,100,5231,100,42194,100,8558,68,8517,68,117977,68,119811,68,119863,68,119915,68,119967,68,120019,68,120071,68,120123,68,120175,68,120227,68,120279,68,120331,68,120383,68,120435,68,5024,68,5598,68,5610,68,42195,68,8494,101,65349,101,8495,101,8519,101,119838,101,119890,101,119942,101,120046,101,120098,101,120150,101,120202,101,120254,101,120306,101,120358,101,120410,101,120462,101,43826,101,1213,101,8959,69,65317,69,8496,69,117978,69,119812,69,119864,69,119916,69,120020,69,120072,69,120124,69,120176,69,120228,69,120280,69,120332,69,120384,69,120436,69,917,69,120492,69,120550,69,120608,69,120666,69,120724,69,11577,69,5036,69,42224,69,71846,69,71854,69,66182,69,119839,102,119891,102,119943,102,119995,102,120047,102,120099,102,120151,102,120203,102,120255,102,120307,102,120359,102,120411,102,120463,102,43829,102,42905,102,383,102,7837,102,1412,102,119315,70,8497,70,117979,70,119813,70,119865,70,119917,70,120021,70,120073,70,120125,70,120177,70,120229,70,120281,70,120333,70,120385,70,120437,70,42904,70,988,70,120778,70,5556,70,42205,70,71874,70,71842,70,66183,70,66213,70,66853,70,65351,103,8458,103,119840,103,119892,103,119944,103,120048,103,120100,103,120152,103,120204,103,120256,103,120308,103,120360,103,120412,103,120464,103,609,103,7555,103,397,103,1409,103,117980,71,119814,71,119866,71,119918,71,119970,71,120022,71,120074,71,120126,71,120178,71,120230,71,120282,71,120334,71,120386,71,120438,71,1292,71,5056,71,5107,71,42198,71,65352,104,8462,104,119841,104,119945,104,119997,104,120049,104,120101,104,120153,104,120205,104,120257,104,120309,104,120361,104,120413,104,120465,104,1211,104,1392,104,5058,104,65320,72,8459,72,8460,72,8461,72,117981,72,119815,72,119867,72,119919,72,120023,72,120179,72,120231,72,120283,72,120335,72,120387,72,120439,72,919,72,120494,72,120552,72,120610,72,120668,72,120726,72,11406,72,5051,72,5500,72,42215,72,66255,72,731,105,9075,105,65353,105,8560,105,8505,105,8520,105,119842,105,119894,105,119946,105,119998,105,120050,105,120102,105,120154,105,120206,105,120258,105,120310,105,120362,105,120414,105,120466,105,120484,105,618,105,617,105,953,105,8126,105,890,105,120522,105,120580,105,120638,105,120696,105,120754,105,1110,105,42567,105,1231,105,43893,105,5029,105,71875,105,65354,106,8521,106,119843,106,119895,106,119947,106,119999,106,120051,106,120103,106,120155,106,120207,106,120259,106,120311,106,120363,106,120415,106,120467,106,1011,106,1112,106,65322,74,117983,74,119817,74,119869,74,119921,74,119973,74,120025,74,120077,74,120129,74,120181,74,120233,74,120285,74,120337,74,120389,74,120441,74,42930,74,895,74,1032,74,5035,74,5261,74,42201,74,119844,107,119896,107,119948,107,120000,107,120052,107,120104,107,120156,107,120208,107,120260,107,120312,107,120364,107,120416,107,120468,107,8490,75,65323,75,117984,75,119818,75,119870,75,119922,75,119974,75,120026,75,120078,75,120130,75,120182,75,120234,75,120286,75,120338,75,120390,75,120442,75,922,75,120497,75,120555,75,120613,75,120671,75,120729,75,11412,75,5094,75,5845,75,42199,75,66840,75,1472,108,8739,73,9213,73,65512,73,1633,108,1777,73,66336,108,125127,108,118001,108,120783,73,120793,73,120803,73,120813,73,120823,73,130033,73,65321,73,8544,73,8464,73,8465,73,117982,108,119816,73,119868,73,119920,73,120024,73,120128,73,120180,73,120232,73,120284,73,120336,73,120388,73,120440,73,65356,108,8572,73,8467,108,119845,108,119897,108,119949,108,120001,108,120053,108,120105,73,120157,73,120209,73,120261,73,120313,73,120365,73,120417,73,120469,73,448,73,120496,73,120554,73,120612,73,120670,73,120728,73,11410,73,1030,73,1216,73,1493,108,1503,108,1575,108,126464,108,126592,108,65166,108,65165,108,1994,108,11599,73,5825,73,42226,73,93992,73,66186,124,66313,124,119338,76,8556,76,8466,76,117985,76,119819,76,119871,76,119923,76,120027,76,120079,76,120131,76,120183,76,120235,76,120287,76,120339,76,120391,76,120443,76,11472,76,5086,76,5290,76,42209,76,93974,76,71843,76,71858,76,66587,76,66854,76,65325,77,8559,77,8499,77,117986,77,119820,77,119872,77,119924,77,120028,77,120080,77,120132,77,120184,77,120236,77,120288,77,120340,77,120392,77,120444,77,924,77,120499,77,120557,77,120615,77,120673,77,120731,77,1018,77,11416,77,5047,77,5616,77,5846,77,42207,77,66224,77,66321,77,119847,110,119899,110,119951,110,120003,110,120055,110,120107,110,120159,110,120211,110,120263,110,120315,110,120367,110,120419,110,120471,110,1400,110,1404,110,65326,78,8469,78,117987,78,119821,78,119873,78,119925,78,119977,78,120029,78,120081,78,120185,78,120237,78,120289,78,120341,78,120393,78,120445,78,925,78,120500,78,120558,78,120616,78,120674,78,120732,78,11418,78,42208,78,66835,78,3074,111,3202,111,3330,111,3458,111,2406,111,2662,111,2790,111,3046,111,3174,111,3302,111,3430,111,3664,111,3792,111,4160,111,1637,111,1781,111,65359,111,8500,111,119848,111,119900,111,119952,111,120056,111,120108,111,120160,111,120212,111,120264,111,120316,111,120368,111,120420,111,120472,111,7439,111,7441,111,43837,111,959,111,120528,111,120586,111,120644,111,120702,111,120760,111,963,111,120532,111,120590,111,120648,111,120706,111,120764,111,11423,111,4351,111,1413,111,1505,111,1607,111,126500,111,126564,111,126596,111,65259,111,65260,111,65258,111,65257,111,1726,111,64428,111,64429,111,64427,111,64426,111,1729,111,64424,111,64425,111,64423,111,64422,111,1749,111,3360,111,4125,111,66794,111,71880,111,71895,111,66604,111,1984,79,2534,79,2918,79,12295,79,70864,79,71904,79,118000,79,120782,79,120792,79,120802,79,120812,79,120822,79,130032,79,65327,79,117988,79,119822,79,119874,79,119926,79,119978,79,120030,79,120082,79,120134,79,120186,79,120238,79,120290,79,120342,79,120394,79,120446,79,927,79,120502,79,120560,79,120618,79,120676,79,120734,79,11422,79,1365,79,11604,79,4816,79,2848,79,66754,79,42227,79,71861,79,66194,79,66219,79,66564,79,66838,79,9076,112,65360,112,119849,112,119901,112,119953,112,120005,112,120057,112,120109,112,120161,112,120213,112,120265,112,120317,112,120369,112,120421,112,120473,112,961,112,120530,112,120544,112,120588,112,120602,112,120646,112,120660,112,120704,112,120718,112,120762,112,120776,112,11427,112,65328,80,8473,80,117989,80,119823,80,119875,80,119927,80,119979,80,120031,80,120083,80,120187,80,120239,80,120291,80,120343,80,120395,80,120447,80,929,80,120504,80,120562,80,120620,80,120678,80,120736,80,11426,80,5090,80,5229,80,42193,80,66197,80,119850,113,119902,113,119954,113,120006,113,120058,113,120110,113,120162,113,120214,113,120266,113,120318,113,120370,113,120422,113,120474,113,1307,113,1379,113,1382,113,8474,81,117990,81,119824,81,119876,81,119928,81,119980,81,120032,81,120084,81,120188,81,120240,81,120292,81,120344,81,120396,81,120448,81,11605,81,119851,114,119903,114,119955,114,120007,114,120059,114,120111,114,120163,114,120215,114,120267,114,120319,114,120371,114,120423,114,120475,114,43847,114,43848,114,7462,114,11397,114,43905,114,119318,82,8475,82,8476,82,8477,82,117991,82,119825,82,119877,82,119929,82,120033,82,120189,82,120241,82,120293,82,120345,82,120397,82,120449,82,422,82,5025,82,5074,82,66740,82,5511,82,42211,82,94005,82,65363,115,119852,115,119904,115,119956,115,120008,115,120060,115,120112,115,120164,115,120216,115,120268,115,120320,115,120372,115,120424,115,120476,115,42801,115,445,115,1109,115,43946,115,71873,115,66632,115,65331,83,117992,83,119826,83,119878,83,119930,83,119982,83,120034,83,120086,83,120138,83,120190,83,120242,83,120294,83,120346,83,120398,83,120450,83,1029,83,1359,83,5077,83,5082,83,42210,83,94010,83,66198,83,66592,83,119853,116,119905,116,119957,116,120009,116,120061,116,120113,116,120165,116,120217,116,120269,116,120321,116,120373,116,120425,116,120477,116,8868,84,10201,84,128872,84,65332,84,117993,84,119827,84,119879,84,119931,84,119983,84,120035,84,120087,84,120139,84,120191,84,120243,84,120295,84,120347,84,120399,84,120451,84,932,84,120507,84,120565,84,120623,84,120681,84,120739,84,11430,84,5026,84,42196,84,93962,84,71868,84,66199,84,66225,84,66325,84,119854,117,119906,117,119958,117,120010,117,120062,117,120114,117,120166,117,120218,117,120270,117,120322,117,120374,117,120426,117,120478,117,42911,117,7452,117,43854,117,43858,117,651,117,965,117,120534,117,120592,117,120650,117,120708,117,120766,117,1405,117,66806,117,71896,117,8746,85,8899,85,117994,85,119828,85,119880,85,119932,85,119984,85,120036,85,120088,85,120140,85,120192,85,120244,85,120296,85,120348,85,120400,85,120452,85,1357,85,4608,85,66766,85,5196,85,42228,85,94018,85,71864,85,8744,118,8897,118,65366,118,8564,118,119855,118,119907,118,119959,118,120011,118,120063,118,120115,118,120167,118,120219,118,120271,118,120323,118,120375,118,120427,118,120479,118,7456,118,957,118,120526,118,120584,118,120642,118,120700,118,120758,118,1141,118,1496,118,71430,118,43945,118,71872,118,119309,86,1639,86,1783,86,8548,86,117995,86,119829,86,119881,86,119933,86,119985,86,120037,86,120089,86,120141,86,120193,86,120245,86,120297,86,120349,86,120401,86,120453,86,1140,86,11576,86,5081,86,5167,86,42719,86,42214,86,93960,86,71840,86,66845,86,623,119,119856,119,119908,119,119960,119,120012,119,120064,119,120116,119,120168,119,120220,119,120272,119,120324,119,120376,119,120428,119,120480,119,7457,119,1121,119,1309,119,1377,119,71434,119,71438,119,71439,119,43907,119,71910,87,71919,87,117996,87,119830,87,119882,87,119934,87,119986,87,120038,87,120090,87,120142,87,120194,87,120246,87,120298,87,120350,87,120402,87,120454,87,1308,87,5043,87,5076,87,42218,87,5742,120,10539,120,10540,120,10799,120,65368,120,8569,120,119857,120,119909,120,119961,120,120013,120,120065,120,120117,120,120169,120,120221,120,120273,120,120325,120,120377,120,120429,120,120481,120,5441,120,5501,120,5741,88,9587,88,66338,88,71916,88,65336,88,8553,88,117997,88,119831,88,119883,88,119935,88,119987,88,120039,88,120091,88,120143,88,120195,88,120247,88,120299,88,120351,88,120403,88,120455,88,42931,88,935,88,120510,88,120568,88,120626,88,120684,88,120742,88,11436,88,11613,88,5815,88,42219,88,66192,88,66228,88,66327,88,66855,88,611,121,7564,121,65369,121,119858,121,119910,121,119962,121,120014,121,120066,121,120118,121,120170,121,120222,121,120274,121,120326,121,120378,121,120430,121,120482,121,655,121,7935,121,43866,121,947,121,8509,121,120516,121,120574,121,120632,121,120690,121,120748,121,1199,121,4327,121,71900,121,65337,89,117998,89,119832,89,119884,89,119936,89,119988,89,120040,89,120092,89,120144,89,120196,89,120248,89,120300,89,120352,89,120404,89,120456,89,933,89,978,89,120508,89,120566,89,120624,89,120682,89,120740,89,11432,89,1198,89,5033,89,5053,89,42220,89,94019,89,71844,89,66226,89,119859,122,119911,122,119963,122,120015,122,120067,122,120119,122,120171,122,120223,122,120275,122,120327,122,120379,122,120431,122,120483,122,7458,122,43923,122,71876,122,71909,90,66293,90,65338,90,8484,90,8488,90,117999,90,119833,90,119885,90,119937,90,119989,90,120041,90,120197,90,120249,90,120301,90,120353,90,120405,90,120457,90,918,90,120493,90,120551,90,120609,90,120667,90,120725,90,5059,90,42204,90,71849,90,65282,34,65283,35,65284,36,65285,37,65286,38,65290,42,65291,43,65294,46,65295,47,65296,48,65298,50,65299,51,65300,52,65301,53,65302,54,65303,55,65304,56,65305,57,65308,60,65309,61,65310,62,65312,64,65316,68,65318,70,65319,71,65324,76,65329,81,65330,82,65333,85,65334,86,65335,87,65343,95,65346,98,65348,100,65350,102,65355,107,65357,109,65358,110,65361,113,65362,114,65364,116,65365,117,65367,119,65370,122,65371,123,65373,125,119846,109],\\\"_default\\\":[160,32,8211,45,65374,126,8218,44,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65288,40,65289,41,65292,44,65297,49,65307,59,65311,63],\\\"cs\\\":[65374,126,8218,44,65306,58,65281,33,8216,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,1093,120,1061,88,1091,121,1059,89,65288,40,65289,41,65292,44,65297,49,65307,59,65311,63],\\\"de\\\":[65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,1093,120,1061,88,1091,121,1059,89,65288,40,65289,41,65292,44,65297,49,65307,59,65311,63],\\\"es\\\":[8211,45,65374,126,8218,44,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65288,40,65289,41,65292,44,65297,49,65307,59,65311,63],\\\"fr\\\":[65374,126,8218,44,65306,58,65281,33,8216,96,8245,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65288,40,65289,41,65292,44,65297,49,65307,59,65311,63],\\\"it\\\":[160,32,8211,45,65374,126,8218,44,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65288,40,65289,41,65292,44,65297,49,65307,59,65311,63],\\\"ja\\\":[8211,45,8218,44,65281,33,8216,96,8245,96,180,96,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65292,44,65297,49,65307,59],\\\"ko\\\":[8211,45,65374,126,8218,44,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65288,40,65289,41,65292,44,65297,49,65307,59,65311,63],\\\"pl\\\":[65374,126,65306,58,65281,33,8216,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65288,40,65289,41,65292,44,65297,49,65307,59,65311,63],\\\"pt-BR\\\":[65374,126,8218,44,65306,58,65281,33,8216,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65288,40,65289,41,65292,44,65297,49,65307,59,65311,63],\\\"qps-ploc\\\":[160,32,8211,45,65374,126,8218,44,65306,58,65281,33,8216,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65288,40,65289,41,65292,44,65297,49,65307,59,65311,63],\\\"ru\\\":[65374,126,8218,44,65306,58,65281,33,8216,96,8245,96,180,96,12494,47,305,105,921,73,1009,112,215,120,65288,40,65289,41,65292,44,65297,49,65307,59,65311,63],\\\"tr\\\":[160,32,8211,45,65374,126,8218,44,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65288,40,65289,41,65292,44,65297,49,65307,59,65311,63],\\\"zh-hans\\\":[160,32,65374,126,8218,44,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65297,49],\\\"zh-hant\\\":[8211,45,65374,126,8218,44,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89]}\");\n });\n }\n static {\n this.cache = new LRUCachedFunction({ getCacheKey: JSON.stringify }, (locales) => {\n function arrayToMap(arr) {\n const result = /* @__PURE__ */ new Map();\n for (let i = 0; i < arr.length; i += 2) result.set(arr[i], arr[i + 1]);\n return result;\n }\n function mergeMaps(map1, map2) {\n const result = new Map(map1);\n for (const [key, value] of map2) result.set(key, value);\n return result;\n }\n function intersectMaps(map1, map2) {\n if (!map1) return map2;\n const result = /* @__PURE__ */ new Map();\n for (const [key, value] of map1) if (map2.has(key)) result.set(key, value);\n return result;\n }\n const data = this.ambiguousCharacterData.value;\n let filteredLocales = locales.filter((l) => !l.startsWith(\"_\") && Object.hasOwn(data, l));\n if (filteredLocales.length === 0) filteredLocales = [\"_default\"];\n let languageSpecificMap = void 0;\n for (const locale of filteredLocales) {\n const map = arrayToMap(data[locale]);\n languageSpecificMap = intersectMaps(languageSpecificMap, map);\n }\n const map = mergeMaps(arrayToMap(data[\"_common\"]), languageSpecificMap);\n return new AmbiguousCharacters(map);\n });\n }\n static getInstance(locales) {\n return AmbiguousCharacters.cache.get(Array.from(locales));\n }\n static {\n this._locales = new Lazy(() => Object.keys(AmbiguousCharacters.ambiguousCharacterData.value).filter((k) => !k.startsWith(\"_\")));\n }\n static getLocales() {\n return AmbiguousCharacters._locales.value;\n }\n constructor(confusableDictionary) {\n this.confusableDictionary = confusableDictionary;\n }\n isAmbiguous(codePoint) {\n return this.confusableDictionary.has(codePoint);\n }\n /**\n * Returns the non basic ASCII code point that the given code point can be confused,\n * or undefined if such code point does note exist.\n */\n getPrimaryConfusable(codePoint) {\n return this.confusableDictionary.get(codePoint);\n }\n getConfusableCodePoints() {\n return new Set(this.confusableDictionary.keys());\n }\n };\n var InvisibleCharacters = class InvisibleCharacters {\n static getRawData() {\n return JSON.parse(\"{\\\"_common\\\":[11,12,13,127,847,1564,4447,4448,6068,6069,6155,6156,6157,6158,7355,7356,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8204,8205,8206,8207,8234,8235,8236,8237,8238,8239,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,10240,12644,65024,65025,65026,65027,65028,65029,65030,65031,65032,65033,65034,65035,65036,65037,65038,65039,65279,65440,65520,65521,65522,65523,65524,65525,65526,65527,65528,65532,78844,119155,119156,119157,119158,119159,119160,119161,119162,917504,917505,917506,917507,917508,917509,917510,917511,917512,917513,917514,917515,917516,917517,917518,917519,917520,917521,917522,917523,917524,917525,917526,917527,917528,917529,917530,917531,917532,917533,917534,917535,917536,917537,917538,917539,917540,917541,917542,917543,917544,917545,917546,917547,917548,917549,917550,917551,917552,917553,917554,917555,917556,917557,917558,917559,917560,917561,917562,917563,917564,917565,917566,917567,917568,917569,917570,917571,917572,917573,917574,917575,917576,917577,917578,917579,917580,917581,917582,917583,917584,917585,917586,917587,917588,917589,917590,917591,917592,917593,917594,917595,917596,917597,917598,917599,917600,917601,917602,917603,917604,917605,917606,917607,917608,917609,917610,917611,917612,917613,917614,917615,917616,917617,917618,917619,917620,917621,917622,917623,917624,917625,917626,917627,917628,917629,917630,917631,917760,917761,917762,917763,917764,917765,917766,917767,917768,917769,917770,917771,917772,917773,917774,917775,917776,917777,917778,917779,917780,917781,917782,917783,917784,917785,917786,917787,917788,917789,917790,917791,917792,917793,917794,917795,917796,917797,917798,917799,917800,917801,917802,917803,917804,917805,917806,917807,917808,917809,917810,917811,917812,917813,917814,917815,917816,917817,917818,917819,917820,917821,917822,917823,917824,917825,917826,917827,917828,917829,917830,917831,917832,917833,917834,917835,917836,917837,917838,917839,917840,917841,917842,917843,917844,917845,917846,917847,917848,917849,917850,917851,917852,917853,917854,917855,917856,917857,917858,917859,917860,917861,917862,917863,917864,917865,917866,917867,917868,917869,917870,917871,917872,917873,917874,917875,917876,917877,917878,917879,917880,917881,917882,917883,917884,917885,917886,917887,917888,917889,917890,917891,917892,917893,917894,917895,917896,917897,917898,917899,917900,917901,917902,917903,917904,917905,917906,917907,917908,917909,917910,917911,917912,917913,917914,917915,917916,917917,917918,917919,917920,917921,917922,917923,917924,917925,917926,917927,917928,917929,917930,917931,917932,917933,917934,917935,917936,917937,917938,917939,917940,917941,917942,917943,917944,917945,917946,917947,917948,917949,917950,917951,917952,917953,917954,917955,917956,917957,917958,917959,917960,917961,917962,917963,917964,917965,917966,917967,917968,917969,917970,917971,917972,917973,917974,917975,917976,917977,917978,917979,917980,917981,917982,917983,917984,917985,917986,917987,917988,917989,917990,917991,917992,917993,917994,917995,917996,917997,917998,917999],\\\"cs\\\":[173,8203,12288],\\\"de\\\":[173,8203,12288],\\\"es\\\":[8203,12288],\\\"fr\\\":[173,8203,12288],\\\"it\\\":[160,173,12288],\\\"ja\\\":[173],\\\"ko\\\":[173,12288],\\\"pl\\\":[173,8203,12288],\\\"pt-BR\\\":[173,8203,12288],\\\"qps-ploc\\\":[160,173,8203,12288],\\\"ru\\\":[173,12288],\\\"tr\\\":[160,173,8203,12288],\\\"zh-hans\\\":[160,173,8203,12288],\\\"zh-hant\\\":[173,12288]}\");\n }\n static {\n this._data = void 0;\n }\n static getData() {\n if (!this._data) this._data = new Set([...Object.values(InvisibleCharacters.getRawData())].flat());\n return this._data;\n }\n static isInvisibleCharacter(codePoint) {\n return InvisibleCharacters.getData().has(codePoint);\n }\n static get codePoints() {\n return InvisibleCharacters.getData();\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/worker/webWorker.js\n const DEFAULT_CHANNEL = \"default\";\n const INITIALIZE = \"$initialize\";\n var RequestMessage = class {\n constructor(vsWorker, req, channel, method, args) {\n this.vsWorker = vsWorker;\n this.req = req;\n this.channel = channel;\n this.method = method;\n this.args = args;\n this.type = 0;\n }\n };\n var ReplyMessage = class {\n constructor(vsWorker, seq, res, err) {\n this.vsWorker = vsWorker;\n this.seq = seq;\n this.res = res;\n this.err = err;\n this.type = 1;\n }\n };\n var SubscribeEventMessage = class {\n constructor(vsWorker, req, channel, eventName, arg) {\n this.vsWorker = vsWorker;\n this.req = req;\n this.channel = channel;\n this.eventName = eventName;\n this.arg = arg;\n this.type = 2;\n }\n };\n var EventMessage = class {\n constructor(vsWorker, req, event) {\n this.vsWorker = vsWorker;\n this.req = req;\n this.event = event;\n this.type = 3;\n }\n };\n var UnsubscribeEventMessage = class {\n constructor(vsWorker, req) {\n this.vsWorker = vsWorker;\n this.req = req;\n this.type = 4;\n }\n };\n var WebWorkerProtocol = class {\n constructor(handler) {\n this._workerId = -1;\n this._handler = handler;\n this._lastSentReq = 0;\n this._pendingReplies = Object.create(null);\n this._pendingEmitters = /* @__PURE__ */ new Map();\n this._pendingEvents = /* @__PURE__ */ new Map();\n }\n setWorkerId(workerId) {\n this._workerId = workerId;\n }\n async sendMessage(channel, method, args) {\n const req = String(++this._lastSentReq);\n return new Promise((resolve, reject) => {\n this._pendingReplies[req] = {\n resolve,\n reject\n };\n this._send(new RequestMessage(this._workerId, req, channel, method, args));\n });\n }\n listen(channel, eventName, arg) {\n let req = null;\n const emitter = new Emitter({\n onWillAddFirstListener: () => {\n req = String(++this._lastSentReq);\n this._pendingEmitters.set(req, emitter);\n this._send(new SubscribeEventMessage(this._workerId, req, channel, eventName, arg));\n },\n onDidRemoveLastListener: () => {\n this._pendingEmitters.delete(req);\n this._send(new UnsubscribeEventMessage(this._workerId, req));\n req = null;\n }\n });\n return emitter.event;\n }\n handleMessage(message) {\n if (!message || !message.vsWorker) return;\n if (this._workerId !== -1 && message.vsWorker !== this._workerId) return;\n this._handleMessage(message);\n }\n createProxyToRemoteChannel(channel, sendMessageBarrier) {\n return new Proxy(Object.create(null), { get: (target, name) => {\n if (typeof name === \"string\" && !target[name]) {\n if (propertyIsDynamicEvent(name)) target[name] = (arg) => {\n return this.listen(channel, name, arg);\n };\n else if (propertyIsEvent(name)) target[name] = this.listen(channel, name, void 0);\n else if (name.charCodeAt(0) === 36) target[name] = async (...myArgs) => {\n await sendMessageBarrier?.();\n return this.sendMessage(channel, name, myArgs);\n };\n }\n return target[name];\n } });\n }\n _handleMessage(msg) {\n switch (msg.type) {\n case 1: return this._handleReplyMessage(msg);\n case 0: return this._handleRequestMessage(msg);\n case 2: return this._handleSubscribeEventMessage(msg);\n case 3: return this._handleEventMessage(msg);\n case 4: return this._handleUnsubscribeEventMessage(msg);\n }\n }\n _handleReplyMessage(replyMessage) {\n if (!this._pendingReplies[replyMessage.seq]) {\n console.warn(\"Got reply to unknown seq\");\n return;\n }\n const reply = this._pendingReplies[replyMessage.seq];\n delete this._pendingReplies[replyMessage.seq];\n if (replyMessage.err) {\n let err = replyMessage.err;\n if (replyMessage.err.$isError) {\n const newErr = /* @__PURE__ */ new Error();\n newErr.name = replyMessage.err.name;\n newErr.message = replyMessage.err.message;\n newErr.stack = replyMessage.err.stack;\n err = newErr;\n }\n reply.reject(err);\n return;\n }\n reply.resolve(replyMessage.res);\n }\n _handleRequestMessage(requestMessage) {\n const req = requestMessage.req;\n this._handler.handleMessage(requestMessage.channel, requestMessage.method, requestMessage.args).then((r) => {\n this._send(new ReplyMessage(this._workerId, req, r, void 0));\n }, (e) => {\n if (e.detail instanceof Error) e.detail = transformErrorForSerialization(e.detail);\n this._send(new ReplyMessage(this._workerId, req, void 0, transformErrorForSerialization(e)));\n });\n }\n _handleSubscribeEventMessage(msg) {\n const req = msg.req;\n const disposable = this._handler.handleEvent(msg.channel, msg.eventName, msg.arg)((event) => {\n this._send(new EventMessage(this._workerId, req, event));\n });\n this._pendingEvents.set(req, disposable);\n }\n _handleEventMessage(msg) {\n if (!this._pendingEmitters.has(msg.req)) {\n console.warn(\"Got event for unknown req\");\n return;\n }\n this._pendingEmitters.get(msg.req).fire(msg.event);\n }\n _handleUnsubscribeEventMessage(msg) {\n if (!this._pendingEvents.has(msg.req)) {\n console.warn(\"Got unsubscribe for unknown req\");\n return;\n }\n this._pendingEvents.get(msg.req).dispose();\n this._pendingEvents.delete(msg.req);\n }\n _send(msg) {\n const transfer = [];\n if (msg.type === 0) for (let i = 0; i < msg.args.length; i++) {\n const arg = msg.args[i];\n if (arg instanceof ArrayBuffer) transfer.push(arg);\n }\n else if (msg.type === 1) {\n if (msg.res instanceof ArrayBuffer) transfer.push(msg.res);\n }\n this._handler.sendMessage(msg, transfer);\n }\n };\n function propertyIsEvent(name) {\n return name[0] === \"o\" && name[1] === \"n\" && isUpperAsciiLetter(name.charCodeAt(2));\n }\n function propertyIsDynamicEvent(name) {\n return /^onDynamic/.test(name) && isUpperAsciiLetter(name.charCodeAt(9));\n }\n /**\n * Worker side\n */\n var WebWorkerServer = class {\n constructor(postMessage, requestHandlerFactory) {\n this._localChannels = /* @__PURE__ */ new Map();\n this._remoteChannels = /* @__PURE__ */ new Map();\n this._protocol = new WebWorkerProtocol({\n sendMessage: (msg, transfer) => {\n postMessage(msg, transfer);\n },\n handleMessage: (channel, method, args) => this._handleMessage(channel, method, args),\n handleEvent: (channel, eventName, arg) => this._handleEvent(channel, eventName, arg)\n });\n this.requestHandler = requestHandlerFactory(this);\n }\n onmessage(msg) {\n this._protocol.handleMessage(msg);\n }\n _handleMessage(channel, method, args) {\n if (channel === DEFAULT_CHANNEL && method === INITIALIZE) return this.initialize(args[0]);\n const requestHandler = channel === DEFAULT_CHANNEL ? this.requestHandler : this._localChannels.get(channel);\n if (!requestHandler) return Promise.reject(/* @__PURE__ */ new Error(`Missing channel ${channel} on worker thread`));\n const fn = requestHandler[method];\n if (typeof fn !== \"function\") return Promise.reject(/* @__PURE__ */ new Error(`Missing method ${method} on worker thread channel ${channel}`));\n try {\n return Promise.resolve(fn.apply(requestHandler, args));\n } catch (e) {\n return Promise.reject(e);\n }\n }\n _handleEvent(channel, eventName, arg) {\n const requestHandler = channel === DEFAULT_CHANNEL ? this.requestHandler : this._localChannels.get(channel);\n if (!requestHandler) throw new Error(`Missing channel ${channel} on worker thread`);\n if (propertyIsDynamicEvent(eventName)) {\n const fn = requestHandler[eventName];\n if (typeof fn !== \"function\") throw new Error(`Missing dynamic event ${eventName} on request handler.`);\n const event = fn.call(requestHandler, arg);\n if (typeof event !== \"function\") throw new Error(`Missing dynamic event ${eventName} on request handler.`);\n return event;\n }\n if (propertyIsEvent(eventName)) {\n const event = requestHandler[eventName];\n if (typeof event !== \"function\") throw new Error(`Missing event ${eventName} on request handler.`);\n return event;\n }\n throw new Error(`Malformed event name ${eventName}`);\n }\n getChannel(channel) {\n if (!this._remoteChannels.has(channel)) {\n const inst = this._protocol.createProxyToRemoteChannel(channel);\n this._remoteChannels.set(channel, inst);\n }\n return this._remoteChannels.get(channel);\n }\n async initialize(workerId) {\n this._protocol.setWorkerId(workerId);\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/worker/webWorkerBootstrap.js\n let initialized$1 = false;\n function initialize$1(factory) {\n if (initialized$1) throw new Error(\"WebWorker already initialized!\");\n initialized$1 = true;\n const webWorkerServer = new WebWorkerServer((msg) => globalThis.postMessage(msg), (workerServer) => factory(workerServer));\n globalThis.onmessage = (e) => {\n webWorkerServer.onmessage(e.data);\n };\n return webWorkerServer;\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/diff/diffChange.js\n /**\n * Represents information about a specific difference between two sequences.\n */\n var DiffChange = class {\n /**\n * Constructs a new DiffChange with the given sequence information\n * and content.\n */\n constructor(originalStart, originalLength, modifiedStart, modifiedLength) {\n this.originalStart = originalStart;\n this.originalLength = originalLength;\n this.modifiedStart = modifiedStart;\n this.modifiedLength = modifiedLength;\n }\n /**\n * The end point (exclusive) of the change in the original sequence.\n */\n getOriginalEnd() {\n return this.originalStart + this.originalLength;\n }\n /**\n * The end point (exclusive) of the change in the modified sequence.\n */\n getModifiedEnd() {\n return this.modifiedStart + this.modifiedLength;\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/buffer.js\n const hasBuffer = typeof Buffer !== \"undefined\";\n new Lazy(() => /* @__PURE__ */ new Uint8Array(256));\n let textDecoder;\n var VSBuffer = class VSBuffer {\n /**\n * When running in a nodejs context, if `actual` is not a nodejs Buffer, the backing store for\n * the returned `VSBuffer` instance might use a nodejs Buffer allocated from node's Buffer pool,\n * which is not transferrable.\n */\n static wrap(actual) {\n if (hasBuffer && !Buffer.isBuffer(actual)) actual = Buffer.from(actual.buffer, actual.byteOffset, actual.byteLength);\n return new VSBuffer(actual);\n }\n constructor(buffer) {\n this.buffer = buffer;\n this.byteLength = this.buffer.byteLength;\n }\n toString() {\n if (hasBuffer) return this.buffer.toString();\n else {\n if (!textDecoder) textDecoder = new TextDecoder();\n return textDecoder.decode(this.buffer);\n }\n }\n };\n const hexChars = \"0123456789abcdef\";\n function encodeHex({ buffer }) {\n let result = \"\";\n for (let i = 0; i < buffer.length; i++) {\n const byte = buffer[i];\n result += hexChars[byte >>> 4];\n result += hexChars[byte & 15];\n }\n return result;\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/hash.js\n function numberHash(val, initialHashVal) {\n return (initialHashVal << 5) - initialHashVal + val | 0;\n }\n function stringHash(s, hashVal) {\n hashVal = numberHash(149417, hashVal);\n for (let i = 0, length = s.length; i < length; i++) hashVal = numberHash(s.charCodeAt(i), hashVal);\n return hashVal;\n }\n function leftRotate(value, bits, totalBits = 32) {\n const delta = totalBits - bits;\n const mask = ~((1 << delta) - 1);\n return (value << bits | (mask & value) >>> delta) >>> 0;\n }\n function toHexString(bufferOrValue, bitsize = 32) {\n if (bufferOrValue instanceof ArrayBuffer) return encodeHex(VSBuffer.wrap(new Uint8Array(bufferOrValue)));\n return (bufferOrValue >>> 0).toString(16).padStart(bitsize / 4, \"0\");\n }\n (class StringSHA1 {\n static {\n this._bigBlock32 = /* @__PURE__ */ new DataView(/* @__PURE__ */ new ArrayBuffer(320));\n }\n constructor() {\n this._h0 = 1732584193;\n this._h1 = 4023233417;\n this._h2 = 2562383102;\n this._h3 = 271733878;\n this._h4 = 3285377520;\n this._buff = /* @__PURE__ */ new Uint8Array(67);\n this._buffDV = new DataView(this._buff.buffer);\n this._buffLen = 0;\n this._totalLen = 0;\n this._leftoverHighSurrogate = 0;\n this._finished = false;\n }\n update(str) {\n const strLen = str.length;\n if (strLen === 0) return;\n const buff = this._buff;\n let buffLen = this._buffLen;\n let leftoverHighSurrogate = this._leftoverHighSurrogate;\n let charCode;\n let offset;\n if (leftoverHighSurrogate !== 0) {\n charCode = leftoverHighSurrogate;\n offset = -1;\n leftoverHighSurrogate = 0;\n } else {\n charCode = str.charCodeAt(0);\n offset = 0;\n }\n while (true) {\n let codePoint = charCode;\n if (isHighSurrogate(charCode)) if (offset + 1 < strLen) {\n const nextCharCode = str.charCodeAt(offset + 1);\n if (isLowSurrogate(nextCharCode)) {\n offset++;\n codePoint = computeCodePoint(charCode, nextCharCode);\n } else codePoint = 65533;\n } else {\n leftoverHighSurrogate = charCode;\n break;\n }\n else if (isLowSurrogate(charCode)) codePoint = 65533;\n buffLen = this._push(buff, buffLen, codePoint);\n offset++;\n if (offset < strLen) charCode = str.charCodeAt(offset);\n else break;\n }\n this._buffLen = buffLen;\n this._leftoverHighSurrogate = leftoverHighSurrogate;\n }\n _push(buff, buffLen, codePoint) {\n if (codePoint < 128) buff[buffLen++] = codePoint;\n else if (codePoint < 2048) {\n buff[buffLen++] = 192 | (codePoint & 1984) >>> 6;\n buff[buffLen++] = 128 | (codePoint & 63) >>> 0;\n } else if (codePoint < 65536) {\n buff[buffLen++] = 224 | (codePoint & 61440) >>> 12;\n buff[buffLen++] = 128 | (codePoint & 4032) >>> 6;\n buff[buffLen++] = 128 | (codePoint & 63) >>> 0;\n } else {\n buff[buffLen++] = 240 | (codePoint & 1835008) >>> 18;\n buff[buffLen++] = 128 | (codePoint & 258048) >>> 12;\n buff[buffLen++] = 128 | (codePoint & 4032) >>> 6;\n buff[buffLen++] = 128 | (codePoint & 63) >>> 0;\n }\n if (buffLen >= 64) {\n this._step();\n buffLen -= 64;\n this._totalLen += 64;\n buff[0] = buff[64];\n buff[1] = buff[65];\n buff[2] = buff[66];\n }\n return buffLen;\n }\n digest() {\n if (!this._finished) {\n this._finished = true;\n if (this._leftoverHighSurrogate) {\n this._leftoverHighSurrogate = 0;\n this._buffLen = this._push(this._buff, this._buffLen, 65533);\n }\n this._totalLen += this._buffLen;\n this._wrapUp();\n }\n return toHexString(this._h0) + toHexString(this._h1) + toHexString(this._h2) + toHexString(this._h3) + toHexString(this._h4);\n }\n _wrapUp() {\n this._buff[this._buffLen++] = 128;\n this._buff.subarray(this._buffLen).fill(0);\n if (this._buffLen > 56) {\n this._step();\n this._buff.fill(0);\n }\n const ml = 8 * this._totalLen;\n this._buffDV.setUint32(56, Math.floor(ml / 4294967296), false);\n this._buffDV.setUint32(60, ml % 4294967296, false);\n this._step();\n }\n _step() {\n const bigBlock32 = StringSHA1._bigBlock32;\n const data = this._buffDV;\n for (let j = 0; j < 64; j += 4) bigBlock32.setUint32(j, data.getUint32(j, false), false);\n for (let j = 64; j < 320; j += 4) bigBlock32.setUint32(j, leftRotate(bigBlock32.getUint32(j - 12, false) ^ bigBlock32.getUint32(j - 32, false) ^ bigBlock32.getUint32(j - 56, false) ^ bigBlock32.getUint32(j - 64, false), 1), false);\n let a = this._h0;\n let b = this._h1;\n let c = this._h2;\n let d = this._h3;\n let e = this._h4;\n let f, k;\n let temp;\n for (let j = 0; j < 80; j++) {\n if (j < 20) {\n f = b & c | ~b & d;\n k = 1518500249;\n } else if (j < 40) {\n f = b ^ c ^ d;\n k = 1859775393;\n } else if (j < 60) {\n f = b & c | b & d | c & d;\n k = 2400959708;\n } else {\n f = b ^ c ^ d;\n k = 3395469782;\n }\n temp = leftRotate(a, 5) + f + e + k + bigBlock32.getUint32(j * 4, false) & 4294967295;\n e = d;\n d = c;\n c = leftRotate(b, 30);\n b = a;\n a = temp;\n }\n this._h0 = this._h0 + a & 4294967295;\n this._h1 = this._h1 + b & 4294967295;\n this._h2 = this._h2 + c & 4294967295;\n this._h3 = this._h3 + d & 4294967295;\n this._h4 = this._h4 + e & 4294967295;\n }\n });\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/diff/diff.js\n var StringDiffSequence = class {\n constructor(source) {\n this.source = source;\n }\n getElements() {\n const source = this.source;\n const characters = new Int32Array(source.length);\n for (let i = 0, len = source.length; i < len; i++) characters[i] = source.charCodeAt(i);\n return characters;\n }\n };\n function stringDiff(original, modified, pretty) {\n return new LcsDiff(new StringDiffSequence(original), new StringDiffSequence(modified)).ComputeDiff(pretty).changes;\n }\n var Debug = class {\n static Assert(condition, message) {\n if (!condition) throw new Error(message);\n }\n };\n var MyArray = class {\n /**\n * Copies a range of elements from an Array starting at the specified source index and pastes\n * them to another Array starting at the specified destination index. The length and the indexes\n * are specified as 64-bit integers.\n * sourceArray:\n * The Array that contains the data to copy.\n * sourceIndex:\n * A 64-bit integer that represents the index in the sourceArray at which copying begins.\n * destinationArray:\n * The Array that receives the data.\n * destinationIndex:\n * A 64-bit integer that represents the index in the destinationArray at which storing begins.\n * length:\n * A 64-bit integer that represents the number of elements to copy.\n */\n static Copy(sourceArray, sourceIndex, destinationArray, destinationIndex, length) {\n for (let i = 0; i < length; i++) destinationArray[destinationIndex + i] = sourceArray[sourceIndex + i];\n }\n static Copy2(sourceArray, sourceIndex, destinationArray, destinationIndex, length) {\n for (let i = 0; i < length; i++) destinationArray[destinationIndex + i] = sourceArray[sourceIndex + i];\n }\n };\n /**\n * A utility class which helps to create the set of DiffChanges from\n * a difference operation. This class accepts original DiffElements and\n * modified DiffElements that are involved in a particular change. The\n * MarkNextChange() method can be called to mark the separation between\n * distinct changes. At the end, the Changes property can be called to retrieve\n * the constructed changes.\n */\n var DiffChangeHelper = class {\n /**\n * Constructs a new DiffChangeHelper for the given DiffSequences.\n */\n constructor() {\n this.m_changes = [];\n this.m_originalStart = 1073741824;\n this.m_modifiedStart = 1073741824;\n this.m_originalCount = 0;\n this.m_modifiedCount = 0;\n }\n /**\n * Marks the beginning of the next change in the set of differences.\n */\n MarkNextChange() {\n if (this.m_originalCount > 0 || this.m_modifiedCount > 0) this.m_changes.push(new DiffChange(this.m_originalStart, this.m_originalCount, this.m_modifiedStart, this.m_modifiedCount));\n this.m_originalCount = 0;\n this.m_modifiedCount = 0;\n this.m_originalStart = 1073741824;\n this.m_modifiedStart = 1073741824;\n }\n /**\n * Adds the original element at the given position to the elements\n * affected by the current change. The modified index gives context\n * to the change position with respect to the original sequence.\n * @param originalIndex The index of the original element to add.\n * @param modifiedIndex The index of the modified element that provides corresponding position in the modified sequence.\n */\n AddOriginalElement(originalIndex, modifiedIndex) {\n this.m_originalStart = Math.min(this.m_originalStart, originalIndex);\n this.m_modifiedStart = Math.min(this.m_modifiedStart, modifiedIndex);\n this.m_originalCount++;\n }\n /**\n * Adds the modified element at the given position to the elements\n * affected by the current change. The original index gives context\n * to the change position with respect to the modified sequence.\n * @param originalIndex The index of the original element that provides corresponding position in the original sequence.\n * @param modifiedIndex The index of the modified element to add.\n */\n AddModifiedElement(originalIndex, modifiedIndex) {\n this.m_originalStart = Math.min(this.m_originalStart, originalIndex);\n this.m_modifiedStart = Math.min(this.m_modifiedStart, modifiedIndex);\n this.m_modifiedCount++;\n }\n /**\n * Retrieves all of the changes marked by the class.\n */\n getChanges() {\n if (this.m_originalCount > 0 || this.m_modifiedCount > 0) this.MarkNextChange();\n return this.m_changes;\n }\n /**\n * Retrieves all of the changes marked by the class in the reverse order\n */\n getReverseChanges() {\n if (this.m_originalCount > 0 || this.m_modifiedCount > 0) this.MarkNextChange();\n this.m_changes.reverse();\n return this.m_changes;\n }\n };\n /**\n * An implementation of the difference algorithm described in\n * \"An O(ND) Difference Algorithm and its variations\" by Eugene W. Myers\n */\n var LcsDiff = class LcsDiff {\n /**\n * Constructs the DiffFinder\n */\n constructor(originalSequence, modifiedSequence, continueProcessingPredicate = null) {\n this.ContinueProcessingPredicate = continueProcessingPredicate;\n this._originalSequence = originalSequence;\n this._modifiedSequence = modifiedSequence;\n const [originalStringElements, originalElementsOrHash, originalHasStrings] = LcsDiff._getElements(originalSequence);\n const [modifiedStringElements, modifiedElementsOrHash, modifiedHasStrings] = LcsDiff._getElements(modifiedSequence);\n this._hasStrings = originalHasStrings && modifiedHasStrings;\n this._originalStringElements = originalStringElements;\n this._originalElementsOrHash = originalElementsOrHash;\n this._modifiedStringElements = modifiedStringElements;\n this._modifiedElementsOrHash = modifiedElementsOrHash;\n this.m_forwardHistory = [];\n this.m_reverseHistory = [];\n }\n static _isStringArray(arr) {\n return arr.length > 0 && typeof arr[0] === \"string\";\n }\n static _getElements(sequence) {\n const elements = sequence.getElements();\n if (LcsDiff._isStringArray(elements)) {\n const hashes = new Int32Array(elements.length);\n for (let i = 0, len = elements.length; i < len; i++) hashes[i] = stringHash(elements[i], 0);\n return [\n elements,\n hashes,\n true\n ];\n }\n if (elements instanceof Int32Array) return [\n [],\n elements,\n false\n ];\n return [\n [],\n new Int32Array(elements),\n false\n ];\n }\n ElementsAreEqual(originalIndex, newIndex) {\n if (this._originalElementsOrHash[originalIndex] !== this._modifiedElementsOrHash[newIndex]) return false;\n return this._hasStrings ? this._originalStringElements[originalIndex] === this._modifiedStringElements[newIndex] : true;\n }\n ElementsAreStrictEqual(originalIndex, newIndex) {\n if (!this.ElementsAreEqual(originalIndex, newIndex)) return false;\n return LcsDiff._getStrictElement(this._originalSequence, originalIndex) === LcsDiff._getStrictElement(this._modifiedSequence, newIndex);\n }\n static _getStrictElement(sequence, index) {\n if (typeof sequence.getStrictElement === \"function\") return sequence.getStrictElement(index);\n return null;\n }\n OriginalElementsAreEqual(index1, index2) {\n if (this._originalElementsOrHash[index1] !== this._originalElementsOrHash[index2]) return false;\n return this._hasStrings ? this._originalStringElements[index1] === this._originalStringElements[index2] : true;\n }\n ModifiedElementsAreEqual(index1, index2) {\n if (this._modifiedElementsOrHash[index1] !== this._modifiedElementsOrHash[index2]) return false;\n return this._hasStrings ? this._modifiedStringElements[index1] === this._modifiedStringElements[index2] : true;\n }\n ComputeDiff(pretty) {\n return this._ComputeDiff(0, this._originalElementsOrHash.length - 1, 0, this._modifiedElementsOrHash.length - 1, pretty);\n }\n /**\n * Computes the differences between the original and modified input\n * sequences on the bounded range.\n * @returns An array of the differences between the two input sequences.\n */\n _ComputeDiff(originalStart, originalEnd, modifiedStart, modifiedEnd, pretty) {\n const quitEarlyArr = [false];\n let changes = this.ComputeDiffRecursive(originalStart, originalEnd, modifiedStart, modifiedEnd, quitEarlyArr);\n if (pretty) changes = this.PrettifyChanges(changes);\n return {\n quitEarly: quitEarlyArr[0],\n changes\n };\n }\n /**\n * Private helper method which computes the differences on the bounded range\n * recursively.\n * @returns An array of the differences between the two input sequences.\n */\n ComputeDiffRecursive(originalStart, originalEnd, modifiedStart, modifiedEnd, quitEarlyArr) {\n quitEarlyArr[0] = false;\n while (originalStart <= originalEnd && modifiedStart <= modifiedEnd && this.ElementsAreEqual(originalStart, modifiedStart)) {\n originalStart++;\n modifiedStart++;\n }\n while (originalEnd >= originalStart && modifiedEnd >= modifiedStart && this.ElementsAreEqual(originalEnd, modifiedEnd)) {\n originalEnd--;\n modifiedEnd--;\n }\n if (originalStart > originalEnd || modifiedStart > modifiedEnd) {\n let changes;\n if (modifiedStart <= modifiedEnd) {\n Debug.Assert(originalStart === originalEnd + 1, \"originalStart should only be one more than originalEnd\");\n changes = [new DiffChange(originalStart, 0, modifiedStart, modifiedEnd - modifiedStart + 1)];\n } else if (originalStart <= originalEnd) {\n Debug.Assert(modifiedStart === modifiedEnd + 1, \"modifiedStart should only be one more than modifiedEnd\");\n changes = [new DiffChange(originalStart, originalEnd - originalStart + 1, modifiedStart, 0)];\n } else {\n Debug.Assert(originalStart === originalEnd + 1, \"originalStart should only be one more than originalEnd\");\n Debug.Assert(modifiedStart === modifiedEnd + 1, \"modifiedStart should only be one more than modifiedEnd\");\n changes = [];\n }\n return changes;\n }\n const midOriginalArr = [0];\n const midModifiedArr = [0];\n const result = this.ComputeRecursionPoint(originalStart, originalEnd, modifiedStart, modifiedEnd, midOriginalArr, midModifiedArr, quitEarlyArr);\n const midOriginal = midOriginalArr[0];\n const midModified = midModifiedArr[0];\n if (result !== null) return result;\n else if (!quitEarlyArr[0]) {\n const leftChanges = this.ComputeDiffRecursive(originalStart, midOriginal, modifiedStart, midModified, quitEarlyArr);\n let rightChanges = [];\n if (!quitEarlyArr[0]) rightChanges = this.ComputeDiffRecursive(midOriginal + 1, originalEnd, midModified + 1, modifiedEnd, quitEarlyArr);\n else rightChanges = [new DiffChange(midOriginal + 1, originalEnd - (midOriginal + 1) + 1, midModified + 1, modifiedEnd - (midModified + 1) + 1)];\n return this.ConcatenateChanges(leftChanges, rightChanges);\n }\n return [new DiffChange(originalStart, originalEnd - originalStart + 1, modifiedStart, modifiedEnd - modifiedStart + 1)];\n }\n WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr) {\n let forwardChanges = null;\n let reverseChanges = null;\n let changeHelper = new DiffChangeHelper();\n let diagonalMin = diagonalForwardStart;\n let diagonalMax = diagonalForwardEnd;\n let diagonalRelative = midOriginalArr[0] - midModifiedArr[0] - diagonalForwardOffset;\n let lastOriginalIndex = -1073741824;\n let historyIndex = this.m_forwardHistory.length - 1;\n do {\n const diagonal = diagonalRelative + diagonalForwardBase;\n if (diagonal === diagonalMin || diagonal < diagonalMax && forwardPoints[diagonal - 1] < forwardPoints[diagonal + 1]) {\n originalIndex = forwardPoints[diagonal + 1];\n modifiedIndex = originalIndex - diagonalRelative - diagonalForwardOffset;\n if (originalIndex < lastOriginalIndex) changeHelper.MarkNextChange();\n lastOriginalIndex = originalIndex;\n changeHelper.AddModifiedElement(originalIndex + 1, modifiedIndex);\n diagonalRelative = diagonal + 1 - diagonalForwardBase;\n } else {\n originalIndex = forwardPoints[diagonal - 1] + 1;\n modifiedIndex = originalIndex - diagonalRelative - diagonalForwardOffset;\n if (originalIndex < lastOriginalIndex) changeHelper.MarkNextChange();\n lastOriginalIndex = originalIndex - 1;\n changeHelper.AddOriginalElement(originalIndex, modifiedIndex + 1);\n diagonalRelative = diagonal - 1 - diagonalForwardBase;\n }\n if (historyIndex >= 0) {\n forwardPoints = this.m_forwardHistory[historyIndex];\n diagonalForwardBase = forwardPoints[0];\n diagonalMin = 1;\n diagonalMax = forwardPoints.length - 1;\n }\n } while (--historyIndex >= -1);\n forwardChanges = changeHelper.getReverseChanges();\n if (quitEarlyArr[0]) {\n let originalStartPoint = midOriginalArr[0] + 1;\n let modifiedStartPoint = midModifiedArr[0] + 1;\n if (forwardChanges !== null && forwardChanges.length > 0) {\n const lastForwardChange = forwardChanges[forwardChanges.length - 1];\n originalStartPoint = Math.max(originalStartPoint, lastForwardChange.getOriginalEnd());\n modifiedStartPoint = Math.max(modifiedStartPoint, lastForwardChange.getModifiedEnd());\n }\n reverseChanges = [new DiffChange(originalStartPoint, originalEnd - originalStartPoint + 1, modifiedStartPoint, modifiedEnd - modifiedStartPoint + 1)];\n } else {\n changeHelper = new DiffChangeHelper();\n diagonalMin = diagonalReverseStart;\n diagonalMax = diagonalReverseEnd;\n diagonalRelative = midOriginalArr[0] - midModifiedArr[0] - diagonalReverseOffset;\n lastOriginalIndex = 1073741824;\n historyIndex = deltaIsEven ? this.m_reverseHistory.length - 1 : this.m_reverseHistory.length - 2;\n do {\n const diagonal = diagonalRelative + diagonalReverseBase;\n if (diagonal === diagonalMin || diagonal < diagonalMax && reversePoints[diagonal - 1] >= reversePoints[diagonal + 1]) {\n originalIndex = reversePoints[diagonal + 1] - 1;\n modifiedIndex = originalIndex - diagonalRelative - diagonalReverseOffset;\n if (originalIndex > lastOriginalIndex) changeHelper.MarkNextChange();\n lastOriginalIndex = originalIndex + 1;\n changeHelper.AddOriginalElement(originalIndex + 1, modifiedIndex + 1);\n diagonalRelative = diagonal + 1 - diagonalReverseBase;\n } else {\n originalIndex = reversePoints[diagonal - 1];\n modifiedIndex = originalIndex - diagonalRelative - diagonalReverseOffset;\n if (originalIndex > lastOriginalIndex) changeHelper.MarkNextChange();\n lastOriginalIndex = originalIndex;\n changeHelper.AddModifiedElement(originalIndex + 1, modifiedIndex + 1);\n diagonalRelative = diagonal - 1 - diagonalReverseBase;\n }\n if (historyIndex >= 0) {\n reversePoints = this.m_reverseHistory[historyIndex];\n diagonalReverseBase = reversePoints[0];\n diagonalMin = 1;\n diagonalMax = reversePoints.length - 1;\n }\n } while (--historyIndex >= -1);\n reverseChanges = changeHelper.getChanges();\n }\n return this.ConcatenateChanges(forwardChanges, reverseChanges);\n }\n /**\n * Given the range to compute the diff on, this method finds the point:\n * (midOriginal, midModified)\n * that exists in the middle of the LCS of the two sequences and\n * is the point at which the LCS problem may be broken down recursively.\n * This method will try to keep the LCS trace in memory. If the LCS recursion\n * point is calculated and the full trace is available in memory, then this method\n * will return the change list.\n * @param originalStart The start bound of the original sequence range\n * @param originalEnd The end bound of the original sequence range\n * @param modifiedStart The start bound of the modified sequence range\n * @param modifiedEnd The end bound of the modified sequence range\n * @param midOriginal The middle point of the original sequence range\n * @param midModified The middle point of the modified sequence range\n * @returns The diff changes, if available, otherwise null\n */\n ComputeRecursionPoint(originalStart, originalEnd, modifiedStart, modifiedEnd, midOriginalArr, midModifiedArr, quitEarlyArr) {\n let originalIndex = 0, modifiedIndex = 0;\n let diagonalForwardStart = 0, diagonalForwardEnd = 0;\n let diagonalReverseStart = 0, diagonalReverseEnd = 0;\n originalStart--;\n modifiedStart--;\n midOriginalArr[0] = 0;\n midModifiedArr[0] = 0;\n this.m_forwardHistory = [];\n this.m_reverseHistory = [];\n const maxDifferences = originalEnd - originalStart + (modifiedEnd - modifiedStart);\n const numDiagonals = maxDifferences + 1;\n const forwardPoints = new Int32Array(numDiagonals);\n const reversePoints = new Int32Array(numDiagonals);\n const diagonalForwardBase = modifiedEnd - modifiedStart;\n const diagonalReverseBase = originalEnd - originalStart;\n const diagonalForwardOffset = originalStart - modifiedStart;\n const diagonalReverseOffset = originalEnd - modifiedEnd;\n const deltaIsEven = (diagonalReverseBase - diagonalForwardBase) % 2 === 0;\n forwardPoints[diagonalForwardBase] = originalStart;\n reversePoints[diagonalReverseBase] = originalEnd;\n quitEarlyArr[0] = false;\n for (let numDifferences = 1; numDifferences <= maxDifferences / 2 + 1; numDifferences++) {\n let furthestOriginalIndex = 0;\n let furthestModifiedIndex = 0;\n diagonalForwardStart = this.ClipDiagonalBound(diagonalForwardBase - numDifferences, numDifferences, diagonalForwardBase, numDiagonals);\n diagonalForwardEnd = this.ClipDiagonalBound(diagonalForwardBase + numDifferences, numDifferences, diagonalForwardBase, numDiagonals);\n for (let diagonal = diagonalForwardStart; diagonal <= diagonalForwardEnd; diagonal += 2) {\n if (diagonal === diagonalForwardStart || diagonal < diagonalForwardEnd && forwardPoints[diagonal - 1] < forwardPoints[diagonal + 1]) originalIndex = forwardPoints[diagonal + 1];\n else originalIndex = forwardPoints[diagonal - 1] + 1;\n modifiedIndex = originalIndex - (diagonal - diagonalForwardBase) - diagonalForwardOffset;\n const tempOriginalIndex = originalIndex;\n while (originalIndex < originalEnd && modifiedIndex < modifiedEnd && this.ElementsAreEqual(originalIndex + 1, modifiedIndex + 1)) {\n originalIndex++;\n modifiedIndex++;\n }\n forwardPoints[diagonal] = originalIndex;\n if (originalIndex + modifiedIndex > furthestOriginalIndex + furthestModifiedIndex) {\n furthestOriginalIndex = originalIndex;\n furthestModifiedIndex = modifiedIndex;\n }\n if (!deltaIsEven && Math.abs(diagonal - diagonalReverseBase) <= numDifferences - 1) {\n if (originalIndex >= reversePoints[diagonal]) {\n midOriginalArr[0] = originalIndex;\n midModifiedArr[0] = modifiedIndex;\n if (tempOriginalIndex <= reversePoints[diagonal] && numDifferences <= 1448) return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\n else return null;\n }\n }\n }\n const matchLengthOfLongest = (furthestOriginalIndex - originalStart + (furthestModifiedIndex - modifiedStart) - numDifferences) / 2;\n if (this.ContinueProcessingPredicate !== null && !this.ContinueProcessingPredicate(furthestOriginalIndex, matchLengthOfLongest)) {\n quitEarlyArr[0] = true;\n midOriginalArr[0] = furthestOriginalIndex;\n midModifiedArr[0] = furthestModifiedIndex;\n if (matchLengthOfLongest > 0 && numDifferences <= 1448) return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\n else {\n originalStart++;\n modifiedStart++;\n return [new DiffChange(originalStart, originalEnd - originalStart + 1, modifiedStart, modifiedEnd - modifiedStart + 1)];\n }\n }\n diagonalReverseStart = this.ClipDiagonalBound(diagonalReverseBase - numDifferences, numDifferences, diagonalReverseBase, numDiagonals);\n diagonalReverseEnd = this.ClipDiagonalBound(diagonalReverseBase + numDifferences, numDifferences, diagonalReverseBase, numDiagonals);\n for (let diagonal = diagonalReverseStart; diagonal <= diagonalReverseEnd; diagonal += 2) {\n if (diagonal === diagonalReverseStart || diagonal < diagonalReverseEnd && reversePoints[diagonal - 1] >= reversePoints[diagonal + 1]) originalIndex = reversePoints[diagonal + 1] - 1;\n else originalIndex = reversePoints[diagonal - 1];\n modifiedIndex = originalIndex - (diagonal - diagonalReverseBase) - diagonalReverseOffset;\n const tempOriginalIndex = originalIndex;\n while (originalIndex > originalStart && modifiedIndex > modifiedStart && this.ElementsAreEqual(originalIndex, modifiedIndex)) {\n originalIndex--;\n modifiedIndex--;\n }\n reversePoints[diagonal] = originalIndex;\n if (deltaIsEven && Math.abs(diagonal - diagonalForwardBase) <= numDifferences) {\n if (originalIndex <= forwardPoints[diagonal]) {\n midOriginalArr[0] = originalIndex;\n midModifiedArr[0] = modifiedIndex;\n if (tempOriginalIndex >= forwardPoints[diagonal] && numDifferences <= 1448) return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\n else return null;\n }\n }\n }\n if (numDifferences <= 1447) {\n let temp = new Int32Array(diagonalForwardEnd - diagonalForwardStart + 2);\n temp[0] = diagonalForwardBase - diagonalForwardStart + 1;\n MyArray.Copy2(forwardPoints, diagonalForwardStart, temp, 1, diagonalForwardEnd - diagonalForwardStart + 1);\n this.m_forwardHistory.push(temp);\n temp = new Int32Array(diagonalReverseEnd - diagonalReverseStart + 2);\n temp[0] = diagonalReverseBase - diagonalReverseStart + 1;\n MyArray.Copy2(reversePoints, diagonalReverseStart, temp, 1, diagonalReverseEnd - diagonalReverseStart + 1);\n this.m_reverseHistory.push(temp);\n }\n }\n return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\n }\n /**\n * Shifts the given changes to provide a more intuitive diff.\n * While the first element in a diff matches the first element after the diff,\n * we shift the diff down.\n *\n * @param changes The list of changes to shift\n * @returns The shifted changes\n */\n PrettifyChanges(changes) {\n for (let i = 0; i < changes.length; i++) {\n const change = changes[i];\n const originalStop = i < changes.length - 1 ? changes[i + 1].originalStart : this._originalElementsOrHash.length;\n const modifiedStop = i < changes.length - 1 ? changes[i + 1].modifiedStart : this._modifiedElementsOrHash.length;\n const checkOriginal = change.originalLength > 0;\n const checkModified = change.modifiedLength > 0;\n while (change.originalStart + change.originalLength < originalStop && change.modifiedStart + change.modifiedLength < modifiedStop && (!checkOriginal || this.OriginalElementsAreEqual(change.originalStart, change.originalStart + change.originalLength)) && (!checkModified || this.ModifiedElementsAreEqual(change.modifiedStart, change.modifiedStart + change.modifiedLength))) {\n const startStrictEqual = this.ElementsAreStrictEqual(change.originalStart, change.modifiedStart);\n if (this.ElementsAreStrictEqual(change.originalStart + change.originalLength, change.modifiedStart + change.modifiedLength) && !startStrictEqual) break;\n change.originalStart++;\n change.modifiedStart++;\n }\n const mergedChangeArr = [null];\n if (i < changes.length - 1 && this.ChangesOverlap(changes[i], changes[i + 1], mergedChangeArr)) {\n changes[i] = mergedChangeArr[0];\n changes.splice(i + 1, 1);\n i--;\n continue;\n }\n }\n for (let i = changes.length - 1; i >= 0; i--) {\n const change = changes[i];\n let originalStop = 0;\n let modifiedStop = 0;\n if (i > 0) {\n const prevChange = changes[i - 1];\n originalStop = prevChange.originalStart + prevChange.originalLength;\n modifiedStop = prevChange.modifiedStart + prevChange.modifiedLength;\n }\n const checkOriginal = change.originalLength > 0;\n const checkModified = change.modifiedLength > 0;\n let bestDelta = 0;\n let bestScore = this._boundaryScore(change.originalStart, change.originalLength, change.modifiedStart, change.modifiedLength);\n for (let delta = 1;; delta++) {\n const originalStart = change.originalStart - delta;\n const modifiedStart = change.modifiedStart - delta;\n if (originalStart < originalStop || modifiedStart < modifiedStop) break;\n if (checkOriginal && !this.OriginalElementsAreEqual(originalStart, originalStart + change.originalLength)) break;\n if (checkModified && !this.ModifiedElementsAreEqual(modifiedStart, modifiedStart + change.modifiedLength)) break;\n const score = (originalStart === originalStop && modifiedStart === modifiedStop ? 5 : 0) + this._boundaryScore(originalStart, change.originalLength, modifiedStart, change.modifiedLength);\n if (score > bestScore) {\n bestScore = score;\n bestDelta = delta;\n }\n }\n change.originalStart -= bestDelta;\n change.modifiedStart -= bestDelta;\n const mergedChangeArr = [null];\n if (i > 0 && this.ChangesOverlap(changes[i - 1], changes[i], mergedChangeArr)) {\n changes[i - 1] = mergedChangeArr[0];\n changes.splice(i, 1);\n i++;\n continue;\n }\n }\n if (this._hasStrings) for (let i = 1, len = changes.length; i < len; i++) {\n const aChange = changes[i - 1];\n const bChange = changes[i];\n const matchedLength = bChange.originalStart - aChange.originalStart - aChange.originalLength;\n const aOriginalStart = aChange.originalStart;\n const bOriginalEnd = bChange.originalStart + bChange.originalLength;\n const abOriginalLength = bOriginalEnd - aOriginalStart;\n const aModifiedStart = aChange.modifiedStart;\n const bModifiedEnd = bChange.modifiedStart + bChange.modifiedLength;\n const abModifiedLength = bModifiedEnd - aModifiedStart;\n if (matchedLength < 5 && abOriginalLength < 20 && abModifiedLength < 20) {\n const t = this._findBetterContiguousSequence(aOriginalStart, abOriginalLength, aModifiedStart, abModifiedLength, matchedLength);\n if (t) {\n const [originalMatchStart, modifiedMatchStart] = t;\n if (originalMatchStart !== aChange.originalStart + aChange.originalLength || modifiedMatchStart !== aChange.modifiedStart + aChange.modifiedLength) {\n aChange.originalLength = originalMatchStart - aChange.originalStart;\n aChange.modifiedLength = modifiedMatchStart - aChange.modifiedStart;\n bChange.originalStart = originalMatchStart + matchedLength;\n bChange.modifiedStart = modifiedMatchStart + matchedLength;\n bChange.originalLength = bOriginalEnd - bChange.originalStart;\n bChange.modifiedLength = bModifiedEnd - bChange.modifiedStart;\n }\n }\n }\n }\n return changes;\n }\n _findBetterContiguousSequence(originalStart, originalLength, modifiedStart, modifiedLength, desiredLength) {\n if (originalLength < desiredLength || modifiedLength < desiredLength) return null;\n const originalMax = originalStart + originalLength - desiredLength + 1;\n const modifiedMax = modifiedStart + modifiedLength - desiredLength + 1;\n let bestScore = 0;\n let bestOriginalStart = 0;\n let bestModifiedStart = 0;\n for (let i = originalStart; i < originalMax; i++) for (let j = modifiedStart; j < modifiedMax; j++) {\n const score = this._contiguousSequenceScore(i, j, desiredLength);\n if (score > 0 && score > bestScore) {\n bestScore = score;\n bestOriginalStart = i;\n bestModifiedStart = j;\n }\n }\n if (bestScore > 0) return [bestOriginalStart, bestModifiedStart];\n return null;\n }\n _contiguousSequenceScore(originalStart, modifiedStart, length) {\n let score = 0;\n for (let l = 0; l < length; l++) {\n if (!this.ElementsAreEqual(originalStart + l, modifiedStart + l)) return 0;\n score += this._originalStringElements[originalStart + l].length;\n }\n return score;\n }\n _OriginalIsBoundary(index) {\n if (index <= 0 || index >= this._originalElementsOrHash.length - 1) return true;\n return this._hasStrings && /^\\s*$/.test(this._originalStringElements[index]);\n }\n _OriginalRegionIsBoundary(originalStart, originalLength) {\n if (this._OriginalIsBoundary(originalStart) || this._OriginalIsBoundary(originalStart - 1)) return true;\n if (originalLength > 0) {\n const originalEnd = originalStart + originalLength;\n if (this._OriginalIsBoundary(originalEnd - 1) || this._OriginalIsBoundary(originalEnd)) return true;\n }\n return false;\n }\n _ModifiedIsBoundary(index) {\n if (index <= 0 || index >= this._modifiedElementsOrHash.length - 1) return true;\n return this._hasStrings && /^\\s*$/.test(this._modifiedStringElements[index]);\n }\n _ModifiedRegionIsBoundary(modifiedStart, modifiedLength) {\n if (this._ModifiedIsBoundary(modifiedStart) || this._ModifiedIsBoundary(modifiedStart - 1)) return true;\n if (modifiedLength > 0) {\n const modifiedEnd = modifiedStart + modifiedLength;\n if (this._ModifiedIsBoundary(modifiedEnd - 1) || this._ModifiedIsBoundary(modifiedEnd)) return true;\n }\n return false;\n }\n _boundaryScore(originalStart, originalLength, modifiedStart, modifiedLength) {\n return (this._OriginalRegionIsBoundary(originalStart, originalLength) ? 1 : 0) + (this._ModifiedRegionIsBoundary(modifiedStart, modifiedLength) ? 1 : 0);\n }\n /**\n * Concatenates the two input DiffChange lists and returns the resulting\n * list.\n * @param The left changes\n * @param The right changes\n * @returns The concatenated list\n */\n ConcatenateChanges(left, right) {\n const mergedChangeArr = [];\n if (left.length === 0 || right.length === 0) return right.length > 0 ? right : left;\n else if (this.ChangesOverlap(left[left.length - 1], right[0], mergedChangeArr)) {\n const result = new Array(left.length + right.length - 1);\n MyArray.Copy(left, 0, result, 0, left.length - 1);\n result[left.length - 1] = mergedChangeArr[0];\n MyArray.Copy(right, 1, result, left.length, right.length - 1);\n return result;\n } else {\n const result = new Array(left.length + right.length);\n MyArray.Copy(left, 0, result, 0, left.length);\n MyArray.Copy(right, 0, result, left.length, right.length);\n return result;\n }\n }\n /**\n * Returns true if the two changes overlap and can be merged into a single\n * change\n * @param left The left change\n * @param right The right change\n * @param mergedChange The merged change if the two overlap, null otherwise\n * @returns True if the two changes overlap\n */\n ChangesOverlap(left, right, mergedChangeArr) {\n Debug.Assert(left.originalStart <= right.originalStart, \"Left change is not less than or equal to right change\");\n Debug.Assert(left.modifiedStart <= right.modifiedStart, \"Left change is not less than or equal to right change\");\n if (left.originalStart + left.originalLength >= right.originalStart || left.modifiedStart + left.modifiedLength >= right.modifiedStart) {\n const originalStart = left.originalStart;\n let originalLength = left.originalLength;\n const modifiedStart = left.modifiedStart;\n let modifiedLength = left.modifiedLength;\n if (left.originalStart + left.originalLength >= right.originalStart) originalLength = right.originalStart + right.originalLength - left.originalStart;\n if (left.modifiedStart + left.modifiedLength >= right.modifiedStart) modifiedLength = right.modifiedStart + right.modifiedLength - left.modifiedStart;\n mergedChangeArr[0] = new DiffChange(originalStart, originalLength, modifiedStart, modifiedLength);\n return true;\n } else {\n mergedChangeArr[0] = null;\n return false;\n }\n }\n /**\n * Helper method used to clip a diagonal index to the range of valid\n * diagonals. This also decides whether or not the diagonal index,\n * if it exceeds the boundary, should be clipped to the boundary or clipped\n * one inside the boundary depending on the Even/Odd status of the boundary\n * and numDifferences.\n * @param diagonal The index of the diagonal to clip.\n * @param numDifferences The current number of differences being iterated upon.\n * @param diagonalBaseIndex The base reference diagonal.\n * @param numDiagonals The total number of diagonals.\n * @returns The clipped diagonal index.\n */\n ClipDiagonalBound(diagonal, numDifferences, diagonalBaseIndex, numDiagonals) {\n if (diagonal >= 0 && diagonal < numDiagonals) return diagonal;\n const diagonalsBelow = diagonalBaseIndex;\n const diagonalsAbove = numDiagonals - diagonalBaseIndex - 1;\n const diffEven = numDifferences % 2 === 0;\n if (diagonal < 0) return diffEven === (diagonalsBelow % 2 === 0) ? 0 : 1;\n else return diffEven === (diagonalsAbove % 2 === 0) ? numDiagonals - 1 : numDiagonals - 2;\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/core/position.js\n /**\n * A position in the editor.\n */\n var Position$1 = class Position$1 {\n constructor(lineNumber, column) {\n this.lineNumber = lineNumber;\n this.column = column;\n }\n /**\n * Create a new position from this position.\n *\n * @param newLineNumber new line number\n * @param newColumn new column\n */\n with(newLineNumber = this.lineNumber, newColumn = this.column) {\n if (newLineNumber === this.lineNumber && newColumn === this.column) return this;\n else return new Position$1(newLineNumber, newColumn);\n }\n /**\n * Derive a new position from this position.\n *\n * @param deltaLineNumber line number delta\n * @param deltaColumn column delta\n */\n delta(deltaLineNumber = 0, deltaColumn = 0) {\n return this.with(Math.max(1, this.lineNumber + deltaLineNumber), Math.max(1, this.column + deltaColumn));\n }\n /**\n * Test if this position equals other position\n */\n equals(other) {\n return Position$1.equals(this, other);\n }\n /**\n * Test if position `a` equals position `b`\n */\n static equals(a, b) {\n if (!a && !b) return true;\n return !!a && !!b && a.lineNumber === b.lineNumber && a.column === b.column;\n }\n /**\n * Test if this position is before other position.\n * If the two positions are equal, the result will be false.\n */\n isBefore(other) {\n return Position$1.isBefore(this, other);\n }\n /**\n * Test if position `a` is before position `b`.\n * If the two positions are equal, the result will be false.\n */\n static isBefore(a, b) {\n if (a.lineNumber < b.lineNumber) return true;\n if (b.lineNumber < a.lineNumber) return false;\n return a.column < b.column;\n }\n /**\n * Test if this position is before other position.\n * If the two positions are equal, the result will be true.\n */\n isBeforeOrEqual(other) {\n return Position$1.isBeforeOrEqual(this, other);\n }\n /**\n * Test if position `a` is before position `b`.\n * If the two positions are equal, the result will be true.\n */\n static isBeforeOrEqual(a, b) {\n if (a.lineNumber < b.lineNumber) return true;\n if (b.lineNumber < a.lineNumber) return false;\n return a.column <= b.column;\n }\n /**\n * A function that compares positions, useful for sorting\n */\n static compare(a, b) {\n const aLineNumber = a.lineNumber | 0;\n const bLineNumber = b.lineNumber | 0;\n if (aLineNumber === bLineNumber) return (a.column | 0) - (b.column | 0);\n return aLineNumber - bLineNumber;\n }\n /**\n * Clone this position.\n */\n clone() {\n return new Position$1(this.lineNumber, this.column);\n }\n /**\n * Convert to a human-readable representation.\n */\n toString() {\n return \"(\" + this.lineNumber + \",\" + this.column + \")\";\n }\n /**\n * Create a `Position` from an `IPosition`.\n */\n static lift(pos) {\n return new Position$1(pos.lineNumber, pos.column);\n }\n /**\n * Test if `obj` is an `IPosition`.\n */\n static isIPosition(obj) {\n return !!obj && typeof obj.lineNumber === \"number\" && typeof obj.column === \"number\";\n }\n toJSON() {\n return {\n lineNumber: this.lineNumber,\n column: this.column\n };\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/core/range.js\n /**\n * A range in the editor. (startLineNumber,startColumn) is <= (endLineNumber,endColumn)\n */\n var Range$1 = class Range$1 {\n constructor(startLineNumber, startColumn, endLineNumber, endColumn) {\n if (startLineNumber > endLineNumber || startLineNumber === endLineNumber && startColumn > endColumn) {\n this.startLineNumber = endLineNumber;\n this.startColumn = endColumn;\n this.endLineNumber = startLineNumber;\n this.endColumn = startColumn;\n } else {\n this.startLineNumber = startLineNumber;\n this.startColumn = startColumn;\n this.endLineNumber = endLineNumber;\n this.endColumn = endColumn;\n }\n }\n /**\n * Test if this range is empty.\n */\n isEmpty() {\n return Range$1.isEmpty(this);\n }\n /**\n * Test if `range` is empty.\n */\n static isEmpty(range) {\n return range.startLineNumber === range.endLineNumber && range.startColumn === range.endColumn;\n }\n /**\n * Test if position is in this range. If the position is at the edges, will return true.\n */\n containsPosition(position) {\n return Range$1.containsPosition(this, position);\n }\n /**\n * Test if `position` is in `range`. If the position is at the edges, will return true.\n */\n static containsPosition(range, position) {\n if (position.lineNumber < range.startLineNumber || position.lineNumber > range.endLineNumber) return false;\n if (position.lineNumber === range.startLineNumber && position.column < range.startColumn) return false;\n if (position.lineNumber === range.endLineNumber && position.column > range.endColumn) return false;\n return true;\n }\n /**\n * Test if `position` is in `range`. If the position is at the edges, will return false.\n * @internal\n */\n static strictContainsPosition(range, position) {\n if (position.lineNumber < range.startLineNumber || position.lineNumber > range.endLineNumber) return false;\n if (position.lineNumber === range.startLineNumber && position.column <= range.startColumn) return false;\n if (position.lineNumber === range.endLineNumber && position.column >= range.endColumn) return false;\n return true;\n }\n /**\n * Test if range is in this range. If the range is equal to this range, will return true.\n */\n containsRange(range) {\n return Range$1.containsRange(this, range);\n }\n /**\n * Test if `otherRange` is in `range`. If the ranges are equal, will return true.\n */\n static containsRange(range, otherRange) {\n if (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) return false;\n if (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) return false;\n if (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn < range.startColumn) return false;\n if (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn > range.endColumn) return false;\n return true;\n }\n /**\n * Test if `range` is strictly in this range. `range` must start after and end before this range for the result to be true.\n */\n strictContainsRange(range) {\n return Range$1.strictContainsRange(this, range);\n }\n /**\n * Test if `otherRange` is strictly in `range` (must start after, and end before). If the ranges are equal, will return false.\n */\n static strictContainsRange(range, otherRange) {\n if (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) return false;\n if (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) return false;\n if (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn <= range.startColumn) return false;\n if (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn >= range.endColumn) return false;\n return true;\n }\n /**\n * A reunion of the two ranges.\n * The smallest position will be used as the start point, and the largest one as the end point.\n */\n plusRange(range) {\n return Range$1.plusRange(this, range);\n }\n /**\n * A reunion of the two ranges.\n * The smallest position will be used as the start point, and the largest one as the end point.\n */\n static plusRange(a, b) {\n let startLineNumber;\n let startColumn;\n let endLineNumber;\n let endColumn;\n if (b.startLineNumber < a.startLineNumber) {\n startLineNumber = b.startLineNumber;\n startColumn = b.startColumn;\n } else if (b.startLineNumber === a.startLineNumber) {\n startLineNumber = b.startLineNumber;\n startColumn = Math.min(b.startColumn, a.startColumn);\n } else {\n startLineNumber = a.startLineNumber;\n startColumn = a.startColumn;\n }\n if (b.endLineNumber > a.endLineNumber) {\n endLineNumber = b.endLineNumber;\n endColumn = b.endColumn;\n } else if (b.endLineNumber === a.endLineNumber) {\n endLineNumber = b.endLineNumber;\n endColumn = Math.max(b.endColumn, a.endColumn);\n } else {\n endLineNumber = a.endLineNumber;\n endColumn = a.endColumn;\n }\n return new Range$1(startLineNumber, startColumn, endLineNumber, endColumn);\n }\n /**\n * A intersection of the two ranges.\n */\n intersectRanges(range) {\n return Range$1.intersectRanges(this, range);\n }\n /**\n * A intersection of the two ranges.\n */\n static intersectRanges(a, b) {\n let resultStartLineNumber = a.startLineNumber;\n let resultStartColumn = a.startColumn;\n let resultEndLineNumber = a.endLineNumber;\n let resultEndColumn = a.endColumn;\n const otherStartLineNumber = b.startLineNumber;\n const otherStartColumn = b.startColumn;\n const otherEndLineNumber = b.endLineNumber;\n const otherEndColumn = b.endColumn;\n if (resultStartLineNumber < otherStartLineNumber) {\n resultStartLineNumber = otherStartLineNumber;\n resultStartColumn = otherStartColumn;\n } else if (resultStartLineNumber === otherStartLineNumber) resultStartColumn = Math.max(resultStartColumn, otherStartColumn);\n if (resultEndLineNumber > otherEndLineNumber) {\n resultEndLineNumber = otherEndLineNumber;\n resultEndColumn = otherEndColumn;\n } else if (resultEndLineNumber === otherEndLineNumber) resultEndColumn = Math.min(resultEndColumn, otherEndColumn);\n if (resultStartLineNumber > resultEndLineNumber) return null;\n if (resultStartLineNumber === resultEndLineNumber && resultStartColumn > resultEndColumn) return null;\n return new Range$1(resultStartLineNumber, resultStartColumn, resultEndLineNumber, resultEndColumn);\n }\n /**\n * Test if this range equals other.\n */\n equalsRange(other) {\n return Range$1.equalsRange(this, other);\n }\n /**\n * Test if range `a` equals `b`.\n */\n static equalsRange(a, b) {\n if (!a && !b) return true;\n return !!a && !!b && a.startLineNumber === b.startLineNumber && a.startColumn === b.startColumn && a.endLineNumber === b.endLineNumber && a.endColumn === b.endColumn;\n }\n /**\n * Return the end position (which will be after or equal to the start position)\n */\n getEndPosition() {\n return Range$1.getEndPosition(this);\n }\n /**\n * Return the end position (which will be after or equal to the start position)\n */\n static getEndPosition(range) {\n return new Position$1(range.endLineNumber, range.endColumn);\n }\n /**\n * Return the start position (which will be before or equal to the end position)\n */\n getStartPosition() {\n return Range$1.getStartPosition(this);\n }\n /**\n * Return the start position (which will be before or equal to the end position)\n */\n static getStartPosition(range) {\n return new Position$1(range.startLineNumber, range.startColumn);\n }\n /**\n * Transform to a user presentable string representation.\n */\n toString() {\n return \"[\" + this.startLineNumber + \",\" + this.startColumn + \" -> \" + this.endLineNumber + \",\" + this.endColumn + \"]\";\n }\n /**\n * Create a new range using this range's start position, and using endLineNumber and endColumn as the end position.\n */\n setEndPosition(endLineNumber, endColumn) {\n return new Range$1(this.startLineNumber, this.startColumn, endLineNumber, endColumn);\n }\n /**\n * Create a new range using this range's end position, and using startLineNumber and startColumn as the start position.\n */\n setStartPosition(startLineNumber, startColumn) {\n return new Range$1(startLineNumber, startColumn, this.endLineNumber, this.endColumn);\n }\n /**\n * Create a new empty range using this range's start position.\n */\n collapseToStart() {\n return Range$1.collapseToStart(this);\n }\n /**\n * Create a new empty range using this range's start position.\n */\n static collapseToStart(range) {\n return new Range$1(range.startLineNumber, range.startColumn, range.startLineNumber, range.startColumn);\n }\n /**\n * Create a new empty range using this range's end position.\n */\n collapseToEnd() {\n return Range$1.collapseToEnd(this);\n }\n /**\n * Create a new empty range using this range's end position.\n */\n static collapseToEnd(range) {\n return new Range$1(range.endLineNumber, range.endColumn, range.endLineNumber, range.endColumn);\n }\n /**\n * Moves the range by the given amount of lines.\n */\n delta(lineCount) {\n return new Range$1(this.startLineNumber + lineCount, this.startColumn, this.endLineNumber + lineCount, this.endColumn);\n }\n isSingleLine() {\n return this.startLineNumber === this.endLineNumber;\n }\n static fromPositions(start, end = start) {\n return new Range$1(start.lineNumber, start.column, end.lineNumber, end.column);\n }\n static lift(range) {\n if (!range) return null;\n return new Range$1(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);\n }\n /**\n * Test if `obj` is an `IRange`.\n */\n static isIRange(obj) {\n return !!obj && typeof obj.startLineNumber === \"number\" && typeof obj.startColumn === \"number\" && typeof obj.endLineNumber === \"number\" && typeof obj.endColumn === \"number\";\n }\n /**\n * Test if the two ranges are touching in any way.\n */\n static areIntersectingOrTouching(a, b) {\n if (a.endLineNumber < b.startLineNumber || a.endLineNumber === b.startLineNumber && a.endColumn < b.startColumn) return false;\n if (b.endLineNumber < a.startLineNumber || b.endLineNumber === a.startLineNumber && b.endColumn < a.startColumn) return false;\n return true;\n }\n /**\n * Test if the two ranges are intersecting. If the ranges are touching it returns true.\n */\n static areIntersecting(a, b) {\n if (a.endLineNumber < b.startLineNumber || a.endLineNumber === b.startLineNumber && a.endColumn <= b.startColumn) return false;\n if (b.endLineNumber < a.startLineNumber || b.endLineNumber === a.startLineNumber && b.endColumn <= a.startColumn) return false;\n return true;\n }\n /**\n * Test if the two ranges are intersecting, but not touching at all.\n */\n static areOnlyIntersecting(a, b) {\n if (a.endLineNumber < b.startLineNumber - 1 || a.endLineNumber === b.startLineNumber && a.endColumn < b.startColumn - 1) return false;\n if (b.endLineNumber < a.startLineNumber - 1 || b.endLineNumber === a.startLineNumber && b.endColumn < a.startColumn - 1) return false;\n return true;\n }\n /**\n * A function that compares ranges, useful for sorting ranges\n * It will first compare ranges on the startPosition and then on the endPosition\n */\n static compareRangesUsingStarts(a, b) {\n if (a && b) {\n const aStartLineNumber = a.startLineNumber | 0;\n const bStartLineNumber = b.startLineNumber | 0;\n if (aStartLineNumber === bStartLineNumber) {\n const aStartColumn = a.startColumn | 0;\n const bStartColumn = b.startColumn | 0;\n if (aStartColumn === bStartColumn) {\n const aEndLineNumber = a.endLineNumber | 0;\n const bEndLineNumber = b.endLineNumber | 0;\n if (aEndLineNumber === bEndLineNumber) return (a.endColumn | 0) - (b.endColumn | 0);\n return aEndLineNumber - bEndLineNumber;\n }\n return aStartColumn - bStartColumn;\n }\n return aStartLineNumber - bStartLineNumber;\n }\n return (a ? 1 : 0) - (b ? 1 : 0);\n }\n /**\n * A function that compares ranges, useful for sorting ranges\n * It will first compare ranges on the endPosition and then on the startPosition\n */\n static compareRangesUsingEnds(a, b) {\n if (a.endLineNumber === b.endLineNumber) {\n if (a.endColumn === b.endColumn) {\n if (a.startLineNumber === b.startLineNumber) return a.startColumn - b.startColumn;\n return a.startLineNumber - b.startLineNumber;\n }\n return a.endColumn - b.endColumn;\n }\n return a.endLineNumber - b.endLineNumber;\n }\n /**\n * Test if the range spans multiple lines.\n */\n static spansMultipleLines(range) {\n return range.endLineNumber > range.startLineNumber;\n }\n toJSON() {\n return this;\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/uint.js\n function toUint8(v) {\n if (v < 0) return 0;\n if (v > 255) return 255;\n return v | 0;\n }\n function toUint32(v) {\n if (v < 0) return 0;\n if (v > 4294967295) return 4294967295;\n return v | 0;\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/core/characterClassifier.js\n /**\n * A fast character classifier that uses a compact array for ASCII values.\n */\n var CharacterClassifier = class CharacterClassifier {\n constructor(_defaultValue) {\n const defaultValue = toUint8(_defaultValue);\n this._defaultValue = defaultValue;\n this._asciiMap = CharacterClassifier._createAsciiMap(defaultValue);\n this._map = /* @__PURE__ */ new Map();\n }\n static _createAsciiMap(defaultValue) {\n const asciiMap = /* @__PURE__ */ new Uint8Array(256);\n asciiMap.fill(defaultValue);\n return asciiMap;\n }\n set(charCode, _value) {\n const value = toUint8(_value);\n if (charCode >= 0 && charCode < 256) this._asciiMap[charCode] = value;\n else this._map.set(charCode, value);\n }\n get(charCode) {\n if (charCode >= 0 && charCode < 256) return this._asciiMap[charCode];\n else return this._map.get(charCode) || this._defaultValue;\n }\n clear() {\n this._asciiMap.fill(this._defaultValue);\n this._map.clear();\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/languages/linkComputer.js\n var Uint8Matrix = class {\n constructor(rows, cols, defaultValue) {\n const data = new Uint8Array(rows * cols);\n for (let i = 0, len = rows * cols; i < len; i++) data[i] = defaultValue;\n this._data = data;\n this.rows = rows;\n this.cols = cols;\n }\n get(row, col) {\n return this._data[row * this.cols + col];\n }\n set(row, col, value) {\n this._data[row * this.cols + col] = value;\n }\n };\n var StateMachine = class {\n constructor(edges) {\n let maxCharCode = 0;\n let maxState = 0;\n for (let i = 0, len = edges.length; i < len; i++) {\n const [from, chCode, to] = edges[i];\n if (chCode > maxCharCode) maxCharCode = chCode;\n if (from > maxState) maxState = from;\n if (to > maxState) maxState = to;\n }\n maxCharCode++;\n maxState++;\n const states = new Uint8Matrix(maxState, maxCharCode, 0);\n for (let i = 0, len = edges.length; i < len; i++) {\n const [from, chCode, to] = edges[i];\n states.set(from, chCode, to);\n }\n this._states = states;\n this._maxCharCode = maxCharCode;\n }\n nextState(currentState, chCode) {\n if (chCode < 0 || chCode >= this._maxCharCode) return 0;\n return this._states.get(currentState, chCode);\n }\n };\n let _stateMachine = null;\n function getStateMachine() {\n if (_stateMachine === null) _stateMachine = new StateMachine([\n [\n 1,\n 104,\n 2\n ],\n [\n 1,\n 72,\n 2\n ],\n [\n 1,\n 102,\n 6\n ],\n [\n 1,\n 70,\n 6\n ],\n [\n 2,\n 116,\n 3\n ],\n [\n 2,\n 84,\n 3\n ],\n [\n 3,\n 116,\n 4\n ],\n [\n 3,\n 84,\n 4\n ],\n [\n 4,\n 112,\n 5\n ],\n [\n 4,\n 80,\n 5\n ],\n [\n 5,\n 115,\n 9\n ],\n [\n 5,\n 83,\n 9\n ],\n [\n 5,\n 58,\n 10\n ],\n [\n 6,\n 105,\n 7\n ],\n [\n 6,\n 73,\n 7\n ],\n [\n 7,\n 108,\n 8\n ],\n [\n 7,\n 76,\n 8\n ],\n [\n 8,\n 101,\n 9\n ],\n [\n 8,\n 69,\n 9\n ],\n [\n 9,\n 58,\n 10\n ],\n [\n 10,\n 47,\n 11\n ],\n [\n 11,\n 47,\n 12\n ]\n ]);\n return _stateMachine;\n }\n let _classifier = null;\n function getClassifier() {\n if (_classifier === null) {\n _classifier = new CharacterClassifier(0);\n const FORCE_TERMINATION_CHARACTERS = \" <>'\\\"、。。、,.:;‘〈「『〔([{「」}])〕』」〉’`~…|\";\n for (let i = 0; i < 36; i++) _classifier.set(FORCE_TERMINATION_CHARACTERS.charCodeAt(i), 1);\n const CANNOT_END_WITH_CHARACTERS = \".,;:\";\n for (let i = 0; i < 4; i++) _classifier.set(CANNOT_END_WITH_CHARACTERS.charCodeAt(i), 2);\n }\n return _classifier;\n }\n var LinkComputer = class LinkComputer {\n static _createLink(classifier, line, lineNumber, linkBeginIndex, linkEndIndex) {\n let lastIncludedCharIndex = linkEndIndex - 1;\n do {\n const chCode = line.charCodeAt(lastIncludedCharIndex);\n if (classifier.get(chCode) !== 2) break;\n lastIncludedCharIndex--;\n } while (lastIncludedCharIndex > linkBeginIndex);\n if (linkBeginIndex > 0) {\n const charCodeBeforeLink = line.charCodeAt(linkBeginIndex - 1);\n const lastCharCodeInLink = line.charCodeAt(lastIncludedCharIndex);\n if (charCodeBeforeLink === 40 && lastCharCodeInLink === 41 || charCodeBeforeLink === 91 && lastCharCodeInLink === 93 || charCodeBeforeLink === 123 && lastCharCodeInLink === 125) lastIncludedCharIndex--;\n }\n return {\n range: {\n startLineNumber: lineNumber,\n startColumn: linkBeginIndex + 1,\n endLineNumber: lineNumber,\n endColumn: lastIncludedCharIndex + 2\n },\n url: line.substring(linkBeginIndex, lastIncludedCharIndex + 1)\n };\n }\n static computeLinks(model, stateMachine = getStateMachine()) {\n const classifier = getClassifier();\n const result = [];\n for (let i = 1, lineCount = model.getLineCount(); i <= lineCount; i++) {\n const line = model.getLineContent(i);\n const len = line.length;\n let j = 0;\n let linkBeginIndex = 0;\n let linkBeginChCode = 0;\n let state = 1;\n let hasOpenParens = false;\n let hasOpenSquareBracket = false;\n let inSquareBrackets = false;\n let hasOpenCurlyBracket = false;\n while (j < len) {\n let resetStateMachine = false;\n const chCode = line.charCodeAt(j);\n if (state === 13) {\n let chClass;\n switch (chCode) {\n case 40:\n hasOpenParens = true;\n chClass = 0;\n break;\n case 41:\n chClass = hasOpenParens ? 0 : 1;\n break;\n case 91:\n inSquareBrackets = true;\n hasOpenSquareBracket = true;\n chClass = 0;\n break;\n case 93:\n inSquareBrackets = false;\n chClass = hasOpenSquareBracket ? 0 : 1;\n break;\n case 123:\n hasOpenCurlyBracket = true;\n chClass = 0;\n break;\n case 125:\n chClass = hasOpenCurlyBracket ? 0 : 1;\n break;\n case 39:\n case 34:\n case 96:\n if (linkBeginChCode === chCode) chClass = 1;\n else if (linkBeginChCode === 39 || linkBeginChCode === 34 || linkBeginChCode === 96) chClass = 0;\n else chClass = 1;\n break;\n case 42:\n chClass = linkBeginChCode === 42 ? 1 : 0;\n break;\n case 32:\n chClass = inSquareBrackets ? 0 : 1;\n break;\n default: chClass = classifier.get(chCode);\n }\n if (chClass === 1) {\n result.push(LinkComputer._createLink(classifier, line, i, linkBeginIndex, j));\n resetStateMachine = true;\n }\n } else if (state === 12) {\n let chClass;\n if (chCode === 91) {\n hasOpenSquareBracket = true;\n chClass = 0;\n } else chClass = classifier.get(chCode);\n if (chClass === 1) resetStateMachine = true;\n else state = 13;\n } else {\n state = stateMachine.nextState(state, chCode);\n if (state === 0) resetStateMachine = true;\n }\n if (resetStateMachine) {\n state = 1;\n hasOpenParens = false;\n hasOpenSquareBracket = false;\n hasOpenCurlyBracket = false;\n linkBeginIndex = j + 1;\n linkBeginChCode = chCode;\n }\n j++;\n }\n if (state === 13) result.push(LinkComputer._createLink(classifier, line, i, linkBeginIndex, len));\n }\n return result;\n }\n };\n /**\n * Returns an array of all links contains in the provided\n * document. *Note* that this operation is computational\n * expensive and should not run in the UI thread.\n */\n function computeLinks(model) {\n if (!model || typeof model.getLineCount !== \"function\" || typeof model.getLineContent !== \"function\") return [];\n return LinkComputer.computeLinks(model);\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/languages/supports/inplaceReplaceSupport.js\n var BasicInplaceReplace = class BasicInplaceReplace {\n constructor() {\n this._defaultValueSet = [\n [\"true\", \"false\"],\n [\"True\", \"False\"],\n [\n \"Private\",\n \"Public\",\n \"Friend\",\n \"ReadOnly\",\n \"Partial\",\n \"Protected\",\n \"WriteOnly\"\n ],\n [\n \"public\",\n \"protected\",\n \"private\"\n ]\n ];\n }\n static {\n this.INSTANCE = new BasicInplaceReplace();\n }\n navigateValueSet(range1, text1, range2, text2, up) {\n if (range1 && text1) {\n const result = this.doNavigateValueSet(text1, up);\n if (result) return {\n range: range1,\n value: result\n };\n }\n if (range2 && text2) {\n const result = this.doNavigateValueSet(text2, up);\n if (result) return {\n range: range2,\n value: result\n };\n }\n return null;\n }\n doNavigateValueSet(text, up) {\n const numberResult = this.numberReplace(text, up);\n if (numberResult !== null) return numberResult;\n return this.textReplace(text, up);\n }\n numberReplace(value, up) {\n const precision = Math.pow(10, value.length - (value.lastIndexOf(\".\") + 1));\n let n1 = Number(value);\n const n2 = parseFloat(value);\n if (!isNaN(n1) && !isNaN(n2) && n1 === n2) if (n1 === 0 && !up) return null;\n else {\n n1 = Math.floor(n1 * precision);\n n1 += up ? precision : -precision;\n return String(n1 / precision);\n }\n return null;\n }\n textReplace(value, up) {\n return this.valueSetsReplace(this._defaultValueSet, value, up);\n }\n valueSetsReplace(valueSets, value, up) {\n let result = null;\n for (let i = 0, len = valueSets.length; result === null && i < len; i++) result = this.valueSetReplace(valueSets[i], value, up);\n return result;\n }\n valueSetReplace(valueSet, value, up) {\n let idx = valueSet.indexOf(value);\n if (idx >= 0) {\n idx += up ? 1 : -1;\n if (idx < 0) idx = valueSet.length - 1;\n else idx %= valueSet.length;\n return valueSet[idx];\n }\n return null;\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/cancellation.js\n const shortcutEvent = Object.freeze(function(callback, context) {\n const handle = setTimeout(callback.bind(context), 0);\n return { dispose() {\n clearTimeout(handle);\n } };\n });\n var CancellationToken;\n (function(CancellationToken) {\n function isCancellationToken(thing) {\n if (thing === CancellationToken.None || thing === CancellationToken.Cancelled) return true;\n if (thing instanceof MutableToken) return true;\n if (!thing || typeof thing !== \"object\") return false;\n return typeof thing.isCancellationRequested === \"boolean\" && typeof thing.onCancellationRequested === \"function\";\n }\n CancellationToken.isCancellationToken = isCancellationToken;\n CancellationToken.None = Object.freeze({\n isCancellationRequested: false,\n onCancellationRequested: Event.None\n });\n CancellationToken.Cancelled = Object.freeze({\n isCancellationRequested: true,\n onCancellationRequested: shortcutEvent\n });\n })(CancellationToken || (CancellationToken = {}));\n var MutableToken = class {\n constructor() {\n this._isCancelled = false;\n this._emitter = null;\n }\n cancel() {\n if (!this._isCancelled) {\n this._isCancelled = true;\n if (this._emitter) {\n this._emitter.fire(void 0);\n this.dispose();\n }\n }\n }\n get isCancellationRequested() {\n return this._isCancelled;\n }\n get onCancellationRequested() {\n if (this._isCancelled) return shortcutEvent;\n if (!this._emitter) this._emitter = new Emitter();\n return this._emitter.event;\n }\n dispose() {\n if (this._emitter) {\n this._emitter.dispose();\n this._emitter = null;\n }\n }\n };\n var CancellationTokenSource = class {\n constructor(parent) {\n this._token = void 0;\n this._parentListener = void 0;\n this._parentListener = parent && parent.onCancellationRequested(this.cancel, this);\n }\n get token() {\n if (!this._token) this._token = new MutableToken();\n return this._token;\n }\n cancel() {\n if (!this._token) this._token = CancellationToken.Cancelled;\n else if (this._token instanceof MutableToken) this._token.cancel();\n }\n dispose(cancel = false) {\n if (cancel) this.cancel();\n this._parentListener?.dispose();\n if (!this._token) this._token = CancellationToken.None;\n else if (this._token instanceof MutableToken) this._token.dispose();\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/keyCodes.js\n var KeyCodeStrMap = class {\n constructor() {\n this._keyCodeToStr = [];\n this._strToKeyCode = Object.create(null);\n }\n define(keyCode, str) {\n this._keyCodeToStr[keyCode] = str;\n this._strToKeyCode[str.toLowerCase()] = keyCode;\n }\n keyCodeToStr(keyCode) {\n return this._keyCodeToStr[keyCode];\n }\n strToKeyCode(str) {\n return this._strToKeyCode[str.toLowerCase()] || 0;\n }\n };\n const uiMap = new KeyCodeStrMap();\n const userSettingsUSMap = new KeyCodeStrMap();\n const userSettingsGeneralMap = new KeyCodeStrMap();\n const EVENT_KEY_CODE_MAP = new Array(230);\n const scanCodeStrToInt = Object.create(null);\n const scanCodeLowerCaseStrToInt = Object.create(null);\n /**\n * -1 if a ScanCode => KeyCode mapping depends on kb layout.\n */\n const IMMUTABLE_CODE_TO_KEY_CODE = [];\n for (let i = 0; i <= 193; i++) IMMUTABLE_CODE_TO_KEY_CODE[i] = -1;\n (function() {\n const empty = \"\";\n const mappings = [\n [\n 1,\n 0,\n \"None\",\n 0,\n \"unknown\",\n 0,\n \"VK_UNKNOWN\",\n empty,\n empty\n ],\n [\n 1,\n 1,\n \"Hyper\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 2,\n \"Super\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 3,\n \"Fn\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 4,\n \"FnLock\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 5,\n \"Suspend\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 6,\n \"Resume\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 7,\n \"Turbo\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 8,\n \"Sleep\",\n 0,\n empty,\n 0,\n \"VK_SLEEP\",\n empty,\n empty\n ],\n [\n 1,\n 9,\n \"WakeUp\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 0,\n 10,\n \"KeyA\",\n 31,\n \"A\",\n 65,\n \"VK_A\",\n empty,\n empty\n ],\n [\n 0,\n 11,\n \"KeyB\",\n 32,\n \"B\",\n 66,\n \"VK_B\",\n empty,\n empty\n ],\n [\n 0,\n 12,\n \"KeyC\",\n 33,\n \"C\",\n 67,\n \"VK_C\",\n empty,\n empty\n ],\n [\n 0,\n 13,\n \"KeyD\",\n 34,\n \"D\",\n 68,\n \"VK_D\",\n empty,\n empty\n ],\n [\n 0,\n 14,\n \"KeyE\",\n 35,\n \"E\",\n 69,\n \"VK_E\",\n empty,\n empty\n ],\n [\n 0,\n 15,\n \"KeyF\",\n 36,\n \"F\",\n 70,\n \"VK_F\",\n empty,\n empty\n ],\n [\n 0,\n 16,\n \"KeyG\",\n 37,\n \"G\",\n 71,\n \"VK_G\",\n empty,\n empty\n ],\n [\n 0,\n 17,\n \"KeyH\",\n 38,\n \"H\",\n 72,\n \"VK_H\",\n empty,\n empty\n ],\n [\n 0,\n 18,\n \"KeyI\",\n 39,\n \"I\",\n 73,\n \"VK_I\",\n empty,\n empty\n ],\n [\n 0,\n 19,\n \"KeyJ\",\n 40,\n \"J\",\n 74,\n \"VK_J\",\n empty,\n empty\n ],\n [\n 0,\n 20,\n \"KeyK\",\n 41,\n \"K\",\n 75,\n \"VK_K\",\n empty,\n empty\n ],\n [\n 0,\n 21,\n \"KeyL\",\n 42,\n \"L\",\n 76,\n \"VK_L\",\n empty,\n empty\n ],\n [\n 0,\n 22,\n \"KeyM\",\n 43,\n \"M\",\n 77,\n \"VK_M\",\n empty,\n empty\n ],\n [\n 0,\n 23,\n \"KeyN\",\n 44,\n \"N\",\n 78,\n \"VK_N\",\n empty,\n empty\n ],\n [\n 0,\n 24,\n \"KeyO\",\n 45,\n \"O\",\n 79,\n \"VK_O\",\n empty,\n empty\n ],\n [\n 0,\n 25,\n \"KeyP\",\n 46,\n \"P\",\n 80,\n \"VK_P\",\n empty,\n empty\n ],\n [\n 0,\n 26,\n \"KeyQ\",\n 47,\n \"Q\",\n 81,\n \"VK_Q\",\n empty,\n empty\n ],\n [\n 0,\n 27,\n \"KeyR\",\n 48,\n \"R\",\n 82,\n \"VK_R\",\n empty,\n empty\n ],\n [\n 0,\n 28,\n \"KeyS\",\n 49,\n \"S\",\n 83,\n \"VK_S\",\n empty,\n empty\n ],\n [\n 0,\n 29,\n \"KeyT\",\n 50,\n \"T\",\n 84,\n \"VK_T\",\n empty,\n empty\n ],\n [\n 0,\n 30,\n \"KeyU\",\n 51,\n \"U\",\n 85,\n \"VK_U\",\n empty,\n empty\n ],\n [\n 0,\n 31,\n \"KeyV\",\n 52,\n \"V\",\n 86,\n \"VK_V\",\n empty,\n empty\n ],\n [\n 0,\n 32,\n \"KeyW\",\n 53,\n \"W\",\n 87,\n \"VK_W\",\n empty,\n empty\n ],\n [\n 0,\n 33,\n \"KeyX\",\n 54,\n \"X\",\n 88,\n \"VK_X\",\n empty,\n empty\n ],\n [\n 0,\n 34,\n \"KeyY\",\n 55,\n \"Y\",\n 89,\n \"VK_Y\",\n empty,\n empty\n ],\n [\n 0,\n 35,\n \"KeyZ\",\n 56,\n \"Z\",\n 90,\n \"VK_Z\",\n empty,\n empty\n ],\n [\n 0,\n 36,\n \"Digit1\",\n 22,\n \"1\",\n 49,\n \"VK_1\",\n empty,\n empty\n ],\n [\n 0,\n 37,\n \"Digit2\",\n 23,\n \"2\",\n 50,\n \"VK_2\",\n empty,\n empty\n ],\n [\n 0,\n 38,\n \"Digit3\",\n 24,\n \"3\",\n 51,\n \"VK_3\",\n empty,\n empty\n ],\n [\n 0,\n 39,\n \"Digit4\",\n 25,\n \"4\",\n 52,\n \"VK_4\",\n empty,\n empty\n ],\n [\n 0,\n 40,\n \"Digit5\",\n 26,\n \"5\",\n 53,\n \"VK_5\",\n empty,\n empty\n ],\n [\n 0,\n 41,\n \"Digit6\",\n 27,\n \"6\",\n 54,\n \"VK_6\",\n empty,\n empty\n ],\n [\n 0,\n 42,\n \"Digit7\",\n 28,\n \"7\",\n 55,\n \"VK_7\",\n empty,\n empty\n ],\n [\n 0,\n 43,\n \"Digit8\",\n 29,\n \"8\",\n 56,\n \"VK_8\",\n empty,\n empty\n ],\n [\n 0,\n 44,\n \"Digit9\",\n 30,\n \"9\",\n 57,\n \"VK_9\",\n empty,\n empty\n ],\n [\n 0,\n 45,\n \"Digit0\",\n 21,\n \"0\",\n 48,\n \"VK_0\",\n empty,\n empty\n ],\n [\n 1,\n 46,\n \"Enter\",\n 3,\n \"Enter\",\n 13,\n \"VK_RETURN\",\n empty,\n empty\n ],\n [\n 1,\n 47,\n \"Escape\",\n 9,\n \"Escape\",\n 27,\n \"VK_ESCAPE\",\n empty,\n empty\n ],\n [\n 1,\n 48,\n \"Backspace\",\n 1,\n \"Backspace\",\n 8,\n \"VK_BACK\",\n empty,\n empty\n ],\n [\n 1,\n 49,\n \"Tab\",\n 2,\n \"Tab\",\n 9,\n \"VK_TAB\",\n empty,\n empty\n ],\n [\n 1,\n 50,\n \"Space\",\n 10,\n \"Space\",\n 32,\n \"VK_SPACE\",\n empty,\n empty\n ],\n [\n 0,\n 51,\n \"Minus\",\n 88,\n \"-\",\n 189,\n \"VK_OEM_MINUS\",\n \"-\",\n \"OEM_MINUS\"\n ],\n [\n 0,\n 52,\n \"Equal\",\n 86,\n \"=\",\n 187,\n \"VK_OEM_PLUS\",\n \"=\",\n \"OEM_PLUS\"\n ],\n [\n 0,\n 53,\n \"BracketLeft\",\n 92,\n \"[\",\n 219,\n \"VK_OEM_4\",\n \"[\",\n \"OEM_4\"\n ],\n [\n 0,\n 54,\n \"BracketRight\",\n 94,\n \"]\",\n 221,\n \"VK_OEM_6\",\n \"]\",\n \"OEM_6\"\n ],\n [\n 0,\n 55,\n \"Backslash\",\n 93,\n \"\\\\\",\n 220,\n \"VK_OEM_5\",\n \"\\\\\",\n \"OEM_5\"\n ],\n [\n 0,\n 56,\n \"IntlHash\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 0,\n 57,\n \"Semicolon\",\n 85,\n \";\",\n 186,\n \"VK_OEM_1\",\n \";\",\n \"OEM_1\"\n ],\n [\n 0,\n 58,\n \"Quote\",\n 95,\n \"'\",\n 222,\n \"VK_OEM_7\",\n \"'\",\n \"OEM_7\"\n ],\n [\n 0,\n 59,\n \"Backquote\",\n 91,\n \"`\",\n 192,\n \"VK_OEM_3\",\n \"`\",\n \"OEM_3\"\n ],\n [\n 0,\n 60,\n \"Comma\",\n 87,\n \",\",\n 188,\n \"VK_OEM_COMMA\",\n \",\",\n \"OEM_COMMA\"\n ],\n [\n 0,\n 61,\n \"Period\",\n 89,\n \".\",\n 190,\n \"VK_OEM_PERIOD\",\n \".\",\n \"OEM_PERIOD\"\n ],\n [\n 0,\n 62,\n \"Slash\",\n 90,\n \"/\",\n 191,\n \"VK_OEM_2\",\n \"/\",\n \"OEM_2\"\n ],\n [\n 1,\n 63,\n \"CapsLock\",\n 8,\n \"CapsLock\",\n 20,\n \"VK_CAPITAL\",\n empty,\n empty\n ],\n [\n 1,\n 64,\n \"F1\",\n 59,\n \"F1\",\n 112,\n \"VK_F1\",\n empty,\n empty\n ],\n [\n 1,\n 65,\n \"F2\",\n 60,\n \"F2\",\n 113,\n \"VK_F2\",\n empty,\n empty\n ],\n [\n 1,\n 66,\n \"F3\",\n 61,\n \"F3\",\n 114,\n \"VK_F3\",\n empty,\n empty\n ],\n [\n 1,\n 67,\n \"F4\",\n 62,\n \"F4\",\n 115,\n \"VK_F4\",\n empty,\n empty\n ],\n [\n 1,\n 68,\n \"F5\",\n 63,\n \"F5\",\n 116,\n \"VK_F5\",\n empty,\n empty\n ],\n [\n 1,\n 69,\n \"F6\",\n 64,\n \"F6\",\n 117,\n \"VK_F6\",\n empty,\n empty\n ],\n [\n 1,\n 70,\n \"F7\",\n 65,\n \"F7\",\n 118,\n \"VK_F7\",\n empty,\n empty\n ],\n [\n 1,\n 71,\n \"F8\",\n 66,\n \"F8\",\n 119,\n \"VK_F8\",\n empty,\n empty\n ],\n [\n 1,\n 72,\n \"F9\",\n 67,\n \"F9\",\n 120,\n \"VK_F9\",\n empty,\n empty\n ],\n [\n 1,\n 73,\n \"F10\",\n 68,\n \"F10\",\n 121,\n \"VK_F10\",\n empty,\n empty\n ],\n [\n 1,\n 74,\n \"F11\",\n 69,\n \"F11\",\n 122,\n \"VK_F11\",\n empty,\n empty\n ],\n [\n 1,\n 75,\n \"F12\",\n 70,\n \"F12\",\n 123,\n \"VK_F12\",\n empty,\n empty\n ],\n [\n 1,\n 76,\n \"PrintScreen\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 77,\n \"ScrollLock\",\n 84,\n \"ScrollLock\",\n 145,\n \"VK_SCROLL\",\n empty,\n empty\n ],\n [\n 1,\n 78,\n \"Pause\",\n 7,\n \"PauseBreak\",\n 19,\n \"VK_PAUSE\",\n empty,\n empty\n ],\n [\n 1,\n 79,\n \"Insert\",\n 19,\n \"Insert\",\n 45,\n \"VK_INSERT\",\n empty,\n empty\n ],\n [\n 1,\n 80,\n \"Home\",\n 14,\n \"Home\",\n 36,\n \"VK_HOME\",\n empty,\n empty\n ],\n [\n 1,\n 81,\n \"PageUp\",\n 11,\n \"PageUp\",\n 33,\n \"VK_PRIOR\",\n empty,\n empty\n ],\n [\n 1,\n 82,\n \"Delete\",\n 20,\n \"Delete\",\n 46,\n \"VK_DELETE\",\n empty,\n empty\n ],\n [\n 1,\n 83,\n \"End\",\n 13,\n \"End\",\n 35,\n \"VK_END\",\n empty,\n empty\n ],\n [\n 1,\n 84,\n \"PageDown\",\n 12,\n \"PageDown\",\n 34,\n \"VK_NEXT\",\n empty,\n empty\n ],\n [\n 1,\n 85,\n \"ArrowRight\",\n 17,\n \"RightArrow\",\n 39,\n \"VK_RIGHT\",\n \"Right\",\n empty\n ],\n [\n 1,\n 86,\n \"ArrowLeft\",\n 15,\n \"LeftArrow\",\n 37,\n \"VK_LEFT\",\n \"Left\",\n empty\n ],\n [\n 1,\n 87,\n \"ArrowDown\",\n 18,\n \"DownArrow\",\n 40,\n \"VK_DOWN\",\n \"Down\",\n empty\n ],\n [\n 1,\n 88,\n \"ArrowUp\",\n 16,\n \"UpArrow\",\n 38,\n \"VK_UP\",\n \"Up\",\n empty\n ],\n [\n 1,\n 89,\n \"NumLock\",\n 83,\n \"NumLock\",\n 144,\n \"VK_NUMLOCK\",\n empty,\n empty\n ],\n [\n 1,\n 90,\n \"NumpadDivide\",\n 113,\n \"NumPad_Divide\",\n 111,\n \"VK_DIVIDE\",\n empty,\n empty\n ],\n [\n 1,\n 91,\n \"NumpadMultiply\",\n 108,\n \"NumPad_Multiply\",\n 106,\n \"VK_MULTIPLY\",\n empty,\n empty\n ],\n [\n 1,\n 92,\n \"NumpadSubtract\",\n 111,\n \"NumPad_Subtract\",\n 109,\n \"VK_SUBTRACT\",\n empty,\n empty\n ],\n [\n 1,\n 93,\n \"NumpadAdd\",\n 109,\n \"NumPad_Add\",\n 107,\n \"VK_ADD\",\n empty,\n empty\n ],\n [\n 1,\n 94,\n \"NumpadEnter\",\n 3,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 95,\n \"Numpad1\",\n 99,\n \"NumPad1\",\n 97,\n \"VK_NUMPAD1\",\n empty,\n empty\n ],\n [\n 1,\n 96,\n \"Numpad2\",\n 100,\n \"NumPad2\",\n 98,\n \"VK_NUMPAD2\",\n empty,\n empty\n ],\n [\n 1,\n 97,\n \"Numpad3\",\n 101,\n \"NumPad3\",\n 99,\n \"VK_NUMPAD3\",\n empty,\n empty\n ],\n [\n 1,\n 98,\n \"Numpad4\",\n 102,\n \"NumPad4\",\n 100,\n \"VK_NUMPAD4\",\n empty,\n empty\n ],\n [\n 1,\n 99,\n \"Numpad5\",\n 103,\n \"NumPad5\",\n 101,\n \"VK_NUMPAD5\",\n empty,\n empty\n ],\n [\n 1,\n 100,\n \"Numpad6\",\n 104,\n \"NumPad6\",\n 102,\n \"VK_NUMPAD6\",\n empty,\n empty\n ],\n [\n 1,\n 101,\n \"Numpad7\",\n 105,\n \"NumPad7\",\n 103,\n \"VK_NUMPAD7\",\n empty,\n empty\n ],\n [\n 1,\n 102,\n \"Numpad8\",\n 106,\n \"NumPad8\",\n 104,\n \"VK_NUMPAD8\",\n empty,\n empty\n ],\n [\n 1,\n 103,\n \"Numpad9\",\n 107,\n \"NumPad9\",\n 105,\n \"VK_NUMPAD9\",\n empty,\n empty\n ],\n [\n 1,\n 104,\n \"Numpad0\",\n 98,\n \"NumPad0\",\n 96,\n \"VK_NUMPAD0\",\n empty,\n empty\n ],\n [\n 1,\n 105,\n \"NumpadDecimal\",\n 112,\n \"NumPad_Decimal\",\n 110,\n \"VK_DECIMAL\",\n empty,\n empty\n ],\n [\n 0,\n 106,\n \"IntlBackslash\",\n 97,\n \"OEM_102\",\n 226,\n \"VK_OEM_102\",\n empty,\n empty\n ],\n [\n 1,\n 107,\n \"ContextMenu\",\n 58,\n \"ContextMenu\",\n 93,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 108,\n \"Power\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 109,\n \"NumpadEqual\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 110,\n \"F13\",\n 71,\n \"F13\",\n 124,\n \"VK_F13\",\n empty,\n empty\n ],\n [\n 1,\n 111,\n \"F14\",\n 72,\n \"F14\",\n 125,\n \"VK_F14\",\n empty,\n empty\n ],\n [\n 1,\n 112,\n \"F15\",\n 73,\n \"F15\",\n 126,\n \"VK_F15\",\n empty,\n empty\n ],\n [\n 1,\n 113,\n \"F16\",\n 74,\n \"F16\",\n 127,\n \"VK_F16\",\n empty,\n empty\n ],\n [\n 1,\n 114,\n \"F17\",\n 75,\n \"F17\",\n 128,\n \"VK_F17\",\n empty,\n empty\n ],\n [\n 1,\n 115,\n \"F18\",\n 76,\n \"F18\",\n 129,\n \"VK_F18\",\n empty,\n empty\n ],\n [\n 1,\n 116,\n \"F19\",\n 77,\n \"F19\",\n 130,\n \"VK_F19\",\n empty,\n empty\n ],\n [\n 1,\n 117,\n \"F20\",\n 78,\n \"F20\",\n 131,\n \"VK_F20\",\n empty,\n empty\n ],\n [\n 1,\n 118,\n \"F21\",\n 79,\n \"F21\",\n 132,\n \"VK_F21\",\n empty,\n empty\n ],\n [\n 1,\n 119,\n \"F22\",\n 80,\n \"F22\",\n 133,\n \"VK_F22\",\n empty,\n empty\n ],\n [\n 1,\n 120,\n \"F23\",\n 81,\n \"F23\",\n 134,\n \"VK_F23\",\n empty,\n empty\n ],\n [\n 1,\n 121,\n \"F24\",\n 82,\n \"F24\",\n 135,\n \"VK_F24\",\n empty,\n empty\n ],\n [\n 1,\n 122,\n \"Open\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 123,\n \"Help\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 124,\n \"Select\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 125,\n \"Again\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 126,\n \"Undo\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 127,\n \"Cut\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 128,\n \"Copy\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 129,\n \"Paste\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 130,\n \"Find\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 131,\n \"AudioVolumeMute\",\n 117,\n \"AudioVolumeMute\",\n 173,\n \"VK_VOLUME_MUTE\",\n empty,\n empty\n ],\n [\n 1,\n 132,\n \"AudioVolumeUp\",\n 118,\n \"AudioVolumeUp\",\n 175,\n \"VK_VOLUME_UP\",\n empty,\n empty\n ],\n [\n 1,\n 133,\n \"AudioVolumeDown\",\n 119,\n \"AudioVolumeDown\",\n 174,\n \"VK_VOLUME_DOWN\",\n empty,\n empty\n ],\n [\n 1,\n 134,\n \"NumpadComma\",\n 110,\n \"NumPad_Separator\",\n 108,\n \"VK_SEPARATOR\",\n empty,\n empty\n ],\n [\n 0,\n 135,\n \"IntlRo\",\n 115,\n \"ABNT_C1\",\n 193,\n \"VK_ABNT_C1\",\n empty,\n empty\n ],\n [\n 1,\n 136,\n \"KanaMode\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 0,\n 137,\n \"IntlYen\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 138,\n \"Convert\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 139,\n \"NonConvert\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 140,\n \"Lang1\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 141,\n \"Lang2\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 142,\n \"Lang3\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 143,\n \"Lang4\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 144,\n \"Lang5\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 145,\n \"Abort\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 146,\n \"Props\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 147,\n \"NumpadParenLeft\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 148,\n \"NumpadParenRight\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 149,\n \"NumpadBackspace\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 150,\n \"NumpadMemoryStore\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 151,\n \"NumpadMemoryRecall\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 152,\n \"NumpadMemoryClear\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 153,\n \"NumpadMemoryAdd\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 154,\n \"NumpadMemorySubtract\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 155,\n \"NumpadClear\",\n 131,\n \"Clear\",\n 12,\n \"VK_CLEAR\",\n empty,\n empty\n ],\n [\n 1,\n 156,\n \"NumpadClearEntry\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 5,\n \"Ctrl\",\n 17,\n \"VK_CONTROL\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 4,\n \"Shift\",\n 16,\n \"VK_SHIFT\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 6,\n \"Alt\",\n 18,\n \"VK_MENU\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 57,\n \"Meta\",\n 91,\n \"VK_COMMAND\",\n empty,\n empty\n ],\n [\n 1,\n 157,\n \"ControlLeft\",\n 5,\n empty,\n 0,\n \"VK_LCONTROL\",\n empty,\n empty\n ],\n [\n 1,\n 158,\n \"ShiftLeft\",\n 4,\n empty,\n 0,\n \"VK_LSHIFT\",\n empty,\n empty\n ],\n [\n 1,\n 159,\n \"AltLeft\",\n 6,\n empty,\n 0,\n \"VK_LMENU\",\n empty,\n empty\n ],\n [\n 1,\n 160,\n \"MetaLeft\",\n 57,\n empty,\n 0,\n \"VK_LWIN\",\n empty,\n empty\n ],\n [\n 1,\n 161,\n \"ControlRight\",\n 5,\n empty,\n 0,\n \"VK_RCONTROL\",\n empty,\n empty\n ],\n [\n 1,\n 162,\n \"ShiftRight\",\n 4,\n empty,\n 0,\n \"VK_RSHIFT\",\n empty,\n empty\n ],\n [\n 1,\n 163,\n \"AltRight\",\n 6,\n empty,\n 0,\n \"VK_RMENU\",\n empty,\n empty\n ],\n [\n 1,\n 164,\n \"MetaRight\",\n 57,\n empty,\n 0,\n \"VK_RWIN\",\n empty,\n empty\n ],\n [\n 1,\n 165,\n \"BrightnessUp\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 166,\n \"BrightnessDown\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 167,\n \"MediaPlay\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 168,\n \"MediaRecord\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 169,\n \"MediaFastForward\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 170,\n \"MediaRewind\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 171,\n \"MediaTrackNext\",\n 124,\n \"MediaTrackNext\",\n 176,\n \"VK_MEDIA_NEXT_TRACK\",\n empty,\n empty\n ],\n [\n 1,\n 172,\n \"MediaTrackPrevious\",\n 125,\n \"MediaTrackPrevious\",\n 177,\n \"VK_MEDIA_PREV_TRACK\",\n empty,\n empty\n ],\n [\n 1,\n 173,\n \"MediaStop\",\n 126,\n \"MediaStop\",\n 178,\n \"VK_MEDIA_STOP\",\n empty,\n empty\n ],\n [\n 1,\n 174,\n \"Eject\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 175,\n \"MediaPlayPause\",\n 127,\n \"MediaPlayPause\",\n 179,\n \"VK_MEDIA_PLAY_PAUSE\",\n empty,\n empty\n ],\n [\n 1,\n 176,\n \"MediaSelect\",\n 128,\n \"LaunchMediaPlayer\",\n 181,\n \"VK_MEDIA_LAUNCH_MEDIA_SELECT\",\n empty,\n empty\n ],\n [\n 1,\n 177,\n \"LaunchMail\",\n 129,\n \"LaunchMail\",\n 180,\n \"VK_MEDIA_LAUNCH_MAIL\",\n empty,\n empty\n ],\n [\n 1,\n 178,\n \"LaunchApp2\",\n 130,\n \"LaunchApp2\",\n 183,\n \"VK_MEDIA_LAUNCH_APP2\",\n empty,\n empty\n ],\n [\n 1,\n 179,\n \"LaunchApp1\",\n 0,\n empty,\n 0,\n \"VK_MEDIA_LAUNCH_APP1\",\n empty,\n empty\n ],\n [\n 1,\n 180,\n \"SelectTask\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 181,\n \"LaunchScreenSaver\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 182,\n \"BrowserSearch\",\n 120,\n \"BrowserSearch\",\n 170,\n \"VK_BROWSER_SEARCH\",\n empty,\n empty\n ],\n [\n 1,\n 183,\n \"BrowserHome\",\n 121,\n \"BrowserHome\",\n 172,\n \"VK_BROWSER_HOME\",\n empty,\n empty\n ],\n [\n 1,\n 184,\n \"BrowserBack\",\n 122,\n \"BrowserBack\",\n 166,\n \"VK_BROWSER_BACK\",\n empty,\n empty\n ],\n [\n 1,\n 185,\n \"BrowserForward\",\n 123,\n \"BrowserForward\",\n 167,\n \"VK_BROWSER_FORWARD\",\n empty,\n empty\n ],\n [\n 1,\n 186,\n \"BrowserStop\",\n 0,\n empty,\n 0,\n \"VK_BROWSER_STOP\",\n empty,\n empty\n ],\n [\n 1,\n 187,\n \"BrowserRefresh\",\n 0,\n empty,\n 0,\n \"VK_BROWSER_REFRESH\",\n empty,\n empty\n ],\n [\n 1,\n 188,\n \"BrowserFavorites\",\n 0,\n empty,\n 0,\n \"VK_BROWSER_FAVORITES\",\n empty,\n empty\n ],\n [\n 1,\n 189,\n \"ZoomToggle\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 190,\n \"MailReply\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 191,\n \"MailForward\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 192,\n \"MailSend\",\n 0,\n empty,\n 0,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 114,\n \"KeyInComposition\",\n 229,\n empty,\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 116,\n \"ABNT_C2\",\n 194,\n \"VK_ABNT_C2\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 96,\n \"OEM_8\",\n 223,\n \"VK_OEM_8\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_KANA\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_HANGUL\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_JUNJA\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_FINAL\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_HANJA\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_KANJI\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_CONVERT\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_NONCONVERT\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_ACCEPT\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_MODECHANGE\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_SELECT\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_PRINT\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_EXECUTE\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_SNAPSHOT\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_HELP\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_APPS\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_PROCESSKEY\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_PACKET\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_DBE_SBCSCHAR\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_DBE_DBCSCHAR\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_ATTN\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_CRSEL\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_EXSEL\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_EREOF\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_PLAY\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_ZOOM\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_NONAME\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_PA1\",\n empty,\n empty\n ],\n [\n 1,\n 0,\n empty,\n 0,\n empty,\n 0,\n \"VK_OEM_CLEAR\",\n empty,\n empty\n ]\n ];\n const seenKeyCode = [];\n const seenScanCode = [];\n for (const mapping of mappings) {\n const [immutable, scanCode, scanCodeStr, keyCode, keyCodeStr, eventKeyCode, vkey, usUserSettingsLabel, generalUserSettingsLabel] = mapping;\n if (!seenScanCode[scanCode]) {\n seenScanCode[scanCode] = true;\n scanCodeStrToInt[scanCodeStr] = scanCode;\n scanCodeLowerCaseStrToInt[scanCodeStr.toLowerCase()] = scanCode;\n if (immutable) IMMUTABLE_CODE_TO_KEY_CODE[scanCode] = keyCode;\n }\n if (!seenKeyCode[keyCode]) {\n seenKeyCode[keyCode] = true;\n if (!keyCodeStr) throw new Error(`String representation missing for key code ${keyCode} around scan code ${scanCodeStr}`);\n uiMap.define(keyCode, keyCodeStr);\n userSettingsUSMap.define(keyCode, usUserSettingsLabel || keyCodeStr);\n userSettingsGeneralMap.define(keyCode, generalUserSettingsLabel || usUserSettingsLabel || keyCodeStr);\n }\n if (eventKeyCode) EVENT_KEY_CODE_MAP[eventKeyCode] = keyCode;\n }\n })();\n var KeyCodeUtils;\n (function(KeyCodeUtils) {\n function toString(keyCode) {\n return uiMap.keyCodeToStr(keyCode);\n }\n KeyCodeUtils.toString = toString;\n function fromString(key) {\n return uiMap.strToKeyCode(key);\n }\n KeyCodeUtils.fromString = fromString;\n function toUserSettingsUS(keyCode) {\n return userSettingsUSMap.keyCodeToStr(keyCode);\n }\n KeyCodeUtils.toUserSettingsUS = toUserSettingsUS;\n function toUserSettingsGeneral(keyCode) {\n return userSettingsGeneralMap.keyCodeToStr(keyCode);\n }\n KeyCodeUtils.toUserSettingsGeneral = toUserSettingsGeneral;\n function fromUserSettings(key) {\n return userSettingsUSMap.strToKeyCode(key) || userSettingsGeneralMap.strToKeyCode(key);\n }\n KeyCodeUtils.fromUserSettings = fromUserSettings;\n function toElectronAccelerator(keyCode) {\n if (keyCode >= 98 && keyCode <= 113) return null;\n switch (keyCode) {\n case 16: return \"Up\";\n case 18: return \"Down\";\n case 15: return \"Left\";\n case 17: return \"Right\";\n }\n return uiMap.keyCodeToStr(keyCode);\n }\n KeyCodeUtils.toElectronAccelerator = toElectronAccelerator;\n })(KeyCodeUtils || (KeyCodeUtils = {}));\n function KeyChord(firstPart, secondPart) {\n return (firstPart | (secondPart & 65535) << 16 >>> 0) >>> 0;\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/process.js\n let safeProcess;\n const vscodeGlobal = globalThis.vscode;\n if (typeof vscodeGlobal !== \"undefined\" && typeof vscodeGlobal.process !== \"undefined\") {\n const sandboxProcess = vscodeGlobal.process;\n safeProcess = {\n get platform() {\n return sandboxProcess.platform;\n },\n get arch() {\n return sandboxProcess.arch;\n },\n get env() {\n return sandboxProcess.env;\n },\n cwd() {\n return sandboxProcess.cwd();\n }\n };\n } else if (typeof process !== \"undefined\" && typeof process?.versions?.node === \"string\") safeProcess = {\n get platform() {\n return process.platform;\n },\n get arch() {\n return process.arch;\n },\n get env() {\n return process.env;\n },\n cwd() {\n return process.env[\"VSCODE_CWD\"] || process.cwd();\n }\n };\n else safeProcess = {\n get platform() {\n return isWindows ? \"win32\" : isMacintosh ? \"darwin\" : \"linux\";\n },\n get arch() {},\n get env() {\n return {};\n },\n cwd() {\n return \"/\";\n }\n };\n /**\n * Provides safe access to the `cwd` property in node.js, sandboxed or web\n * environments.\n *\n * Note: in web, this property is hardcoded to be `/`.\n *\n * @skipMangle\n */\n const cwd = safeProcess.cwd;\n /**\n * Provides safe access to the `env` property in node.js, sandboxed or web\n * environments.\n *\n * Note: in web, this property is hardcoded to be `{}`.\n */\n const env = safeProcess.env;\n /**\n * Provides safe access to the `platform` property in node.js, sandboxed or web\n * environments.\n */\n const platform = safeProcess.platform;\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/path.js\n /**\n * Copyright Joyent, Inc. and other Node contributors.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to permit\n * persons to whom the Software is furnished to do so, subject to the\n * following conditions:\n *\n * The above copyright notice and this permission notice shall be included\n * in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n * USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n const CHAR_UPPERCASE_A = 65;\n const CHAR_LOWERCASE_A = 97;\n const CHAR_UPPERCASE_Z = 90;\n const CHAR_LOWERCASE_Z = 122;\n const CHAR_DOT = 46;\n const CHAR_FORWARD_SLASH = 47;\n const CHAR_BACKWARD_SLASH = 92;\n const CHAR_COLON = 58;\n const CHAR_QUESTION_MARK = 63;\n var ErrorInvalidArgType = class extends Error {\n constructor(name, expected, actual) {\n let determiner;\n if (typeof expected === \"string\" && expected.indexOf(\"not \") === 0) {\n determiner = \"must not be\";\n expected = expected.replace(/^not /, \"\");\n } else determiner = \"must be\";\n let msg = `The \"${name}\" ${name.indexOf(\".\") !== -1 ? \"property\" : \"argument\"} ${determiner} of type ${expected}`;\n msg += `. Received type ${typeof actual}`;\n super(msg);\n this.code = \"ERR_INVALID_ARG_TYPE\";\n }\n };\n function validateObject(pathObject, name) {\n if (pathObject === null || typeof pathObject !== \"object\") throw new ErrorInvalidArgType(name, \"Object\", pathObject);\n }\n function validateString(value, name) {\n if (typeof value !== \"string\") throw new ErrorInvalidArgType(name, \"string\", value);\n }\n const platformIsWin32 = platform === \"win32\";\n function isPathSeparator(code) {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n }\n function isPosixPathSeparator(code) {\n return code === CHAR_FORWARD_SLASH;\n }\n function isWindowsDeviceRoot(code) {\n return code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z || code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z;\n }\n function normalizeString(path, allowAboveRoot, separator, isPathSeparator) {\n let res = \"\";\n let lastSegmentLength = 0;\n let lastSlash = -1;\n let dots = 0;\n let code = 0;\n for (let i = 0; i <= path.length; ++i) {\n if (i < path.length) code = path.charCodeAt(i);\n else if (isPathSeparator(code)) break;\n else code = CHAR_FORWARD_SLASH;\n if (isPathSeparator(code)) {\n if (lastSlash === i - 1 || dots === 1);\n else if (dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== CHAR_DOT || res.charCodeAt(res.length - 2) !== CHAR_DOT) {\n if (res.length > 2) {\n const lastSlashIndex = res.lastIndexOf(separator);\n if (lastSlashIndex === -1) {\n res = \"\";\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf(separator);\n }\n lastSlash = i;\n dots = 0;\n continue;\n } else if (res.length !== 0) {\n res = \"\";\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n res += res.length > 0 ? `${separator}..` : \"..\";\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0) res += `${separator}${path.slice(lastSlash + 1, i)}`;\n else res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === CHAR_DOT && dots !== -1) ++dots;\n else dots = -1;\n }\n return res;\n }\n function formatExt(ext) {\n return ext ? `${ext[0] === \".\" ? \"\" : \".\"}${ext}` : \"\";\n }\n function _format(sep, pathObject) {\n validateObject(pathObject, \"pathObject\");\n const dir = pathObject.dir || pathObject.root;\n const base = pathObject.base || `${pathObject.name || \"\"}${formatExt(pathObject.ext)}`;\n if (!dir) return base;\n return dir === pathObject.root ? `${dir}${base}` : `${dir}${sep}${base}`;\n }\n const win32 = {\n resolve(...pathSegments) {\n let resolvedDevice = \"\";\n let resolvedTail = \"\";\n let resolvedAbsolute = false;\n for (let i = pathSegments.length - 1; i >= -1; i--) {\n let path;\n if (i >= 0) {\n path = pathSegments[i];\n validateString(path, `paths[${i}]`);\n if (path.length === 0) continue;\n } else if (resolvedDevice.length === 0) path = cwd();\n else {\n path = env[`=${resolvedDevice}`] || cwd();\n if (path === void 0 || path.slice(0, 2).toLowerCase() !== resolvedDevice.toLowerCase() && path.charCodeAt(2) === CHAR_BACKWARD_SLASH) path = `${resolvedDevice}\\\\`;\n }\n const len = path.length;\n let rootEnd = 0;\n let device = \"\";\n let isAbsolute = false;\n const code = path.charCodeAt(0);\n if (len === 1) {\n if (isPathSeparator(code)) {\n rootEnd = 1;\n isAbsolute = true;\n }\n } else if (isPathSeparator(code)) {\n isAbsolute = true;\n if (isPathSeparator(path.charCodeAt(1))) {\n let j = 2;\n let last = j;\n while (j < len && !isPathSeparator(path.charCodeAt(j))) j++;\n if (j < len && j !== last) {\n const firstPart = path.slice(last, j);\n last = j;\n while (j < len && isPathSeparator(path.charCodeAt(j))) j++;\n if (j < len && j !== last) {\n last = j;\n while (j < len && !isPathSeparator(path.charCodeAt(j))) j++;\n if (j === len || j !== last) {\n device = `\\\\\\\\${firstPart}\\\\${path.slice(last, j)}`;\n rootEnd = j;\n }\n }\n }\n } else rootEnd = 1;\n } else if (isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON) {\n device = path.slice(0, 2);\n rootEnd = 2;\n if (len > 2 && isPathSeparator(path.charCodeAt(2))) {\n isAbsolute = true;\n rootEnd = 3;\n }\n }\n if (device.length > 0) if (resolvedDevice.length > 0) {\n if (device.toLowerCase() !== resolvedDevice.toLowerCase()) continue;\n } else resolvedDevice = device;\n if (resolvedAbsolute) {\n if (resolvedDevice.length > 0) break;\n } else {\n resolvedTail = `${path.slice(rootEnd)}\\\\${resolvedTail}`;\n resolvedAbsolute = isAbsolute;\n if (isAbsolute && resolvedDevice.length > 0) break;\n }\n }\n resolvedTail = normalizeString(resolvedTail, !resolvedAbsolute, \"\\\\\", isPathSeparator);\n return resolvedAbsolute ? `${resolvedDevice}\\\\${resolvedTail}` : `${resolvedDevice}${resolvedTail}` || \".\";\n },\n normalize(path) {\n validateString(path, \"path\");\n const len = path.length;\n if (len === 0) return \".\";\n let rootEnd = 0;\n let device;\n let isAbsolute = false;\n const code = path.charCodeAt(0);\n if (len === 1) return isPosixPathSeparator(code) ? \"\\\\\" : path;\n if (isPathSeparator(code)) {\n isAbsolute = true;\n if (isPathSeparator(path.charCodeAt(1))) {\n let j = 2;\n let last = j;\n while (j < len && !isPathSeparator(path.charCodeAt(j))) j++;\n if (j < len && j !== last) {\n const firstPart = path.slice(last, j);\n last = j;\n while (j < len && isPathSeparator(path.charCodeAt(j))) j++;\n if (j < len && j !== last) {\n last = j;\n while (j < len && !isPathSeparator(path.charCodeAt(j))) j++;\n if (j === len) return `\\\\\\\\${firstPart}\\\\${path.slice(last)}\\\\`;\n if (j !== last) {\n device = `\\\\\\\\${firstPart}\\\\${path.slice(last, j)}`;\n rootEnd = j;\n }\n }\n }\n } else rootEnd = 1;\n } else if (isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON) {\n device = path.slice(0, 2);\n rootEnd = 2;\n if (len > 2 && isPathSeparator(path.charCodeAt(2))) {\n isAbsolute = true;\n rootEnd = 3;\n }\n }\n let tail = rootEnd < len ? normalizeString(path.slice(rootEnd), !isAbsolute, \"\\\\\", isPathSeparator) : \"\";\n if (tail.length === 0 && !isAbsolute) tail = \".\";\n if (tail.length > 0 && isPathSeparator(path.charCodeAt(len - 1))) tail += \"\\\\\";\n if (!isAbsolute && device === void 0 && path.includes(\":\")) {\n if (tail.length >= 2 && isWindowsDeviceRoot(tail.charCodeAt(0)) && tail.charCodeAt(1) === CHAR_COLON) return `.\\\\${tail}`;\n let index = path.indexOf(\":\");\n do\n if (index === len - 1 || isPathSeparator(path.charCodeAt(index + 1))) return `.\\\\${tail}`;\n while ((index = path.indexOf(\":\", index + 1)) !== -1);\n }\n if (device === void 0) return isAbsolute ? `\\\\${tail}` : tail;\n return isAbsolute ? `${device}\\\\${tail}` : `${device}${tail}`;\n },\n isAbsolute(path) {\n validateString(path, \"path\");\n const len = path.length;\n if (len === 0) return false;\n const code = path.charCodeAt(0);\n return isPathSeparator(code) || len > 2 && isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON && isPathSeparator(path.charCodeAt(2));\n },\n join(...paths) {\n if (paths.length === 0) return \".\";\n let joined;\n let firstPart;\n for (let i = 0; i < paths.length; ++i) {\n const arg = paths[i];\n validateString(arg, \"path\");\n if (arg.length > 0) if (joined === void 0) joined = firstPart = arg;\n else joined += `\\\\${arg}`;\n }\n if (joined === void 0) return \".\";\n let needsReplace = true;\n let slashCount = 0;\n if (typeof firstPart === \"string\" && isPathSeparator(firstPart.charCodeAt(0))) {\n ++slashCount;\n const firstLen = firstPart.length;\n if (firstLen > 1 && isPathSeparator(firstPart.charCodeAt(1))) {\n ++slashCount;\n if (firstLen > 2) if (isPathSeparator(firstPart.charCodeAt(2))) ++slashCount;\n else needsReplace = false;\n }\n }\n if (needsReplace) {\n while (slashCount < joined.length && isPathSeparator(joined.charCodeAt(slashCount))) slashCount++;\n if (slashCount >= 2) joined = `\\\\${joined.slice(slashCount)}`;\n }\n return win32.normalize(joined);\n },\n relative(from, to) {\n validateString(from, \"from\");\n validateString(to, \"to\");\n if (from === to) return \"\";\n const fromOrig = win32.resolve(from);\n const toOrig = win32.resolve(to);\n if (fromOrig === toOrig) return \"\";\n from = fromOrig.toLowerCase();\n to = toOrig.toLowerCase();\n if (from === to) return \"\";\n if (fromOrig.length !== from.length || toOrig.length !== to.length) {\n const fromSplit = fromOrig.split(\"\\\\\");\n const toSplit = toOrig.split(\"\\\\\");\n if (fromSplit[fromSplit.length - 1] === \"\") fromSplit.pop();\n if (toSplit[toSplit.length - 1] === \"\") toSplit.pop();\n const fromLen = fromSplit.length;\n const toLen = toSplit.length;\n const length = fromLen < toLen ? fromLen : toLen;\n let i;\n for (i = 0; i < length; i++) if (fromSplit[i].toLowerCase() !== toSplit[i].toLowerCase()) break;\n if (i === 0) return toOrig;\n else if (i === length) {\n if (toLen > length) return toSplit.slice(i).join(\"\\\\\");\n if (fromLen > length) return \"..\\\\\".repeat(fromLen - 1 - i) + \"..\";\n return \"\";\n }\n return \"..\\\\\".repeat(fromLen - i) + toSplit.slice(i).join(\"\\\\\");\n }\n let fromStart = 0;\n while (fromStart < from.length && from.charCodeAt(fromStart) === CHAR_BACKWARD_SLASH) fromStart++;\n let fromEnd = from.length;\n while (fromEnd - 1 > fromStart && from.charCodeAt(fromEnd - 1) === CHAR_BACKWARD_SLASH) fromEnd--;\n const fromLen = fromEnd - fromStart;\n let toStart = 0;\n while (toStart < to.length && to.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) toStart++;\n let toEnd = to.length;\n while (toEnd - 1 > toStart && to.charCodeAt(toEnd - 1) === CHAR_BACKWARD_SLASH) toEnd--;\n const toLen = toEnd - toStart;\n const length = fromLen < toLen ? fromLen : toLen;\n let lastCommonSep = -1;\n let i = 0;\n for (; i < length; i++) {\n const fromCode = from.charCodeAt(fromStart + i);\n if (fromCode !== to.charCodeAt(toStart + i)) break;\n else if (fromCode === CHAR_BACKWARD_SLASH) lastCommonSep = i;\n }\n if (i !== length) {\n if (lastCommonSep === -1) return toOrig;\n } else {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === CHAR_BACKWARD_SLASH) return toOrig.slice(toStart + i + 1);\n if (i === 2) return toOrig.slice(toStart + i);\n }\n if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === CHAR_BACKWARD_SLASH) lastCommonSep = i;\n else if (i === 2) lastCommonSep = 3;\n }\n if (lastCommonSep === -1) lastCommonSep = 0;\n }\n let out = \"\";\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) if (i === fromEnd || from.charCodeAt(i) === CHAR_BACKWARD_SLASH) out += out.length === 0 ? \"..\" : \"\\\\..\";\n toStart += lastCommonSep;\n if (out.length > 0) return `${out}${toOrig.slice(toStart, toEnd)}`;\n if (toOrig.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) ++toStart;\n return toOrig.slice(toStart, toEnd);\n },\n toNamespacedPath(path) {\n if (typeof path !== \"string\" || path.length === 0) return path;\n const resolvedPath = win32.resolve(path);\n if (resolvedPath.length <= 2) return path;\n if (resolvedPath.charCodeAt(0) === CHAR_BACKWARD_SLASH) {\n if (resolvedPath.charCodeAt(1) === CHAR_BACKWARD_SLASH) {\n const code = resolvedPath.charCodeAt(2);\n if (code !== CHAR_QUESTION_MARK && code !== CHAR_DOT) return `\\\\\\\\?\\\\UNC\\\\${resolvedPath.slice(2)}`;\n }\n } else if (isWindowsDeviceRoot(resolvedPath.charCodeAt(0)) && resolvedPath.charCodeAt(1) === CHAR_COLON && resolvedPath.charCodeAt(2) === CHAR_BACKWARD_SLASH) return `\\\\\\\\?\\\\${resolvedPath}`;\n return resolvedPath;\n },\n dirname(path) {\n validateString(path, \"path\");\n const len = path.length;\n if (len === 0) return \".\";\n let rootEnd = -1;\n let offset = 0;\n const code = path.charCodeAt(0);\n if (len === 1) return isPathSeparator(code) ? path : \".\";\n if (isPathSeparator(code)) {\n rootEnd = offset = 1;\n if (isPathSeparator(path.charCodeAt(1))) {\n let j = 2;\n let last = j;\n while (j < len && !isPathSeparator(path.charCodeAt(j))) j++;\n if (j < len && j !== last) {\n last = j;\n while (j < len && isPathSeparator(path.charCodeAt(j))) j++;\n if (j < len && j !== last) {\n last = j;\n while (j < len && !isPathSeparator(path.charCodeAt(j))) j++;\n if (j === len) return path;\n if (j !== last) rootEnd = offset = j + 1;\n }\n }\n }\n } else if (isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON) {\n rootEnd = len > 2 && isPathSeparator(path.charCodeAt(2)) ? 3 : 2;\n offset = rootEnd;\n }\n let end = -1;\n let matchedSlash = true;\n for (let i = len - 1; i >= offset; --i) if (isPathSeparator(path.charCodeAt(i))) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else matchedSlash = false;\n if (end === -1) {\n if (rootEnd === -1) return \".\";\n end = rootEnd;\n }\n return path.slice(0, end);\n },\n basename(path, suffix) {\n if (suffix !== void 0) validateString(suffix, \"suffix\");\n validateString(path, \"path\");\n let start = 0;\n let end = -1;\n let matchedSlash = true;\n let i;\n if (path.length >= 2 && isWindowsDeviceRoot(path.charCodeAt(0)) && path.charCodeAt(1) === CHAR_COLON) start = 2;\n if (suffix !== void 0 && suffix.length > 0 && suffix.length <= path.length) {\n if (suffix === path) return \"\";\n let extIdx = suffix.length - 1;\n let firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= start; --i) {\n const code = path.charCodeAt(i);\n if (isPathSeparator(code)) {\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) if (code === suffix.charCodeAt(extIdx)) {\n if (--extIdx === -1) end = i;\n } else {\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n if (start === end) end = firstNonSlashEnd;\n else if (end === -1) end = path.length;\n return path.slice(start, end);\n }\n for (i = path.length - 1; i >= start; --i) if (isPathSeparator(path.charCodeAt(i))) {\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n matchedSlash = false;\n end = i + 1;\n }\n if (end === -1) return \"\";\n return path.slice(start, end);\n },\n extname(path) {\n validateString(path, \"path\");\n let start = 0;\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n let preDotState = 0;\n if (path.length >= 2 && path.charCodeAt(1) === CHAR_COLON && isWindowsDeviceRoot(path.charCodeAt(0))) start = startPart = 2;\n for (let i = path.length - 1; i >= start; --i) {\n const code = path.charCodeAt(i);\n if (isPathSeparator(code)) {\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n matchedSlash = false;\n end = i + 1;\n }\n if (code === CHAR_DOT) {\n if (startDot === -1) startDot = i;\n else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) preDotState = -1;\n }\n if (startDot === -1 || end === -1 || preDotState === 0 || preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) return \"\";\n return path.slice(startDot, end);\n },\n format: _format.bind(null, \"\\\\\"),\n parse(path) {\n validateString(path, \"path\");\n const ret = {\n root: \"\",\n dir: \"\",\n base: \"\",\n ext: \"\",\n name: \"\"\n };\n if (path.length === 0) return ret;\n const len = path.length;\n let rootEnd = 0;\n let code = path.charCodeAt(0);\n if (len === 1) {\n if (isPathSeparator(code)) {\n ret.root = ret.dir = path;\n return ret;\n }\n ret.base = ret.name = path;\n return ret;\n }\n if (isPathSeparator(code)) {\n rootEnd = 1;\n if (isPathSeparator(path.charCodeAt(1))) {\n let j = 2;\n let last = j;\n while (j < len && !isPathSeparator(path.charCodeAt(j))) j++;\n if (j < len && j !== last) {\n last = j;\n while (j < len && isPathSeparator(path.charCodeAt(j))) j++;\n if (j < len && j !== last) {\n last = j;\n while (j < len && !isPathSeparator(path.charCodeAt(j))) j++;\n if (j === len) rootEnd = j;\n else if (j !== last) rootEnd = j + 1;\n }\n }\n }\n } else if (isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON) {\n if (len <= 2) {\n ret.root = ret.dir = path;\n return ret;\n }\n rootEnd = 2;\n if (isPathSeparator(path.charCodeAt(2))) {\n if (len === 3) {\n ret.root = ret.dir = path;\n return ret;\n }\n rootEnd = 3;\n }\n }\n if (rootEnd > 0) ret.root = path.slice(0, rootEnd);\n let startDot = -1;\n let startPart = rootEnd;\n let end = -1;\n let matchedSlash = true;\n let i = path.length - 1;\n let preDotState = 0;\n for (; i >= rootEnd; --i) {\n code = path.charCodeAt(i);\n if (isPathSeparator(code)) {\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n matchedSlash = false;\n end = i + 1;\n }\n if (code === CHAR_DOT) {\n if (startDot === -1) startDot = i;\n else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) preDotState = -1;\n }\n if (end !== -1) if (startDot === -1 || preDotState === 0 || preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) ret.base = ret.name = path.slice(startPart, end);\n else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n ret.ext = path.slice(startDot, end);\n }\n if (startPart > 0 && startPart !== rootEnd) ret.dir = path.slice(0, startPart - 1);\n else ret.dir = ret.root;\n return ret;\n },\n sep: \"\\\\\",\n delimiter: \";\",\n win32: null,\n posix: null\n };\n const posixCwd = (() => {\n if (platformIsWin32) {\n const regexp = /\\\\/g;\n return () => {\n const cwd$1 = cwd().replace(regexp, \"/\");\n return cwd$1.slice(cwd$1.indexOf(\"/\"));\n };\n }\n return () => cwd();\n })();\n const posix = {\n resolve(...pathSegments) {\n let resolvedPath = \"\";\n let resolvedAbsolute = false;\n for (let i = pathSegments.length - 1; i >= 0 && !resolvedAbsolute; i--) {\n const path = pathSegments[i];\n validateString(path, `paths[${i}]`);\n if (path.length === 0) continue;\n resolvedPath = `${path}/${resolvedPath}`;\n resolvedAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n }\n if (!resolvedAbsolute) {\n const cwd = posixCwd();\n resolvedPath = `${cwd}/${resolvedPath}`;\n resolvedAbsolute = cwd.charCodeAt(0) === CHAR_FORWARD_SLASH;\n }\n resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute, \"/\", isPosixPathSeparator);\n if (resolvedAbsolute) return `/${resolvedPath}`;\n return resolvedPath.length > 0 ? resolvedPath : \".\";\n },\n normalize(path) {\n validateString(path, \"path\");\n if (path.length === 0) return \".\";\n const isAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n const trailingSeparator = path.charCodeAt(path.length - 1) === CHAR_FORWARD_SLASH;\n path = normalizeString(path, !isAbsolute, \"/\", isPosixPathSeparator);\n if (path.length === 0) {\n if (isAbsolute) return \"/\";\n return trailingSeparator ? \"./\" : \".\";\n }\n if (trailingSeparator) path += \"/\";\n return isAbsolute ? `/${path}` : path;\n },\n isAbsolute(path) {\n validateString(path, \"path\");\n return path.length > 0 && path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n },\n join(...paths) {\n if (paths.length === 0) return \".\";\n const path = [];\n for (let i = 0; i < paths.length; ++i) {\n const arg = paths[i];\n validateString(arg, \"path\");\n if (arg.length > 0) path.push(arg);\n }\n if (path.length === 0) return \".\";\n return posix.normalize(path.join(\"/\"));\n },\n relative(from, to) {\n validateString(from, \"from\");\n validateString(to, \"to\");\n if (from === to) return \"\";\n from = posix.resolve(from);\n to = posix.resolve(to);\n if (from === to) return \"\";\n const fromStart = 1;\n const fromEnd = from.length;\n const fromLen = fromEnd - fromStart;\n const toStart = 1;\n const toLen = to.length - toStart;\n const length = fromLen < toLen ? fromLen : toLen;\n let lastCommonSep = -1;\n let i = 0;\n for (; i < length; i++) {\n const fromCode = from.charCodeAt(fromStart + i);\n if (fromCode !== to.charCodeAt(toStart + i)) break;\n else if (fromCode === CHAR_FORWARD_SLASH) lastCommonSep = i;\n }\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === CHAR_FORWARD_SLASH) return to.slice(toStart + i + 1);\n if (i === 0) return to.slice(toStart + i);\n } else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === CHAR_FORWARD_SLASH) lastCommonSep = i;\n else if (i === 0) lastCommonSep = 0;\n }\n }\n let out = \"\";\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) if (i === fromEnd || from.charCodeAt(i) === CHAR_FORWARD_SLASH) out += out.length === 0 ? \"..\" : \"/..\";\n return `${out}${to.slice(toStart + lastCommonSep)}`;\n },\n toNamespacedPath(path) {\n return path;\n },\n dirname(path) {\n validateString(path, \"path\");\n if (path.length === 0) return \".\";\n const hasRoot = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n let end = -1;\n let matchedSlash = true;\n for (let i = path.length - 1; i >= 1; --i) if (path.charCodeAt(i) === CHAR_FORWARD_SLASH) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else matchedSlash = false;\n if (end === -1) return hasRoot ? \"/\" : \".\";\n if (hasRoot && end === 1) return \"//\";\n return path.slice(0, end);\n },\n basename(path, suffix) {\n if (suffix !== void 0) validateString(suffix, \"suffix\");\n validateString(path, \"path\");\n let start = 0;\n let end = -1;\n let matchedSlash = true;\n let i;\n if (suffix !== void 0 && suffix.length > 0 && suffix.length <= path.length) {\n if (suffix === path) return \"\";\n let extIdx = suffix.length - 1;\n let firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n const code = path.charCodeAt(i);\n if (code === CHAR_FORWARD_SLASH) {\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) if (code === suffix.charCodeAt(extIdx)) {\n if (--extIdx === -1) end = i;\n } else {\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n if (start === end) end = firstNonSlashEnd;\n else if (end === -1) end = path.length;\n return path.slice(start, end);\n }\n for (i = path.length - 1; i >= 0; --i) if (path.charCodeAt(i) === CHAR_FORWARD_SLASH) {\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n matchedSlash = false;\n end = i + 1;\n }\n if (end === -1) return \"\";\n return path.slice(start, end);\n },\n extname(path) {\n validateString(path, \"path\");\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n let preDotState = 0;\n for (let i = path.length - 1; i >= 0; --i) {\n const char = path[i];\n if (char === \"/\") {\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n matchedSlash = false;\n end = i + 1;\n }\n if (char === \".\") {\n if (startDot === -1) startDot = i;\n else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) preDotState = -1;\n }\n if (startDot === -1 || end === -1 || preDotState === 0 || preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) return \"\";\n return path.slice(startDot, end);\n },\n format: _format.bind(null, \"/\"),\n parse(path) {\n validateString(path, \"path\");\n const ret = {\n root: \"\",\n dir: \"\",\n base: \"\",\n ext: \"\",\n name: \"\"\n };\n if (path.length === 0) return ret;\n const isAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n let start;\n if (isAbsolute) {\n ret.root = \"/\";\n start = 1;\n } else start = 0;\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n let i = path.length - 1;\n let preDotState = 0;\n for (; i >= start; --i) {\n const code = path.charCodeAt(i);\n if (code === CHAR_FORWARD_SLASH) {\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n matchedSlash = false;\n end = i + 1;\n }\n if (code === CHAR_DOT) {\n if (startDot === -1) startDot = i;\n else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) preDotState = -1;\n }\n if (end !== -1) {\n const start = startPart === 0 && isAbsolute ? 1 : startPart;\n if (startDot === -1 || preDotState === 0 || preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) ret.base = ret.name = path.slice(start, end);\n else {\n ret.name = path.slice(start, startDot);\n ret.base = path.slice(start, end);\n ret.ext = path.slice(startDot, end);\n }\n }\n if (startPart > 0) ret.dir = path.slice(0, startPart - 1);\n else if (isAbsolute) ret.dir = \"/\";\n return ret;\n },\n sep: \"/\",\n delimiter: \":\",\n win32: null,\n posix: null\n };\n posix.win32 = win32.win32 = win32;\n posix.posix = win32.posix = posix;\n platformIsWin32 ? win32.normalize : posix.normalize;\n platformIsWin32 ? win32.resolve : posix.resolve;\n platformIsWin32 ? win32.relative : posix.relative;\n platformIsWin32 ? win32.dirname : posix.dirname;\n platformIsWin32 ? win32.basename : posix.basename;\n platformIsWin32 ? win32.extname : posix.extname;\n platformIsWin32 ? win32.sep : posix.sep;\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/uri.js\n const _schemePattern = /^\\w[\\w\\d+.-]*$/;\n const _singleSlashStart = /^\\//;\n const _doubleSlashStart = /^\\/\\//;\n function _validateUri(ret, _strict) {\n if (!ret.scheme && _strict) throw new Error(`[UriError]: Scheme is missing: {scheme: \"\", authority: \"${ret.authority}\", path: \"${ret.path}\", query: \"${ret.query}\", fragment: \"${ret.fragment}\"}`);\n if (ret.scheme && !_schemePattern.test(ret.scheme)) throw new Error(\"[UriError]: Scheme contains illegal characters.\");\n if (ret.path) {\n if (ret.authority) {\n if (!_singleSlashStart.test(ret.path)) throw new Error(\"[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\\\"/\\\") character\");\n } else if (_doubleSlashStart.test(ret.path)) throw new Error(\"[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\\\"//\\\")\");\n }\n }\n function _schemeFix(scheme, _strict) {\n if (!scheme && !_strict) return \"file\";\n return scheme;\n }\n function _referenceResolution(scheme, path) {\n switch (scheme) {\n case \"https\":\n case \"http\":\n case \"file\":\n if (!path) path = _slash;\n else if (path[0] !== _slash) path = _slash + path;\n break;\n }\n return path;\n }\n const _empty = \"\";\n const _slash = \"/\";\n const _regexp = /^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;\n /**\n * Uniform Resource Identifier (URI) http://tools.ietf.org/html/rfc3986.\n * This class is a simple parser which creates the basic component parts\n * (http://tools.ietf.org/html/rfc3986#section-3) with minimal validation\n * and encoding.\n *\n * ```txt\n * foo://example.com:8042/over/there?name=ferret#nose\n * \\_/ \\______________/\\_________/ \\_________/ \\__/\n * | | | | |\n * scheme authority path query fragment\n * | _____________________|__\n * / \\ / \\\n * urn:example:animal:ferret:nose\n * ```\n */\n var URI$2 = class URI$2 {\n static isUri(thing) {\n if (thing instanceof URI$2) return true;\n if (!thing || typeof thing !== \"object\") return false;\n return typeof thing.authority === \"string\" && typeof thing.fragment === \"string\" && typeof thing.path === \"string\" && typeof thing.query === \"string\" && typeof thing.scheme === \"string\" && typeof thing.fsPath === \"string\" && typeof thing.with === \"function\" && typeof thing.toString === \"function\";\n }\n /**\n * @internal\n */\n constructor(schemeOrData, authority, path, query, fragment, _strict = false) {\n if (typeof schemeOrData === \"object\") {\n this.scheme = schemeOrData.scheme || _empty;\n this.authority = schemeOrData.authority || _empty;\n this.path = schemeOrData.path || _empty;\n this.query = schemeOrData.query || _empty;\n this.fragment = schemeOrData.fragment || _empty;\n } else {\n this.scheme = _schemeFix(schemeOrData, _strict);\n this.authority = authority || _empty;\n this.path = _referenceResolution(this.scheme, path || _empty);\n this.query = query || _empty;\n this.fragment = fragment || _empty;\n _validateUri(this, _strict);\n }\n }\n /**\n * Returns a string representing the corresponding file system path of this URI.\n * Will handle UNC paths, normalizes windows drive letters to lower-case, and uses the\n * platform specific path separator.\n *\n * * Will *not* validate the path for invalid characters and semantics.\n * * Will *not* look at the scheme of this URI.\n * * The result shall *not* be used for display purposes but for accessing a file on disk.\n *\n *\n * The *difference* to `URI#path` is the use of the platform specific separator and the handling\n * of UNC paths. See the below sample of a file-uri with an authority (UNC path).\n *\n * ```ts\n const u = URI.parse('file://server/c$/folder/file.txt')\n u.authority === 'server'\n u.path === '/shares/c$/file.txt'\n u.fsPath === '\\\\server\\c$\\folder\\file.txt'\n ```\n *\n * Using `URI#path` to read a file (using fs-apis) would not be enough because parts of the path,\n * namely the server name, would be missing. Therefore `URI#fsPath` exists - it's sugar to ease working\n * with URIs that represent files on disk (`file` scheme).\n */\n get fsPath() {\n return uriToFsPath(this, false);\n }\n with(change) {\n if (!change) return this;\n let { scheme, authority, path, query, fragment } = change;\n if (scheme === void 0) scheme = this.scheme;\n else if (scheme === null) scheme = _empty;\n if (authority === void 0) authority = this.authority;\n else if (authority === null) authority = _empty;\n if (path === void 0) path = this.path;\n else if (path === null) path = _empty;\n if (query === void 0) query = this.query;\n else if (query === null) query = _empty;\n if (fragment === void 0) fragment = this.fragment;\n else if (fragment === null) fragment = _empty;\n if (scheme === this.scheme && authority === this.authority && path === this.path && query === this.query && fragment === this.fragment) return this;\n return new Uri(scheme, authority, path, query, fragment);\n }\n /**\n * Creates a new URI from a string, e.g. `http://www.example.com/some/path`,\n * `file:///usr/home`, or `scheme:with/path`.\n *\n * @param value A string which represents an URI (see `URI#toString`).\n */\n static parse(value, _strict = false) {\n const match = _regexp.exec(value);\n if (!match) return new Uri(_empty, _empty, _empty, _empty, _empty);\n return new Uri(match[2] || _empty, percentDecode(match[4] || _empty), percentDecode(match[5] || _empty), percentDecode(match[7] || _empty), percentDecode(match[9] || _empty), _strict);\n }\n /**\n * Creates a new URI from a file system path, e.g. `c:\\my\\files`,\n * `/usr/home`, or `\\\\server\\share\\some\\path`.\n *\n * The *difference* between `URI#parse` and `URI#file` is that the latter treats the argument\n * as path, not as stringified-uri. E.g. `URI.file(path)` is **not the same as**\n * `URI.parse('file://' + path)` because the path might contain characters that are\n * interpreted (# and ?). See the following sample:\n * ```ts\n const good = URI.file('/coding/c#/project1');\n good.scheme === 'file';\n good.path === '/coding/c#/project1';\n good.fragment === '';\n const bad = URI.parse('file://' + '/coding/c#/project1');\n bad.scheme === 'file';\n bad.path === '/coding/c'; // path is now broken\n bad.fragment === '/project1';\n ```\n *\n * @param path A file system path (see `URI#fsPath`)\n */\n static file(path) {\n let authority = _empty;\n if (isWindows) path = path.replace(/\\\\/g, _slash);\n if (path[0] === _slash && path[1] === _slash) {\n const idx = path.indexOf(_slash, 2);\n if (idx === -1) {\n authority = path.substring(2);\n path = _slash;\n } else {\n authority = path.substring(2, idx);\n path = path.substring(idx) || _slash;\n }\n }\n return new Uri(\"file\", authority, path, _empty, _empty);\n }\n /**\n * Creates new URI from uri components.\n *\n * Unless `strict` is `true` the scheme is defaults to be `file`. This function performs\n * validation and should be used for untrusted uri components retrieved from storage,\n * user input, command arguments etc\n */\n static from(components, strict) {\n return new Uri(components.scheme, components.authority, components.path, components.query, components.fragment, strict);\n }\n /**\n * Join a URI path with path fragments and normalizes the resulting path.\n *\n * @param uri The input URI.\n * @param pathFragment The path fragment to add to the URI path.\n * @returns The resulting URI.\n */\n static joinPath(uri, ...pathFragment) {\n if (!uri.path) throw new Error(`[UriError]: cannot call joinPath on URI without path`);\n let newPath;\n if (isWindows && uri.scheme === \"file\") newPath = URI$2.file(win32.join(uriToFsPath(uri, true), ...pathFragment)).path;\n else newPath = posix.join(uri.path, ...pathFragment);\n return uri.with({ path: newPath });\n }\n /**\n * Creates a string representation for this URI. It's guaranteed that calling\n * `URI.parse` with the result of this function creates an URI which is equal\n * to this URI.\n *\n * * The result shall *not* be used for display purposes but for externalization or transport.\n * * The result will be encoded using the percentage encoding and encoding happens mostly\n * ignore the scheme-specific encoding rules.\n *\n * @param skipEncoding Do not encode the result, default is `false`\n */\n toString(skipEncoding = false) {\n return _asFormatted(this, skipEncoding);\n }\n toJSON() {\n return this;\n }\n static revive(data) {\n if (!data) return data;\n else if (data instanceof URI$2) return data;\n else {\n const result = new Uri(data);\n result._formatted = data.external ?? null;\n result._fsPath = data._sep === _pathSepMarker ? data.fsPath ?? null : null;\n return result;\n }\n }\n };\n const _pathSepMarker = isWindows ? 1 : void 0;\n var Uri = class extends URI$2 {\n constructor() {\n super(...arguments);\n this._formatted = null;\n this._fsPath = null;\n }\n get fsPath() {\n if (!this._fsPath) this._fsPath = uriToFsPath(this, false);\n return this._fsPath;\n }\n toString(skipEncoding = false) {\n if (!skipEncoding) {\n if (!this._formatted) this._formatted = _asFormatted(this, false);\n return this._formatted;\n } else return _asFormatted(this, true);\n }\n toJSON() {\n const res = { $mid: 1 };\n if (this._fsPath) {\n res.fsPath = this._fsPath;\n res._sep = _pathSepMarker;\n }\n if (this._formatted) res.external = this._formatted;\n if (this.path) res.path = this.path;\n if (this.scheme) res.scheme = this.scheme;\n if (this.authority) res.authority = this.authority;\n if (this.query) res.query = this.query;\n if (this.fragment) res.fragment = this.fragment;\n return res;\n }\n };\n const encodeTable = {\n [58]: \"%3A\",\n [47]: \"%2F\",\n [63]: \"%3F\",\n [35]: \"%23\",\n [91]: \"%5B\",\n [93]: \"%5D\",\n [64]: \"%40\",\n [33]: \"%21\",\n [36]: \"%24\",\n [38]: \"%26\",\n [39]: \"%27\",\n [40]: \"%28\",\n [41]: \"%29\",\n [42]: \"%2A\",\n [43]: \"%2B\",\n [44]: \"%2C\",\n [59]: \"%3B\",\n [61]: \"%3D\",\n [32]: \"%20\"\n };\n function encodeURIComponentFast(uriComponent, isPath, isAuthority) {\n let res = void 0;\n let nativeEncodePos = -1;\n for (let pos = 0; pos < uriComponent.length; pos++) {\n const code = uriComponent.charCodeAt(pos);\n if (code >= 97 && code <= 122 || code >= 65 && code <= 90 || code >= 48 && code <= 57 || code === 45 || code === 46 || code === 95 || code === 126 || isPath && code === 47 || isAuthority && code === 91 || isAuthority && code === 93 || isAuthority && code === 58) {\n if (nativeEncodePos !== -1) {\n res += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));\n nativeEncodePos = -1;\n }\n if (res !== void 0) res += uriComponent.charAt(pos);\n } else {\n if (res === void 0) res = uriComponent.substr(0, pos);\n const escaped = encodeTable[code];\n if (escaped !== void 0) {\n if (nativeEncodePos !== -1) {\n res += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));\n nativeEncodePos = -1;\n }\n res += escaped;\n } else if (nativeEncodePos === -1) nativeEncodePos = pos;\n }\n }\n if (nativeEncodePos !== -1) res += encodeURIComponent(uriComponent.substring(nativeEncodePos));\n return res !== void 0 ? res : uriComponent;\n }\n function encodeURIComponentMinimal(path) {\n let res = void 0;\n for (let pos = 0; pos < path.length; pos++) {\n const code = path.charCodeAt(pos);\n if (code === 35 || code === 63) {\n if (res === void 0) res = path.substr(0, pos);\n res += encodeTable[code];\n } else if (res !== void 0) res += path[pos];\n }\n return res !== void 0 ? res : path;\n }\n /**\n * Compute `fsPath` for the given uri\n */\n function uriToFsPath(uri, keepDriveLetterCasing) {\n let value;\n if (uri.authority && uri.path.length > 1 && uri.scheme === \"file\") value = `//${uri.authority}${uri.path}`;\n else if (uri.path.charCodeAt(0) === 47 && (uri.path.charCodeAt(1) >= 65 && uri.path.charCodeAt(1) <= 90 || uri.path.charCodeAt(1) >= 97 && uri.path.charCodeAt(1) <= 122) && uri.path.charCodeAt(2) === 58) if (!keepDriveLetterCasing) value = uri.path[1].toLowerCase() + uri.path.substr(2);\n else value = uri.path.substr(1);\n else value = uri.path;\n if (isWindows) value = value.replace(/\\//g, \"\\\\\");\n return value;\n }\n /**\n * Create the external version of a uri\n */\n function _asFormatted(uri, skipEncoding) {\n const encoder = !skipEncoding ? encodeURIComponentFast : encodeURIComponentMinimal;\n let res = \"\";\n let { scheme, authority, path, query, fragment } = uri;\n if (scheme) {\n res += scheme;\n res += \":\";\n }\n if (authority || scheme === \"file\") {\n res += _slash;\n res += _slash;\n }\n if (authority) {\n let idx = authority.indexOf(\"@\");\n if (idx !== -1) {\n const userinfo = authority.substr(0, idx);\n authority = authority.substr(idx + 1);\n idx = userinfo.lastIndexOf(\":\");\n if (idx === -1) res += encoder(userinfo, false, false);\n else {\n res += encoder(userinfo.substr(0, idx), false, false);\n res += \":\";\n res += encoder(userinfo.substr(idx + 1), false, true);\n }\n res += \"@\";\n }\n authority = authority.toLowerCase();\n idx = authority.lastIndexOf(\":\");\n if (idx === -1) res += encoder(authority, false, true);\n else {\n res += encoder(authority.substr(0, idx), false, true);\n res += authority.substr(idx);\n }\n }\n if (path) {\n if (path.length >= 3 && path.charCodeAt(0) === 47 && path.charCodeAt(2) === 58) {\n const code = path.charCodeAt(1);\n if (code >= 65 && code <= 90) path = `/${String.fromCharCode(code + 32)}:${path.substr(3)}`;\n } else if (path.length >= 2 && path.charCodeAt(1) === 58) {\n const code = path.charCodeAt(0);\n if (code >= 65 && code <= 90) path = `${String.fromCharCode(code + 32)}:${path.substr(2)}`;\n }\n res += encoder(path, true, false);\n }\n if (query) {\n res += \"?\";\n res += encoder(query, false, false);\n }\n if (fragment) {\n res += \"#\";\n res += !skipEncoding ? encodeURIComponentFast(fragment, false, false) : fragment;\n }\n return res;\n }\n function decodeURIComponentGraceful(str) {\n try {\n return decodeURIComponent(str);\n } catch {\n if (str.length > 3) return str.substr(0, 3) + decodeURIComponentGraceful(str.substr(3));\n else return str;\n }\n }\n const _rEncodedAsHex = /(%[0-9A-Za-z][0-9A-Za-z])+/g;\n function percentDecode(str) {\n if (!str.match(_rEncodedAsHex)) return str;\n return str.replace(_rEncodedAsHex, (match) => decodeURIComponentGraceful(match));\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/core/selection.js\n /**\n * A selection in the editor.\n * The selection is a range that has an orientation.\n */\n var Selection = class Selection extends Range$1 {\n constructor(selectionStartLineNumber, selectionStartColumn, positionLineNumber, positionColumn) {\n super(selectionStartLineNumber, selectionStartColumn, positionLineNumber, positionColumn);\n this.selectionStartLineNumber = selectionStartLineNumber;\n this.selectionStartColumn = selectionStartColumn;\n this.positionLineNumber = positionLineNumber;\n this.positionColumn = positionColumn;\n }\n /**\n * Transform to a human-readable representation.\n */\n toString() {\n return \"[\" + this.selectionStartLineNumber + \",\" + this.selectionStartColumn + \" -> \" + this.positionLineNumber + \",\" + this.positionColumn + \"]\";\n }\n /**\n * Test if equals other selection.\n */\n equalsSelection(other) {\n return Selection.selectionsEqual(this, other);\n }\n /**\n * Test if the two selections are equal.\n */\n static selectionsEqual(a, b) {\n return a.selectionStartLineNumber === b.selectionStartLineNumber && a.selectionStartColumn === b.selectionStartColumn && a.positionLineNumber === b.positionLineNumber && a.positionColumn === b.positionColumn;\n }\n /**\n * Get directions (LTR or RTL).\n */\n getDirection() {\n if (this.selectionStartLineNumber === this.startLineNumber && this.selectionStartColumn === this.startColumn) return 0;\n return 1;\n }\n /**\n * Create a new selection with a different `positionLineNumber` and `positionColumn`.\n */\n setEndPosition(endLineNumber, endColumn) {\n if (this.getDirection() === 0) return new Selection(this.startLineNumber, this.startColumn, endLineNumber, endColumn);\n return new Selection(endLineNumber, endColumn, this.startLineNumber, this.startColumn);\n }\n /**\n * Get the position at `positionLineNumber` and `positionColumn`.\n */\n getPosition() {\n return new Position$1(this.positionLineNumber, this.positionColumn);\n }\n /**\n * Get the position at the start of the selection.\n */\n getSelectionStart() {\n return new Position$1(this.selectionStartLineNumber, this.selectionStartColumn);\n }\n /**\n * Create a new selection with a different `selectionStartLineNumber` and `selectionStartColumn`.\n */\n setStartPosition(startLineNumber, startColumn) {\n if (this.getDirection() === 0) return new Selection(startLineNumber, startColumn, this.endLineNumber, this.endColumn);\n return new Selection(this.endLineNumber, this.endColumn, startLineNumber, startColumn);\n }\n /**\n * Create a `Selection` from one or two positions\n */\n static fromPositions(start, end = start) {\n return new Selection(start.lineNumber, start.column, end.lineNumber, end.column);\n }\n /**\n * Creates a `Selection` from a range, given a direction.\n */\n static fromRange(range, direction) {\n if (direction === 0) return new Selection(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);\n else return new Selection(range.endLineNumber, range.endColumn, range.startLineNumber, range.startColumn);\n }\n /**\n * Create a `Selection` from an `ISelection`.\n */\n static liftSelection(sel) {\n return new Selection(sel.selectionStartLineNumber, sel.selectionStartColumn, sel.positionLineNumber, sel.positionColumn);\n }\n /**\n * `a` equals `b`.\n */\n static selectionsArrEqual(a, b) {\n if (a && !b || !a && b) return false;\n if (!a && !b) return true;\n if (a.length !== b.length) return false;\n for (let i = 0, len = a.length; i < len; i++) if (!this.selectionsEqual(a[i], b[i])) return false;\n return true;\n }\n /**\n * Test if `obj` is an `ISelection`.\n */\n static isISelection(obj) {\n return !!obj && typeof obj.selectionStartLineNumber === \"number\" && typeof obj.selectionStartColumn === \"number\" && typeof obj.positionLineNumber === \"number\" && typeof obj.positionColumn === \"number\";\n }\n /**\n * Create with a direction.\n */\n static createWithDirection(startLineNumber, startColumn, endLineNumber, endColumn, direction) {\n if (direction === 0) return new Selection(startLineNumber, startColumn, endLineNumber, endColumn);\n return new Selection(endLineNumber, endColumn, startLineNumber, startColumn);\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/codiconsUtil.js\n const _codiconFontCharacters = Object.create(null);\n function register(id, fontCharacter) {\n if (isString$1(fontCharacter)) {\n const val = _codiconFontCharacters[fontCharacter];\n if (val === void 0) throw new Error(`${id} references an unknown codicon: ${fontCharacter}`);\n fontCharacter = val;\n }\n _codiconFontCharacters[id] = fontCharacter;\n return { id };\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/codiconsLibrary.js\n const codiconsLibrary = {\n add: register(\"add\", 6e4),\n plus: register(\"plus\", 6e4),\n gistNew: register(\"gist-new\", 6e4),\n repoCreate: register(\"repo-create\", 6e4),\n lightbulb: register(\"lightbulb\", 60001),\n lightBulb: register(\"light-bulb\", 60001),\n repo: register(\"repo\", 60002),\n repoDelete: register(\"repo-delete\", 60002),\n gistFork: register(\"gist-fork\", 60003),\n repoForked: register(\"repo-forked\", 60003),\n gitPullRequest: register(\"git-pull-request\", 60004),\n gitPullRequestAbandoned: register(\"git-pull-request-abandoned\", 60004),\n recordKeys: register(\"record-keys\", 60005),\n keyboard: register(\"keyboard\", 60005),\n tag: register(\"tag\", 60006),\n gitPullRequestLabel: register(\"git-pull-request-label\", 60006),\n tagAdd: register(\"tag-add\", 60006),\n tagRemove: register(\"tag-remove\", 60006),\n person: register(\"person\", 60007),\n personFollow: register(\"person-follow\", 60007),\n personOutline: register(\"person-outline\", 60007),\n personFilled: register(\"person-filled\", 60007),\n sourceControl: register(\"source-control\", 60008),\n mirror: register(\"mirror\", 60009),\n mirrorPublic: register(\"mirror-public\", 60009),\n star: register(\"star\", 60010),\n starAdd: register(\"star-add\", 60010),\n starDelete: register(\"star-delete\", 60010),\n starEmpty: register(\"star-empty\", 60010),\n comment: register(\"comment\", 60011),\n commentAdd: register(\"comment-add\", 60011),\n alert: register(\"alert\", 60012),\n warning: register(\"warning\", 60012),\n search: register(\"search\", 60013),\n searchSave: register(\"search-save\", 60013),\n logOut: register(\"log-out\", 60014),\n signOut: register(\"sign-out\", 60014),\n logIn: register(\"log-in\", 60015),\n signIn: register(\"sign-in\", 60015),\n eye: register(\"eye\", 60016),\n eyeUnwatch: register(\"eye-unwatch\", 60016),\n eyeWatch: register(\"eye-watch\", 60016),\n circleFilled: register(\"circle-filled\", 60017),\n primitiveDot: register(\"primitive-dot\", 60017),\n closeDirty: register(\"close-dirty\", 60017),\n debugBreakpoint: register(\"debug-breakpoint\", 60017),\n debugBreakpointDisabled: register(\"debug-breakpoint-disabled\", 60017),\n debugHint: register(\"debug-hint\", 60017),\n terminalDecorationSuccess: register(\"terminal-decoration-success\", 60017),\n primitiveSquare: register(\"primitive-square\", 60018),\n edit: register(\"edit\", 60019),\n pencil: register(\"pencil\", 60019),\n info: register(\"info\", 60020),\n issueOpened: register(\"issue-opened\", 60020),\n gistPrivate: register(\"gist-private\", 60021),\n gitForkPrivate: register(\"git-fork-private\", 60021),\n lock: register(\"lock\", 60021),\n mirrorPrivate: register(\"mirror-private\", 60021),\n close: register(\"close\", 60022),\n removeClose: register(\"remove-close\", 60022),\n x: register(\"x\", 60022),\n repoSync: register(\"repo-sync\", 60023),\n sync: register(\"sync\", 60023),\n clone: register(\"clone\", 60024),\n desktopDownload: register(\"desktop-download\", 60024),\n beaker: register(\"beaker\", 60025),\n microscope: register(\"microscope\", 60025),\n vm: register(\"vm\", 60026),\n deviceDesktop: register(\"device-desktop\", 60026),\n file: register(\"file\", 60027),\n more: register(\"more\", 60028),\n ellipsis: register(\"ellipsis\", 60028),\n kebabHorizontal: register(\"kebab-horizontal\", 60028),\n mailReply: register(\"mail-reply\", 60029),\n reply: register(\"reply\", 60029),\n organization: register(\"organization\", 60030),\n organizationFilled: register(\"organization-filled\", 60030),\n organizationOutline: register(\"organization-outline\", 60030),\n newFile: register(\"new-file\", 60031),\n fileAdd: register(\"file-add\", 60031),\n newFolder: register(\"new-folder\", 60032),\n fileDirectoryCreate: register(\"file-directory-create\", 60032),\n trash: register(\"trash\", 60033),\n trashcan: register(\"trashcan\", 60033),\n history: register(\"history\", 60034),\n clock: register(\"clock\", 60034),\n folder: register(\"folder\", 60035),\n fileDirectory: register(\"file-directory\", 60035),\n symbolFolder: register(\"symbol-folder\", 60035),\n logoGithub: register(\"logo-github\", 60036),\n markGithub: register(\"mark-github\", 60036),\n github: register(\"github\", 60036),\n terminal: register(\"terminal\", 60037),\n console: register(\"console\", 60037),\n repl: register(\"repl\", 60037),\n zap: register(\"zap\", 60038),\n symbolEvent: register(\"symbol-event\", 60038),\n error: register(\"error\", 60039),\n stop: register(\"stop\", 60039),\n variable: register(\"variable\", 60040),\n symbolVariable: register(\"symbol-variable\", 60040),\n array: register(\"array\", 60042),\n symbolArray: register(\"symbol-array\", 60042),\n symbolModule: register(\"symbol-module\", 60043),\n symbolPackage: register(\"symbol-package\", 60043),\n symbolNamespace: register(\"symbol-namespace\", 60043),\n symbolObject: register(\"symbol-object\", 60043),\n symbolMethod: register(\"symbol-method\", 60044),\n symbolFunction: register(\"symbol-function\", 60044),\n symbolConstructor: register(\"symbol-constructor\", 60044),\n symbolBoolean: register(\"symbol-boolean\", 60047),\n symbolNull: register(\"symbol-null\", 60047),\n symbolNumeric: register(\"symbol-numeric\", 60048),\n symbolNumber: register(\"symbol-number\", 60048),\n symbolStructure: register(\"symbol-structure\", 60049),\n symbolStruct: register(\"symbol-struct\", 60049),\n symbolParameter: register(\"symbol-parameter\", 60050),\n symbolTypeParameter: register(\"symbol-type-parameter\", 60050),\n symbolKey: register(\"symbol-key\", 60051),\n symbolText: register(\"symbol-text\", 60051),\n symbolReference: register(\"symbol-reference\", 60052),\n goToFile: register(\"go-to-file\", 60052),\n symbolEnum: register(\"symbol-enum\", 60053),\n symbolValue: register(\"symbol-value\", 60053),\n symbolRuler: register(\"symbol-ruler\", 60054),\n symbolUnit: register(\"symbol-unit\", 60054),\n activateBreakpoints: register(\"activate-breakpoints\", 60055),\n archive: register(\"archive\", 60056),\n arrowBoth: register(\"arrow-both\", 60057),\n arrowDown: register(\"arrow-down\", 60058),\n arrowLeft: register(\"arrow-left\", 60059),\n arrowRight: register(\"arrow-right\", 60060),\n arrowSmallDown: register(\"arrow-small-down\", 60061),\n arrowSmallLeft: register(\"arrow-small-left\", 60062),\n arrowSmallRight: register(\"arrow-small-right\", 60063),\n arrowSmallUp: register(\"arrow-small-up\", 60064),\n arrowUp: register(\"arrow-up\", 60065),\n bell: register(\"bell\", 60066),\n bold: register(\"bold\", 60067),\n book: register(\"book\", 60068),\n bookmark: register(\"bookmark\", 60069),\n debugBreakpointConditionalUnverified: register(\"debug-breakpoint-conditional-unverified\", 60070),\n debugBreakpointConditional: register(\"debug-breakpoint-conditional\", 60071),\n debugBreakpointConditionalDisabled: register(\"debug-breakpoint-conditional-disabled\", 60071),\n debugBreakpointDataUnverified: register(\"debug-breakpoint-data-unverified\", 60072),\n debugBreakpointData: register(\"debug-breakpoint-data\", 60073),\n debugBreakpointDataDisabled: register(\"debug-breakpoint-data-disabled\", 60073),\n debugBreakpointLogUnverified: register(\"debug-breakpoint-log-unverified\", 60074),\n debugBreakpointLog: register(\"debug-breakpoint-log\", 60075),\n debugBreakpointLogDisabled: register(\"debug-breakpoint-log-disabled\", 60075),\n briefcase: register(\"briefcase\", 60076),\n broadcast: register(\"broadcast\", 60077),\n browser: register(\"browser\", 60078),\n bug: register(\"bug\", 60079),\n calendar: register(\"calendar\", 60080),\n caseSensitive: register(\"case-sensitive\", 60081),\n check: register(\"check\", 60082),\n checklist: register(\"checklist\", 60083),\n chevronDown: register(\"chevron-down\", 60084),\n chevronLeft: register(\"chevron-left\", 60085),\n chevronRight: register(\"chevron-right\", 60086),\n chevronUp: register(\"chevron-up\", 60087),\n chromeClose: register(\"chrome-close\", 60088),\n chromeMaximize: register(\"chrome-maximize\", 60089),\n chromeMinimize: register(\"chrome-minimize\", 60090),\n chromeRestore: register(\"chrome-restore\", 60091),\n circleOutline: register(\"circle-outline\", 60092),\n circle: register(\"circle\", 60092),\n debugBreakpointUnverified: register(\"debug-breakpoint-unverified\", 60092),\n terminalDecorationIncomplete: register(\"terminal-decoration-incomplete\", 60092),\n circleSlash: register(\"circle-slash\", 60093),\n circuitBoard: register(\"circuit-board\", 60094),\n clearAll: register(\"clear-all\", 60095),\n clippy: register(\"clippy\", 60096),\n closeAll: register(\"close-all\", 60097),\n cloudDownload: register(\"cloud-download\", 60098),\n cloudUpload: register(\"cloud-upload\", 60099),\n code: register(\"code\", 60100),\n collapseAll: register(\"collapse-all\", 60101),\n colorMode: register(\"color-mode\", 60102),\n commentDiscussion: register(\"comment-discussion\", 60103),\n creditCard: register(\"credit-card\", 60105),\n dash: register(\"dash\", 60108),\n dashboard: register(\"dashboard\", 60109),\n database: register(\"database\", 60110),\n debugContinue: register(\"debug-continue\", 60111),\n debugDisconnect: register(\"debug-disconnect\", 60112),\n debugPause: register(\"debug-pause\", 60113),\n debugRestart: register(\"debug-restart\", 60114),\n debugStart: register(\"debug-start\", 60115),\n debugStepInto: register(\"debug-step-into\", 60116),\n debugStepOut: register(\"debug-step-out\", 60117),\n debugStepOver: register(\"debug-step-over\", 60118),\n debugStop: register(\"debug-stop\", 60119),\n debug: register(\"debug\", 60120),\n deviceCameraVideo: register(\"device-camera-video\", 60121),\n deviceCamera: register(\"device-camera\", 60122),\n deviceMobile: register(\"device-mobile\", 60123),\n diffAdded: register(\"diff-added\", 60124),\n diffIgnored: register(\"diff-ignored\", 60125),\n diffModified: register(\"diff-modified\", 60126),\n diffRemoved: register(\"diff-removed\", 60127),\n diffRenamed: register(\"diff-renamed\", 60128),\n diff: register(\"diff\", 60129),\n diffSidebyside: register(\"diff-sidebyside\", 60129),\n discard: register(\"discard\", 60130),\n editorLayout: register(\"editor-layout\", 60131),\n emptyWindow: register(\"empty-window\", 60132),\n exclude: register(\"exclude\", 60133),\n extensions: register(\"extensions\", 60134),\n eyeClosed: register(\"eye-closed\", 60135),\n fileBinary: register(\"file-binary\", 60136),\n fileCode: register(\"file-code\", 60137),\n fileMedia: register(\"file-media\", 60138),\n filePdf: register(\"file-pdf\", 60139),\n fileSubmodule: register(\"file-submodule\", 60140),\n fileSymlinkDirectory: register(\"file-symlink-directory\", 60141),\n fileSymlinkFile: register(\"file-symlink-file\", 60142),\n fileZip: register(\"file-zip\", 60143),\n files: register(\"files\", 60144),\n filter: register(\"filter\", 60145),\n flame: register(\"flame\", 60146),\n foldDown: register(\"fold-down\", 60147),\n foldUp: register(\"fold-up\", 60148),\n fold: register(\"fold\", 60149),\n folderActive: register(\"folder-active\", 60150),\n folderOpened: register(\"folder-opened\", 60151),\n gear: register(\"gear\", 60152),\n gift: register(\"gift\", 60153),\n gistSecret: register(\"gist-secret\", 60154),\n gist: register(\"gist\", 60155),\n gitCommit: register(\"git-commit\", 60156),\n gitCompare: register(\"git-compare\", 60157),\n compareChanges: register(\"compare-changes\", 60157),\n gitMerge: register(\"git-merge\", 60158),\n githubAction: register(\"github-action\", 60159),\n githubAlt: register(\"github-alt\", 60160),\n globe: register(\"globe\", 60161),\n grabber: register(\"grabber\", 60162),\n graph: register(\"graph\", 60163),\n gripper: register(\"gripper\", 60164),\n heart: register(\"heart\", 60165),\n home: register(\"home\", 60166),\n horizontalRule: register(\"horizontal-rule\", 60167),\n hubot: register(\"hubot\", 60168),\n inbox: register(\"inbox\", 60169),\n issueReopened: register(\"issue-reopened\", 60171),\n issues: register(\"issues\", 60172),\n italic: register(\"italic\", 60173),\n jersey: register(\"jersey\", 60174),\n json: register(\"json\", 60175),\n kebabVertical: register(\"kebab-vertical\", 60176),\n key: register(\"key\", 60177),\n law: register(\"law\", 60178),\n lightbulbAutofix: register(\"lightbulb-autofix\", 60179),\n linkExternal: register(\"link-external\", 60180),\n link: register(\"link\", 60181),\n listOrdered: register(\"list-ordered\", 60182),\n listUnordered: register(\"list-unordered\", 60183),\n liveShare: register(\"live-share\", 60184),\n loading: register(\"loading\", 60185),\n location: register(\"location\", 60186),\n mailRead: register(\"mail-read\", 60187),\n mail: register(\"mail\", 60188),\n markdown: register(\"markdown\", 60189),\n megaphone: register(\"megaphone\", 60190),\n mention: register(\"mention\", 60191),\n milestone: register(\"milestone\", 60192),\n gitPullRequestMilestone: register(\"git-pull-request-milestone\", 60192),\n mortarBoard: register(\"mortar-board\", 60193),\n move: register(\"move\", 60194),\n multipleWindows: register(\"multiple-windows\", 60195),\n mute: register(\"mute\", 60196),\n noNewline: register(\"no-newline\", 60197),\n note: register(\"note\", 60198),\n octoface: register(\"octoface\", 60199),\n openPreview: register(\"open-preview\", 60200),\n package: register(\"package\", 60201),\n paintcan: register(\"paintcan\", 60202),\n pin: register(\"pin\", 60203),\n play: register(\"play\", 60204),\n run: register(\"run\", 60204),\n plug: register(\"plug\", 60205),\n preserveCase: register(\"preserve-case\", 60206),\n preview: register(\"preview\", 60207),\n project: register(\"project\", 60208),\n pulse: register(\"pulse\", 60209),\n question: register(\"question\", 60210),\n quote: register(\"quote\", 60211),\n radioTower: register(\"radio-tower\", 60212),\n reactions: register(\"reactions\", 60213),\n references: register(\"references\", 60214),\n refresh: register(\"refresh\", 60215),\n regex: register(\"regex\", 60216),\n remoteExplorer: register(\"remote-explorer\", 60217),\n remote: register(\"remote\", 60218),\n remove: register(\"remove\", 60219),\n replaceAll: register(\"replace-all\", 60220),\n replace: register(\"replace\", 60221),\n repoClone: register(\"repo-clone\", 60222),\n repoForcePush: register(\"repo-force-push\", 60223),\n repoPull: register(\"repo-pull\", 60224),\n repoPush: register(\"repo-push\", 60225),\n report: register(\"report\", 60226),\n requestChanges: register(\"request-changes\", 60227),\n rocket: register(\"rocket\", 60228),\n rootFolderOpened: register(\"root-folder-opened\", 60229),\n rootFolder: register(\"root-folder\", 60230),\n rss: register(\"rss\", 60231),\n ruby: register(\"ruby\", 60232),\n saveAll: register(\"save-all\", 60233),\n saveAs: register(\"save-as\", 60234),\n save: register(\"save\", 60235),\n screenFull: register(\"screen-full\", 60236),\n screenNormal: register(\"screen-normal\", 60237),\n searchStop: register(\"search-stop\", 60238),\n server: register(\"server\", 60240),\n settingsGear: register(\"settings-gear\", 60241),\n settings: register(\"settings\", 60242),\n shield: register(\"shield\", 60243),\n smiley: register(\"smiley\", 60244),\n sortPrecedence: register(\"sort-precedence\", 60245),\n splitHorizontal: register(\"split-horizontal\", 60246),\n splitVertical: register(\"split-vertical\", 60247),\n squirrel: register(\"squirrel\", 60248),\n starFull: register(\"star-full\", 60249),\n starHalf: register(\"star-half\", 60250),\n symbolClass: register(\"symbol-class\", 60251),\n symbolColor: register(\"symbol-color\", 60252),\n symbolConstant: register(\"symbol-constant\", 60253),\n symbolEnumMember: register(\"symbol-enum-member\", 60254),\n symbolField: register(\"symbol-field\", 60255),\n symbolFile: register(\"symbol-file\", 60256),\n symbolInterface: register(\"symbol-interface\", 60257),\n symbolKeyword: register(\"symbol-keyword\", 60258),\n symbolMisc: register(\"symbol-misc\", 60259),\n symbolOperator: register(\"symbol-operator\", 60260),\n symbolProperty: register(\"symbol-property\", 60261),\n wrench: register(\"wrench\", 60261),\n wrenchSubaction: register(\"wrench-subaction\", 60261),\n symbolSnippet: register(\"symbol-snippet\", 60262),\n tasklist: register(\"tasklist\", 60263),\n telescope: register(\"telescope\", 60264),\n textSize: register(\"text-size\", 60265),\n threeBars: register(\"three-bars\", 60266),\n thumbsdown: register(\"thumbsdown\", 60267),\n thumbsup: register(\"thumbsup\", 60268),\n tools: register(\"tools\", 60269),\n triangleDown: register(\"triangle-down\", 60270),\n triangleLeft: register(\"triangle-left\", 60271),\n triangleRight: register(\"triangle-right\", 60272),\n triangleUp: register(\"triangle-up\", 60273),\n twitter: register(\"twitter\", 60274),\n unfold: register(\"unfold\", 60275),\n unlock: register(\"unlock\", 60276),\n unmute: register(\"unmute\", 60277),\n unverified: register(\"unverified\", 60278),\n verified: register(\"verified\", 60279),\n versions: register(\"versions\", 60280),\n vmActive: register(\"vm-active\", 60281),\n vmOutline: register(\"vm-outline\", 60282),\n vmRunning: register(\"vm-running\", 60283),\n watch: register(\"watch\", 60284),\n whitespace: register(\"whitespace\", 60285),\n wholeWord: register(\"whole-word\", 60286),\n window: register(\"window\", 60287),\n wordWrap: register(\"word-wrap\", 60288),\n zoomIn: register(\"zoom-in\", 60289),\n zoomOut: register(\"zoom-out\", 60290),\n listFilter: register(\"list-filter\", 60291),\n listFlat: register(\"list-flat\", 60292),\n listSelection: register(\"list-selection\", 60293),\n selection: register(\"selection\", 60293),\n listTree: register(\"list-tree\", 60294),\n debugBreakpointFunctionUnverified: register(\"debug-breakpoint-function-unverified\", 60295),\n debugBreakpointFunction: register(\"debug-breakpoint-function\", 60296),\n debugBreakpointFunctionDisabled: register(\"debug-breakpoint-function-disabled\", 60296),\n debugStackframeActive: register(\"debug-stackframe-active\", 60297),\n circleSmallFilled: register(\"circle-small-filled\", 60298),\n debugStackframeDot: register(\"debug-stackframe-dot\", 60298),\n terminalDecorationMark: register(\"terminal-decoration-mark\", 60298),\n debugStackframe: register(\"debug-stackframe\", 60299),\n debugStackframeFocused: register(\"debug-stackframe-focused\", 60299),\n debugBreakpointUnsupported: register(\"debug-breakpoint-unsupported\", 60300),\n symbolString: register(\"symbol-string\", 60301),\n debugReverseContinue: register(\"debug-reverse-continue\", 60302),\n debugStepBack: register(\"debug-step-back\", 60303),\n debugRestartFrame: register(\"debug-restart-frame\", 60304),\n debugAlt: register(\"debug-alt\", 60305),\n callIncoming: register(\"call-incoming\", 60306),\n callOutgoing: register(\"call-outgoing\", 60307),\n menu: register(\"menu\", 60308),\n expandAll: register(\"expand-all\", 60309),\n feedback: register(\"feedback\", 60310),\n gitPullRequestReviewer: register(\"git-pull-request-reviewer\", 60310),\n groupByRefType: register(\"group-by-ref-type\", 60311),\n ungroupByRefType: register(\"ungroup-by-ref-type\", 60312),\n account: register(\"account\", 60313),\n gitPullRequestAssignee: register(\"git-pull-request-assignee\", 60313),\n bellDot: register(\"bell-dot\", 60314),\n debugConsole: register(\"debug-console\", 60315),\n library: register(\"library\", 60316),\n output: register(\"output\", 60317),\n runAll: register(\"run-all\", 60318),\n syncIgnored: register(\"sync-ignored\", 60319),\n pinned: register(\"pinned\", 60320),\n githubInverted: register(\"github-inverted\", 60321),\n serverProcess: register(\"server-process\", 60322),\n serverEnvironment: register(\"server-environment\", 60323),\n pass: register(\"pass\", 60324),\n issueClosed: register(\"issue-closed\", 60324),\n stopCircle: register(\"stop-circle\", 60325),\n playCircle: register(\"play-circle\", 60326),\n record: register(\"record\", 60327),\n debugAltSmall: register(\"debug-alt-small\", 60328),\n vmConnect: register(\"vm-connect\", 60329),\n cloud: register(\"cloud\", 60330),\n merge: register(\"merge\", 60331),\n export: register(\"export\", 60332),\n graphLeft: register(\"graph-left\", 60333),\n magnet: register(\"magnet\", 60334),\n notebook: register(\"notebook\", 60335),\n redo: register(\"redo\", 60336),\n checkAll: register(\"check-all\", 60337),\n pinnedDirty: register(\"pinned-dirty\", 60338),\n passFilled: register(\"pass-filled\", 60339),\n circleLargeFilled: register(\"circle-large-filled\", 60340),\n circleLarge: register(\"circle-large\", 60341),\n circleLargeOutline: register(\"circle-large-outline\", 60341),\n combine: register(\"combine\", 60342),\n gather: register(\"gather\", 60342),\n table: register(\"table\", 60343),\n variableGroup: register(\"variable-group\", 60344),\n typeHierarchy: register(\"type-hierarchy\", 60345),\n typeHierarchySub: register(\"type-hierarchy-sub\", 60346),\n typeHierarchySuper: register(\"type-hierarchy-super\", 60347),\n gitPullRequestCreate: register(\"git-pull-request-create\", 60348),\n runAbove: register(\"run-above\", 60349),\n runBelow: register(\"run-below\", 60350),\n notebookTemplate: register(\"notebook-template\", 60351),\n debugRerun: register(\"debug-rerun\", 60352),\n workspaceTrusted: register(\"workspace-trusted\", 60353),\n workspaceUntrusted: register(\"workspace-untrusted\", 60354),\n workspaceUnknown: register(\"workspace-unknown\", 60355),\n terminalCmd: register(\"terminal-cmd\", 60356),\n terminalDebian: register(\"terminal-debian\", 60357),\n terminalLinux: register(\"terminal-linux\", 60358),\n terminalPowershell: register(\"terminal-powershell\", 60359),\n terminalTmux: register(\"terminal-tmux\", 60360),\n terminalUbuntu: register(\"terminal-ubuntu\", 60361),\n terminalBash: register(\"terminal-bash\", 60362),\n arrowSwap: register(\"arrow-swap\", 60363),\n copy: register(\"copy\", 60364),\n personAdd: register(\"person-add\", 60365),\n filterFilled: register(\"filter-filled\", 60366),\n wand: register(\"wand\", 60367),\n debugLineByLine: register(\"debug-line-by-line\", 60368),\n inspect: register(\"inspect\", 60369),\n layers: register(\"layers\", 60370),\n layersDot: register(\"layers-dot\", 60371),\n layersActive: register(\"layers-active\", 60372),\n compass: register(\"compass\", 60373),\n compassDot: register(\"compass-dot\", 60374),\n compassActive: register(\"compass-active\", 60375),\n azure: register(\"azure\", 60376),\n issueDraft: register(\"issue-draft\", 60377),\n gitPullRequestClosed: register(\"git-pull-request-closed\", 60378),\n gitPullRequestDraft: register(\"git-pull-request-draft\", 60379),\n debugAll: register(\"debug-all\", 60380),\n debugCoverage: register(\"debug-coverage\", 60381),\n runErrors: register(\"run-errors\", 60382),\n folderLibrary: register(\"folder-library\", 60383),\n debugContinueSmall: register(\"debug-continue-small\", 60384),\n beakerStop: register(\"beaker-stop\", 60385),\n graphLine: register(\"graph-line\", 60386),\n graphScatter: register(\"graph-scatter\", 60387),\n pieChart: register(\"pie-chart\", 60388),\n bracket: register(\"bracket\", 60175),\n bracketDot: register(\"bracket-dot\", 60389),\n bracketError: register(\"bracket-error\", 60390),\n lockSmall: register(\"lock-small\", 60391),\n azureDevops: register(\"azure-devops\", 60392),\n verifiedFilled: register(\"verified-filled\", 60393),\n newline: register(\"newline\", 60394),\n layout: register(\"layout\", 60395),\n layoutActivitybarLeft: register(\"layout-activitybar-left\", 60396),\n layoutActivitybarRight: register(\"layout-activitybar-right\", 60397),\n layoutPanelLeft: register(\"layout-panel-left\", 60398),\n layoutPanelCenter: register(\"layout-panel-center\", 60399),\n layoutPanelJustify: register(\"layout-panel-justify\", 60400),\n layoutPanelRight: register(\"layout-panel-right\", 60401),\n layoutPanel: register(\"layout-panel\", 60402),\n layoutSidebarLeft: register(\"layout-sidebar-left\", 60403),\n layoutSidebarRight: register(\"layout-sidebar-right\", 60404),\n layoutStatusbar: register(\"layout-statusbar\", 60405),\n layoutMenubar: register(\"layout-menubar\", 60406),\n layoutCentered: register(\"layout-centered\", 60407),\n target: register(\"target\", 60408),\n indent: register(\"indent\", 60409),\n recordSmall: register(\"record-small\", 60410),\n errorSmall: register(\"error-small\", 60411),\n terminalDecorationError: register(\"terminal-decoration-error\", 60411),\n arrowCircleDown: register(\"arrow-circle-down\", 60412),\n arrowCircleLeft: register(\"arrow-circle-left\", 60413),\n arrowCircleRight: register(\"arrow-circle-right\", 60414),\n arrowCircleUp: register(\"arrow-circle-up\", 60415),\n layoutSidebarRightOff: register(\"layout-sidebar-right-off\", 60416),\n layoutPanelOff: register(\"layout-panel-off\", 60417),\n layoutSidebarLeftOff: register(\"layout-sidebar-left-off\", 60418),\n blank: register(\"blank\", 60419),\n heartFilled: register(\"heart-filled\", 60420),\n map: register(\"map\", 60421),\n mapHorizontal: register(\"map-horizontal\", 60421),\n foldHorizontal: register(\"fold-horizontal\", 60421),\n mapFilled: register(\"map-filled\", 60422),\n mapHorizontalFilled: register(\"map-horizontal-filled\", 60422),\n foldHorizontalFilled: register(\"fold-horizontal-filled\", 60422),\n circleSmall: register(\"circle-small\", 60423),\n bellSlash: register(\"bell-slash\", 60424),\n bellSlashDot: register(\"bell-slash-dot\", 60425),\n commentUnresolved: register(\"comment-unresolved\", 60426),\n gitPullRequestGoToChanges: register(\"git-pull-request-go-to-changes\", 60427),\n gitPullRequestNewChanges: register(\"git-pull-request-new-changes\", 60428),\n searchFuzzy: register(\"search-fuzzy\", 60429),\n commentDraft: register(\"comment-draft\", 60430),\n send: register(\"send\", 60431),\n sparkle: register(\"sparkle\", 60432),\n insert: register(\"insert\", 60433),\n mic: register(\"mic\", 60434),\n thumbsdownFilled: register(\"thumbsdown-filled\", 60435),\n thumbsupFilled: register(\"thumbsup-filled\", 60436),\n coffee: register(\"coffee\", 60437),\n snake: register(\"snake\", 60438),\n game: register(\"game\", 60439),\n vr: register(\"vr\", 60440),\n chip: register(\"chip\", 60441),\n piano: register(\"piano\", 60442),\n music: register(\"music\", 60443),\n micFilled: register(\"mic-filled\", 60444),\n repoFetch: register(\"repo-fetch\", 60445),\n copilot: register(\"copilot\", 60446),\n lightbulbSparkle: register(\"lightbulb-sparkle\", 60447),\n robot: register(\"robot\", 60448),\n sparkleFilled: register(\"sparkle-filled\", 60449),\n diffSingle: register(\"diff-single\", 60450),\n diffMultiple: register(\"diff-multiple\", 60451),\n surroundWith: register(\"surround-with\", 60452),\n share: register(\"share\", 60453),\n gitStash: register(\"git-stash\", 60454),\n gitStashApply: register(\"git-stash-apply\", 60455),\n gitStashPop: register(\"git-stash-pop\", 60456),\n vscode: register(\"vscode\", 60457),\n vscodeInsiders: register(\"vscode-insiders\", 60458),\n codeOss: register(\"code-oss\", 60459),\n runCoverage: register(\"run-coverage\", 60460),\n runAllCoverage: register(\"run-all-coverage\", 60461),\n coverage: register(\"coverage\", 60462),\n githubProject: register(\"github-project\", 60463),\n mapVertical: register(\"map-vertical\", 60464),\n foldVertical: register(\"fold-vertical\", 60464),\n mapVerticalFilled: register(\"map-vertical-filled\", 60465),\n foldVerticalFilled: register(\"fold-vertical-filled\", 60465),\n goToSearch: register(\"go-to-search\", 60466),\n percentage: register(\"percentage\", 60467),\n sortPercentage: register(\"sort-percentage\", 60467),\n attach: register(\"attach\", 60468),\n goToEditingSession: register(\"go-to-editing-session\", 60469),\n editSession: register(\"edit-session\", 60470),\n codeReview: register(\"code-review\", 60471),\n copilotWarning: register(\"copilot-warning\", 60472),\n python: register(\"python\", 60473),\n copilotLarge: register(\"copilot-large\", 60474),\n copilotWarningLarge: register(\"copilot-warning-large\", 60475),\n keyboardTab: register(\"keyboard-tab\", 60476),\n copilotBlocked: register(\"copilot-blocked\", 60477),\n copilotNotConnected: register(\"copilot-not-connected\", 60478),\n flag: register(\"flag\", 60479),\n lightbulbEmpty: register(\"lightbulb-empty\", 60480),\n symbolMethodArrow: register(\"symbol-method-arrow\", 60481),\n copilotUnavailable: register(\"copilot-unavailable\", 60482),\n repoPinned: register(\"repo-pinned\", 60483),\n keyboardTabAbove: register(\"keyboard-tab-above\", 60484),\n keyboardTabBelow: register(\"keyboard-tab-below\", 60485),\n gitPullRequestDone: register(\"git-pull-request-done\", 60486),\n mcp: register(\"mcp\", 60487),\n extensionsLarge: register(\"extensions-large\", 60488),\n layoutPanelDock: register(\"layout-panel-dock\", 60489),\n layoutSidebarLeftDock: register(\"layout-sidebar-left-dock\", 60490),\n layoutSidebarRightDock: register(\"layout-sidebar-right-dock\", 60491),\n copilotInProgress: register(\"copilot-in-progress\", 60492),\n copilotError: register(\"copilot-error\", 60493),\n copilotSuccess: register(\"copilot-success\", 60494),\n chatSparkle: register(\"chat-sparkle\", 60495),\n searchSparkle: register(\"search-sparkle\", 60496),\n editSparkle: register(\"edit-sparkle\", 60497),\n copilotSnooze: register(\"copilot-snooze\", 60498),\n sendToRemoteAgent: register(\"send-to-remote-agent\", 60499),\n commentDiscussionSparkle: register(\"comment-discussion-sparkle\", 60500),\n chatSparkleWarning: register(\"chat-sparkle-warning\", 60501),\n chatSparkleError: register(\"chat-sparkle-error\", 60502),\n collection: register(\"collection\", 60503),\n newCollection: register(\"new-collection\", 60504),\n thinking: register(\"thinking\", 60505),\n build: register(\"build\", 60506),\n commentDiscussionQuote: register(\"comment-discussion-quote\", 60507),\n cursor: register(\"cursor\", 60508),\n eraser: register(\"eraser\", 60509),\n fileText: register(\"file-text\", 60510),\n gitLens: register(\"git-lens\", 60511),\n quotes: register(\"quotes\", 60512),\n rename: register(\"rename\", 60513),\n runWithDeps: register(\"run-with-deps\", 60514),\n debugConnected: register(\"debug-connected\", 60515),\n strikethrough: register(\"strikethrough\", 60516),\n openInProduct: register(\"open-in-product\", 60517),\n indexZero: register(\"index-zero\", 60518),\n agent: register(\"agent\", 60519),\n editCode: register(\"edit-code\", 60520),\n repoSelected: register(\"repo-selected\", 60521),\n skip: register(\"skip\", 60522),\n mergeInto: register(\"merge-into\", 60523),\n gitBranchChanges: register(\"git-branch-changes\", 60524),\n gitBranchStagedChanges: register(\"git-branch-staged-changes\", 60525),\n gitBranchConflicts: register(\"git-branch-conflicts\", 60526),\n gitBranch: register(\"git-branch\", 60527),\n gitBranchCreate: register(\"git-branch-create\", 60527),\n gitBranchDelete: register(\"git-branch-delete\", 60527),\n searchLarge: register(\"search-large\", 60528),\n terminalGitBash: register(\"terminal-git-bash\", 60529)\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/codicons.js\n /**\n * Derived icons, that could become separate icons.\n * These mappings should be moved into the mapping file in the vscode-codicons repo at some point.\n */\n const codiconsDerived = {\n dialogError: register(\"dialog-error\", \"error\"),\n dialogWarning: register(\"dialog-warning\", \"warning\"),\n dialogInfo: register(\"dialog-info\", \"info\"),\n dialogClose: register(\"dialog-close\", \"close\"),\n treeItemExpanded: register(\"tree-item-expanded\", \"chevron-down\"),\n treeFilterOnTypeOn: register(\"tree-filter-on-type-on\", \"list-filter\"),\n treeFilterOnTypeOff: register(\"tree-filter-on-type-off\", \"list-selection\"),\n treeFilterClear: register(\"tree-filter-clear\", \"close\"),\n treeItemLoading: register(\"tree-item-loading\", \"loading\"),\n menuSelection: register(\"menu-selection\", \"check\"),\n menuSubmenu: register(\"menu-submenu\", \"chevron-right\"),\n menuBarMore: register(\"menubar-more\", \"more\"),\n scrollbarButtonLeft: register(\"scrollbar-button-left\", \"triangle-left\"),\n scrollbarButtonRight: register(\"scrollbar-button-right\", \"triangle-right\"),\n scrollbarButtonUp: register(\"scrollbar-button-up\", \"triangle-up\"),\n scrollbarButtonDown: register(\"scrollbar-button-down\", \"triangle-down\"),\n toolBarMore: register(\"toolbar-more\", \"more\"),\n quickInputBack: register(\"quick-input-back\", \"arrow-left\"),\n dropDownButton: register(\"drop-down-button\", 60084),\n symbolCustomColor: register(\"symbol-customcolor\", 60252),\n exportIcon: register(\"export\", 60332),\n workspaceUnspecified: register(\"workspace-unspecified\", 60355),\n newLine: register(\"newline\", 60394),\n thumbsDownFilled: register(\"thumbsdown-filled\", 60435),\n thumbsUpFilled: register(\"thumbsup-filled\", 60436),\n gitFetch: register(\"git-fetch\", 60445),\n lightbulbSparkleAutofix: register(\"lightbulb-sparkle-autofix\", 60447),\n debugBreakpointPending: register(\"debug-breakpoint-pending\", 60377)\n };\n /**\n * The Codicon library is a set of default icons that are built-in in VS Code.\n *\n * In the product (outside of base) Codicons should only be used as defaults. In order to have all icons in VS Code\n * themeable, component should define new, UI component specific icons using `iconRegistry.registerIcon`.\n * In that call a Codicon can be named as default.\n */\n const Codicon = {\n ...codiconsLibrary,\n ...codiconsDerived\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/tokenizationRegistry.js\n var TokenizationRegistry$1 = class {\n constructor() {\n this._tokenizationSupports = /* @__PURE__ */ new Map();\n this._factories = /* @__PURE__ */ new Map();\n this._onDidChange = new Emitter();\n this.onDidChange = this._onDidChange.event;\n this._colorMap = null;\n }\n handleChange(languageIds) {\n this._onDidChange.fire({\n changedLanguages: languageIds,\n changedColorMap: false\n });\n }\n register(languageId, support) {\n this._tokenizationSupports.set(languageId, support);\n this.handleChange([languageId]);\n return toDisposable(() => {\n if (this._tokenizationSupports.get(languageId) !== support) return;\n this._tokenizationSupports.delete(languageId);\n this.handleChange([languageId]);\n });\n }\n get(languageId) {\n return this._tokenizationSupports.get(languageId) || null;\n }\n registerFactory(languageId, factory) {\n this._factories.get(languageId)?.dispose();\n const myData = new TokenizationSupportFactoryData(this, languageId, factory);\n this._factories.set(languageId, myData);\n return toDisposable(() => {\n const v = this._factories.get(languageId);\n if (!v || v !== myData) return;\n this._factories.delete(languageId);\n v.dispose();\n });\n }\n async getOrCreate(languageId) {\n const tokenizationSupport = this.get(languageId);\n if (tokenizationSupport) return tokenizationSupport;\n const factory = this._factories.get(languageId);\n if (!factory || factory.isResolved) return null;\n await factory.resolve();\n return this.get(languageId);\n }\n isResolved(languageId) {\n if (this.get(languageId)) return true;\n const factory = this._factories.get(languageId);\n if (!factory || factory.isResolved) return true;\n return false;\n }\n setColorMap(colorMap) {\n this._colorMap = colorMap;\n this._onDidChange.fire({\n changedLanguages: Array.from(this._tokenizationSupports.keys()),\n changedColorMap: true\n });\n }\n getColorMap() {\n return this._colorMap;\n }\n getDefaultBackground() {\n if (this._colorMap && this._colorMap.length > 2) return this._colorMap[2];\n return null;\n }\n };\n var TokenizationSupportFactoryData = class extends Disposable {\n get isResolved() {\n return this._isResolved;\n }\n constructor(_registry, _languageId, _factory) {\n super();\n this._registry = _registry;\n this._languageId = _languageId;\n this._factory = _factory;\n this._isDisposed = false;\n this._resolvePromise = null;\n this._isResolved = false;\n }\n dispose() {\n this._isDisposed = true;\n super.dispose();\n }\n async resolve() {\n if (!this._resolvePromise) this._resolvePromise = this._create();\n return this._resolvePromise;\n }\n async _create() {\n const value = await this._factory.tokenizationSupport;\n this._isResolved = true;\n if (value && !this._isDisposed) this._register(this._registry.register(this._languageId, value));\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/languages.js\n var Token = class {\n constructor(offset, type, language) {\n this.offset = offset;\n this.type = type;\n this.language = language;\n this._tokenBrand = void 0;\n }\n toString() {\n return \"(\" + this.offset + \", \" + this.type + \")\";\n }\n };\n var HoverVerbosityAction$1;\n (function(HoverVerbosityAction) {\n /**\n * Increase the verbosity of the hover\n */\n HoverVerbosityAction[HoverVerbosityAction[\"Increase\"] = 0] = \"Increase\";\n /**\n * Decrease the verbosity of the hover\n */\n HoverVerbosityAction[HoverVerbosityAction[\"Decrease\"] = 1] = \"Decrease\";\n })(HoverVerbosityAction$1 || (HoverVerbosityAction$1 = {}));\n /**\n * @internal\n */\n var CompletionItemKinds;\n (function(CompletionItemKinds) {\n const byKind = /* @__PURE__ */ new Map();\n byKind.set(0, Codicon.symbolMethod);\n byKind.set(1, Codicon.symbolFunction);\n byKind.set(2, Codicon.symbolConstructor);\n byKind.set(3, Codicon.symbolField);\n byKind.set(4, Codicon.symbolVariable);\n byKind.set(5, Codicon.symbolClass);\n byKind.set(6, Codicon.symbolStruct);\n byKind.set(7, Codicon.symbolInterface);\n byKind.set(8, Codicon.symbolModule);\n byKind.set(9, Codicon.symbolProperty);\n byKind.set(10, Codicon.symbolEvent);\n byKind.set(11, Codicon.symbolOperator);\n byKind.set(12, Codicon.symbolUnit);\n byKind.set(13, Codicon.symbolValue);\n byKind.set(15, Codicon.symbolEnum);\n byKind.set(14, Codicon.symbolConstant);\n byKind.set(15, Codicon.symbolEnum);\n byKind.set(16, Codicon.symbolEnumMember);\n byKind.set(17, Codicon.symbolKeyword);\n byKind.set(28, Codicon.symbolSnippet);\n byKind.set(18, Codicon.symbolText);\n byKind.set(19, Codicon.symbolColor);\n byKind.set(20, Codicon.symbolFile);\n byKind.set(21, Codicon.symbolReference);\n byKind.set(22, Codicon.symbolCustomColor);\n byKind.set(23, Codicon.symbolFolder);\n byKind.set(24, Codicon.symbolTypeParameter);\n byKind.set(25, Codicon.account);\n byKind.set(26, Codicon.issues);\n byKind.set(27, Codicon.tools);\n /**\n * @internal\n */\n function toIcon(kind) {\n let codicon = byKind.get(kind);\n if (!codicon) {\n console.info(\"No codicon found for CompletionItemKind \" + kind);\n codicon = Codicon.symbolProperty;\n }\n return codicon;\n }\n CompletionItemKinds.toIcon = toIcon;\n /**\n * @internal\n */\n function toLabel(kind) {\n switch (kind) {\n case 0: return localize(728, \"Method\");\n case 1: return localize(729, \"Function\");\n case 2: return localize(730, \"Constructor\");\n case 3: return localize(731, \"Field\");\n case 4: return localize(732, \"Variable\");\n case 5: return localize(733, \"Class\");\n case 6: return localize(734, \"Struct\");\n case 7: return localize(735, \"Interface\");\n case 8: return localize(736, \"Module\");\n case 9: return localize(737, \"Property\");\n case 10: return localize(738, \"Event\");\n case 11: return localize(739, \"Operator\");\n case 12: return localize(740, \"Unit\");\n case 13: return localize(741, \"Value\");\n case 14: return localize(742, \"Constant\");\n case 15: return localize(743, \"Enum\");\n case 16: return localize(744, \"Enum Member\");\n case 17: return localize(745, \"Keyword\");\n case 18: return localize(746, \"Text\");\n case 19: return localize(747, \"Color\");\n case 20: return localize(748, \"File\");\n case 21: return localize(749, \"Reference\");\n case 22: return localize(750, \"Custom Color\");\n case 23: return localize(751, \"Folder\");\n case 24: return localize(752, \"Type Parameter\");\n case 25: return localize(753, \"User\");\n case 26: return localize(754, \"Issue\");\n case 27: return localize(755, \"Tool\");\n case 28: return localize(756, \"Snippet\");\n default: return \"\";\n }\n }\n CompletionItemKinds.toLabel = toLabel;\n const data = /* @__PURE__ */ new Map();\n data.set(\"method\", 0);\n data.set(\"function\", 1);\n data.set(\"constructor\", 2);\n data.set(\"field\", 3);\n data.set(\"variable\", 4);\n data.set(\"class\", 5);\n data.set(\"struct\", 6);\n data.set(\"interface\", 7);\n data.set(\"module\", 8);\n data.set(\"property\", 9);\n data.set(\"event\", 10);\n data.set(\"operator\", 11);\n data.set(\"unit\", 12);\n data.set(\"value\", 13);\n data.set(\"constant\", 14);\n data.set(\"enum\", 15);\n data.set(\"enum-member\", 16);\n data.set(\"enumMember\", 16);\n data.set(\"keyword\", 17);\n data.set(\"snippet\", 28);\n data.set(\"text\", 18);\n data.set(\"color\", 19);\n data.set(\"file\", 20);\n data.set(\"reference\", 21);\n data.set(\"customcolor\", 22);\n data.set(\"folder\", 23);\n data.set(\"type-parameter\", 24);\n data.set(\"typeParameter\", 24);\n data.set(\"account\", 25);\n data.set(\"issue\", 26);\n data.set(\"tool\", 27);\n /**\n * @internal\n */\n function fromString(value, strict) {\n let res = data.get(value);\n if (typeof res === \"undefined\" && !strict) res = 9;\n return res;\n }\n CompletionItemKinds.fromString = fromString;\n })(CompletionItemKinds || (CompletionItemKinds = {}));\n /**\n * How an {@link InlineCompletionsProvider inline completion provider} was triggered.\n */\n var InlineCompletionTriggerKind$2;\n (function(InlineCompletionTriggerKind) {\n /**\n * Completion was triggered automatically while editing.\n * It is sufficient to return a single completion item in this case.\n */\n InlineCompletionTriggerKind[InlineCompletionTriggerKind[\"Automatic\"] = 0] = \"Automatic\";\n /**\n * Completion was triggered explicitly by a user gesture.\n * Return multiple completion items to enable cycling through them.\n */\n InlineCompletionTriggerKind[InlineCompletionTriggerKind[\"Explicit\"] = 1] = \"Explicit\";\n })(InlineCompletionTriggerKind$2 || (InlineCompletionTriggerKind$2 = {}));\n var InlineCompletionHintStyle$1;\n (function(InlineCompletionHintStyle) {\n InlineCompletionHintStyle[InlineCompletionHintStyle[\"Code\"] = 1] = \"Code\";\n InlineCompletionHintStyle[InlineCompletionHintStyle[\"Label\"] = 2] = \"Label\";\n })(InlineCompletionHintStyle$1 || (InlineCompletionHintStyle$1 = {}));\n var InlineCompletionEndOfLifeReasonKind$1;\n (function(InlineCompletionEndOfLifeReasonKind) {\n InlineCompletionEndOfLifeReasonKind[InlineCompletionEndOfLifeReasonKind[\"Accepted\"] = 0] = \"Accepted\";\n InlineCompletionEndOfLifeReasonKind[InlineCompletionEndOfLifeReasonKind[\"Rejected\"] = 1] = \"Rejected\";\n InlineCompletionEndOfLifeReasonKind[InlineCompletionEndOfLifeReasonKind[\"Ignored\"] = 2] = \"Ignored\";\n })(InlineCompletionEndOfLifeReasonKind$1 || (InlineCompletionEndOfLifeReasonKind$1 = {}));\n /**\n * @internal\n */\n var DocumentPasteTriggerKind;\n (function(DocumentPasteTriggerKind) {\n DocumentPasteTriggerKind[DocumentPasteTriggerKind[\"Automatic\"] = 0] = \"Automatic\";\n DocumentPasteTriggerKind[DocumentPasteTriggerKind[\"PasteAs\"] = 1] = \"PasteAs\";\n })(DocumentPasteTriggerKind || (DocumentPasteTriggerKind = {}));\n var SignatureHelpTriggerKind$1;\n (function(SignatureHelpTriggerKind) {\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"Invoke\"] = 1] = \"Invoke\";\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"TriggerCharacter\"] = 2] = \"TriggerCharacter\";\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"ContentChange\"] = 3] = \"ContentChange\";\n })(SignatureHelpTriggerKind$1 || (SignatureHelpTriggerKind$1 = {}));\n /**\n * A document highlight kind.\n */\n var DocumentHighlightKind$2;\n (function(DocumentHighlightKind) {\n /**\n * A textual occurrence.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Text\"] = 0] = \"Text\";\n /**\n * Read-access of a symbol, like reading a variable.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Read\"] = 1] = \"Read\";\n /**\n * Write-access of a symbol, like writing to a variable.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Write\"] = 2] = \"Write\";\n })(DocumentHighlightKind$2 || (DocumentHighlightKind$2 = {}));\n localize(757, \"array\"), localize(758, \"boolean\"), localize(759, \"class\"), localize(760, \"constant\"), localize(761, \"constructor\"), localize(762, \"enumeration\"), localize(763, \"enumeration member\"), localize(764, \"event\"), localize(765, \"field\"), localize(766, \"file\"), localize(767, \"function\"), localize(768, \"interface\"), localize(769, \"key\"), localize(770, \"method\"), localize(771, \"module\"), localize(772, \"namespace\"), localize(773, \"null\"), localize(774, \"number\"), localize(775, \"object\"), localize(776, \"operator\"), localize(777, \"package\"), localize(778, \"property\"), localize(779, \"string\"), localize(780, \"struct\"), localize(781, \"type parameter\"), localize(782, \"variable\");\n /**\n * @internal\n */\n var SymbolKinds;\n (function(SymbolKinds) {\n const byKind = /* @__PURE__ */ new Map();\n byKind.set(0, Codicon.symbolFile);\n byKind.set(1, Codicon.symbolModule);\n byKind.set(2, Codicon.symbolNamespace);\n byKind.set(3, Codicon.symbolPackage);\n byKind.set(4, Codicon.symbolClass);\n byKind.set(5, Codicon.symbolMethod);\n byKind.set(6, Codicon.symbolProperty);\n byKind.set(7, Codicon.symbolField);\n byKind.set(8, Codicon.symbolConstructor);\n byKind.set(9, Codicon.symbolEnum);\n byKind.set(10, Codicon.symbolInterface);\n byKind.set(11, Codicon.symbolFunction);\n byKind.set(12, Codicon.symbolVariable);\n byKind.set(13, Codicon.symbolConstant);\n byKind.set(14, Codicon.symbolString);\n byKind.set(15, Codicon.symbolNumber);\n byKind.set(16, Codicon.symbolBoolean);\n byKind.set(17, Codicon.symbolArray);\n byKind.set(18, Codicon.symbolObject);\n byKind.set(19, Codicon.symbolKey);\n byKind.set(20, Codicon.symbolNull);\n byKind.set(21, Codicon.symbolEnumMember);\n byKind.set(22, Codicon.symbolStruct);\n byKind.set(23, Codicon.symbolEvent);\n byKind.set(24, Codicon.symbolOperator);\n byKind.set(25, Codicon.symbolTypeParameter);\n /**\n * @internal\n */\n function toIcon(kind) {\n let icon = byKind.get(kind);\n if (!icon) {\n console.info(\"No codicon found for SymbolKind \" + kind);\n icon = Codicon.symbolProperty;\n }\n return icon;\n }\n SymbolKinds.toIcon = toIcon;\n const byCompletionKind = /* @__PURE__ */ new Map();\n byCompletionKind.set(0, 20);\n byCompletionKind.set(1, 8);\n byCompletionKind.set(2, 8);\n byCompletionKind.set(3, 8);\n byCompletionKind.set(4, 5);\n byCompletionKind.set(5, 0);\n byCompletionKind.set(6, 9);\n byCompletionKind.set(7, 3);\n byCompletionKind.set(8, 2);\n byCompletionKind.set(9, 15);\n byCompletionKind.set(10, 7);\n byCompletionKind.set(11, 1);\n byCompletionKind.set(12, 4);\n byCompletionKind.set(13, 14);\n byCompletionKind.set(14, 18);\n byCompletionKind.set(15, 13);\n byCompletionKind.set(16, 13);\n byCompletionKind.set(17, 13);\n byCompletionKind.set(18, 13);\n byCompletionKind.set(19, 17);\n byCompletionKind.set(20, 13);\n byCompletionKind.set(21, 16);\n byCompletionKind.set(22, 6);\n byCompletionKind.set(23, 10);\n byCompletionKind.set(24, 11);\n byCompletionKind.set(25, 24);\n /**\n * @internal\n */\n function toCompletionKind(kind) {\n let completionKind = byCompletionKind.get(kind);\n if (completionKind === void 0) {\n console.info(\"No completion kind found for SymbolKind \" + kind);\n completionKind = 20;\n }\n return completionKind;\n }\n SymbolKinds.toCompletionKind = toCompletionKind;\n })(SymbolKinds || (SymbolKinds = {}));\n (class FoldingRangeKind$1 {\n /**\n * Kind for folding range representing a comment. The value of the kind is 'comment'.\n */\n static {\n this.Comment = new FoldingRangeKind$1(\"comment\");\n }\n /**\n * Kind for folding range representing a import. The value of the kind is 'imports'.\n */\n static {\n this.Imports = new FoldingRangeKind$1(\"imports\");\n }\n /**\n * Kind for folding range representing regions (for example marked by `#region`, `#endregion`).\n * The value of the kind is 'region'.\n */\n static {\n this.Region = new FoldingRangeKind$1(\"region\");\n }\n /**\n * Returns a {@link FoldingRangeKind} for the given value.\n *\n * @param value of the kind.\n */\n static fromValue(value) {\n switch (value) {\n case \"comment\": return FoldingRangeKind$1.Comment;\n case \"imports\": return FoldingRangeKind$1.Imports;\n case \"region\": return FoldingRangeKind$1.Region;\n }\n return new FoldingRangeKind$1(value);\n }\n /**\n * Creates a new {@link FoldingRangeKind}.\n *\n * @param value of the kind.\n */\n constructor(value) {\n this.value = value;\n }\n });\n var NewSymbolNameTag$1;\n (function(NewSymbolNameTag) {\n NewSymbolNameTag[NewSymbolNameTag[\"AIGenerated\"] = 1] = \"AIGenerated\";\n })(NewSymbolNameTag$1 || (NewSymbolNameTag$1 = {}));\n var NewSymbolNameTriggerKind$1;\n (function(NewSymbolNameTriggerKind) {\n NewSymbolNameTriggerKind[NewSymbolNameTriggerKind[\"Invoke\"] = 0] = \"Invoke\";\n NewSymbolNameTriggerKind[NewSymbolNameTriggerKind[\"Automatic\"] = 1] = \"Automatic\";\n })(NewSymbolNameTriggerKind$1 || (NewSymbolNameTriggerKind$1 = {}));\n /**\n * @internal\n */\n var Command$1;\n (function(Command) {\n /**\n * @internal\n */\n function is(obj) {\n if (!obj || typeof obj !== \"object\") return false;\n return typeof obj.id === \"string\" && typeof obj.title === \"string\";\n }\n Command.is = is;\n })(Command$1 || (Command$1 = {}));\n var InlayHintKind$2;\n (function(InlayHintKind) {\n InlayHintKind[InlayHintKind[\"Type\"] = 1] = \"Type\";\n InlayHintKind[InlayHintKind[\"Parameter\"] = 2] = \"Parameter\";\n })(InlayHintKind$2 || (InlayHintKind$2 = {}));\n new TokenizationRegistry$1();\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/standalone/standaloneEnums.js\n var AccessibilitySupport;\n (function(AccessibilitySupport) {\n /**\n * This should be the browser case where it is not known if a screen reader is attached or no.\n */\n AccessibilitySupport[AccessibilitySupport[\"Unknown\"] = 0] = \"Unknown\";\n AccessibilitySupport[AccessibilitySupport[\"Disabled\"] = 1] = \"Disabled\";\n AccessibilitySupport[AccessibilitySupport[\"Enabled\"] = 2] = \"Enabled\";\n })(AccessibilitySupport || (AccessibilitySupport = {}));\n var CodeActionTriggerType;\n (function(CodeActionTriggerType) {\n CodeActionTriggerType[CodeActionTriggerType[\"Invoke\"] = 1] = \"Invoke\";\n CodeActionTriggerType[CodeActionTriggerType[\"Auto\"] = 2] = \"Auto\";\n })(CodeActionTriggerType || (CodeActionTriggerType = {}));\n var CompletionItemInsertTextRule;\n (function(CompletionItemInsertTextRule) {\n CompletionItemInsertTextRule[CompletionItemInsertTextRule[\"None\"] = 0] = \"None\";\n /**\n * Adjust whitespace/indentation of multiline insert texts to\n * match the current line indentation.\n */\n CompletionItemInsertTextRule[CompletionItemInsertTextRule[\"KeepWhitespace\"] = 1] = \"KeepWhitespace\";\n /**\n * `insertText` is a snippet.\n */\n CompletionItemInsertTextRule[CompletionItemInsertTextRule[\"InsertAsSnippet\"] = 4] = \"InsertAsSnippet\";\n })(CompletionItemInsertTextRule || (CompletionItemInsertTextRule = {}));\n var CompletionItemKind$1;\n (function(CompletionItemKind) {\n CompletionItemKind[CompletionItemKind[\"Method\"] = 0] = \"Method\";\n CompletionItemKind[CompletionItemKind[\"Function\"] = 1] = \"Function\";\n CompletionItemKind[CompletionItemKind[\"Constructor\"] = 2] = \"Constructor\";\n CompletionItemKind[CompletionItemKind[\"Field\"] = 3] = \"Field\";\n CompletionItemKind[CompletionItemKind[\"Variable\"] = 4] = \"Variable\";\n CompletionItemKind[CompletionItemKind[\"Class\"] = 5] = \"Class\";\n CompletionItemKind[CompletionItemKind[\"Struct\"] = 6] = \"Struct\";\n CompletionItemKind[CompletionItemKind[\"Interface\"] = 7] = \"Interface\";\n CompletionItemKind[CompletionItemKind[\"Module\"] = 8] = \"Module\";\n CompletionItemKind[CompletionItemKind[\"Property\"] = 9] = \"Property\";\n CompletionItemKind[CompletionItemKind[\"Event\"] = 10] = \"Event\";\n CompletionItemKind[CompletionItemKind[\"Operator\"] = 11] = \"Operator\";\n CompletionItemKind[CompletionItemKind[\"Unit\"] = 12] = \"Unit\";\n CompletionItemKind[CompletionItemKind[\"Value\"] = 13] = \"Value\";\n CompletionItemKind[CompletionItemKind[\"Constant\"] = 14] = \"Constant\";\n CompletionItemKind[CompletionItemKind[\"Enum\"] = 15] = \"Enum\";\n CompletionItemKind[CompletionItemKind[\"EnumMember\"] = 16] = \"EnumMember\";\n CompletionItemKind[CompletionItemKind[\"Keyword\"] = 17] = \"Keyword\";\n CompletionItemKind[CompletionItemKind[\"Text\"] = 18] = \"Text\";\n CompletionItemKind[CompletionItemKind[\"Color\"] = 19] = \"Color\";\n CompletionItemKind[CompletionItemKind[\"File\"] = 20] = \"File\";\n CompletionItemKind[CompletionItemKind[\"Reference\"] = 21] = \"Reference\";\n CompletionItemKind[CompletionItemKind[\"Customcolor\"] = 22] = \"Customcolor\";\n CompletionItemKind[CompletionItemKind[\"Folder\"] = 23] = \"Folder\";\n CompletionItemKind[CompletionItemKind[\"TypeParameter\"] = 24] = \"TypeParameter\";\n CompletionItemKind[CompletionItemKind[\"User\"] = 25] = \"User\";\n CompletionItemKind[CompletionItemKind[\"Issue\"] = 26] = \"Issue\";\n CompletionItemKind[CompletionItemKind[\"Tool\"] = 27] = \"Tool\";\n CompletionItemKind[CompletionItemKind[\"Snippet\"] = 28] = \"Snippet\";\n })(CompletionItemKind$1 || (CompletionItemKind$1 = {}));\n var CompletionItemTag$1;\n (function(CompletionItemTag) {\n CompletionItemTag[CompletionItemTag[\"Deprecated\"] = 1] = \"Deprecated\";\n })(CompletionItemTag$1 || (CompletionItemTag$1 = {}));\n /**\n * How a suggest provider was triggered.\n */\n var CompletionTriggerKind;\n (function(CompletionTriggerKind) {\n CompletionTriggerKind[CompletionTriggerKind[\"Invoke\"] = 0] = \"Invoke\";\n CompletionTriggerKind[CompletionTriggerKind[\"TriggerCharacter\"] = 1] = \"TriggerCharacter\";\n CompletionTriggerKind[CompletionTriggerKind[\"TriggerForIncompleteCompletions\"] = 2] = \"TriggerForIncompleteCompletions\";\n })(CompletionTriggerKind || (CompletionTriggerKind = {}));\n /**\n * A positioning preference for rendering content widgets.\n */\n var ContentWidgetPositionPreference;\n (function(ContentWidgetPositionPreference) {\n /**\n * Place the content widget exactly at a position\n */\n ContentWidgetPositionPreference[ContentWidgetPositionPreference[\"EXACT\"] = 0] = \"EXACT\";\n /**\n * Place the content widget above a position\n */\n ContentWidgetPositionPreference[ContentWidgetPositionPreference[\"ABOVE\"] = 1] = \"ABOVE\";\n /**\n * Place the content widget below a position\n */\n ContentWidgetPositionPreference[ContentWidgetPositionPreference[\"BELOW\"] = 2] = \"BELOW\";\n })(ContentWidgetPositionPreference || (ContentWidgetPositionPreference = {}));\n /**\n * Describes the reason the cursor has changed its position.\n */\n var CursorChangeReason;\n (function(CursorChangeReason) {\n /**\n * Unknown or not set.\n */\n CursorChangeReason[CursorChangeReason[\"NotSet\"] = 0] = \"NotSet\";\n /**\n * A `model.setValue()` was called.\n */\n CursorChangeReason[CursorChangeReason[\"ContentFlush\"] = 1] = \"ContentFlush\";\n /**\n * The `model` has been changed outside of this cursor and the cursor recovers its position from associated markers.\n */\n CursorChangeReason[CursorChangeReason[\"RecoverFromMarkers\"] = 2] = \"RecoverFromMarkers\";\n /**\n * There was an explicit user gesture.\n */\n CursorChangeReason[CursorChangeReason[\"Explicit\"] = 3] = \"Explicit\";\n /**\n * There was a Paste.\n */\n CursorChangeReason[CursorChangeReason[\"Paste\"] = 4] = \"Paste\";\n /**\n * There was an Undo.\n */\n CursorChangeReason[CursorChangeReason[\"Undo\"] = 5] = \"Undo\";\n /**\n * There was a Redo.\n */\n CursorChangeReason[CursorChangeReason[\"Redo\"] = 6] = \"Redo\";\n })(CursorChangeReason || (CursorChangeReason = {}));\n /**\n * The default end of line to use when instantiating models.\n */\n var DefaultEndOfLine;\n (function(DefaultEndOfLine) {\n /**\n * Use line feed (\\n) as the end of line character.\n */\n DefaultEndOfLine[DefaultEndOfLine[\"LF\"] = 1] = \"LF\";\n /**\n * Use carriage return and line feed (\\r\\n) as the end of line character.\n */\n DefaultEndOfLine[DefaultEndOfLine[\"CRLF\"] = 2] = \"CRLF\";\n })(DefaultEndOfLine || (DefaultEndOfLine = {}));\n /**\n * A document highlight kind.\n */\n var DocumentHighlightKind$1;\n (function(DocumentHighlightKind) {\n /**\n * A textual occurrence.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Text\"] = 0] = \"Text\";\n /**\n * Read-access of a symbol, like reading a variable.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Read\"] = 1] = \"Read\";\n /**\n * Write-access of a symbol, like writing to a variable.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Write\"] = 2] = \"Write\";\n })(DocumentHighlightKind$1 || (DocumentHighlightKind$1 = {}));\n /**\n * Configuration options for auto indentation in the editor\n */\n var EditorAutoIndentStrategy;\n (function(EditorAutoIndentStrategy) {\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"None\"] = 0] = \"None\";\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Keep\"] = 1] = \"Keep\";\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Brackets\"] = 2] = \"Brackets\";\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Advanced\"] = 3] = \"Advanced\";\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Full\"] = 4] = \"Full\";\n })(EditorAutoIndentStrategy || (EditorAutoIndentStrategy = {}));\n var EditorOption;\n (function(EditorOption) {\n EditorOption[EditorOption[\"acceptSuggestionOnCommitCharacter\"] = 0] = \"acceptSuggestionOnCommitCharacter\";\n EditorOption[EditorOption[\"acceptSuggestionOnEnter\"] = 1] = \"acceptSuggestionOnEnter\";\n EditorOption[EditorOption[\"accessibilitySupport\"] = 2] = \"accessibilitySupport\";\n EditorOption[EditorOption[\"accessibilityPageSize\"] = 3] = \"accessibilityPageSize\";\n EditorOption[EditorOption[\"allowOverflow\"] = 4] = \"allowOverflow\";\n EditorOption[EditorOption[\"allowVariableLineHeights\"] = 5] = \"allowVariableLineHeights\";\n EditorOption[EditorOption[\"allowVariableFonts\"] = 6] = \"allowVariableFonts\";\n EditorOption[EditorOption[\"allowVariableFontsInAccessibilityMode\"] = 7] = \"allowVariableFontsInAccessibilityMode\";\n EditorOption[EditorOption[\"ariaLabel\"] = 8] = \"ariaLabel\";\n EditorOption[EditorOption[\"ariaRequired\"] = 9] = \"ariaRequired\";\n EditorOption[EditorOption[\"autoClosingBrackets\"] = 10] = \"autoClosingBrackets\";\n EditorOption[EditorOption[\"autoClosingComments\"] = 11] = \"autoClosingComments\";\n EditorOption[EditorOption[\"screenReaderAnnounceInlineSuggestion\"] = 12] = \"screenReaderAnnounceInlineSuggestion\";\n EditorOption[EditorOption[\"autoClosingDelete\"] = 13] = \"autoClosingDelete\";\n EditorOption[EditorOption[\"autoClosingOvertype\"] = 14] = \"autoClosingOvertype\";\n EditorOption[EditorOption[\"autoClosingQuotes\"] = 15] = \"autoClosingQuotes\";\n EditorOption[EditorOption[\"autoIndent\"] = 16] = \"autoIndent\";\n EditorOption[EditorOption[\"autoIndentOnPaste\"] = 17] = \"autoIndentOnPaste\";\n EditorOption[EditorOption[\"autoIndentOnPasteWithinString\"] = 18] = \"autoIndentOnPasteWithinString\";\n EditorOption[EditorOption[\"automaticLayout\"] = 19] = \"automaticLayout\";\n EditorOption[EditorOption[\"autoSurround\"] = 20] = \"autoSurround\";\n EditorOption[EditorOption[\"bracketPairColorization\"] = 21] = \"bracketPairColorization\";\n EditorOption[EditorOption[\"guides\"] = 22] = \"guides\";\n EditorOption[EditorOption[\"codeLens\"] = 23] = \"codeLens\";\n EditorOption[EditorOption[\"codeLensFontFamily\"] = 24] = \"codeLensFontFamily\";\n EditorOption[EditorOption[\"codeLensFontSize\"] = 25] = \"codeLensFontSize\";\n EditorOption[EditorOption[\"colorDecorators\"] = 26] = \"colorDecorators\";\n EditorOption[EditorOption[\"colorDecoratorsLimit\"] = 27] = \"colorDecoratorsLimit\";\n EditorOption[EditorOption[\"columnSelection\"] = 28] = \"columnSelection\";\n EditorOption[EditorOption[\"comments\"] = 29] = \"comments\";\n EditorOption[EditorOption[\"contextmenu\"] = 30] = \"contextmenu\";\n EditorOption[EditorOption[\"copyWithSyntaxHighlighting\"] = 31] = \"copyWithSyntaxHighlighting\";\n EditorOption[EditorOption[\"cursorBlinking\"] = 32] = \"cursorBlinking\";\n EditorOption[EditorOption[\"cursorSmoothCaretAnimation\"] = 33] = \"cursorSmoothCaretAnimation\";\n EditorOption[EditorOption[\"cursorStyle\"] = 34] = \"cursorStyle\";\n EditorOption[EditorOption[\"cursorSurroundingLines\"] = 35] = \"cursorSurroundingLines\";\n EditorOption[EditorOption[\"cursorSurroundingLinesStyle\"] = 36] = \"cursorSurroundingLinesStyle\";\n EditorOption[EditorOption[\"cursorWidth\"] = 37] = \"cursorWidth\";\n EditorOption[EditorOption[\"cursorHeight\"] = 38] = \"cursorHeight\";\n EditorOption[EditorOption[\"disableLayerHinting\"] = 39] = \"disableLayerHinting\";\n EditorOption[EditorOption[\"disableMonospaceOptimizations\"] = 40] = \"disableMonospaceOptimizations\";\n EditorOption[EditorOption[\"domReadOnly\"] = 41] = \"domReadOnly\";\n EditorOption[EditorOption[\"dragAndDrop\"] = 42] = \"dragAndDrop\";\n EditorOption[EditorOption[\"dropIntoEditor\"] = 43] = \"dropIntoEditor\";\n EditorOption[EditorOption[\"editContext\"] = 44] = \"editContext\";\n EditorOption[EditorOption[\"emptySelectionClipboard\"] = 45] = \"emptySelectionClipboard\";\n EditorOption[EditorOption[\"experimentalGpuAcceleration\"] = 46] = \"experimentalGpuAcceleration\";\n EditorOption[EditorOption[\"experimentalWhitespaceRendering\"] = 47] = \"experimentalWhitespaceRendering\";\n EditorOption[EditorOption[\"extraEditorClassName\"] = 48] = \"extraEditorClassName\";\n EditorOption[EditorOption[\"fastScrollSensitivity\"] = 49] = \"fastScrollSensitivity\";\n EditorOption[EditorOption[\"find\"] = 50] = \"find\";\n EditorOption[EditorOption[\"fixedOverflowWidgets\"] = 51] = \"fixedOverflowWidgets\";\n EditorOption[EditorOption[\"folding\"] = 52] = \"folding\";\n EditorOption[EditorOption[\"foldingStrategy\"] = 53] = \"foldingStrategy\";\n EditorOption[EditorOption[\"foldingHighlight\"] = 54] = \"foldingHighlight\";\n EditorOption[EditorOption[\"foldingImportsByDefault\"] = 55] = \"foldingImportsByDefault\";\n EditorOption[EditorOption[\"foldingMaximumRegions\"] = 56] = \"foldingMaximumRegions\";\n EditorOption[EditorOption[\"unfoldOnClickAfterEndOfLine\"] = 57] = \"unfoldOnClickAfterEndOfLine\";\n EditorOption[EditorOption[\"fontFamily\"] = 58] = \"fontFamily\";\n EditorOption[EditorOption[\"fontInfo\"] = 59] = \"fontInfo\";\n EditorOption[EditorOption[\"fontLigatures\"] = 60] = \"fontLigatures\";\n EditorOption[EditorOption[\"fontSize\"] = 61] = \"fontSize\";\n EditorOption[EditorOption[\"fontWeight\"] = 62] = \"fontWeight\";\n EditorOption[EditorOption[\"fontVariations\"] = 63] = \"fontVariations\";\n EditorOption[EditorOption[\"formatOnPaste\"] = 64] = \"formatOnPaste\";\n EditorOption[EditorOption[\"formatOnType\"] = 65] = \"formatOnType\";\n EditorOption[EditorOption[\"glyphMargin\"] = 66] = \"glyphMargin\";\n EditorOption[EditorOption[\"gotoLocation\"] = 67] = \"gotoLocation\";\n EditorOption[EditorOption[\"hideCursorInOverviewRuler\"] = 68] = \"hideCursorInOverviewRuler\";\n EditorOption[EditorOption[\"hover\"] = 69] = \"hover\";\n EditorOption[EditorOption[\"inDiffEditor\"] = 70] = \"inDiffEditor\";\n EditorOption[EditorOption[\"inlineSuggest\"] = 71] = \"inlineSuggest\";\n EditorOption[EditorOption[\"letterSpacing\"] = 72] = \"letterSpacing\";\n EditorOption[EditorOption[\"lightbulb\"] = 73] = \"lightbulb\";\n EditorOption[EditorOption[\"lineDecorationsWidth\"] = 74] = \"lineDecorationsWidth\";\n EditorOption[EditorOption[\"lineHeight\"] = 75] = \"lineHeight\";\n EditorOption[EditorOption[\"lineNumbers\"] = 76] = \"lineNumbers\";\n EditorOption[EditorOption[\"lineNumbersMinChars\"] = 77] = \"lineNumbersMinChars\";\n EditorOption[EditorOption[\"linkedEditing\"] = 78] = \"linkedEditing\";\n EditorOption[EditorOption[\"links\"] = 79] = \"links\";\n EditorOption[EditorOption[\"matchBrackets\"] = 80] = \"matchBrackets\";\n EditorOption[EditorOption[\"minimap\"] = 81] = \"minimap\";\n EditorOption[EditorOption[\"mouseStyle\"] = 82] = \"mouseStyle\";\n EditorOption[EditorOption[\"mouseWheelScrollSensitivity\"] = 83] = \"mouseWheelScrollSensitivity\";\n EditorOption[EditorOption[\"mouseWheelZoom\"] = 84] = \"mouseWheelZoom\";\n EditorOption[EditorOption[\"multiCursorMergeOverlapping\"] = 85] = \"multiCursorMergeOverlapping\";\n EditorOption[EditorOption[\"multiCursorModifier\"] = 86] = \"multiCursorModifier\";\n EditorOption[EditorOption[\"mouseMiddleClickAction\"] = 87] = \"mouseMiddleClickAction\";\n EditorOption[EditorOption[\"multiCursorPaste\"] = 88] = \"multiCursorPaste\";\n EditorOption[EditorOption[\"multiCursorLimit\"] = 89] = \"multiCursorLimit\";\n EditorOption[EditorOption[\"occurrencesHighlight\"] = 90] = \"occurrencesHighlight\";\n EditorOption[EditorOption[\"occurrencesHighlightDelay\"] = 91] = \"occurrencesHighlightDelay\";\n EditorOption[EditorOption[\"overtypeCursorStyle\"] = 92] = \"overtypeCursorStyle\";\n EditorOption[EditorOption[\"overtypeOnPaste\"] = 93] = \"overtypeOnPaste\";\n EditorOption[EditorOption[\"overviewRulerBorder\"] = 94] = \"overviewRulerBorder\";\n EditorOption[EditorOption[\"overviewRulerLanes\"] = 95] = \"overviewRulerLanes\";\n EditorOption[EditorOption[\"padding\"] = 96] = \"padding\";\n EditorOption[EditorOption[\"pasteAs\"] = 97] = \"pasteAs\";\n EditorOption[EditorOption[\"parameterHints\"] = 98] = \"parameterHints\";\n EditorOption[EditorOption[\"peekWidgetDefaultFocus\"] = 99] = \"peekWidgetDefaultFocus\";\n EditorOption[EditorOption[\"placeholder\"] = 100] = \"placeholder\";\n EditorOption[EditorOption[\"definitionLinkOpensInPeek\"] = 101] = \"definitionLinkOpensInPeek\";\n EditorOption[EditorOption[\"quickSuggestions\"] = 102] = \"quickSuggestions\";\n EditorOption[EditorOption[\"quickSuggestionsDelay\"] = 103] = \"quickSuggestionsDelay\";\n EditorOption[EditorOption[\"readOnly\"] = 104] = \"readOnly\";\n EditorOption[EditorOption[\"readOnlyMessage\"] = 105] = \"readOnlyMessage\";\n EditorOption[EditorOption[\"renameOnType\"] = 106] = \"renameOnType\";\n EditorOption[EditorOption[\"renderRichScreenReaderContent\"] = 107] = \"renderRichScreenReaderContent\";\n EditorOption[EditorOption[\"renderControlCharacters\"] = 108] = \"renderControlCharacters\";\n EditorOption[EditorOption[\"renderFinalNewline\"] = 109] = \"renderFinalNewline\";\n EditorOption[EditorOption[\"renderLineHighlight\"] = 110] = \"renderLineHighlight\";\n EditorOption[EditorOption[\"renderLineHighlightOnlyWhenFocus\"] = 111] = \"renderLineHighlightOnlyWhenFocus\";\n EditorOption[EditorOption[\"renderValidationDecorations\"] = 112] = \"renderValidationDecorations\";\n EditorOption[EditorOption[\"renderWhitespace\"] = 113] = \"renderWhitespace\";\n EditorOption[EditorOption[\"revealHorizontalRightPadding\"] = 114] = \"revealHorizontalRightPadding\";\n EditorOption[EditorOption[\"roundedSelection\"] = 115] = \"roundedSelection\";\n EditorOption[EditorOption[\"rulers\"] = 116] = \"rulers\";\n EditorOption[EditorOption[\"scrollbar\"] = 117] = \"scrollbar\";\n EditorOption[EditorOption[\"scrollBeyondLastColumn\"] = 118] = \"scrollBeyondLastColumn\";\n EditorOption[EditorOption[\"scrollBeyondLastLine\"] = 119] = \"scrollBeyondLastLine\";\n EditorOption[EditorOption[\"scrollPredominantAxis\"] = 120] = \"scrollPredominantAxis\";\n EditorOption[EditorOption[\"selectionClipboard\"] = 121] = \"selectionClipboard\";\n EditorOption[EditorOption[\"selectionHighlight\"] = 122] = \"selectionHighlight\";\n EditorOption[EditorOption[\"selectionHighlightMaxLength\"] = 123] = \"selectionHighlightMaxLength\";\n EditorOption[EditorOption[\"selectionHighlightMultiline\"] = 124] = \"selectionHighlightMultiline\";\n EditorOption[EditorOption[\"selectOnLineNumbers\"] = 125] = \"selectOnLineNumbers\";\n EditorOption[EditorOption[\"showFoldingControls\"] = 126] = \"showFoldingControls\";\n EditorOption[EditorOption[\"showUnused\"] = 127] = \"showUnused\";\n EditorOption[EditorOption[\"snippetSuggestions\"] = 128] = \"snippetSuggestions\";\n EditorOption[EditorOption[\"smartSelect\"] = 129] = \"smartSelect\";\n EditorOption[EditorOption[\"smoothScrolling\"] = 130] = \"smoothScrolling\";\n EditorOption[EditorOption[\"stickyScroll\"] = 131] = \"stickyScroll\";\n EditorOption[EditorOption[\"stickyTabStops\"] = 132] = \"stickyTabStops\";\n EditorOption[EditorOption[\"stopRenderingLineAfter\"] = 133] = \"stopRenderingLineAfter\";\n EditorOption[EditorOption[\"suggest\"] = 134] = \"suggest\";\n EditorOption[EditorOption[\"suggestFontSize\"] = 135] = \"suggestFontSize\";\n EditorOption[EditorOption[\"suggestLineHeight\"] = 136] = \"suggestLineHeight\";\n EditorOption[EditorOption[\"suggestOnTriggerCharacters\"] = 137] = \"suggestOnTriggerCharacters\";\n EditorOption[EditorOption[\"suggestSelection\"] = 138] = \"suggestSelection\";\n EditorOption[EditorOption[\"tabCompletion\"] = 139] = \"tabCompletion\";\n EditorOption[EditorOption[\"tabIndex\"] = 140] = \"tabIndex\";\n EditorOption[EditorOption[\"trimWhitespaceOnDelete\"] = 141] = \"trimWhitespaceOnDelete\";\n EditorOption[EditorOption[\"unicodeHighlighting\"] = 142] = \"unicodeHighlighting\";\n EditorOption[EditorOption[\"unusualLineTerminators\"] = 143] = \"unusualLineTerminators\";\n EditorOption[EditorOption[\"useShadowDOM\"] = 144] = \"useShadowDOM\";\n EditorOption[EditorOption[\"useTabStops\"] = 145] = \"useTabStops\";\n EditorOption[EditorOption[\"wordBreak\"] = 146] = \"wordBreak\";\n EditorOption[EditorOption[\"wordSegmenterLocales\"] = 147] = \"wordSegmenterLocales\";\n EditorOption[EditorOption[\"wordSeparators\"] = 148] = \"wordSeparators\";\n EditorOption[EditorOption[\"wordWrap\"] = 149] = \"wordWrap\";\n EditorOption[EditorOption[\"wordWrapBreakAfterCharacters\"] = 150] = \"wordWrapBreakAfterCharacters\";\n EditorOption[EditorOption[\"wordWrapBreakBeforeCharacters\"] = 151] = \"wordWrapBreakBeforeCharacters\";\n EditorOption[EditorOption[\"wordWrapColumn\"] = 152] = \"wordWrapColumn\";\n EditorOption[EditorOption[\"wordWrapOverride1\"] = 153] = \"wordWrapOverride1\";\n EditorOption[EditorOption[\"wordWrapOverride2\"] = 154] = \"wordWrapOverride2\";\n EditorOption[EditorOption[\"wrappingIndent\"] = 155] = \"wrappingIndent\";\n EditorOption[EditorOption[\"wrappingStrategy\"] = 156] = \"wrappingStrategy\";\n EditorOption[EditorOption[\"showDeprecated\"] = 157] = \"showDeprecated\";\n EditorOption[EditorOption[\"inertialScroll\"] = 158] = \"inertialScroll\";\n EditorOption[EditorOption[\"inlayHints\"] = 159] = \"inlayHints\";\n EditorOption[EditorOption[\"wrapOnEscapedLineFeeds\"] = 160] = \"wrapOnEscapedLineFeeds\";\n EditorOption[EditorOption[\"effectiveCursorStyle\"] = 161] = \"effectiveCursorStyle\";\n EditorOption[EditorOption[\"editorClassName\"] = 162] = \"editorClassName\";\n EditorOption[EditorOption[\"pixelRatio\"] = 163] = \"pixelRatio\";\n EditorOption[EditorOption[\"tabFocusMode\"] = 164] = \"tabFocusMode\";\n EditorOption[EditorOption[\"layoutInfo\"] = 165] = \"layoutInfo\";\n EditorOption[EditorOption[\"wrappingInfo\"] = 166] = \"wrappingInfo\";\n EditorOption[EditorOption[\"defaultColorDecorators\"] = 167] = \"defaultColorDecorators\";\n EditorOption[EditorOption[\"colorDecoratorsActivatedOn\"] = 168] = \"colorDecoratorsActivatedOn\";\n EditorOption[EditorOption[\"inlineCompletionsAccessibilityVerbose\"] = 169] = \"inlineCompletionsAccessibilityVerbose\";\n EditorOption[EditorOption[\"effectiveEditContext\"] = 170] = \"effectiveEditContext\";\n EditorOption[EditorOption[\"scrollOnMiddleClick\"] = 171] = \"scrollOnMiddleClick\";\n EditorOption[EditorOption[\"effectiveAllowVariableFonts\"] = 172] = \"effectiveAllowVariableFonts\";\n })(EditorOption || (EditorOption = {}));\n /**\n * End of line character preference.\n */\n var EndOfLinePreference;\n (function(EndOfLinePreference) {\n /**\n * Use the end of line character identified in the text buffer.\n */\n EndOfLinePreference[EndOfLinePreference[\"TextDefined\"] = 0] = \"TextDefined\";\n /**\n * Use line feed (\\n) as the end of line character.\n */\n EndOfLinePreference[EndOfLinePreference[\"LF\"] = 1] = \"LF\";\n /**\n * Use carriage return and line feed (\\r\\n) as the end of line character.\n */\n EndOfLinePreference[EndOfLinePreference[\"CRLF\"] = 2] = \"CRLF\";\n })(EndOfLinePreference || (EndOfLinePreference = {}));\n /**\n * End of line character preference.\n */\n var EndOfLineSequence;\n (function(EndOfLineSequence) {\n /**\n * Use line feed (\\n) as the end of line character.\n */\n EndOfLineSequence[EndOfLineSequence[\"LF\"] = 0] = \"LF\";\n /**\n * Use carriage return and line feed (\\r\\n) as the end of line character.\n */\n EndOfLineSequence[EndOfLineSequence[\"CRLF\"] = 1] = \"CRLF\";\n })(EndOfLineSequence || (EndOfLineSequence = {}));\n /**\n * Vertical Lane in the glyph margin of the editor.\n */\n var GlyphMarginLane$1;\n (function(GlyphMarginLane) {\n GlyphMarginLane[GlyphMarginLane[\"Left\"] = 1] = \"Left\";\n GlyphMarginLane[GlyphMarginLane[\"Center\"] = 2] = \"Center\";\n GlyphMarginLane[GlyphMarginLane[\"Right\"] = 3] = \"Right\";\n })(GlyphMarginLane$1 || (GlyphMarginLane$1 = {}));\n var HoverVerbosityAction;\n (function(HoverVerbosityAction) {\n /**\n * Increase the verbosity of the hover\n */\n HoverVerbosityAction[HoverVerbosityAction[\"Increase\"] = 0] = \"Increase\";\n /**\n * Decrease the verbosity of the hover\n */\n HoverVerbosityAction[HoverVerbosityAction[\"Decrease\"] = 1] = \"Decrease\";\n })(HoverVerbosityAction || (HoverVerbosityAction = {}));\n /**\n * Describes what to do with the indentation when pressing Enter.\n */\n var IndentAction;\n (function(IndentAction) {\n /**\n * Insert new line and copy the previous line's indentation.\n */\n IndentAction[IndentAction[\"None\"] = 0] = \"None\";\n /**\n * Insert new line and indent once (relative to the previous line's indentation).\n */\n IndentAction[IndentAction[\"Indent\"] = 1] = \"Indent\";\n /**\n * Insert two new lines:\n * - the first one indented which will hold the cursor\n * - the second one at the same indentation level\n */\n IndentAction[IndentAction[\"IndentOutdent\"] = 2] = \"IndentOutdent\";\n /**\n * Insert new line and outdent once (relative to the previous line's indentation).\n */\n IndentAction[IndentAction[\"Outdent\"] = 3] = \"Outdent\";\n })(IndentAction || (IndentAction = {}));\n var InjectedTextCursorStops$1;\n (function(InjectedTextCursorStops) {\n InjectedTextCursorStops[InjectedTextCursorStops[\"Both\"] = 0] = \"Both\";\n InjectedTextCursorStops[InjectedTextCursorStops[\"Right\"] = 1] = \"Right\";\n InjectedTextCursorStops[InjectedTextCursorStops[\"Left\"] = 2] = \"Left\";\n InjectedTextCursorStops[InjectedTextCursorStops[\"None\"] = 3] = \"None\";\n })(InjectedTextCursorStops$1 || (InjectedTextCursorStops$1 = {}));\n var InlayHintKind$1;\n (function(InlayHintKind) {\n InlayHintKind[InlayHintKind[\"Type\"] = 1] = \"Type\";\n InlayHintKind[InlayHintKind[\"Parameter\"] = 2] = \"Parameter\";\n })(InlayHintKind$1 || (InlayHintKind$1 = {}));\n var InlineCompletionEndOfLifeReasonKind;\n (function(InlineCompletionEndOfLifeReasonKind) {\n InlineCompletionEndOfLifeReasonKind[InlineCompletionEndOfLifeReasonKind[\"Accepted\"] = 0] = \"Accepted\";\n InlineCompletionEndOfLifeReasonKind[InlineCompletionEndOfLifeReasonKind[\"Rejected\"] = 1] = \"Rejected\";\n InlineCompletionEndOfLifeReasonKind[InlineCompletionEndOfLifeReasonKind[\"Ignored\"] = 2] = \"Ignored\";\n })(InlineCompletionEndOfLifeReasonKind || (InlineCompletionEndOfLifeReasonKind = {}));\n var InlineCompletionHintStyle;\n (function(InlineCompletionHintStyle) {\n InlineCompletionHintStyle[InlineCompletionHintStyle[\"Code\"] = 1] = \"Code\";\n InlineCompletionHintStyle[InlineCompletionHintStyle[\"Label\"] = 2] = \"Label\";\n })(InlineCompletionHintStyle || (InlineCompletionHintStyle = {}));\n /**\n * How an {@link InlineCompletionsProvider inline completion provider} was triggered.\n */\n var InlineCompletionTriggerKind$1;\n (function(InlineCompletionTriggerKind) {\n /**\n * Completion was triggered automatically while editing.\n * It is sufficient to return a single completion item in this case.\n */\n InlineCompletionTriggerKind[InlineCompletionTriggerKind[\"Automatic\"] = 0] = \"Automatic\";\n /**\n * Completion was triggered explicitly by a user gesture.\n * Return multiple completion items to enable cycling through them.\n */\n InlineCompletionTriggerKind[InlineCompletionTriggerKind[\"Explicit\"] = 1] = \"Explicit\";\n })(InlineCompletionTriggerKind$1 || (InlineCompletionTriggerKind$1 = {}));\n /**\n * Virtual Key Codes, the value does not hold any inherent meaning.\n * Inspired somewhat from https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx\n * But these are \"more general\", as they should work across browsers & OS`s.\n */\n var KeyCode;\n (function(KeyCode) {\n KeyCode[KeyCode[\"DependsOnKbLayout\"] = -1] = \"DependsOnKbLayout\";\n /**\n * Placed first to cover the 0 value of the enum.\n */\n KeyCode[KeyCode[\"Unknown\"] = 0] = \"Unknown\";\n KeyCode[KeyCode[\"Backspace\"] = 1] = \"Backspace\";\n KeyCode[KeyCode[\"Tab\"] = 2] = \"Tab\";\n KeyCode[KeyCode[\"Enter\"] = 3] = \"Enter\";\n KeyCode[KeyCode[\"Shift\"] = 4] = \"Shift\";\n KeyCode[KeyCode[\"Ctrl\"] = 5] = \"Ctrl\";\n KeyCode[KeyCode[\"Alt\"] = 6] = \"Alt\";\n KeyCode[KeyCode[\"PauseBreak\"] = 7] = \"PauseBreak\";\n KeyCode[KeyCode[\"CapsLock\"] = 8] = \"CapsLock\";\n KeyCode[KeyCode[\"Escape\"] = 9] = \"Escape\";\n KeyCode[KeyCode[\"Space\"] = 10] = \"Space\";\n KeyCode[KeyCode[\"PageUp\"] = 11] = \"PageUp\";\n KeyCode[KeyCode[\"PageDown\"] = 12] = \"PageDown\";\n KeyCode[KeyCode[\"End\"] = 13] = \"End\";\n KeyCode[KeyCode[\"Home\"] = 14] = \"Home\";\n KeyCode[KeyCode[\"LeftArrow\"] = 15] = \"LeftArrow\";\n KeyCode[KeyCode[\"UpArrow\"] = 16] = \"UpArrow\";\n KeyCode[KeyCode[\"RightArrow\"] = 17] = \"RightArrow\";\n KeyCode[KeyCode[\"DownArrow\"] = 18] = \"DownArrow\";\n KeyCode[KeyCode[\"Insert\"] = 19] = \"Insert\";\n KeyCode[KeyCode[\"Delete\"] = 20] = \"Delete\";\n KeyCode[KeyCode[\"Digit0\"] = 21] = \"Digit0\";\n KeyCode[KeyCode[\"Digit1\"] = 22] = \"Digit1\";\n KeyCode[KeyCode[\"Digit2\"] = 23] = \"Digit2\";\n KeyCode[KeyCode[\"Digit3\"] = 24] = \"Digit3\";\n KeyCode[KeyCode[\"Digit4\"] = 25] = \"Digit4\";\n KeyCode[KeyCode[\"Digit5\"] = 26] = \"Digit5\";\n KeyCode[KeyCode[\"Digit6\"] = 27] = \"Digit6\";\n KeyCode[KeyCode[\"Digit7\"] = 28] = \"Digit7\";\n KeyCode[KeyCode[\"Digit8\"] = 29] = \"Digit8\";\n KeyCode[KeyCode[\"Digit9\"] = 30] = \"Digit9\";\n KeyCode[KeyCode[\"KeyA\"] = 31] = \"KeyA\";\n KeyCode[KeyCode[\"KeyB\"] = 32] = \"KeyB\";\n KeyCode[KeyCode[\"KeyC\"] = 33] = \"KeyC\";\n KeyCode[KeyCode[\"KeyD\"] = 34] = \"KeyD\";\n KeyCode[KeyCode[\"KeyE\"] = 35] = \"KeyE\";\n KeyCode[KeyCode[\"KeyF\"] = 36] = \"KeyF\";\n KeyCode[KeyCode[\"KeyG\"] = 37] = \"KeyG\";\n KeyCode[KeyCode[\"KeyH\"] = 38] = \"KeyH\";\n KeyCode[KeyCode[\"KeyI\"] = 39] = \"KeyI\";\n KeyCode[KeyCode[\"KeyJ\"] = 40] = \"KeyJ\";\n KeyCode[KeyCode[\"KeyK\"] = 41] = \"KeyK\";\n KeyCode[KeyCode[\"KeyL\"] = 42] = \"KeyL\";\n KeyCode[KeyCode[\"KeyM\"] = 43] = \"KeyM\";\n KeyCode[KeyCode[\"KeyN\"] = 44] = \"KeyN\";\n KeyCode[KeyCode[\"KeyO\"] = 45] = \"KeyO\";\n KeyCode[KeyCode[\"KeyP\"] = 46] = \"KeyP\";\n KeyCode[KeyCode[\"KeyQ\"] = 47] = \"KeyQ\";\n KeyCode[KeyCode[\"KeyR\"] = 48] = \"KeyR\";\n KeyCode[KeyCode[\"KeyS\"] = 49] = \"KeyS\";\n KeyCode[KeyCode[\"KeyT\"] = 50] = \"KeyT\";\n KeyCode[KeyCode[\"KeyU\"] = 51] = \"KeyU\";\n KeyCode[KeyCode[\"KeyV\"] = 52] = \"KeyV\";\n KeyCode[KeyCode[\"KeyW\"] = 53] = \"KeyW\";\n KeyCode[KeyCode[\"KeyX\"] = 54] = \"KeyX\";\n KeyCode[KeyCode[\"KeyY\"] = 55] = \"KeyY\";\n KeyCode[KeyCode[\"KeyZ\"] = 56] = \"KeyZ\";\n KeyCode[KeyCode[\"Meta\"] = 57] = \"Meta\";\n KeyCode[KeyCode[\"ContextMenu\"] = 58] = \"ContextMenu\";\n KeyCode[KeyCode[\"F1\"] = 59] = \"F1\";\n KeyCode[KeyCode[\"F2\"] = 60] = \"F2\";\n KeyCode[KeyCode[\"F3\"] = 61] = \"F3\";\n KeyCode[KeyCode[\"F4\"] = 62] = \"F4\";\n KeyCode[KeyCode[\"F5\"] = 63] = \"F5\";\n KeyCode[KeyCode[\"F6\"] = 64] = \"F6\";\n KeyCode[KeyCode[\"F7\"] = 65] = \"F7\";\n KeyCode[KeyCode[\"F8\"] = 66] = \"F8\";\n KeyCode[KeyCode[\"F9\"] = 67] = \"F9\";\n KeyCode[KeyCode[\"F10\"] = 68] = \"F10\";\n KeyCode[KeyCode[\"F11\"] = 69] = \"F11\";\n KeyCode[KeyCode[\"F12\"] = 70] = \"F12\";\n KeyCode[KeyCode[\"F13\"] = 71] = \"F13\";\n KeyCode[KeyCode[\"F14\"] = 72] = \"F14\";\n KeyCode[KeyCode[\"F15\"] = 73] = \"F15\";\n KeyCode[KeyCode[\"F16\"] = 74] = \"F16\";\n KeyCode[KeyCode[\"F17\"] = 75] = \"F17\";\n KeyCode[KeyCode[\"F18\"] = 76] = \"F18\";\n KeyCode[KeyCode[\"F19\"] = 77] = \"F19\";\n KeyCode[KeyCode[\"F20\"] = 78] = \"F20\";\n KeyCode[KeyCode[\"F21\"] = 79] = \"F21\";\n KeyCode[KeyCode[\"F22\"] = 80] = \"F22\";\n KeyCode[KeyCode[\"F23\"] = 81] = \"F23\";\n KeyCode[KeyCode[\"F24\"] = 82] = \"F24\";\n KeyCode[KeyCode[\"NumLock\"] = 83] = \"NumLock\";\n KeyCode[KeyCode[\"ScrollLock\"] = 84] = \"ScrollLock\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the ';:' key\n */\n KeyCode[KeyCode[\"Semicolon\"] = 85] = \"Semicolon\";\n /**\n * For any country/region, the '+' key\n * For the US standard keyboard, the '=+' key\n */\n KeyCode[KeyCode[\"Equal\"] = 86] = \"Equal\";\n /**\n * For any country/region, the ',' key\n * For the US standard keyboard, the ',<' key\n */\n KeyCode[KeyCode[\"Comma\"] = 87] = \"Comma\";\n /**\n * For any country/region, the '-' key\n * For the US standard keyboard, the '-_' key\n */\n KeyCode[KeyCode[\"Minus\"] = 88] = \"Minus\";\n /**\n * For any country/region, the '.' key\n * For the US standard keyboard, the '.>' key\n */\n KeyCode[KeyCode[\"Period\"] = 89] = \"Period\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '/?' key\n */\n KeyCode[KeyCode[\"Slash\"] = 90] = \"Slash\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '`~' key\n */\n KeyCode[KeyCode[\"Backquote\"] = 91] = \"Backquote\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '[{' key\n */\n KeyCode[KeyCode[\"BracketLeft\"] = 92] = \"BracketLeft\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '\\|' key\n */\n KeyCode[KeyCode[\"Backslash\"] = 93] = \"Backslash\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the ']}' key\n */\n KeyCode[KeyCode[\"BracketRight\"] = 94] = \"BracketRight\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the ''\"' key\n */\n KeyCode[KeyCode[\"Quote\"] = 95] = \"Quote\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n */\n KeyCode[KeyCode[\"OEM_8\"] = 96] = \"OEM_8\";\n /**\n * Either the angle bracket key or the backslash key on the RT 102-key keyboard.\n */\n KeyCode[KeyCode[\"IntlBackslash\"] = 97] = \"IntlBackslash\";\n KeyCode[KeyCode[\"Numpad0\"] = 98] = \"Numpad0\";\n KeyCode[KeyCode[\"Numpad1\"] = 99] = \"Numpad1\";\n KeyCode[KeyCode[\"Numpad2\"] = 100] = \"Numpad2\";\n KeyCode[KeyCode[\"Numpad3\"] = 101] = \"Numpad3\";\n KeyCode[KeyCode[\"Numpad4\"] = 102] = \"Numpad4\";\n KeyCode[KeyCode[\"Numpad5\"] = 103] = \"Numpad5\";\n KeyCode[KeyCode[\"Numpad6\"] = 104] = \"Numpad6\";\n KeyCode[KeyCode[\"Numpad7\"] = 105] = \"Numpad7\";\n KeyCode[KeyCode[\"Numpad8\"] = 106] = \"Numpad8\";\n KeyCode[KeyCode[\"Numpad9\"] = 107] = \"Numpad9\";\n KeyCode[KeyCode[\"NumpadMultiply\"] = 108] = \"NumpadMultiply\";\n KeyCode[KeyCode[\"NumpadAdd\"] = 109] = \"NumpadAdd\";\n KeyCode[KeyCode[\"NUMPAD_SEPARATOR\"] = 110] = \"NUMPAD_SEPARATOR\";\n KeyCode[KeyCode[\"NumpadSubtract\"] = 111] = \"NumpadSubtract\";\n KeyCode[KeyCode[\"NumpadDecimal\"] = 112] = \"NumpadDecimal\";\n KeyCode[KeyCode[\"NumpadDivide\"] = 113] = \"NumpadDivide\";\n /**\n * Cover all key codes when IME is processing input.\n */\n KeyCode[KeyCode[\"KEY_IN_COMPOSITION\"] = 114] = \"KEY_IN_COMPOSITION\";\n KeyCode[KeyCode[\"ABNT_C1\"] = 115] = \"ABNT_C1\";\n KeyCode[KeyCode[\"ABNT_C2\"] = 116] = \"ABNT_C2\";\n KeyCode[KeyCode[\"AudioVolumeMute\"] = 117] = \"AudioVolumeMute\";\n KeyCode[KeyCode[\"AudioVolumeUp\"] = 118] = \"AudioVolumeUp\";\n KeyCode[KeyCode[\"AudioVolumeDown\"] = 119] = \"AudioVolumeDown\";\n KeyCode[KeyCode[\"BrowserSearch\"] = 120] = \"BrowserSearch\";\n KeyCode[KeyCode[\"BrowserHome\"] = 121] = \"BrowserHome\";\n KeyCode[KeyCode[\"BrowserBack\"] = 122] = \"BrowserBack\";\n KeyCode[KeyCode[\"BrowserForward\"] = 123] = \"BrowserForward\";\n KeyCode[KeyCode[\"MediaTrackNext\"] = 124] = \"MediaTrackNext\";\n KeyCode[KeyCode[\"MediaTrackPrevious\"] = 125] = \"MediaTrackPrevious\";\n KeyCode[KeyCode[\"MediaStop\"] = 126] = \"MediaStop\";\n KeyCode[KeyCode[\"MediaPlayPause\"] = 127] = \"MediaPlayPause\";\n KeyCode[KeyCode[\"LaunchMediaPlayer\"] = 128] = \"LaunchMediaPlayer\";\n KeyCode[KeyCode[\"LaunchMail\"] = 129] = \"LaunchMail\";\n KeyCode[KeyCode[\"LaunchApp2\"] = 130] = \"LaunchApp2\";\n /**\n * VK_CLEAR, 0x0C, CLEAR key\n */\n KeyCode[KeyCode[\"Clear\"] = 131] = \"Clear\";\n /**\n * Placed last to cover the length of the enum.\n * Please do not depend on this value!\n */\n KeyCode[KeyCode[\"MAX_VALUE\"] = 132] = \"MAX_VALUE\";\n })(KeyCode || (KeyCode = {}));\n var MarkerSeverity;\n (function(MarkerSeverity) {\n MarkerSeverity[MarkerSeverity[\"Hint\"] = 1] = \"Hint\";\n MarkerSeverity[MarkerSeverity[\"Info\"] = 2] = \"Info\";\n MarkerSeverity[MarkerSeverity[\"Warning\"] = 4] = \"Warning\";\n MarkerSeverity[MarkerSeverity[\"Error\"] = 8] = \"Error\";\n })(MarkerSeverity || (MarkerSeverity = {}));\n var MarkerTag;\n (function(MarkerTag) {\n MarkerTag[MarkerTag[\"Unnecessary\"] = 1] = \"Unnecessary\";\n MarkerTag[MarkerTag[\"Deprecated\"] = 2] = \"Deprecated\";\n })(MarkerTag || (MarkerTag = {}));\n /**\n * Position in the minimap to render the decoration.\n */\n var MinimapPosition;\n (function(MinimapPosition) {\n MinimapPosition[MinimapPosition[\"Inline\"] = 1] = \"Inline\";\n MinimapPosition[MinimapPosition[\"Gutter\"] = 2] = \"Gutter\";\n })(MinimapPosition || (MinimapPosition = {}));\n /**\n * Section header style.\n */\n var MinimapSectionHeaderStyle;\n (function(MinimapSectionHeaderStyle) {\n MinimapSectionHeaderStyle[MinimapSectionHeaderStyle[\"Normal\"] = 1] = \"Normal\";\n MinimapSectionHeaderStyle[MinimapSectionHeaderStyle[\"Underlined\"] = 2] = \"Underlined\";\n })(MinimapSectionHeaderStyle || (MinimapSectionHeaderStyle = {}));\n /**\n * Type of hit element with the mouse in the editor.\n */\n var MouseTargetType;\n (function(MouseTargetType) {\n /**\n * Mouse is on top of an unknown element.\n */\n MouseTargetType[MouseTargetType[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n /**\n * Mouse is on top of the textarea used for input.\n */\n MouseTargetType[MouseTargetType[\"TEXTAREA\"] = 1] = \"TEXTAREA\";\n /**\n * Mouse is on top of the glyph margin\n */\n MouseTargetType[MouseTargetType[\"GUTTER_GLYPH_MARGIN\"] = 2] = \"GUTTER_GLYPH_MARGIN\";\n /**\n * Mouse is on top of the line numbers\n */\n MouseTargetType[MouseTargetType[\"GUTTER_LINE_NUMBERS\"] = 3] = \"GUTTER_LINE_NUMBERS\";\n /**\n * Mouse is on top of the line decorations\n */\n MouseTargetType[MouseTargetType[\"GUTTER_LINE_DECORATIONS\"] = 4] = \"GUTTER_LINE_DECORATIONS\";\n /**\n * Mouse is on top of the whitespace left in the gutter by a view zone.\n */\n MouseTargetType[MouseTargetType[\"GUTTER_VIEW_ZONE\"] = 5] = \"GUTTER_VIEW_ZONE\";\n /**\n * Mouse is on top of text in the content.\n */\n MouseTargetType[MouseTargetType[\"CONTENT_TEXT\"] = 6] = \"CONTENT_TEXT\";\n /**\n * Mouse is on top of empty space in the content (e.g. after line text or below last line)\n */\n MouseTargetType[MouseTargetType[\"CONTENT_EMPTY\"] = 7] = \"CONTENT_EMPTY\";\n /**\n * Mouse is on top of a view zone in the content.\n */\n MouseTargetType[MouseTargetType[\"CONTENT_VIEW_ZONE\"] = 8] = \"CONTENT_VIEW_ZONE\";\n /**\n * Mouse is on top of a content widget.\n */\n MouseTargetType[MouseTargetType[\"CONTENT_WIDGET\"] = 9] = \"CONTENT_WIDGET\";\n /**\n * Mouse is on top of the decorations overview ruler.\n */\n MouseTargetType[MouseTargetType[\"OVERVIEW_RULER\"] = 10] = \"OVERVIEW_RULER\";\n /**\n * Mouse is on top of a scrollbar.\n */\n MouseTargetType[MouseTargetType[\"SCROLLBAR\"] = 11] = \"SCROLLBAR\";\n /**\n * Mouse is on top of an overlay widget.\n */\n MouseTargetType[MouseTargetType[\"OVERLAY_WIDGET\"] = 12] = \"OVERLAY_WIDGET\";\n /**\n * Mouse is outside of the editor.\n */\n MouseTargetType[MouseTargetType[\"OUTSIDE_EDITOR\"] = 13] = \"OUTSIDE_EDITOR\";\n })(MouseTargetType || (MouseTargetType = {}));\n var NewSymbolNameTag;\n (function(NewSymbolNameTag) {\n NewSymbolNameTag[NewSymbolNameTag[\"AIGenerated\"] = 1] = \"AIGenerated\";\n })(NewSymbolNameTag || (NewSymbolNameTag = {}));\n var NewSymbolNameTriggerKind;\n (function(NewSymbolNameTriggerKind) {\n NewSymbolNameTriggerKind[NewSymbolNameTriggerKind[\"Invoke\"] = 0] = \"Invoke\";\n NewSymbolNameTriggerKind[NewSymbolNameTriggerKind[\"Automatic\"] = 1] = \"Automatic\";\n })(NewSymbolNameTriggerKind || (NewSymbolNameTriggerKind = {}));\n /**\n * A positioning preference for rendering overlay widgets.\n */\n var OverlayWidgetPositionPreference;\n (function(OverlayWidgetPositionPreference) {\n /**\n * Position the overlay widget in the top right corner\n */\n OverlayWidgetPositionPreference[OverlayWidgetPositionPreference[\"TOP_RIGHT_CORNER\"] = 0] = \"TOP_RIGHT_CORNER\";\n /**\n * Position the overlay widget in the bottom right corner\n */\n OverlayWidgetPositionPreference[OverlayWidgetPositionPreference[\"BOTTOM_RIGHT_CORNER\"] = 1] = \"BOTTOM_RIGHT_CORNER\";\n /**\n * Position the overlay widget in the top center\n */\n OverlayWidgetPositionPreference[OverlayWidgetPositionPreference[\"TOP_CENTER\"] = 2] = \"TOP_CENTER\";\n })(OverlayWidgetPositionPreference || (OverlayWidgetPositionPreference = {}));\n /**\n * Vertical Lane in the overview ruler of the editor.\n */\n var OverviewRulerLane$1;\n (function(OverviewRulerLane) {\n OverviewRulerLane[OverviewRulerLane[\"Left\"] = 1] = \"Left\";\n OverviewRulerLane[OverviewRulerLane[\"Center\"] = 2] = \"Center\";\n OverviewRulerLane[OverviewRulerLane[\"Right\"] = 4] = \"Right\";\n OverviewRulerLane[OverviewRulerLane[\"Full\"] = 7] = \"Full\";\n })(OverviewRulerLane$1 || (OverviewRulerLane$1 = {}));\n /**\n * How a partial acceptance was triggered.\n */\n var PartialAcceptTriggerKind;\n (function(PartialAcceptTriggerKind) {\n PartialAcceptTriggerKind[PartialAcceptTriggerKind[\"Word\"] = 0] = \"Word\";\n PartialAcceptTriggerKind[PartialAcceptTriggerKind[\"Line\"] = 1] = \"Line\";\n PartialAcceptTriggerKind[PartialAcceptTriggerKind[\"Suggest\"] = 2] = \"Suggest\";\n })(PartialAcceptTriggerKind || (PartialAcceptTriggerKind = {}));\n var PositionAffinity;\n (function(PositionAffinity) {\n /**\n * Prefers the left most position.\n */\n PositionAffinity[PositionAffinity[\"Left\"] = 0] = \"Left\";\n /**\n * Prefers the right most position.\n */\n PositionAffinity[PositionAffinity[\"Right\"] = 1] = \"Right\";\n /**\n * No preference.\n */\n PositionAffinity[PositionAffinity[\"None\"] = 2] = \"None\";\n /**\n * If the given position is on injected text, prefers the position left of it.\n */\n PositionAffinity[PositionAffinity[\"LeftOfInjectedText\"] = 3] = \"LeftOfInjectedText\";\n /**\n * If the given position is on injected text, prefers the position right of it.\n */\n PositionAffinity[PositionAffinity[\"RightOfInjectedText\"] = 4] = \"RightOfInjectedText\";\n })(PositionAffinity || (PositionAffinity = {}));\n var RenderLineNumbersType;\n (function(RenderLineNumbersType) {\n RenderLineNumbersType[RenderLineNumbersType[\"Off\"] = 0] = \"Off\";\n RenderLineNumbersType[RenderLineNumbersType[\"On\"] = 1] = \"On\";\n RenderLineNumbersType[RenderLineNumbersType[\"Relative\"] = 2] = \"Relative\";\n RenderLineNumbersType[RenderLineNumbersType[\"Interval\"] = 3] = \"Interval\";\n RenderLineNumbersType[RenderLineNumbersType[\"Custom\"] = 4] = \"Custom\";\n })(RenderLineNumbersType || (RenderLineNumbersType = {}));\n var RenderMinimap;\n (function(RenderMinimap) {\n RenderMinimap[RenderMinimap[\"None\"] = 0] = \"None\";\n RenderMinimap[RenderMinimap[\"Text\"] = 1] = \"Text\";\n RenderMinimap[RenderMinimap[\"Blocks\"] = 2] = \"Blocks\";\n })(RenderMinimap || (RenderMinimap = {}));\n var ScrollType;\n (function(ScrollType) {\n ScrollType[ScrollType[\"Smooth\"] = 0] = \"Smooth\";\n ScrollType[ScrollType[\"Immediate\"] = 1] = \"Immediate\";\n })(ScrollType || (ScrollType = {}));\n var ScrollbarVisibility;\n (function(ScrollbarVisibility) {\n ScrollbarVisibility[ScrollbarVisibility[\"Auto\"] = 1] = \"Auto\";\n ScrollbarVisibility[ScrollbarVisibility[\"Hidden\"] = 2] = \"Hidden\";\n ScrollbarVisibility[ScrollbarVisibility[\"Visible\"] = 3] = \"Visible\";\n })(ScrollbarVisibility || (ScrollbarVisibility = {}));\n /**\n * The direction of a selection.\n */\n var SelectionDirection;\n (function(SelectionDirection) {\n /**\n * The selection starts above where it ends.\n */\n SelectionDirection[SelectionDirection[\"LTR\"] = 0] = \"LTR\";\n /**\n * The selection starts below where it ends.\n */\n SelectionDirection[SelectionDirection[\"RTL\"] = 1] = \"RTL\";\n })(SelectionDirection || (SelectionDirection = {}));\n var ShowLightbulbIconMode;\n (function(ShowLightbulbIconMode) {\n ShowLightbulbIconMode[\"Off\"] = \"off\";\n ShowLightbulbIconMode[\"OnCode\"] = \"onCode\";\n ShowLightbulbIconMode[\"On\"] = \"on\";\n })(ShowLightbulbIconMode || (ShowLightbulbIconMode = {}));\n var SignatureHelpTriggerKind;\n (function(SignatureHelpTriggerKind) {\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"Invoke\"] = 1] = \"Invoke\";\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"TriggerCharacter\"] = 2] = \"TriggerCharacter\";\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"ContentChange\"] = 3] = \"ContentChange\";\n })(SignatureHelpTriggerKind || (SignatureHelpTriggerKind = {}));\n /**\n * A symbol kind.\n */\n var SymbolKind$1;\n (function(SymbolKind) {\n SymbolKind[SymbolKind[\"File\"] = 0] = \"File\";\n SymbolKind[SymbolKind[\"Module\"] = 1] = \"Module\";\n SymbolKind[SymbolKind[\"Namespace\"] = 2] = \"Namespace\";\n SymbolKind[SymbolKind[\"Package\"] = 3] = \"Package\";\n SymbolKind[SymbolKind[\"Class\"] = 4] = \"Class\";\n SymbolKind[SymbolKind[\"Method\"] = 5] = \"Method\";\n SymbolKind[SymbolKind[\"Property\"] = 6] = \"Property\";\n SymbolKind[SymbolKind[\"Field\"] = 7] = \"Field\";\n SymbolKind[SymbolKind[\"Constructor\"] = 8] = \"Constructor\";\n SymbolKind[SymbolKind[\"Enum\"] = 9] = \"Enum\";\n SymbolKind[SymbolKind[\"Interface\"] = 10] = \"Interface\";\n SymbolKind[SymbolKind[\"Function\"] = 11] = \"Function\";\n SymbolKind[SymbolKind[\"Variable\"] = 12] = \"Variable\";\n SymbolKind[SymbolKind[\"Constant\"] = 13] = \"Constant\";\n SymbolKind[SymbolKind[\"String\"] = 14] = \"String\";\n SymbolKind[SymbolKind[\"Number\"] = 15] = \"Number\";\n SymbolKind[SymbolKind[\"Boolean\"] = 16] = \"Boolean\";\n SymbolKind[SymbolKind[\"Array\"] = 17] = \"Array\";\n SymbolKind[SymbolKind[\"Object\"] = 18] = \"Object\";\n SymbolKind[SymbolKind[\"Key\"] = 19] = \"Key\";\n SymbolKind[SymbolKind[\"Null\"] = 20] = \"Null\";\n SymbolKind[SymbolKind[\"EnumMember\"] = 21] = \"EnumMember\";\n SymbolKind[SymbolKind[\"Struct\"] = 22] = \"Struct\";\n SymbolKind[SymbolKind[\"Event\"] = 23] = \"Event\";\n SymbolKind[SymbolKind[\"Operator\"] = 24] = \"Operator\";\n SymbolKind[SymbolKind[\"TypeParameter\"] = 25] = \"TypeParameter\";\n })(SymbolKind$1 || (SymbolKind$1 = {}));\n var SymbolTag$1;\n (function(SymbolTag) {\n SymbolTag[SymbolTag[\"Deprecated\"] = 1] = \"Deprecated\";\n })(SymbolTag$1 || (SymbolTag$1 = {}));\n /**\n * Text Direction for a decoration.\n */\n var TextDirection$1;\n (function(TextDirection) {\n TextDirection[TextDirection[\"LTR\"] = 0] = \"LTR\";\n TextDirection[TextDirection[\"RTL\"] = 1] = \"RTL\";\n })(TextDirection$1 || (TextDirection$1 = {}));\n /**\n * The kind of animation in which the editor's cursor should be rendered.\n */\n var TextEditorCursorBlinkingStyle;\n (function(TextEditorCursorBlinkingStyle) {\n /**\n * Hidden\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Hidden\"] = 0] = \"Hidden\";\n /**\n * Blinking\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Blink\"] = 1] = \"Blink\";\n /**\n * Blinking with smooth fading\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Smooth\"] = 2] = \"Smooth\";\n /**\n * Blinking with prolonged filled state and smooth fading\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Phase\"] = 3] = \"Phase\";\n /**\n * Expand collapse animation on the y axis\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Expand\"] = 4] = \"Expand\";\n /**\n * No-Blinking\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Solid\"] = 5] = \"Solid\";\n })(TextEditorCursorBlinkingStyle || (TextEditorCursorBlinkingStyle = {}));\n /**\n * The style in which the editor's cursor should be rendered.\n */\n var TextEditorCursorStyle;\n (function(TextEditorCursorStyle) {\n /**\n * As a vertical line (sitting between two characters).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"Line\"] = 1] = \"Line\";\n /**\n * As a block (sitting on top of a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"Block\"] = 2] = \"Block\";\n /**\n * As a horizontal line (sitting under a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"Underline\"] = 3] = \"Underline\";\n /**\n * As a thin vertical line (sitting between two characters).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"LineThin\"] = 4] = \"LineThin\";\n /**\n * As an outlined block (sitting on top of a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"BlockOutline\"] = 5] = \"BlockOutline\";\n /**\n * As a thin horizontal line (sitting under a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"UnderlineThin\"] = 6] = \"UnderlineThin\";\n })(TextEditorCursorStyle || (TextEditorCursorStyle = {}));\n /**\n * Describes the behavior of decorations when typing/editing near their edges.\n * Note: Please do not edit the values, as they very carefully match `DecorationRangeBehavior`\n */\n var TrackedRangeStickiness;\n (function(TrackedRangeStickiness) {\n TrackedRangeStickiness[TrackedRangeStickiness[\"AlwaysGrowsWhenTypingAtEdges\"] = 0] = \"AlwaysGrowsWhenTypingAtEdges\";\n TrackedRangeStickiness[TrackedRangeStickiness[\"NeverGrowsWhenTypingAtEdges\"] = 1] = \"NeverGrowsWhenTypingAtEdges\";\n TrackedRangeStickiness[TrackedRangeStickiness[\"GrowsOnlyWhenTypingBefore\"] = 2] = \"GrowsOnlyWhenTypingBefore\";\n TrackedRangeStickiness[TrackedRangeStickiness[\"GrowsOnlyWhenTypingAfter\"] = 3] = \"GrowsOnlyWhenTypingAfter\";\n })(TrackedRangeStickiness || (TrackedRangeStickiness = {}));\n /**\n * Describes how to indent wrapped lines.\n */\n var WrappingIndent;\n (function(WrappingIndent) {\n /**\n * No indentation => wrapped lines begin at column 1.\n */\n WrappingIndent[WrappingIndent[\"None\"] = 0] = \"None\";\n /**\n * Same => wrapped lines get the same indentation as the parent.\n */\n WrappingIndent[WrappingIndent[\"Same\"] = 1] = \"Same\";\n /**\n * Indent => wrapped lines get +1 indentation toward the parent.\n */\n WrappingIndent[WrappingIndent[\"Indent\"] = 2] = \"Indent\";\n /**\n * DeepIndent => wrapped lines get +2 indentation toward the parent.\n */\n WrappingIndent[WrappingIndent[\"DeepIndent\"] = 3] = \"DeepIndent\";\n })(WrappingIndent || (WrappingIndent = {}));\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/services/editorBaseApi.js\n var KeyMod = class {\n static {\n this.CtrlCmd = 2048;\n }\n static {\n this.Shift = 1024;\n }\n static {\n this.Alt = 512;\n }\n static {\n this.WinCtrl = 256;\n }\n static chord(firstPart, secondPart) {\n return KeyChord(firstPart, secondPart);\n }\n };\n function createMonacoBaseAPI() {\n return {\n editor: void 0,\n languages: void 0,\n CancellationTokenSource,\n Emitter,\n KeyCode,\n KeyMod,\n Position: Position$1,\n Range: Range$1,\n Selection,\n SelectionDirection,\n MarkerSeverity,\n MarkerTag,\n Uri: URI$2,\n Token\n };\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/map.js\n var _a;\n var _c;\n var ResourceMapEntry = class {\n constructor(uri, value) {\n this.uri = uri;\n this.value = value;\n }\n };\n function isEntries(arg) {\n return Array.isArray(arg);\n }\n (class ResourceMap {\n static {\n this.defaultToKey = (resource) => resource.toString();\n }\n constructor(arg, toKey) {\n this[_a] = \"ResourceMap\";\n if (arg instanceof ResourceMap) {\n this.map = new Map(arg.map);\n this.toKey = toKey ?? ResourceMap.defaultToKey;\n } else if (isEntries(arg)) {\n this.map = /* @__PURE__ */ new Map();\n this.toKey = toKey ?? ResourceMap.defaultToKey;\n for (const [resource, value] of arg) this.set(resource, value);\n } else {\n this.map = /* @__PURE__ */ new Map();\n this.toKey = arg ?? ResourceMap.defaultToKey;\n }\n }\n set(resource, value) {\n this.map.set(this.toKey(resource), new ResourceMapEntry(resource, value));\n return this;\n }\n get(resource) {\n return this.map.get(this.toKey(resource))?.value;\n }\n has(resource) {\n return this.map.has(this.toKey(resource));\n }\n get size() {\n return this.map.size;\n }\n clear() {\n this.map.clear();\n }\n delete(resource) {\n return this.map.delete(this.toKey(resource));\n }\n forEach(clb, thisArg) {\n if (typeof thisArg !== \"undefined\") clb = clb.bind(thisArg);\n for (const [_, entry] of this.map) clb(entry.value, entry.uri, this);\n }\n *values() {\n for (const entry of this.map.values()) yield entry.value;\n }\n *keys() {\n for (const entry of this.map.values()) yield entry.uri;\n }\n *entries() {\n for (const entry of this.map.values()) yield [entry.uri, entry.value];\n }\n *[(_a = Symbol.toStringTag, Symbol.iterator)]() {\n for (const [, entry] of this.map) yield [entry.uri, entry.value];\n }\n });\n var LinkedMap = class {\n constructor() {\n this[_c] = \"LinkedMap\";\n this._map = /* @__PURE__ */ new Map();\n this._head = void 0;\n this._tail = void 0;\n this._size = 0;\n this._state = 0;\n }\n clear() {\n this._map.clear();\n this._head = void 0;\n this._tail = void 0;\n this._size = 0;\n this._state++;\n }\n isEmpty() {\n return !this._head && !this._tail;\n }\n get size() {\n return this._size;\n }\n get first() {\n return this._head?.value;\n }\n get last() {\n return this._tail?.value;\n }\n has(key) {\n return this._map.has(key);\n }\n get(key, touch = 0) {\n const item = this._map.get(key);\n if (!item) return;\n if (touch !== 0) this.touch(item, touch);\n return item.value;\n }\n set(key, value, touch = 0) {\n let item = this._map.get(key);\n if (item) {\n item.value = value;\n if (touch !== 0) this.touch(item, touch);\n } else {\n item = {\n key,\n value,\n next: void 0,\n previous: void 0\n };\n switch (touch) {\n case 0:\n this.addItemLast(item);\n break;\n case 1:\n this.addItemFirst(item);\n break;\n case 2:\n this.addItemLast(item);\n break;\n default:\n this.addItemLast(item);\n break;\n }\n this._map.set(key, item);\n this._size++;\n }\n return this;\n }\n delete(key) {\n return !!this.remove(key);\n }\n remove(key) {\n const item = this._map.get(key);\n if (!item) return;\n this._map.delete(key);\n this.removeItem(item);\n this._size--;\n return item.value;\n }\n shift() {\n if (!this._head && !this._tail) return;\n if (!this._head || !this._tail) throw new Error(\"Invalid list\");\n const item = this._head;\n this._map.delete(item.key);\n this.removeItem(item);\n this._size--;\n return item.value;\n }\n forEach(callbackfn, thisArg) {\n const state = this._state;\n let current = this._head;\n while (current) {\n if (thisArg) callbackfn.bind(thisArg)(current.value, current.key, this);\n else callbackfn(current.value, current.key, this);\n if (this._state !== state) throw new Error(`LinkedMap got modified during iteration.`);\n current = current.next;\n }\n }\n keys() {\n const map = this;\n const state = this._state;\n let current = this._head;\n const iterator = {\n [Symbol.iterator]() {\n return iterator;\n },\n next() {\n if (map._state !== state) throw new Error(`LinkedMap got modified during iteration.`);\n if (current) {\n const result = {\n value: current.key,\n done: false\n };\n current = current.next;\n return result;\n } else return {\n value: void 0,\n done: true\n };\n }\n };\n return iterator;\n }\n values() {\n const map = this;\n const state = this._state;\n let current = this._head;\n const iterator = {\n [Symbol.iterator]() {\n return iterator;\n },\n next() {\n if (map._state !== state) throw new Error(`LinkedMap got modified during iteration.`);\n if (current) {\n const result = {\n value: current.value,\n done: false\n };\n current = current.next;\n return result;\n } else return {\n value: void 0,\n done: true\n };\n }\n };\n return iterator;\n }\n entries() {\n const map = this;\n const state = this._state;\n let current = this._head;\n const iterator = {\n [Symbol.iterator]() {\n return iterator;\n },\n next() {\n if (map._state !== state) throw new Error(`LinkedMap got modified during iteration.`);\n if (current) {\n const result = {\n value: [current.key, current.value],\n done: false\n };\n current = current.next;\n return result;\n } else return {\n value: void 0,\n done: true\n };\n }\n };\n return iterator;\n }\n [(_c = Symbol.toStringTag, Symbol.iterator)]() {\n return this.entries();\n }\n trimOld(newSize) {\n if (newSize >= this.size) return;\n if (newSize === 0) {\n this.clear();\n return;\n }\n let current = this._head;\n let currentSize = this.size;\n while (current && currentSize > newSize) {\n this._map.delete(current.key);\n current = current.next;\n currentSize--;\n }\n this._head = current;\n this._size = currentSize;\n if (current) current.previous = void 0;\n this._state++;\n }\n trimNew(newSize) {\n if (newSize >= this.size) return;\n if (newSize === 0) {\n this.clear();\n return;\n }\n let current = this._tail;\n let currentSize = this.size;\n while (current && currentSize > newSize) {\n this._map.delete(current.key);\n current = current.previous;\n currentSize--;\n }\n this._tail = current;\n this._size = currentSize;\n if (current) current.next = void 0;\n this._state++;\n }\n addItemFirst(item) {\n if (!this._head && !this._tail) this._tail = item;\n else if (!this._head) throw new Error(\"Invalid list\");\n else {\n item.next = this._head;\n this._head.previous = item;\n }\n this._head = item;\n this._state++;\n }\n addItemLast(item) {\n if (!this._head && !this._tail) this._head = item;\n else if (!this._tail) throw new Error(\"Invalid list\");\n else {\n item.previous = this._tail;\n this._tail.next = item;\n }\n this._tail = item;\n this._state++;\n }\n removeItem(item) {\n if (item === this._head && item === this._tail) {\n this._head = void 0;\n this._tail = void 0;\n } else if (item === this._head) {\n if (!item.next) throw new Error(\"Invalid list\");\n item.next.previous = void 0;\n this._head = item.next;\n } else if (item === this._tail) {\n if (!item.previous) throw new Error(\"Invalid list\");\n item.previous.next = void 0;\n this._tail = item.previous;\n } else {\n const next = item.next;\n const previous = item.previous;\n if (!next || !previous) throw new Error(\"Invalid list\");\n next.previous = previous;\n previous.next = next;\n }\n item.next = void 0;\n item.previous = void 0;\n this._state++;\n }\n touch(item, touch) {\n if (!this._head || !this._tail) throw new Error(\"Invalid list\");\n if (touch !== 1 && touch !== 2) return;\n if (touch === 1) {\n if (item === this._head) return;\n const next = item.next;\n const previous = item.previous;\n if (item === this._tail) {\n previous.next = void 0;\n this._tail = previous;\n } else {\n next.previous = previous;\n previous.next = next;\n }\n item.previous = void 0;\n item.next = this._head;\n this._head.previous = item;\n this._head = item;\n this._state++;\n } else if (touch === 2) {\n if (item === this._tail) return;\n const next = item.next;\n const previous = item.previous;\n if (item === this._head) {\n next.previous = void 0;\n this._head = next;\n } else {\n next.previous = previous;\n previous.next = next;\n }\n item.next = void 0;\n item.previous = this._tail;\n this._tail.next = item;\n this._tail = item;\n this._state++;\n }\n }\n toJSON() {\n const data = [];\n this.forEach((value, key) => {\n data.push([key, value]);\n });\n return data;\n }\n fromJSON(data) {\n this.clear();\n for (const [key, value] of data) this.set(key, value);\n }\n };\n var Cache = class extends LinkedMap {\n constructor(limit, ratio = 1) {\n super();\n this._limit = limit;\n this._ratio = Math.min(Math.max(0, ratio), 1);\n }\n get limit() {\n return this._limit;\n }\n set limit(limit) {\n this._limit = limit;\n this.checkTrim();\n }\n get(key, touch = 2) {\n return super.get(key, touch);\n }\n peek(key) {\n return super.get(key, 0);\n }\n set(key, value) {\n super.set(key, value, 2);\n return this;\n }\n checkTrim() {\n if (this.size > this._limit) this.trim(Math.round(this._limit * this._ratio));\n }\n };\n var LRUCache = class extends Cache {\n constructor(limit, ratio = 1) {\n super(limit, ratio);\n }\n trim(newSize) {\n this.trimOld(newSize);\n }\n set(key, value) {\n super.set(key, value);\n this.checkTrim();\n return this;\n }\n };\n var SetMap = class {\n constructor() {\n this.map = /* @__PURE__ */ new Map();\n }\n add(key, value) {\n let values = this.map.get(key);\n if (!values) {\n values = /* @__PURE__ */ new Set();\n this.map.set(key, values);\n }\n values.add(value);\n }\n delete(key, value) {\n const values = this.map.get(key);\n if (!values) return;\n values.delete(value);\n if (values.size === 0) this.map.delete(key);\n }\n forEach(key, fn) {\n const values = this.map.get(key);\n if (!values) return;\n values.forEach(fn);\n }\n };\n new LRUCache(10);\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/model.js\n /**\n * Vertical Lane in the overview ruler of the editor.\n */\n var OverviewRulerLane;\n (function(OverviewRulerLane) {\n OverviewRulerLane[OverviewRulerLane[\"Left\"] = 1] = \"Left\";\n OverviewRulerLane[OverviewRulerLane[\"Center\"] = 2] = \"Center\";\n OverviewRulerLane[OverviewRulerLane[\"Right\"] = 4] = \"Right\";\n OverviewRulerLane[OverviewRulerLane[\"Full\"] = 7] = \"Full\";\n })(OverviewRulerLane || (OverviewRulerLane = {}));\n /**\n * Vertical Lane in the glyph margin of the editor.\n */\n var GlyphMarginLane;\n (function(GlyphMarginLane) {\n GlyphMarginLane[GlyphMarginLane[\"Left\"] = 1] = \"Left\";\n GlyphMarginLane[GlyphMarginLane[\"Center\"] = 2] = \"Center\";\n GlyphMarginLane[GlyphMarginLane[\"Right\"] = 3] = \"Right\";\n })(GlyphMarginLane || (GlyphMarginLane = {}));\n /**\n * Text Direction for a decoration.\n */\n var TextDirection;\n (function(TextDirection) {\n TextDirection[TextDirection[\"LTR\"] = 0] = \"LTR\";\n TextDirection[TextDirection[\"RTL\"] = 1] = \"RTL\";\n })(TextDirection || (TextDirection = {}));\n var InjectedTextCursorStops;\n (function(InjectedTextCursorStops) {\n InjectedTextCursorStops[InjectedTextCursorStops[\"Both\"] = 0] = \"Both\";\n InjectedTextCursorStops[InjectedTextCursorStops[\"Right\"] = 1] = \"Right\";\n InjectedTextCursorStops[InjectedTextCursorStops[\"Left\"] = 2] = \"Left\";\n InjectedTextCursorStops[InjectedTextCursorStops[\"None\"] = 3] = \"None\";\n })(InjectedTextCursorStops || (InjectedTextCursorStops = {}));\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/model/textModelSearch.js\n function isMultilineRegexSource(searchString) {\n if (!searchString || searchString.length === 0) return false;\n for (let i = 0, len = searchString.length; i < len; i++) {\n const chCode = searchString.charCodeAt(i);\n if (chCode === 10) return true;\n if (chCode === 92) {\n i++;\n if (i >= len) break;\n const nextChCode = searchString.charCodeAt(i);\n if (nextChCode === 110 || nextChCode === 114 || nextChCode === 87) return true;\n }\n }\n return false;\n }\n function leftIsWordBounday(wordSeparators, text, textLength, matchStartIndex, matchLength) {\n if (matchStartIndex === 0) return true;\n const charBefore = text.charCodeAt(matchStartIndex - 1);\n if (wordSeparators.get(charBefore) !== 0) return true;\n if (charBefore === 13 || charBefore === 10) return true;\n if (matchLength > 0) {\n const firstCharInMatch = text.charCodeAt(matchStartIndex);\n if (wordSeparators.get(firstCharInMatch) !== 0) return true;\n }\n return false;\n }\n function rightIsWordBounday(wordSeparators, text, textLength, matchStartIndex, matchLength) {\n if (matchStartIndex + matchLength === textLength) return true;\n const charAfter = text.charCodeAt(matchStartIndex + matchLength);\n if (wordSeparators.get(charAfter) !== 0) return true;\n if (charAfter === 13 || charAfter === 10) return true;\n if (matchLength > 0) {\n const lastCharInMatch = text.charCodeAt(matchStartIndex + matchLength - 1);\n if (wordSeparators.get(lastCharInMatch) !== 0) return true;\n }\n return false;\n }\n function isValidMatch(wordSeparators, text, textLength, matchStartIndex, matchLength) {\n return leftIsWordBounday(wordSeparators, text, textLength, matchStartIndex, matchLength) && rightIsWordBounday(wordSeparators, text, textLength, matchStartIndex, matchLength);\n }\n var Searcher = class {\n constructor(wordSeparators, searchRegex) {\n this._wordSeparators = wordSeparators;\n this._searchRegex = searchRegex;\n this._prevMatchStartIndex = -1;\n this._prevMatchLength = 0;\n }\n reset(lastIndex) {\n this._searchRegex.lastIndex = lastIndex;\n this._prevMatchStartIndex = -1;\n this._prevMatchLength = 0;\n }\n next(text) {\n const textLength = text.length;\n let m;\n do {\n if (this._prevMatchStartIndex + this._prevMatchLength === textLength) return null;\n m = this._searchRegex.exec(text);\n if (!m) return null;\n const matchStartIndex = m.index;\n const matchLength = m[0].length;\n if (matchStartIndex === this._prevMatchStartIndex && matchLength === this._prevMatchLength) {\n if (matchLength === 0) {\n if (getNextCodePoint(text, textLength, this._searchRegex.lastIndex) > 65535) this._searchRegex.lastIndex += 2;\n else this._searchRegex.lastIndex += 1;\n continue;\n }\n return null;\n }\n this._prevMatchStartIndex = matchStartIndex;\n this._prevMatchLength = matchLength;\n if (!this._wordSeparators || isValidMatch(this._wordSeparators, text, textLength, matchStartIndex, matchLength)) return m;\n } while (m);\n return null;\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/core/wordHelper.js\n const USUAL_WORD_SEPARATORS = \"`~!@#$%^&*()-=+[{]}\\\\|;:'\\\",.<>/?\";\n /**\n * Create a word definition regular expression based on default word separators.\n * Optionally provide allowed separators that should be included in words.\n *\n * The default would look like this:\n * /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g\n */\n function createWordRegExp(allowInWords = \"\") {\n let source = \"(-?\\\\d*\\\\.\\\\d\\\\w*)|([^\";\n for (const sep of USUAL_WORD_SEPARATORS) {\n if (allowInWords.indexOf(sep) >= 0) continue;\n source += \"\\\\\" + sep;\n }\n source += \"\\\\s]+)\";\n return new RegExp(source, \"g\");\n }\n const DEFAULT_WORD_REGEXP = createWordRegExp();\n function ensureValidWordDefinition(wordDefinition) {\n let result = DEFAULT_WORD_REGEXP;\n if (wordDefinition && wordDefinition instanceof RegExp) if (!wordDefinition.global) {\n let flags = \"g\";\n if (wordDefinition.ignoreCase) flags += \"i\";\n if (wordDefinition.multiline) flags += \"m\";\n if (wordDefinition.unicode) flags += \"u\";\n result = new RegExp(wordDefinition.source, flags);\n } else result = wordDefinition;\n result.lastIndex = 0;\n return result;\n }\n const _defaultConfig = new LinkedList();\n _defaultConfig.unshift({\n maxLen: 1e3,\n windowSize: 15,\n timeBudget: 150\n });\n function getWordAtText(column, wordDefinition, text, textOffset, config) {\n wordDefinition = ensureValidWordDefinition(wordDefinition);\n if (!config) config = Iterable.first(_defaultConfig);\n if (text.length > config.maxLen) {\n let start = column - config.maxLen / 2;\n if (start < 0) start = 0;\n else textOffset += start;\n text = text.substring(start, column + config.maxLen / 2);\n return getWordAtText(column, wordDefinition, text, textOffset, config);\n }\n const t1 = Date.now();\n const pos = column - 1 - textOffset;\n let prevRegexIndex = -1;\n let match = null;\n for (let i = 1;; i++) {\n if (Date.now() - t1 >= config.timeBudget) break;\n const regexIndex = pos - config.windowSize * i;\n wordDefinition.lastIndex = Math.max(0, regexIndex);\n const thisMatch = _findRegexMatchEnclosingPosition(wordDefinition, text, pos, prevRegexIndex);\n if (!thisMatch && match) break;\n match = thisMatch;\n if (regexIndex <= 0) break;\n prevRegexIndex = regexIndex;\n }\n if (match) {\n const result = {\n word: match[0],\n startColumn: textOffset + 1 + match.index,\n endColumn: textOffset + 1 + match.index + match[0].length\n };\n wordDefinition.lastIndex = 0;\n return result;\n }\n return null;\n }\n function _findRegexMatchEnclosingPosition(wordDefinition, text, pos, stopPos) {\n let match;\n while (match = wordDefinition.exec(text)) {\n const matchIndex = match.index || 0;\n if (matchIndex <= pos && wordDefinition.lastIndex >= pos) return match;\n else if (stopPos > 0 && matchIndex > stopPos) return null;\n }\n return null;\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/services/unicodeTextModelHighlighter.js\n var UnicodeTextModelHighlighter = class {\n static computeUnicodeHighlights(model, options, range) {\n const startLine = range ? range.startLineNumber : 1;\n const endLine = range ? range.endLineNumber : model.getLineCount();\n const codePointHighlighter = new CodePointHighlighter(options);\n const candidates = codePointHighlighter.getCandidateCodePoints();\n let regex;\n if (candidates === \"allNonBasicAscii\") regex = /* @__PURE__ */ new RegExp(\"[^\\\\t\\\\n\\\\r\\\\x20-\\\\x7E]\", \"g\");\n else regex = new RegExp(`${buildRegExpCharClassExpr(Array.from(candidates))}`, \"g\");\n const searcher = new Searcher(null, regex);\n const ranges = [];\n let hasMore = false;\n let m;\n let ambiguousCharacterCount = 0;\n let invisibleCharacterCount = 0;\n let nonBasicAsciiCharacterCount = 0;\n forLoop: for (let lineNumber = startLine, lineCount = endLine; lineNumber <= lineCount; lineNumber++) {\n const lineContent = model.getLineContent(lineNumber);\n const lineLength = lineContent.length;\n searcher.reset(0);\n do {\n m = searcher.next(lineContent);\n if (m) {\n let startIndex = m.index;\n let endIndex = m.index + m[0].length;\n if (startIndex > 0) {\n if (isHighSurrogate(lineContent.charCodeAt(startIndex - 1))) startIndex--;\n }\n if (endIndex + 1 < lineLength) {\n if (isHighSurrogate(lineContent.charCodeAt(endIndex - 1))) endIndex++;\n }\n const str = lineContent.substring(startIndex, endIndex);\n let word = getWordAtText(startIndex + 1, DEFAULT_WORD_REGEXP, lineContent, 0);\n if (word && word.endColumn <= startIndex + 1) word = null;\n const highlightReason = codePointHighlighter.shouldHighlightNonBasicASCII(str, word ? word.word : null);\n if (highlightReason !== 0) {\n if (highlightReason === 3) ambiguousCharacterCount++;\n else if (highlightReason === 2) invisibleCharacterCount++;\n else if (highlightReason === 1) nonBasicAsciiCharacterCount++;\n else assertNever();\n if (ranges.length >= 1e3) {\n hasMore = true;\n break forLoop;\n }\n ranges.push(new Range$1(lineNumber, startIndex + 1, lineNumber, endIndex + 1));\n }\n }\n } while (m);\n }\n return {\n ranges,\n hasMore,\n ambiguousCharacterCount,\n invisibleCharacterCount,\n nonBasicAsciiCharacterCount\n };\n }\n static computeUnicodeHighlightReason(char, options) {\n const codePointHighlighter = new CodePointHighlighter(options);\n switch (codePointHighlighter.shouldHighlightNonBasicASCII(char, null)) {\n case 0: return null;\n case 2: return { kind: 1 };\n case 3: {\n const codePoint = char.codePointAt(0);\n const primaryConfusable = codePointHighlighter.ambiguousCharacters.getPrimaryConfusable(codePoint);\n const notAmbiguousInLocales = AmbiguousCharacters.getLocales().filter((l) => !AmbiguousCharacters.getInstance(/* @__PURE__ */ new Set([...options.allowedLocales, l])).isAmbiguous(codePoint));\n return {\n kind: 0,\n confusableWith: String.fromCodePoint(primaryConfusable),\n notAmbiguousInLocales\n };\n }\n case 1: return { kind: 2 };\n }\n }\n };\n function buildRegExpCharClassExpr(codePoints, flags) {\n return `[${escapeRegExpCharacters(codePoints.map((i) => String.fromCodePoint(i)).join(\"\"))}]`;\n }\n var CodePointHighlighter = class {\n constructor(options) {\n this.options = options;\n this.allowedCodePoints = new Set(options.allowedCodePoints);\n this.ambiguousCharacters = AmbiguousCharacters.getInstance(new Set(options.allowedLocales));\n }\n getCandidateCodePoints() {\n if (this.options.nonBasicASCII) return \"allNonBasicAscii\";\n const set = /* @__PURE__ */ new Set();\n if (this.options.invisibleCharacters) {\n for (const cp of InvisibleCharacters.codePoints) if (!isAllowedInvisibleCharacter(String.fromCodePoint(cp))) set.add(cp);\n }\n if (this.options.ambiguousCharacters) for (const cp of this.ambiguousCharacters.getConfusableCodePoints()) set.add(cp);\n for (const cp of this.allowedCodePoints) set.delete(cp);\n return set;\n }\n shouldHighlightNonBasicASCII(character, wordContext) {\n const codePoint = character.codePointAt(0);\n if (this.allowedCodePoints.has(codePoint)) return 0;\n if (this.options.nonBasicASCII) return 1;\n let hasBasicASCIICharacters = false;\n let hasNonConfusableNonBasicAsciiCharacter = false;\n if (wordContext) for (const char of wordContext) {\n const codePoint = char.codePointAt(0);\n const isBasicASCII$1 = isBasicASCII(char);\n hasBasicASCIICharacters = hasBasicASCIICharacters || isBasicASCII$1;\n if (!isBasicASCII$1 && !this.ambiguousCharacters.isAmbiguous(codePoint) && !InvisibleCharacters.isInvisibleCharacter(codePoint)) hasNonConfusableNonBasicAsciiCharacter = true;\n }\n if (!hasBasicASCIICharacters && hasNonConfusableNonBasicAsciiCharacter) return 0;\n if (this.options.invisibleCharacters) {\n if (!isAllowedInvisibleCharacter(character) && InvisibleCharacters.isInvisibleCharacter(codePoint)) return 2;\n }\n if (this.options.ambiguousCharacters) {\n if (this.ambiguousCharacters.isAmbiguous(codePoint)) return 3;\n }\n return 0;\n }\n };\n function isAllowedInvisibleCharacter(character) {\n return character === \" \" || character === \"\\n\" || character === \" \";\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/diff/linesDiffComputer.js\n var LinesDiff = class {\n constructor(changes, moves, hitTimeout) {\n this.changes = changes;\n this.moves = moves;\n this.hitTimeout = hitTimeout;\n }\n };\n var MovedText = class {\n constructor(lineRangeMapping, changes) {\n this.lineRangeMapping = lineRangeMapping;\n this.changes = changes;\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/arrays.js\n function equals$1(one, other, itemEquals = (a, b) => a === b) {\n if (one === other) return true;\n if (!one || !other) return false;\n if (one.length !== other.length) return false;\n for (let i = 0, len = one.length; i < len; i++) if (!itemEquals(one[i], other[i])) return false;\n return true;\n }\n /**\n * Splits the given items into a list of (non-empty) groups.\n * `shouldBeGrouped` is used to decide if two consecutive items should be in the same group.\n * The order of the items is preserved.\n */\n function* groupAdjacentBy(items, shouldBeGrouped) {\n let currentGroup;\n let last;\n for (const item of items) {\n if (last !== void 0 && shouldBeGrouped(last, item)) currentGroup.push(item);\n else {\n if (currentGroup) yield currentGroup;\n currentGroup = [item];\n }\n last = item;\n }\n if (currentGroup) yield currentGroup;\n }\n function forEachAdjacent(arr, f) {\n for (let i = 0; i <= arr.length; i++) f(i === 0 ? void 0 : arr[i - 1], i === arr.length ? void 0 : arr[i]);\n }\n function forEachWithNeighbors(arr, f) {\n for (let i = 0; i < arr.length; i++) f(i === 0 ? void 0 : arr[i - 1], arr[i], i + 1 === arr.length ? void 0 : arr[i + 1]);\n }\n function pushMany(arr, items) {\n for (const item of items) arr.push(item);\n }\n var CompareResult;\n (function(CompareResult) {\n function isLessThan(result) {\n return result < 0;\n }\n CompareResult.isLessThan = isLessThan;\n function isLessThanOrEqual(result) {\n return result <= 0;\n }\n CompareResult.isLessThanOrEqual = isLessThanOrEqual;\n function isGreaterThan(result) {\n return result > 0;\n }\n CompareResult.isGreaterThan = isGreaterThan;\n function isNeitherLessOrGreaterThan(result) {\n return result === 0;\n }\n CompareResult.isNeitherLessOrGreaterThan = isNeitherLessOrGreaterThan;\n CompareResult.greaterThan = 1;\n CompareResult.lessThan = -1;\n CompareResult.neitherLessOrGreaterThan = 0;\n })(CompareResult || (CompareResult = {}));\n function compareBy(selector, comparator) {\n return (a, b) => comparator(selector(a), selector(b));\n }\n /**\n * The natural order on numbers.\n */\n const numberComparator = (a, b) => a - b;\n function reverseOrder(comparator) {\n return (a, b) => -comparator(a, b);\n }\n (class CallbackIterable {\n static {\n this.empty = new CallbackIterable((_callback) => {});\n }\n constructor(iterate) {\n this.iterate = iterate;\n }\n toArray() {\n const result = [];\n this.iterate((item) => {\n result.push(item);\n return true;\n });\n return result;\n }\n filter(predicate) {\n return new CallbackIterable((cb) => this.iterate((item) => predicate(item) ? cb(item) : true));\n }\n map(mapFn) {\n return new CallbackIterable((cb) => this.iterate((item) => cb(mapFn(item))));\n }\n findLast(predicate) {\n let result;\n this.iterate((item) => {\n if (predicate(item)) result = item;\n return true;\n });\n return result;\n }\n findLastMaxBy(comparator) {\n let result;\n let first = true;\n this.iterate((item) => {\n if (first || CompareResult.isGreaterThan(comparator(item, result))) {\n first = false;\n result = item;\n }\n return true;\n });\n return result;\n }\n });\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/core/ranges/offsetRange.js\n /**\n * A range of offsets (0-based).\n */\n var OffsetRange = class OffsetRange {\n static fromTo(start, endExclusive) {\n return new OffsetRange(start, endExclusive);\n }\n static addRange(range, sortedRanges) {\n let i = 0;\n while (i < sortedRanges.length && sortedRanges[i].endExclusive < range.start) i++;\n let j = i;\n while (j < sortedRanges.length && sortedRanges[j].start <= range.endExclusive) j++;\n if (i === j) sortedRanges.splice(i, 0, range);\n else {\n const start = Math.min(range.start, sortedRanges[i].start);\n const end = Math.max(range.endExclusive, sortedRanges[j - 1].endExclusive);\n sortedRanges.splice(i, j - i, new OffsetRange(start, end));\n }\n }\n static tryCreate(start, endExclusive) {\n if (start > endExclusive) return;\n return new OffsetRange(start, endExclusive);\n }\n static ofLength(length) {\n return new OffsetRange(0, length);\n }\n static ofStartAndLength(start, length) {\n return new OffsetRange(start, start + length);\n }\n static emptyAt(offset) {\n return new OffsetRange(offset, offset);\n }\n constructor(start, endExclusive) {\n this.start = start;\n this.endExclusive = endExclusive;\n if (start > endExclusive) throw new BugIndicatingError(`Invalid range: ${this.toString()}`);\n }\n get isEmpty() {\n return this.start === this.endExclusive;\n }\n delta(offset) {\n return new OffsetRange(this.start + offset, this.endExclusive + offset);\n }\n deltaStart(offset) {\n return new OffsetRange(this.start + offset, this.endExclusive);\n }\n deltaEnd(offset) {\n return new OffsetRange(this.start, this.endExclusive + offset);\n }\n get length() {\n return this.endExclusive - this.start;\n }\n toString() {\n return `[${this.start}, ${this.endExclusive})`;\n }\n equals(other) {\n return this.start === other.start && this.endExclusive === other.endExclusive;\n }\n contains(offset) {\n return this.start <= offset && offset < this.endExclusive;\n }\n /**\n * for all numbers n: range1.contains(n) or range2.contains(n) => range1.join(range2).contains(n)\n * The joined range is the smallest range that contains both ranges.\n */\n join(other) {\n return new OffsetRange(Math.min(this.start, other.start), Math.max(this.endExclusive, other.endExclusive));\n }\n /**\n * for all numbers n: range1.contains(n) and range2.contains(n) <=> range1.intersect(range2).contains(n)\n *\n * The resulting range is empty if the ranges do not intersect, but touch.\n * If the ranges don't even touch, the result is undefined.\n */\n intersect(other) {\n const start = Math.max(this.start, other.start);\n const end = Math.min(this.endExclusive, other.endExclusive);\n if (start <= end) return new OffsetRange(start, end);\n }\n intersectionLength(range) {\n const start = Math.max(this.start, range.start);\n const end = Math.min(this.endExclusive, range.endExclusive);\n return Math.max(0, end - start);\n }\n intersects(other) {\n return Math.max(this.start, other.start) < Math.min(this.endExclusive, other.endExclusive);\n }\n intersectsOrTouches(other) {\n return Math.max(this.start, other.start) <= Math.min(this.endExclusive, other.endExclusive);\n }\n isBefore(other) {\n return this.endExclusive <= other.start;\n }\n isAfter(other) {\n return this.start >= other.endExclusive;\n }\n slice(arr) {\n return arr.slice(this.start, this.endExclusive);\n }\n substring(str) {\n return str.substring(this.start, this.endExclusive);\n }\n /**\n * Returns the given value if it is contained in this instance, otherwise the closest value that is contained.\n * The range must not be empty.\n */\n clip(value) {\n if (this.isEmpty) throw new BugIndicatingError(`Invalid clipping range: ${this.toString()}`);\n return Math.max(this.start, Math.min(this.endExclusive - 1, value));\n }\n /**\n * Returns `r := value + k * length` such that `r` is contained in this range.\n * The range must not be empty.\n *\n * E.g. `[5, 10).clipCyclic(10) === 5`, `[5, 10).clipCyclic(11) === 6` and `[5, 10).clipCyclic(4) === 9`.\n */\n clipCyclic(value) {\n if (this.isEmpty) throw new BugIndicatingError(`Invalid clipping range: ${this.toString()}`);\n if (value < this.start) return this.endExclusive - (this.start - value) % this.length;\n if (value >= this.endExclusive) return this.start + (value - this.start) % this.length;\n return value;\n }\n forEach(f) {\n for (let i = this.start; i < this.endExclusive; i++) f(i);\n }\n /**\n * this: [ 5, 10), range: [10, 15) => [5, 15)]\n * Throws if the ranges are not touching.\n */\n joinRightTouching(range) {\n if (this.endExclusive !== range.start) throw new BugIndicatingError(`Invalid join: ${this.toString()} and ${range.toString()}`);\n return new OffsetRange(this.start, range.endExclusive);\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/arraysFind.js\n /**\n * Finds the last item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[true, ..., true, false, ..., false]`!\n *\n * @returns `undefined` if no item matches, otherwise the last item that matches the predicate.\n */\n function findLastMonotonous(array, predicate) {\n const idx = findLastIdxMonotonous(array, predicate);\n return idx === -1 ? void 0 : array[idx];\n }\n /**\n * Finds the last item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[true, ..., true, false, ..., false]`!\n *\n * @returns `startIdx - 1` if predicate is false for all items, otherwise the index of the last item that matches the predicate.\n */\n function findLastIdxMonotonous(array, predicate, startIdx = 0, endIdxEx = array.length) {\n let i = startIdx;\n let j = endIdxEx;\n while (i < j) {\n const k = Math.floor((i + j) / 2);\n if (predicate(array[k])) i = k + 1;\n else j = k;\n }\n return i - 1;\n }\n /**\n * Finds the first item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[false, ..., false, true, ..., true]`!\n *\n * @returns `undefined` if no item matches, otherwise the first item that matches the predicate.\n */\n function findFirstMonotonous(array, predicate) {\n const idx = findFirstIdxMonotonousOrArrLen(array, predicate);\n return idx === array.length ? void 0 : array[idx];\n }\n /**\n * Finds the first item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[false, ..., false, true, ..., true]`!\n *\n * @returns `endIdxEx` if predicate is false for all items, otherwise the index of the first item that matches the predicate.\n */\n function findFirstIdxMonotonousOrArrLen(array, predicate, startIdx = 0, endIdxEx = array.length) {\n let i = startIdx;\n let j = endIdxEx;\n while (i < j) {\n const k = Math.floor((i + j) / 2);\n if (predicate(array[k])) j = k;\n else i = k + 1;\n }\n return i;\n }\n /**\n * Use this when\n * * You have a sorted array\n * * You query this array with a monotonous predicate to find the last item that has a certain property.\n * * You query this array multiple times with monotonous predicates that get weaker and weaker.\n */\n var MonotonousArray = class MonotonousArray {\n static {\n this.assertInvariants = false;\n }\n constructor(_array) {\n this._array = _array;\n this._findLastMonotonousLastIdx = 0;\n }\n /**\n * The predicate must be monotonous, i.e. `arr.map(predicate)` must be like `[true, ..., true, false, ..., false]`!\n * For subsequent calls, current predicate must be weaker than (or equal to) the previous predicate, i.e. more entries must be `true`.\n */\n findLastMonotonous(predicate) {\n if (MonotonousArray.assertInvariants) {\n if (this._prevFindLastPredicate) {\n for (const item of this._array) if (this._prevFindLastPredicate(item) && !predicate(item)) throw new Error(\"MonotonousArray: current predicate must be weaker than (or equal to) the previous predicate.\");\n }\n this._prevFindLastPredicate = predicate;\n }\n const idx = findLastIdxMonotonous(this._array, predicate, this._findLastMonotonousLastIdx);\n this._findLastMonotonousLastIdx = idx + 1;\n return idx === -1 ? void 0 : this._array[idx];\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/core/ranges/lineRange.js\n /**\n * A range of lines (1-based).\n */\n var LineRange = class LineRange {\n static ofLength(startLineNumber, length) {\n return new LineRange(startLineNumber, startLineNumber + length);\n }\n static fromRange(range) {\n return new LineRange(range.startLineNumber, range.endLineNumber);\n }\n static fromRangeInclusive(range) {\n return new LineRange(range.startLineNumber, range.endLineNumber + 1);\n }\n static {\n this.compareByStart = compareBy((l) => l.startLineNumber, numberComparator);\n }\n /**\n * @param lineRanges An array of arrays of of sorted line ranges.\n */\n static joinMany(lineRanges) {\n if (lineRanges.length === 0) return [];\n let result = new LineRangeSet(lineRanges[0].slice());\n for (let i = 1; i < lineRanges.length; i++) result = result.getUnion(new LineRangeSet(lineRanges[i].slice()));\n return result.ranges;\n }\n static join(lineRanges) {\n if (lineRanges.length === 0) throw new BugIndicatingError(\"lineRanges cannot be empty\");\n let startLineNumber = lineRanges[0].startLineNumber;\n let endLineNumberExclusive = lineRanges[0].endLineNumberExclusive;\n for (let i = 1; i < lineRanges.length; i++) {\n startLineNumber = Math.min(startLineNumber, lineRanges[i].startLineNumber);\n endLineNumberExclusive = Math.max(endLineNumberExclusive, lineRanges[i].endLineNumberExclusive);\n }\n return new LineRange(startLineNumber, endLineNumberExclusive);\n }\n /**\n * @internal\n */\n static deserialize(lineRange) {\n return new LineRange(lineRange[0], lineRange[1]);\n }\n constructor(startLineNumber, endLineNumberExclusive) {\n if (startLineNumber > endLineNumberExclusive) throw new BugIndicatingError(`startLineNumber ${startLineNumber} cannot be after endLineNumberExclusive ${endLineNumberExclusive}`);\n this.startLineNumber = startLineNumber;\n this.endLineNumberExclusive = endLineNumberExclusive;\n }\n /**\n * Indicates if this line range contains the given line number.\n */\n contains(lineNumber) {\n return this.startLineNumber <= lineNumber && lineNumber < this.endLineNumberExclusive;\n }\n /**\n * Indicates if this line range is empty.\n */\n get isEmpty() {\n return this.startLineNumber === this.endLineNumberExclusive;\n }\n /**\n * Moves this line range by the given offset of line numbers.\n */\n delta(offset) {\n return new LineRange(this.startLineNumber + offset, this.endLineNumberExclusive + offset);\n }\n deltaLength(offset) {\n return new LineRange(this.startLineNumber, this.endLineNumberExclusive + offset);\n }\n /**\n * The number of lines this line range spans.\n */\n get length() {\n return this.endLineNumberExclusive - this.startLineNumber;\n }\n /**\n * Creates a line range that combines this and the given line range.\n */\n join(other) {\n return new LineRange(Math.min(this.startLineNumber, other.startLineNumber), Math.max(this.endLineNumberExclusive, other.endLineNumberExclusive));\n }\n toString() {\n return `[${this.startLineNumber},${this.endLineNumberExclusive})`;\n }\n /**\n * The resulting range is empty if the ranges do not intersect, but touch.\n * If the ranges don't even touch, the result is undefined.\n */\n intersect(other) {\n const startLineNumber = Math.max(this.startLineNumber, other.startLineNumber);\n const endLineNumberExclusive = Math.min(this.endLineNumberExclusive, other.endLineNumberExclusive);\n if (startLineNumber <= endLineNumberExclusive) return new LineRange(startLineNumber, endLineNumberExclusive);\n }\n intersectsStrict(other) {\n return this.startLineNumber < other.endLineNumberExclusive && other.startLineNumber < this.endLineNumberExclusive;\n }\n intersectsOrTouches(other) {\n return this.startLineNumber <= other.endLineNumberExclusive && other.startLineNumber <= this.endLineNumberExclusive;\n }\n equals(b) {\n return this.startLineNumber === b.startLineNumber && this.endLineNumberExclusive === b.endLineNumberExclusive;\n }\n toInclusiveRange() {\n if (this.isEmpty) return null;\n return new Range$1(this.startLineNumber, 1, this.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER);\n }\n /**\n * @deprecated Using this function is discouraged because it might lead to bugs: The end position is not guaranteed to be a valid position!\n */\n toExclusiveRange() {\n return new Range$1(this.startLineNumber, 1, this.endLineNumberExclusive, 1);\n }\n mapToLineArray(f) {\n const result = [];\n for (let lineNumber = this.startLineNumber; lineNumber < this.endLineNumberExclusive; lineNumber++) result.push(f(lineNumber));\n return result;\n }\n forEach(f) {\n for (let lineNumber = this.startLineNumber; lineNumber < this.endLineNumberExclusive; lineNumber++) f(lineNumber);\n }\n /**\n * @internal\n */\n serialize() {\n return [this.startLineNumber, this.endLineNumberExclusive];\n }\n /**\n * Converts this 1-based line range to a 0-based offset range (subtracts 1!).\n * @internal\n */\n toOffsetRange() {\n return new OffsetRange(this.startLineNumber - 1, this.endLineNumberExclusive - 1);\n }\n addMargin(marginTop, marginBottom) {\n return new LineRange(this.startLineNumber - marginTop, this.endLineNumberExclusive + marginBottom);\n }\n };\n var LineRangeSet = class LineRangeSet {\n constructor(_normalizedRanges = []) {\n this._normalizedRanges = _normalizedRanges;\n }\n get ranges() {\n return this._normalizedRanges;\n }\n addRange(range) {\n if (range.length === 0) return;\n const joinRangeStartIdx = findFirstIdxMonotonousOrArrLen(this._normalizedRanges, (r) => r.endLineNumberExclusive >= range.startLineNumber);\n const joinRangeEndIdxExclusive = findLastIdxMonotonous(this._normalizedRanges, (r) => r.startLineNumber <= range.endLineNumberExclusive) + 1;\n if (joinRangeStartIdx === joinRangeEndIdxExclusive) this._normalizedRanges.splice(joinRangeStartIdx, 0, range);\n else if (joinRangeStartIdx === joinRangeEndIdxExclusive - 1) {\n const joinRange = this._normalizedRanges[joinRangeStartIdx];\n this._normalizedRanges[joinRangeStartIdx] = joinRange.join(range);\n } else {\n const joinRange = this._normalizedRanges[joinRangeStartIdx].join(this._normalizedRanges[joinRangeEndIdxExclusive - 1]).join(range);\n this._normalizedRanges.splice(joinRangeStartIdx, joinRangeEndIdxExclusive - joinRangeStartIdx, joinRange);\n }\n }\n contains(lineNumber) {\n const rangeThatStartsBeforeEnd = findLastMonotonous(this._normalizedRanges, (r) => r.startLineNumber <= lineNumber);\n return !!rangeThatStartsBeforeEnd && rangeThatStartsBeforeEnd.endLineNumberExclusive > lineNumber;\n }\n intersects(range) {\n const rangeThatStartsBeforeEnd = findLastMonotonous(this._normalizedRanges, (r) => r.startLineNumber < range.endLineNumberExclusive);\n return !!rangeThatStartsBeforeEnd && rangeThatStartsBeforeEnd.endLineNumberExclusive > range.startLineNumber;\n }\n getUnion(other) {\n if (this._normalizedRanges.length === 0) return other;\n if (other._normalizedRanges.length === 0) return this;\n const result = [];\n let i1 = 0;\n let i2 = 0;\n let current = null;\n while (i1 < this._normalizedRanges.length || i2 < other._normalizedRanges.length) {\n let next = null;\n if (i1 < this._normalizedRanges.length && i2 < other._normalizedRanges.length) {\n const lineRange1 = this._normalizedRanges[i1];\n const lineRange2 = other._normalizedRanges[i2];\n if (lineRange1.startLineNumber < lineRange2.startLineNumber) {\n next = lineRange1;\n i1++;\n } else {\n next = lineRange2;\n i2++;\n }\n } else if (i1 < this._normalizedRanges.length) {\n next = this._normalizedRanges[i1];\n i1++;\n } else {\n next = other._normalizedRanges[i2];\n i2++;\n }\n if (current === null) current = next;\n else if (current.endLineNumberExclusive >= next.startLineNumber) current = new LineRange(current.startLineNumber, Math.max(current.endLineNumberExclusive, next.endLineNumberExclusive));\n else {\n result.push(current);\n current = next;\n }\n }\n if (current !== null) result.push(current);\n return new LineRangeSet(result);\n }\n /**\n * Subtracts all ranges in this set from `range` and returns the result.\n */\n subtractFrom(range) {\n const joinRangeStartIdx = findFirstIdxMonotonousOrArrLen(this._normalizedRanges, (r) => r.endLineNumberExclusive >= range.startLineNumber);\n const joinRangeEndIdxExclusive = findLastIdxMonotonous(this._normalizedRanges, (r) => r.startLineNumber <= range.endLineNumberExclusive) + 1;\n if (joinRangeStartIdx === joinRangeEndIdxExclusive) return new LineRangeSet([range]);\n const result = [];\n let startLineNumber = range.startLineNumber;\n for (let i = joinRangeStartIdx; i < joinRangeEndIdxExclusive; i++) {\n const r = this._normalizedRanges[i];\n if (r.startLineNumber > startLineNumber) result.push(new LineRange(startLineNumber, r.startLineNumber));\n startLineNumber = r.endLineNumberExclusive;\n }\n if (startLineNumber < range.endLineNumberExclusive) result.push(new LineRange(startLineNumber, range.endLineNumberExclusive));\n return new LineRangeSet(result);\n }\n toString() {\n return this._normalizedRanges.map((r) => r.toString()).join(\", \");\n }\n getIntersection(other) {\n const result = [];\n let i1 = 0;\n let i2 = 0;\n while (i1 < this._normalizedRanges.length && i2 < other._normalizedRanges.length) {\n const r1 = this._normalizedRanges[i1];\n const r2 = other._normalizedRanges[i2];\n const i = r1.intersect(r2);\n if (i && !i.isEmpty) result.push(i);\n if (r1.endLineNumberExclusive < r2.endLineNumberExclusive) i1++;\n else i2++;\n }\n return new LineRangeSet(result);\n }\n getWithDelta(value) {\n return new LineRangeSet(this._normalizedRanges.map((r) => r.delta(value)));\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/core/text/textLength.js\n /**\n * Represents a non-negative length of text in terms of line and column count.\n */\n var TextLength = class TextLength {\n static {\n this.zero = new TextLength(0, 0);\n }\n static betweenPositions(position1, position2) {\n if (position1.lineNumber === position2.lineNumber) return new TextLength(0, position2.column - position1.column);\n else return new TextLength(position2.lineNumber - position1.lineNumber, position2.column - 1);\n }\n static fromPosition(pos) {\n return new TextLength(pos.lineNumber - 1, pos.column - 1);\n }\n static ofRange(range) {\n return TextLength.betweenPositions(range.getStartPosition(), range.getEndPosition());\n }\n static ofText(text) {\n let line = 0;\n let column = 0;\n for (const c of text) if (c === \"\\n\") {\n line++;\n column = 0;\n } else column++;\n return new TextLength(line, column);\n }\n constructor(lineCount, columnCount) {\n this.lineCount = lineCount;\n this.columnCount = columnCount;\n }\n isGreaterThanOrEqualTo(other) {\n if (this.lineCount !== other.lineCount) return this.lineCount > other.lineCount;\n return this.columnCount >= other.columnCount;\n }\n add(other) {\n if (other.lineCount === 0) return new TextLength(this.lineCount, this.columnCount + other.columnCount);\n else return new TextLength(this.lineCount + other.lineCount, other.columnCount);\n }\n createRange(startPosition) {\n if (this.lineCount === 0) return new Range$1(startPosition.lineNumber, startPosition.column, startPosition.lineNumber, startPosition.column + this.columnCount);\n else return new Range$1(startPosition.lineNumber, startPosition.column, startPosition.lineNumber + this.lineCount, this.columnCount + 1);\n }\n toRange() {\n return new Range$1(1, 1, this.lineCount + 1, this.columnCount + 1);\n }\n toLineRange() {\n return LineRange.ofLength(1, this.lineCount + 1);\n }\n addToPosition(position) {\n if (this.lineCount === 0) return new Position$1(position.lineNumber, position.column + this.columnCount);\n else return new Position$1(position.lineNumber + this.lineCount, this.columnCount + 1);\n }\n toString() {\n return `${this.lineCount},${this.columnCount}`;\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/core/text/positionToOffsetImpl.js\n var PositionOffsetTransformerBase = class {\n getOffsetRange(range) {\n return new OffsetRange(this.getOffset(range.getStartPosition()), this.getOffset(range.getEndPosition()));\n }\n getRange(offsetRange) {\n return Range$1.fromPositions(this.getPosition(offsetRange.start), this.getPosition(offsetRange.endExclusive));\n }\n getStringReplacement(edit) {\n return new Deps.deps.StringReplacement(this.getOffsetRange(edit.range), edit.text);\n }\n getTextReplacement(edit) {\n return new Deps.deps.TextReplacement(this.getRange(edit.replaceRange), edit.newText);\n }\n getTextEdit(edit) {\n const edits = edit.replacements.map((e) => this.getTextReplacement(e));\n return new Deps.deps.TextEdit(edits);\n }\n };\n var Deps = class {\n static {\n this._deps = void 0;\n }\n static get deps() {\n if (!this._deps) throw new Error(\"Dependencies not set. Call _setDependencies first.\");\n return this._deps;\n }\n };\n var PositionOffsetTransformer = class extends PositionOffsetTransformerBase {\n constructor(text) {\n super();\n this.text = text;\n this.lineStartOffsetByLineIdx = [];\n this.lineEndOffsetByLineIdx = [];\n this.lineStartOffsetByLineIdx.push(0);\n for (let i = 0; i < text.length; i++) if (text.charAt(i) === \"\\n\") {\n this.lineStartOffsetByLineIdx.push(i + 1);\n if (i > 0 && text.charAt(i - 1) === \"\\r\") this.lineEndOffsetByLineIdx.push(i - 1);\n else this.lineEndOffsetByLineIdx.push(i);\n }\n this.lineEndOffsetByLineIdx.push(text.length);\n }\n getOffset(position) {\n const valPos = this._validatePosition(position);\n return this.lineStartOffsetByLineIdx[valPos.lineNumber - 1] + valPos.column - 1;\n }\n _validatePosition(position) {\n if (position.lineNumber < 1) return new Position$1(1, 1);\n const lineCount = this.textLength.lineCount + 1;\n if (position.lineNumber > lineCount) return new Position$1(lineCount, this.getLineLength(lineCount) + 1);\n if (position.column < 1) return new Position$1(position.lineNumber, 1);\n const lineLength = this.getLineLength(position.lineNumber);\n if (position.column - 1 > lineLength) return new Position$1(position.lineNumber, lineLength + 1);\n return position;\n }\n getPosition(offset) {\n const idx = findLastIdxMonotonous(this.lineStartOffsetByLineIdx, (i) => i <= offset);\n return new Position$1(idx + 1, offset - this.lineStartOffsetByLineIdx[idx] + 1);\n }\n get textLength() {\n const lineIdx = this.lineStartOffsetByLineIdx.length - 1;\n return new Deps.deps.TextLength(lineIdx, this.text.length - this.lineStartOffsetByLineIdx[lineIdx]);\n }\n getLineLength(lineNumber) {\n return this.lineEndOffsetByLineIdx[lineNumber - 1] - this.lineStartOffsetByLineIdx[lineNumber - 1];\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/core/text/abstractText.js\n var AbstractText = class {\n constructor() {\n this._transformer = void 0;\n }\n get endPositionExclusive() {\n return this.length.addToPosition(new Position$1(1, 1));\n }\n get lineRange() {\n return this.length.toLineRange();\n }\n getValue() {\n return this.getValueOfRange(this.length.toRange());\n }\n getValueOfOffsetRange(range) {\n return this.getValueOfRange(this.getTransformer().getRange(range));\n }\n getLineLength(lineNumber) {\n return this.getValueOfRange(new Range$1(lineNumber, 1, lineNumber, Number.MAX_SAFE_INTEGER)).length;\n }\n getTransformer() {\n if (!this._transformer) this._transformer = new PositionOffsetTransformer(this.getValue());\n return this._transformer;\n }\n getLineAt(lineNumber) {\n return this.getValueOfRange(new Range$1(lineNumber, 1, lineNumber, Number.MAX_SAFE_INTEGER));\n }\n };\n var LineBasedText = class extends AbstractText {\n constructor(_getLineContent, _lineCount) {\n assert(_lineCount >= 1);\n super();\n this._getLineContent = _getLineContent;\n this._lineCount = _lineCount;\n }\n getValueOfRange(range) {\n if (range.startLineNumber === range.endLineNumber) return this._getLineContent(range.startLineNumber).substring(range.startColumn - 1, range.endColumn - 1);\n let result = this._getLineContent(range.startLineNumber).substring(range.startColumn - 1);\n for (let i = range.startLineNumber + 1; i < range.endLineNumber; i++) result += \"\\n\" + this._getLineContent(i);\n result += \"\\n\" + this._getLineContent(range.endLineNumber).substring(0, range.endColumn - 1);\n return result;\n }\n getLineLength(lineNumber) {\n return this._getLineContent(lineNumber).length;\n }\n get length() {\n const lastLine = this._getLineContent(this._lineCount);\n return new TextLength(this._lineCount - 1, lastLine.length);\n }\n };\n var ArrayText = class extends LineBasedText {\n constructor(lines) {\n super((lineNumber) => lines[lineNumber - 1], lines.length);\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/core/edits/textEdit.js\n var TextReplacement = class TextReplacement {\n static joinReplacements(replacements, initialValue) {\n if (replacements.length === 0) throw new BugIndicatingError();\n if (replacements.length === 1) return replacements[0];\n const startPos = replacements[0].range.getStartPosition();\n const endPos = replacements[replacements.length - 1].range.getEndPosition();\n let newText = \"\";\n for (let i = 0; i < replacements.length; i++) {\n const curEdit = replacements[i];\n newText += curEdit.text;\n if (i < replacements.length - 1) {\n const nextEdit = replacements[i + 1];\n const gapRange = Range$1.fromPositions(curEdit.range.getEndPosition(), nextEdit.range.getStartPosition());\n const gapText = initialValue.getValueOfRange(gapRange);\n newText += gapText;\n }\n }\n return new TextReplacement(Range$1.fromPositions(startPos, endPos), newText);\n }\n static fromStringReplacement(replacement, initialState) {\n return new TextReplacement(initialState.getTransformer().getRange(replacement.replaceRange), replacement.newText);\n }\n static delete(range) {\n return new TextReplacement(range, \"\");\n }\n constructor(range, text) {\n this.range = range;\n this.text = text;\n }\n get isEmpty() {\n return this.range.isEmpty() && this.text.length === 0;\n }\n static equals(first, second) {\n return first.range.equalsRange(second.range) && first.text === second.text;\n }\n equals(other) {\n return TextReplacement.equals(this, other);\n }\n removeCommonPrefixAndSuffix(text) {\n return this.removeCommonPrefix(text).removeCommonSuffix(text);\n }\n removeCommonPrefix(text) {\n const normalizedOriginalText = text.getValueOfRange(this.range).replaceAll(\"\\r\\n\", \"\\n\");\n const normalizedModifiedText = this.text.replaceAll(\"\\r\\n\", \"\\n\");\n const commonPrefixLen = commonPrefixLength(normalizedOriginalText, normalizedModifiedText);\n const start = TextLength.ofText(normalizedOriginalText.substring(0, commonPrefixLen)).addToPosition(this.range.getStartPosition());\n const newText = normalizedModifiedText.substring(commonPrefixLen);\n const range = Range$1.fromPositions(start, this.range.getEndPosition());\n return new TextReplacement(range, newText);\n }\n removeCommonSuffix(text) {\n const normalizedOriginalText = text.getValueOfRange(this.range).replaceAll(\"\\r\\n\", \"\\n\");\n const normalizedModifiedText = this.text.replaceAll(\"\\r\\n\", \"\\n\");\n const commonSuffixLen = commonSuffixLength(normalizedOriginalText, normalizedModifiedText);\n const end = TextLength.ofText(normalizedOriginalText.substring(0, normalizedOriginalText.length - commonSuffixLen)).addToPosition(this.range.getStartPosition());\n const newText = normalizedModifiedText.substring(0, normalizedModifiedText.length - commonSuffixLen);\n const range = Range$1.fromPositions(this.range.getStartPosition(), end);\n return new TextReplacement(range, newText);\n }\n toString() {\n const start = this.range.getStartPosition();\n const end = this.range.getEndPosition();\n return `(${start.lineNumber},${start.column} -> ${end.lineNumber},${end.column}): \"${this.text}\"`;\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/diff/rangeMapping.js\n /**\n * Maps a line range in the original text model to a line range in the modified text model.\n */\n var LineRangeMapping = class LineRangeMapping {\n static inverse(mapping, originalLineCount, modifiedLineCount) {\n const result = [];\n let lastOriginalEndLineNumber = 1;\n let lastModifiedEndLineNumber = 1;\n for (const m of mapping) {\n const r = new LineRangeMapping(new LineRange(lastOriginalEndLineNumber, m.original.startLineNumber), new LineRange(lastModifiedEndLineNumber, m.modified.startLineNumber));\n if (!r.modified.isEmpty) result.push(r);\n lastOriginalEndLineNumber = m.original.endLineNumberExclusive;\n lastModifiedEndLineNumber = m.modified.endLineNumberExclusive;\n }\n const r = new LineRangeMapping(new LineRange(lastOriginalEndLineNumber, originalLineCount + 1), new LineRange(lastModifiedEndLineNumber, modifiedLineCount + 1));\n if (!r.modified.isEmpty) result.push(r);\n return result;\n }\n static clip(mapping, originalRange, modifiedRange) {\n const result = [];\n for (const m of mapping) {\n const original = m.original.intersect(originalRange);\n const modified = m.modified.intersect(modifiedRange);\n if (original && !original.isEmpty && modified && !modified.isEmpty) result.push(new LineRangeMapping(original, modified));\n }\n return result;\n }\n constructor(originalRange, modifiedRange) {\n this.original = originalRange;\n this.modified = modifiedRange;\n }\n toString() {\n return `{${this.original.toString()}->${this.modified.toString()}}`;\n }\n flip() {\n return new LineRangeMapping(this.modified, this.original);\n }\n join(other) {\n return new LineRangeMapping(this.original.join(other.original), this.modified.join(other.modified));\n }\n /**\n * This method assumes that the LineRangeMapping describes a valid diff!\n * I.e. if one range is empty, the other range cannot be the entire document.\n * It avoids various problems when the line range points to non-existing line-numbers.\n */\n toRangeMapping() {\n const origInclusiveRange = this.original.toInclusiveRange();\n const modInclusiveRange = this.modified.toInclusiveRange();\n if (origInclusiveRange && modInclusiveRange) return new RangeMapping(origInclusiveRange, modInclusiveRange);\n else if (this.original.startLineNumber === 1 || this.modified.startLineNumber === 1) {\n if (!(this.modified.startLineNumber === 1 && this.original.startLineNumber === 1)) throw new BugIndicatingError(\"not a valid diff\");\n return new RangeMapping(new Range$1(this.original.startLineNumber, 1, this.original.endLineNumberExclusive, 1), new Range$1(this.modified.startLineNumber, 1, this.modified.endLineNumberExclusive, 1));\n } else return new RangeMapping(new Range$1(this.original.startLineNumber - 1, Number.MAX_SAFE_INTEGER, this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), new Range$1(this.modified.startLineNumber - 1, Number.MAX_SAFE_INTEGER, this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER));\n }\n /**\n * This method assumes that the LineRangeMapping describes a valid diff!\n * I.e. if one range is empty, the other range cannot be the entire document.\n * It avoids various problems when the line range points to non-existing line-numbers.\n */\n toRangeMapping2(original, modified) {\n if (isValidLineNumber(this.original.endLineNumberExclusive, original) && isValidLineNumber(this.modified.endLineNumberExclusive, modified)) return new RangeMapping(new Range$1(this.original.startLineNumber, 1, this.original.endLineNumberExclusive, 1), new Range$1(this.modified.startLineNumber, 1, this.modified.endLineNumberExclusive, 1));\n if (!this.original.isEmpty && !this.modified.isEmpty) return new RangeMapping(Range$1.fromPositions(new Position$1(this.original.startLineNumber, 1), normalizePosition(new Position$1(this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), original)), Range$1.fromPositions(new Position$1(this.modified.startLineNumber, 1), normalizePosition(new Position$1(this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), modified)));\n if (this.original.startLineNumber > 1 && this.modified.startLineNumber > 1) return new RangeMapping(Range$1.fromPositions(normalizePosition(new Position$1(this.original.startLineNumber - 1, Number.MAX_SAFE_INTEGER), original), normalizePosition(new Position$1(this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), original)), Range$1.fromPositions(normalizePosition(new Position$1(this.modified.startLineNumber - 1, Number.MAX_SAFE_INTEGER), modified), normalizePosition(new Position$1(this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), modified)));\n throw new BugIndicatingError();\n }\n };\n function normalizePosition(position, content) {\n if (position.lineNumber < 1) return new Position$1(1, 1);\n if (position.lineNumber > content.length) return new Position$1(content.length, content[content.length - 1].length + 1);\n const line = content[position.lineNumber - 1];\n if (position.column > line.length + 1) return new Position$1(position.lineNumber, line.length + 1);\n return position;\n }\n function isValidLineNumber(lineNumber, lines) {\n return lineNumber >= 1 && lineNumber <= lines.length;\n }\n /**\n * Maps a line range in the original text model to a line range in the modified text model.\n * Also contains inner range mappings.\n */\n var DetailedLineRangeMapping = class DetailedLineRangeMapping extends LineRangeMapping {\n static fromRangeMappings(rangeMappings) {\n const originalRange = LineRange.join(rangeMappings.map((r) => LineRange.fromRangeInclusive(r.originalRange)));\n const modifiedRange = LineRange.join(rangeMappings.map((r) => LineRange.fromRangeInclusive(r.modifiedRange)));\n return new DetailedLineRangeMapping(originalRange, modifiedRange, rangeMappings);\n }\n constructor(originalRange, modifiedRange, innerChanges) {\n super(originalRange, modifiedRange);\n this.innerChanges = innerChanges;\n }\n flip() {\n return new DetailedLineRangeMapping(this.modified, this.original, this.innerChanges?.map((c) => c.flip()));\n }\n withInnerChangesFromLineRanges() {\n return new DetailedLineRangeMapping(this.original, this.modified, [this.toRangeMapping()]);\n }\n };\n /**\n * Maps a range in the original text model to a range in the modified text model.\n */\n var RangeMapping = class RangeMapping {\n static fromEdit(edit) {\n const newRanges = edit.getNewRanges();\n return edit.replacements.map((e, idx) => new RangeMapping(e.range, newRanges[idx]));\n }\n static assertSorted(rangeMappings) {\n for (let i = 1; i < rangeMappings.length; i++) {\n const previous = rangeMappings[i - 1];\n const current = rangeMappings[i];\n if (!(previous.originalRange.getEndPosition().isBeforeOrEqual(current.originalRange.getStartPosition()) && previous.modifiedRange.getEndPosition().isBeforeOrEqual(current.modifiedRange.getStartPosition()))) throw new BugIndicatingError(\"Range mappings must be sorted\");\n }\n }\n constructor(originalRange, modifiedRange) {\n this.originalRange = originalRange;\n this.modifiedRange = modifiedRange;\n }\n toString() {\n return `{${this.originalRange.toString()}->${this.modifiedRange.toString()}}`;\n }\n flip() {\n return new RangeMapping(this.modifiedRange, this.originalRange);\n }\n /**\n * Creates a single text edit that describes the change from the original to the modified text.\n */\n toTextEdit(modified) {\n const newText = modified.getValueOfRange(this.modifiedRange);\n return new TextReplacement(this.originalRange, newText);\n }\n };\n function lineRangeMappingFromRangeMappings(alignments, originalLines, modifiedLines, dontAssertStartLine = false) {\n const changes = [];\n for (const g of groupAdjacentBy(alignments.map((a) => getLineRangeMapping(a, originalLines, modifiedLines)), (a1, a2) => a1.original.intersectsOrTouches(a2.original) || a1.modified.intersectsOrTouches(a2.modified))) {\n const first = g[0];\n const last = g[g.length - 1];\n changes.push(new DetailedLineRangeMapping(first.original.join(last.original), first.modified.join(last.modified), g.map((a) => a.innerChanges[0])));\n }\n assertFn(() => {\n if (!dontAssertStartLine && changes.length > 0) {\n if (changes[0].modified.startLineNumber !== changes[0].original.startLineNumber) return false;\n if (modifiedLines.length.lineCount - changes[changes.length - 1].modified.endLineNumberExclusive !== originalLines.length.lineCount - changes[changes.length - 1].original.endLineNumberExclusive) return false;\n }\n return checkAdjacentItems(changes, (m1, m2) => m2.original.startLineNumber - m1.original.endLineNumberExclusive === m2.modified.startLineNumber - m1.modified.endLineNumberExclusive && m1.original.endLineNumberExclusive < m2.original.startLineNumber && m1.modified.endLineNumberExclusive < m2.modified.startLineNumber);\n });\n return changes;\n }\n function getLineRangeMapping(rangeMapping, originalLines, modifiedLines) {\n let lineStartDelta = 0;\n let lineEndDelta = 0;\n if (rangeMapping.modifiedRange.endColumn === 1 && rangeMapping.originalRange.endColumn === 1 && rangeMapping.originalRange.startLineNumber + lineStartDelta <= rangeMapping.originalRange.endLineNumber && rangeMapping.modifiedRange.startLineNumber + lineStartDelta <= rangeMapping.modifiedRange.endLineNumber) lineEndDelta = -1;\n if (rangeMapping.modifiedRange.startColumn - 1 >= modifiedLines.getLineLength(rangeMapping.modifiedRange.startLineNumber) && rangeMapping.originalRange.startColumn - 1 >= originalLines.getLineLength(rangeMapping.originalRange.startLineNumber) && rangeMapping.originalRange.startLineNumber <= rangeMapping.originalRange.endLineNumber + lineEndDelta && rangeMapping.modifiedRange.startLineNumber <= rangeMapping.modifiedRange.endLineNumber + lineEndDelta) lineStartDelta = 1;\n return new DetailedLineRangeMapping(new LineRange(rangeMapping.originalRange.startLineNumber + lineStartDelta, rangeMapping.originalRange.endLineNumber + 1 + lineEndDelta), new LineRange(rangeMapping.modifiedRange.startLineNumber + lineStartDelta, rangeMapping.modifiedRange.endLineNumber + 1 + lineEndDelta), [rangeMapping]);\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/diff/legacyLinesDiffComputer.js\n const MINIMUM_MATCHING_CHARACTER_LENGTH = 3;\n var LegacyLinesDiffComputer = class {\n computeDiff(originalLines, modifiedLines, options) {\n const result = new DiffComputer(originalLines, modifiedLines, {\n maxComputationTime: options.maxComputationTimeMs,\n shouldIgnoreTrimWhitespace: options.ignoreTrimWhitespace,\n shouldComputeCharChanges: true,\n shouldMakePrettyDiff: true,\n shouldPostProcessCharChanges: true\n }).computeDiff();\n const changes = [];\n let lastChange = null;\n for (const c of result.changes) {\n let originalRange;\n if (c.originalEndLineNumber === 0) originalRange = new LineRange(c.originalStartLineNumber + 1, c.originalStartLineNumber + 1);\n else originalRange = new LineRange(c.originalStartLineNumber, c.originalEndLineNumber + 1);\n let modifiedRange;\n if (c.modifiedEndLineNumber === 0) modifiedRange = new LineRange(c.modifiedStartLineNumber + 1, c.modifiedStartLineNumber + 1);\n else modifiedRange = new LineRange(c.modifiedStartLineNumber, c.modifiedEndLineNumber + 1);\n let change = new DetailedLineRangeMapping(originalRange, modifiedRange, c.charChanges?.map((c) => new RangeMapping(new Range$1(c.originalStartLineNumber, c.originalStartColumn, c.originalEndLineNumber, c.originalEndColumn), new Range$1(c.modifiedStartLineNumber, c.modifiedStartColumn, c.modifiedEndLineNumber, c.modifiedEndColumn))));\n if (lastChange) {\n if (lastChange.modified.endLineNumberExclusive === change.modified.startLineNumber || lastChange.original.endLineNumberExclusive === change.original.startLineNumber) {\n change = new DetailedLineRangeMapping(lastChange.original.join(change.original), lastChange.modified.join(change.modified), lastChange.innerChanges && change.innerChanges ? lastChange.innerChanges.concat(change.innerChanges) : void 0);\n changes.pop();\n }\n }\n changes.push(change);\n lastChange = change;\n }\n assertFn(() => {\n return checkAdjacentItems(changes, (m1, m2) => m2.original.startLineNumber - m1.original.endLineNumberExclusive === m2.modified.startLineNumber - m1.modified.endLineNumberExclusive && m1.original.endLineNumberExclusive < m2.original.startLineNumber && m1.modified.endLineNumberExclusive < m2.modified.startLineNumber);\n });\n return new LinesDiff(changes, [], result.quitEarly);\n }\n };\n function computeDiff(originalSequence, modifiedSequence, continueProcessingPredicate, pretty) {\n return new LcsDiff(originalSequence, modifiedSequence, continueProcessingPredicate).ComputeDiff(pretty);\n }\n var LineSequence$1 = class {\n constructor(lines) {\n const startColumns = [];\n const endColumns = [];\n for (let i = 0, length = lines.length; i < length; i++) {\n startColumns[i] = getFirstNonBlankColumn(lines[i], 1);\n endColumns[i] = getLastNonBlankColumn(lines[i], 1);\n }\n this.lines = lines;\n this._startColumns = startColumns;\n this._endColumns = endColumns;\n }\n getElements() {\n const elements = [];\n for (let i = 0, len = this.lines.length; i < len; i++) elements[i] = this.lines[i].substring(this._startColumns[i] - 1, this._endColumns[i] - 1);\n return elements;\n }\n getStrictElement(index) {\n return this.lines[index];\n }\n getStartLineNumber(i) {\n return i + 1;\n }\n getEndLineNumber(i) {\n return i + 1;\n }\n createCharSequence(shouldIgnoreTrimWhitespace, startIndex, endIndex) {\n const charCodes = [];\n const lineNumbers = [];\n const columns = [];\n let len = 0;\n for (let index = startIndex; index <= endIndex; index++) {\n const lineContent = this.lines[index];\n const startColumn = shouldIgnoreTrimWhitespace ? this._startColumns[index] : 1;\n const endColumn = shouldIgnoreTrimWhitespace ? this._endColumns[index] : lineContent.length + 1;\n for (let col = startColumn; col < endColumn; col++) {\n charCodes[len] = lineContent.charCodeAt(col - 1);\n lineNumbers[len] = index + 1;\n columns[len] = col;\n len++;\n }\n if (!shouldIgnoreTrimWhitespace && index < endIndex) {\n charCodes[len] = 10;\n lineNumbers[len] = index + 1;\n columns[len] = lineContent.length + 1;\n len++;\n }\n }\n return new CharSequence(charCodes, lineNumbers, columns);\n }\n };\n var CharSequence = class {\n constructor(charCodes, lineNumbers, columns) {\n this._charCodes = charCodes;\n this._lineNumbers = lineNumbers;\n this._columns = columns;\n }\n toString() {\n return \"[\" + this._charCodes.map((s, idx) => (s === 10 ? \"\\\\n\" : String.fromCharCode(s)) + `-(${this._lineNumbers[idx]},${this._columns[idx]})`).join(\", \") + \"]\";\n }\n _assertIndex(index, arr) {\n if (index < 0 || index >= arr.length) throw new Error(`Illegal index`);\n }\n getElements() {\n return this._charCodes;\n }\n getStartLineNumber(i) {\n if (i > 0 && i === this._lineNumbers.length) return this.getEndLineNumber(i - 1);\n this._assertIndex(i, this._lineNumbers);\n return this._lineNumbers[i];\n }\n getEndLineNumber(i) {\n if (i === -1) return this.getStartLineNumber(i + 1);\n this._assertIndex(i, this._lineNumbers);\n if (this._charCodes[i] === 10) return this._lineNumbers[i] + 1;\n return this._lineNumbers[i];\n }\n getStartColumn(i) {\n if (i > 0 && i === this._columns.length) return this.getEndColumn(i - 1);\n this._assertIndex(i, this._columns);\n return this._columns[i];\n }\n getEndColumn(i) {\n if (i === -1) return this.getStartColumn(i + 1);\n this._assertIndex(i, this._columns);\n if (this._charCodes[i] === 10) return 1;\n return this._columns[i] + 1;\n }\n };\n var CharChange = class CharChange {\n constructor(originalStartLineNumber, originalStartColumn, originalEndLineNumber, originalEndColumn, modifiedStartLineNumber, modifiedStartColumn, modifiedEndLineNumber, modifiedEndColumn) {\n this.originalStartLineNumber = originalStartLineNumber;\n this.originalStartColumn = originalStartColumn;\n this.originalEndLineNumber = originalEndLineNumber;\n this.originalEndColumn = originalEndColumn;\n this.modifiedStartLineNumber = modifiedStartLineNumber;\n this.modifiedStartColumn = modifiedStartColumn;\n this.modifiedEndLineNumber = modifiedEndLineNumber;\n this.modifiedEndColumn = modifiedEndColumn;\n }\n static createFromDiffChange(diffChange, originalCharSequence, modifiedCharSequence) {\n const originalStartLineNumber = originalCharSequence.getStartLineNumber(diffChange.originalStart);\n const originalStartColumn = originalCharSequence.getStartColumn(diffChange.originalStart);\n const originalEndLineNumber = originalCharSequence.getEndLineNumber(diffChange.originalStart + diffChange.originalLength - 1);\n const originalEndColumn = originalCharSequence.getEndColumn(diffChange.originalStart + diffChange.originalLength - 1);\n const modifiedStartLineNumber = modifiedCharSequence.getStartLineNumber(diffChange.modifiedStart);\n const modifiedStartColumn = modifiedCharSequence.getStartColumn(diffChange.modifiedStart);\n const modifiedEndLineNumber = modifiedCharSequence.getEndLineNumber(diffChange.modifiedStart + diffChange.modifiedLength - 1);\n const modifiedEndColumn = modifiedCharSequence.getEndColumn(diffChange.modifiedStart + diffChange.modifiedLength - 1);\n return new CharChange(originalStartLineNumber, originalStartColumn, originalEndLineNumber, originalEndColumn, modifiedStartLineNumber, modifiedStartColumn, modifiedEndLineNumber, modifiedEndColumn);\n }\n };\n function postProcessCharChanges(rawChanges) {\n if (rawChanges.length <= 1) return rawChanges;\n const result = [rawChanges[0]];\n let prevChange = result[0];\n for (let i = 1, len = rawChanges.length; i < len; i++) {\n const currChange = rawChanges[i];\n const originalMatchingLength = currChange.originalStart - (prevChange.originalStart + prevChange.originalLength);\n const modifiedMatchingLength = currChange.modifiedStart - (prevChange.modifiedStart + prevChange.modifiedLength);\n if (Math.min(originalMatchingLength, modifiedMatchingLength) < MINIMUM_MATCHING_CHARACTER_LENGTH) {\n prevChange.originalLength = currChange.originalStart + currChange.originalLength - prevChange.originalStart;\n prevChange.modifiedLength = currChange.modifiedStart + currChange.modifiedLength - prevChange.modifiedStart;\n } else {\n result.push(currChange);\n prevChange = currChange;\n }\n }\n return result;\n }\n var LineChange = class LineChange {\n constructor(originalStartLineNumber, originalEndLineNumber, modifiedStartLineNumber, modifiedEndLineNumber, charChanges) {\n this.originalStartLineNumber = originalStartLineNumber;\n this.originalEndLineNumber = originalEndLineNumber;\n this.modifiedStartLineNumber = modifiedStartLineNumber;\n this.modifiedEndLineNumber = modifiedEndLineNumber;\n this.charChanges = charChanges;\n }\n static createFromDiffResult(shouldIgnoreTrimWhitespace, diffChange, originalLineSequence, modifiedLineSequence, continueCharDiff, shouldComputeCharChanges, shouldPostProcessCharChanges) {\n let originalStartLineNumber;\n let originalEndLineNumber;\n let modifiedStartLineNumber;\n let modifiedEndLineNumber;\n let charChanges = void 0;\n if (diffChange.originalLength === 0) {\n originalStartLineNumber = originalLineSequence.getStartLineNumber(diffChange.originalStart) - 1;\n originalEndLineNumber = 0;\n } else {\n originalStartLineNumber = originalLineSequence.getStartLineNumber(diffChange.originalStart);\n originalEndLineNumber = originalLineSequence.getEndLineNumber(diffChange.originalStart + diffChange.originalLength - 1);\n }\n if (diffChange.modifiedLength === 0) {\n modifiedStartLineNumber = modifiedLineSequence.getStartLineNumber(diffChange.modifiedStart) - 1;\n modifiedEndLineNumber = 0;\n } else {\n modifiedStartLineNumber = modifiedLineSequence.getStartLineNumber(diffChange.modifiedStart);\n modifiedEndLineNumber = modifiedLineSequence.getEndLineNumber(diffChange.modifiedStart + diffChange.modifiedLength - 1);\n }\n if (shouldComputeCharChanges && diffChange.originalLength > 0 && diffChange.originalLength < 20 && diffChange.modifiedLength > 0 && diffChange.modifiedLength < 20 && continueCharDiff()) {\n const originalCharSequence = originalLineSequence.createCharSequence(shouldIgnoreTrimWhitespace, diffChange.originalStart, diffChange.originalStart + diffChange.originalLength - 1);\n const modifiedCharSequence = modifiedLineSequence.createCharSequence(shouldIgnoreTrimWhitespace, diffChange.modifiedStart, diffChange.modifiedStart + diffChange.modifiedLength - 1);\n if (originalCharSequence.getElements().length > 0 && modifiedCharSequence.getElements().length > 0) {\n let rawChanges = computeDiff(originalCharSequence, modifiedCharSequence, continueCharDiff, true).changes;\n if (shouldPostProcessCharChanges) rawChanges = postProcessCharChanges(rawChanges);\n charChanges = [];\n for (let i = 0, length = rawChanges.length; i < length; i++) charChanges.push(CharChange.createFromDiffChange(rawChanges[i], originalCharSequence, modifiedCharSequence));\n }\n }\n return new LineChange(originalStartLineNumber, originalEndLineNumber, modifiedStartLineNumber, modifiedEndLineNumber, charChanges);\n }\n };\n var DiffComputer = class {\n constructor(originalLines, modifiedLines, opts) {\n this.shouldComputeCharChanges = opts.shouldComputeCharChanges;\n this.shouldPostProcessCharChanges = opts.shouldPostProcessCharChanges;\n this.shouldIgnoreTrimWhitespace = opts.shouldIgnoreTrimWhitespace;\n this.shouldMakePrettyDiff = opts.shouldMakePrettyDiff;\n this.originalLines = originalLines;\n this.modifiedLines = modifiedLines;\n this.original = new LineSequence$1(originalLines);\n this.modified = new LineSequence$1(modifiedLines);\n this.continueLineDiff = createContinueProcessingPredicate(opts.maxComputationTime);\n this.continueCharDiff = createContinueProcessingPredicate(opts.maxComputationTime === 0 ? 0 : Math.min(opts.maxComputationTime, 5e3));\n }\n computeDiff() {\n if (this.original.lines.length === 1 && this.original.lines[0].length === 0) {\n if (this.modified.lines.length === 1 && this.modified.lines[0].length === 0) return {\n quitEarly: false,\n changes: []\n };\n return {\n quitEarly: false,\n changes: [{\n originalStartLineNumber: 1,\n originalEndLineNumber: 1,\n modifiedStartLineNumber: 1,\n modifiedEndLineNumber: this.modified.lines.length,\n charChanges: void 0\n }]\n };\n }\n if (this.modified.lines.length === 1 && this.modified.lines[0].length === 0) return {\n quitEarly: false,\n changes: [{\n originalStartLineNumber: 1,\n originalEndLineNumber: this.original.lines.length,\n modifiedStartLineNumber: 1,\n modifiedEndLineNumber: 1,\n charChanges: void 0\n }]\n };\n const diffResult = computeDiff(this.original, this.modified, this.continueLineDiff, this.shouldMakePrettyDiff);\n const rawChanges = diffResult.changes;\n const quitEarly = diffResult.quitEarly;\n if (this.shouldIgnoreTrimWhitespace) {\n const lineChanges = [];\n for (let i = 0, length = rawChanges.length; i < length; i++) lineChanges.push(LineChange.createFromDiffResult(this.shouldIgnoreTrimWhitespace, rawChanges[i], this.original, this.modified, this.continueCharDiff, this.shouldComputeCharChanges, this.shouldPostProcessCharChanges));\n return {\n quitEarly,\n changes: lineChanges\n };\n }\n const result = [];\n let originalLineIndex = 0;\n let modifiedLineIndex = 0;\n for (let i = -1, len = rawChanges.length; i < len; i++) {\n const nextChange = i + 1 < len ? rawChanges[i + 1] : null;\n const originalStop = nextChange ? nextChange.originalStart : this.originalLines.length;\n const modifiedStop = nextChange ? nextChange.modifiedStart : this.modifiedLines.length;\n while (originalLineIndex < originalStop && modifiedLineIndex < modifiedStop) {\n const originalLine = this.originalLines[originalLineIndex];\n const modifiedLine = this.modifiedLines[modifiedLineIndex];\n if (originalLine !== modifiedLine) {\n {\n let originalStartColumn = getFirstNonBlankColumn(originalLine, 1);\n let modifiedStartColumn = getFirstNonBlankColumn(modifiedLine, 1);\n while (originalStartColumn > 1 && modifiedStartColumn > 1) {\n if (originalLine.charCodeAt(originalStartColumn - 2) !== modifiedLine.charCodeAt(modifiedStartColumn - 2)) break;\n originalStartColumn--;\n modifiedStartColumn--;\n }\n if (originalStartColumn > 1 || modifiedStartColumn > 1) this._pushTrimWhitespaceCharChange(result, originalLineIndex + 1, 1, originalStartColumn, modifiedLineIndex + 1, 1, modifiedStartColumn);\n }\n {\n let originalEndColumn = getLastNonBlankColumn(originalLine, 1);\n let modifiedEndColumn = getLastNonBlankColumn(modifiedLine, 1);\n const originalMaxColumn = originalLine.length + 1;\n const modifiedMaxColumn = modifiedLine.length + 1;\n while (originalEndColumn < originalMaxColumn && modifiedEndColumn < modifiedMaxColumn) {\n if (originalLine.charCodeAt(originalEndColumn - 1) !== originalLine.charCodeAt(modifiedEndColumn - 1)) break;\n originalEndColumn++;\n modifiedEndColumn++;\n }\n if (originalEndColumn < originalMaxColumn || modifiedEndColumn < modifiedMaxColumn) this._pushTrimWhitespaceCharChange(result, originalLineIndex + 1, originalEndColumn, originalMaxColumn, modifiedLineIndex + 1, modifiedEndColumn, modifiedMaxColumn);\n }\n }\n originalLineIndex++;\n modifiedLineIndex++;\n }\n if (nextChange) {\n result.push(LineChange.createFromDiffResult(this.shouldIgnoreTrimWhitespace, nextChange, this.original, this.modified, this.continueCharDiff, this.shouldComputeCharChanges, this.shouldPostProcessCharChanges));\n originalLineIndex += nextChange.originalLength;\n modifiedLineIndex += nextChange.modifiedLength;\n }\n }\n return {\n quitEarly,\n changes: result\n };\n }\n _pushTrimWhitespaceCharChange(result, originalLineNumber, originalStartColumn, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedEndColumn) {\n if (this._mergeTrimWhitespaceCharChange(result, originalLineNumber, originalStartColumn, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedEndColumn)) return;\n let charChanges = void 0;\n if (this.shouldComputeCharChanges) charChanges = [new CharChange(originalLineNumber, originalStartColumn, originalLineNumber, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedLineNumber, modifiedEndColumn)];\n result.push(new LineChange(originalLineNumber, originalLineNumber, modifiedLineNumber, modifiedLineNumber, charChanges));\n }\n _mergeTrimWhitespaceCharChange(result, originalLineNumber, originalStartColumn, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedEndColumn) {\n const len = result.length;\n if (len === 0) return false;\n const prevChange = result[len - 1];\n if (prevChange.originalEndLineNumber === 0 || prevChange.modifiedEndLineNumber === 0) return false;\n if (prevChange.originalEndLineNumber === originalLineNumber && prevChange.modifiedEndLineNumber === modifiedLineNumber) {\n if (this.shouldComputeCharChanges && prevChange.charChanges) prevChange.charChanges.push(new CharChange(originalLineNumber, originalStartColumn, originalLineNumber, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedLineNumber, modifiedEndColumn));\n return true;\n }\n if (prevChange.originalEndLineNumber + 1 === originalLineNumber && prevChange.modifiedEndLineNumber + 1 === modifiedLineNumber) {\n prevChange.originalEndLineNumber = originalLineNumber;\n prevChange.modifiedEndLineNumber = modifiedLineNumber;\n if (this.shouldComputeCharChanges && prevChange.charChanges) prevChange.charChanges.push(new CharChange(originalLineNumber, originalStartColumn, originalLineNumber, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedLineNumber, modifiedEndColumn));\n return true;\n }\n return false;\n }\n };\n function getFirstNonBlankColumn(txt, defaultValue) {\n const r = firstNonWhitespaceIndex(txt);\n if (r === -1) return defaultValue;\n return r + 1;\n }\n function getLastNonBlankColumn(txt, defaultValue) {\n const r = lastNonWhitespaceIndex(txt);\n if (r === -1) return defaultValue;\n return r + 2;\n }\n function createContinueProcessingPredicate(maximumRuntime) {\n if (maximumRuntime === 0) return () => true;\n const startTime = Date.now();\n return () => {\n return Date.now() - startTime < maximumRuntime;\n };\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/diffAlgorithm.js\n var DiffAlgorithmResult = class DiffAlgorithmResult {\n static trivial(seq1, seq2) {\n return new DiffAlgorithmResult([new SequenceDiff(OffsetRange.ofLength(seq1.length), OffsetRange.ofLength(seq2.length))], false);\n }\n static trivialTimedOut(seq1, seq2) {\n return new DiffAlgorithmResult([new SequenceDiff(OffsetRange.ofLength(seq1.length), OffsetRange.ofLength(seq2.length))], true);\n }\n constructor(diffs, hitTimeout) {\n this.diffs = diffs;\n this.hitTimeout = hitTimeout;\n }\n };\n var SequenceDiff = class SequenceDiff {\n static invert(sequenceDiffs, doc1Length) {\n const result = [];\n forEachAdjacent(sequenceDiffs, (a, b) => {\n result.push(SequenceDiff.fromOffsetPairs(a ? a.getEndExclusives() : OffsetPair.zero, b ? b.getStarts() : new OffsetPair(doc1Length, (a ? a.seq2Range.endExclusive - a.seq1Range.endExclusive : 0) + doc1Length)));\n });\n return result;\n }\n static fromOffsetPairs(start, endExclusive) {\n return new SequenceDiff(new OffsetRange(start.offset1, endExclusive.offset1), new OffsetRange(start.offset2, endExclusive.offset2));\n }\n static assertSorted(sequenceDiffs) {\n let last = void 0;\n for (const cur of sequenceDiffs) {\n if (last) {\n if (!(last.seq1Range.endExclusive <= cur.seq1Range.start && last.seq2Range.endExclusive <= cur.seq2Range.start)) throw new BugIndicatingError(\"Sequence diffs must be sorted\");\n }\n last = cur;\n }\n }\n constructor(seq1Range, seq2Range) {\n this.seq1Range = seq1Range;\n this.seq2Range = seq2Range;\n }\n swap() {\n return new SequenceDiff(this.seq2Range, this.seq1Range);\n }\n toString() {\n return `${this.seq1Range} <-> ${this.seq2Range}`;\n }\n join(other) {\n return new SequenceDiff(this.seq1Range.join(other.seq1Range), this.seq2Range.join(other.seq2Range));\n }\n delta(offset) {\n if (offset === 0) return this;\n return new SequenceDiff(this.seq1Range.delta(offset), this.seq2Range.delta(offset));\n }\n deltaStart(offset) {\n if (offset === 0) return this;\n return new SequenceDiff(this.seq1Range.deltaStart(offset), this.seq2Range.deltaStart(offset));\n }\n deltaEnd(offset) {\n if (offset === 0) return this;\n return new SequenceDiff(this.seq1Range.deltaEnd(offset), this.seq2Range.deltaEnd(offset));\n }\n intersect(other) {\n const i1 = this.seq1Range.intersect(other.seq1Range);\n const i2 = this.seq2Range.intersect(other.seq2Range);\n if (!i1 || !i2) return;\n return new SequenceDiff(i1, i2);\n }\n getStarts() {\n return new OffsetPair(this.seq1Range.start, this.seq2Range.start);\n }\n getEndExclusives() {\n return new OffsetPair(this.seq1Range.endExclusive, this.seq2Range.endExclusive);\n }\n };\n var OffsetPair = class OffsetPair {\n static {\n this.zero = new OffsetPair(0, 0);\n }\n static {\n this.max = new OffsetPair(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);\n }\n constructor(offset1, offset2) {\n this.offset1 = offset1;\n this.offset2 = offset2;\n }\n toString() {\n return `${this.offset1} <-> ${this.offset2}`;\n }\n delta(offset) {\n if (offset === 0) return this;\n return new OffsetPair(this.offset1 + offset, this.offset2 + offset);\n }\n equals(other) {\n return this.offset1 === other.offset1 && this.offset2 === other.offset2;\n }\n };\n var InfiniteTimeout = class InfiniteTimeout {\n static {\n this.instance = new InfiniteTimeout();\n }\n isValid() {\n return true;\n }\n };\n var DateTimeout = class {\n constructor(timeout) {\n this.timeout = timeout;\n this.startTime = Date.now();\n this.valid = true;\n if (timeout <= 0) throw new BugIndicatingError(\"timeout must be positive\");\n }\n isValid() {\n if (!(Date.now() - this.startTime < this.timeout) && this.valid) this.valid = false;\n return this.valid;\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/diff/defaultLinesDiffComputer/utils.js\n var Array2D = class {\n constructor(width, height) {\n this.width = width;\n this.height = height;\n this.array = [];\n this.array = new Array(width * height);\n }\n get(x, y) {\n return this.array[x + y * this.width];\n }\n set(x, y, value) {\n this.array[x + y * this.width] = value;\n }\n };\n function isSpace(charCode) {\n return charCode === 32 || charCode === 9;\n }\n var LineRangeFragment = class LineRangeFragment {\n static {\n this.chrKeys = /* @__PURE__ */ new Map();\n }\n static getKey(chr) {\n let key = this.chrKeys.get(chr);\n if (key === void 0) {\n key = this.chrKeys.size;\n this.chrKeys.set(chr, key);\n }\n return key;\n }\n constructor(range, lines, source) {\n this.range = range;\n this.lines = lines;\n this.source = source;\n this.histogram = [];\n let counter = 0;\n for (let i = range.startLineNumber - 1; i < range.endLineNumberExclusive - 1; i++) {\n const line = lines[i];\n for (let j = 0; j < line.length; j++) {\n counter++;\n const chr = line[j];\n const key = LineRangeFragment.getKey(chr);\n this.histogram[key] = (this.histogram[key] || 0) + 1;\n }\n counter++;\n const key = LineRangeFragment.getKey(\"\\n\");\n this.histogram[key] = (this.histogram[key] || 0) + 1;\n }\n this.totalCount = counter;\n }\n computeSimilarity(other) {\n let sumDifferences = 0;\n const maxLength = Math.max(this.histogram.length, other.histogram.length);\n for (let i = 0; i < maxLength; i++) sumDifferences += Math.abs((this.histogram[i] ?? 0) - (other.histogram[i] ?? 0));\n return 1 - sumDifferences / (this.totalCount + other.totalCount);\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/dynamicProgrammingDiffing.js\n /**\n * A O(MN) diffing algorithm that supports a score function.\n * The algorithm can be improved by processing the 2d array diagonally.\n */\n var DynamicProgrammingDiffing = class {\n compute(sequence1, sequence2, timeout = InfiniteTimeout.instance, equalityScore) {\n if (sequence1.length === 0 || sequence2.length === 0) return DiffAlgorithmResult.trivial(sequence1, sequence2);\n /**\n * lcsLengths.get(i, j): Length of the longest common subsequence of sequence1.substring(0, i + 1) and sequence2.substring(0, j + 1).\n */\n const lcsLengths = new Array2D(sequence1.length, sequence2.length);\n const directions = new Array2D(sequence1.length, sequence2.length);\n const lengths = new Array2D(sequence1.length, sequence2.length);\n for (let s1 = 0; s1 < sequence1.length; s1++) for (let s2 = 0; s2 < sequence2.length; s2++) {\n if (!timeout.isValid()) return DiffAlgorithmResult.trivialTimedOut(sequence1, sequence2);\n const horizontalLen = s1 === 0 ? 0 : lcsLengths.get(s1 - 1, s2);\n const verticalLen = s2 === 0 ? 0 : lcsLengths.get(s1, s2 - 1);\n let extendedSeqScore;\n if (sequence1.getElement(s1) === sequence2.getElement(s2)) {\n if (s1 === 0 || s2 === 0) extendedSeqScore = 0;\n else extendedSeqScore = lcsLengths.get(s1 - 1, s2 - 1);\n if (s1 > 0 && s2 > 0 && directions.get(s1 - 1, s2 - 1) === 3) extendedSeqScore += lengths.get(s1 - 1, s2 - 1);\n extendedSeqScore += equalityScore ? equalityScore(s1, s2) : 1;\n } else extendedSeqScore = -1;\n const newValue = Math.max(horizontalLen, verticalLen, extendedSeqScore);\n if (newValue === extendedSeqScore) {\n const prevLen = s1 > 0 && s2 > 0 ? lengths.get(s1 - 1, s2 - 1) : 0;\n lengths.set(s1, s2, prevLen + 1);\n directions.set(s1, s2, 3);\n } else if (newValue === horizontalLen) {\n lengths.set(s1, s2, 0);\n directions.set(s1, s2, 1);\n } else if (newValue === verticalLen) {\n lengths.set(s1, s2, 0);\n directions.set(s1, s2, 2);\n }\n lcsLengths.set(s1, s2, newValue);\n }\n const result = [];\n let lastAligningPosS1 = sequence1.length;\n let lastAligningPosS2 = sequence2.length;\n function reportDecreasingAligningPositions(s1, s2) {\n if (s1 + 1 !== lastAligningPosS1 || s2 + 1 !== lastAligningPosS2) result.push(new SequenceDiff(new OffsetRange(s1 + 1, lastAligningPosS1), new OffsetRange(s2 + 1, lastAligningPosS2)));\n lastAligningPosS1 = s1;\n lastAligningPosS2 = s2;\n }\n let s1 = sequence1.length - 1;\n let s2 = sequence2.length - 1;\n while (s1 >= 0 && s2 >= 0) if (directions.get(s1, s2) === 3) {\n reportDecreasingAligningPositions(s1, s2);\n s1--;\n s2--;\n } else if (directions.get(s1, s2) === 1) s1--;\n else s2--;\n reportDecreasingAligningPositions(-1, -1);\n result.reverse();\n return new DiffAlgorithmResult(result, false);\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/myersDiffAlgorithm.js\n /**\n * An O(ND) diff algorithm that has a quadratic space worst-case complexity.\n */\n var MyersDiffAlgorithm = class {\n compute(seq1, seq2, timeout = InfiniteTimeout.instance) {\n if (seq1.length === 0 || seq2.length === 0) return DiffAlgorithmResult.trivial(seq1, seq2);\n const seqX = seq1;\n const seqY = seq2;\n function getXAfterSnake(x, y) {\n while (x < seqX.length && y < seqY.length && seqX.getElement(x) === seqY.getElement(y)) {\n x++;\n y++;\n }\n return x;\n }\n let d = 0;\n const V = new FastInt32Array();\n V.set(0, getXAfterSnake(0, 0));\n const paths = new FastArrayNegativeIndices();\n paths.set(0, V.get(0) === 0 ? null : new SnakePath(null, 0, 0, V.get(0)));\n let k = 0;\n loop: while (true) {\n d++;\n if (!timeout.isValid()) return DiffAlgorithmResult.trivialTimedOut(seqX, seqY);\n const lowerBound = -Math.min(d, seqY.length + d % 2);\n const upperBound = Math.min(d, seqX.length + d % 2);\n for (k = lowerBound; k <= upperBound; k += 2) {\n const maxXofDLineTop = k === upperBound ? -1 : V.get(k + 1);\n const maxXofDLineLeft = k === lowerBound ? -1 : V.get(k - 1) + 1;\n const x = Math.min(Math.max(maxXofDLineTop, maxXofDLineLeft), seqX.length);\n const y = x - k;\n if (x > seqX.length || y > seqY.length) continue;\n const newMaxX = getXAfterSnake(x, y);\n V.set(k, newMaxX);\n const lastPath = x === maxXofDLineTop ? paths.get(k + 1) : paths.get(k - 1);\n paths.set(k, newMaxX !== x ? new SnakePath(lastPath, x, y, newMaxX - x) : lastPath);\n if (V.get(k) === seqX.length && V.get(k) - k === seqY.length) break loop;\n }\n }\n let path = paths.get(k);\n const result = [];\n let lastAligningPosS1 = seqX.length;\n let lastAligningPosS2 = seqY.length;\n while (true) {\n const endX = path ? path.x + path.length : 0;\n const endY = path ? path.y + path.length : 0;\n if (endX !== lastAligningPosS1 || endY !== lastAligningPosS2) result.push(new SequenceDiff(new OffsetRange(endX, lastAligningPosS1), new OffsetRange(endY, lastAligningPosS2)));\n if (!path) break;\n lastAligningPosS1 = path.x;\n lastAligningPosS2 = path.y;\n path = path.prev;\n }\n result.reverse();\n return new DiffAlgorithmResult(result, false);\n }\n };\n var SnakePath = class {\n constructor(prev, x, y, length) {\n this.prev = prev;\n this.x = x;\n this.y = y;\n this.length = length;\n }\n };\n /**\n * An array that supports fast negative indices.\n */\n var FastInt32Array = class {\n constructor() {\n this.positiveArr = /* @__PURE__ */ new Int32Array(10);\n this.negativeArr = /* @__PURE__ */ new Int32Array(10);\n }\n get(idx) {\n if (idx < 0) {\n idx = -idx - 1;\n return this.negativeArr[idx];\n } else return this.positiveArr[idx];\n }\n set(idx, value) {\n if (idx < 0) {\n idx = -idx - 1;\n if (idx >= this.negativeArr.length) {\n const arr = this.negativeArr;\n this.negativeArr = new Int32Array(arr.length * 2);\n this.negativeArr.set(arr);\n }\n this.negativeArr[idx] = value;\n } else {\n if (idx >= this.positiveArr.length) {\n const arr = this.positiveArr;\n this.positiveArr = new Int32Array(arr.length * 2);\n this.positiveArr.set(arr);\n }\n this.positiveArr[idx] = value;\n }\n }\n };\n /**\n * An array that supports fast negative indices.\n */\n var FastArrayNegativeIndices = class {\n constructor() {\n this.positiveArr = [];\n this.negativeArr = [];\n }\n get(idx) {\n if (idx < 0) {\n idx = -idx - 1;\n return this.negativeArr[idx];\n } else return this.positiveArr[idx];\n }\n set(idx, value) {\n if (idx < 0) {\n idx = -idx - 1;\n this.negativeArr[idx] = value;\n } else this.positiveArr[idx] = value;\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.js\n var LinesSliceCharSequence = class {\n constructor(lines, range, considerWhitespaceChanges) {\n this.lines = lines;\n this.range = range;\n this.considerWhitespaceChanges = considerWhitespaceChanges;\n this.elements = [];\n this.firstElementOffsetByLineIdx = [];\n this.lineStartOffsets = [];\n this.trimmedWsLengthsByLineIdx = [];\n this.firstElementOffsetByLineIdx.push(0);\n for (let lineNumber = this.range.startLineNumber; lineNumber <= this.range.endLineNumber; lineNumber++) {\n let line = lines[lineNumber - 1];\n let lineStartOffset = 0;\n if (lineNumber === this.range.startLineNumber && this.range.startColumn > 1) {\n lineStartOffset = this.range.startColumn - 1;\n line = line.substring(lineStartOffset);\n }\n this.lineStartOffsets.push(lineStartOffset);\n let trimmedWsLength = 0;\n if (!considerWhitespaceChanges) {\n const trimmedStartLine = line.trimStart();\n trimmedWsLength = line.length - trimmedStartLine.length;\n line = trimmedStartLine.trimEnd();\n }\n this.trimmedWsLengthsByLineIdx.push(trimmedWsLength);\n const lineLength = lineNumber === this.range.endLineNumber ? Math.min(this.range.endColumn - 1 - lineStartOffset - trimmedWsLength, line.length) : line.length;\n for (let i = 0; i < lineLength; i++) this.elements.push(line.charCodeAt(i));\n if (lineNumber < this.range.endLineNumber) {\n this.elements.push(\"\\n\".charCodeAt(0));\n this.firstElementOffsetByLineIdx.push(this.elements.length);\n }\n }\n }\n toString() {\n return `Slice: \"${this.text}\"`;\n }\n get text() {\n return this.getText(new OffsetRange(0, this.length));\n }\n getText(range) {\n return this.elements.slice(range.start, range.endExclusive).map((e) => String.fromCharCode(e)).join(\"\");\n }\n getElement(offset) {\n return this.elements[offset];\n }\n get length() {\n return this.elements.length;\n }\n getBoundaryScore(length) {\n const prevCategory = getCategory(length > 0 ? this.elements[length - 1] : -1);\n const nextCategory = getCategory(length < this.elements.length ? this.elements[length] : -1);\n if (prevCategory === 7 && nextCategory === 8) return 0;\n if (prevCategory === 8) return 150;\n let score = 0;\n if (prevCategory !== nextCategory) {\n score += 10;\n if (prevCategory === 0 && nextCategory === 1) score += 1;\n }\n score += getCategoryBoundaryScore(prevCategory);\n score += getCategoryBoundaryScore(nextCategory);\n return score;\n }\n translateOffset(offset, preference = \"right\") {\n const i = findLastIdxMonotonous(this.firstElementOffsetByLineIdx, (value) => value <= offset);\n const lineOffset = offset - this.firstElementOffsetByLineIdx[i];\n return new Position$1(this.range.startLineNumber + i, 1 + this.lineStartOffsets[i] + lineOffset + (lineOffset === 0 && preference === \"left\" ? 0 : this.trimmedWsLengthsByLineIdx[i]));\n }\n translateRange(range) {\n const pos1 = this.translateOffset(range.start, \"right\");\n const pos2 = this.translateOffset(range.endExclusive, \"left\");\n if (pos2.isBefore(pos1)) return Range$1.fromPositions(pos2, pos2);\n return Range$1.fromPositions(pos1, pos2);\n }\n /**\n * Finds the word that contains the character at the given offset\n */\n findWordContaining(offset) {\n if (offset < 0 || offset >= this.elements.length) return;\n if (!isWordChar(this.elements[offset])) return;\n let start = offset;\n while (start > 0 && isWordChar(this.elements[start - 1])) start--;\n let end = offset;\n while (end < this.elements.length && isWordChar(this.elements[end])) end++;\n return new OffsetRange(start, end);\n }\n /** fooBar has the two sub-words foo and bar */\n findSubWordContaining(offset) {\n if (offset < 0 || offset >= this.elements.length) return;\n if (!isWordChar(this.elements[offset])) return;\n let start = offset;\n while (start > 0 && isWordChar(this.elements[start - 1]) && !isUpperCase(this.elements[start])) start--;\n let end = offset;\n while (end < this.elements.length && isWordChar(this.elements[end]) && !isUpperCase(this.elements[end])) end++;\n return new OffsetRange(start, end);\n }\n countLinesIn(range) {\n return this.translateOffset(range.endExclusive).lineNumber - this.translateOffset(range.start).lineNumber;\n }\n isStronglyEqual(offset1, offset2) {\n return this.elements[offset1] === this.elements[offset2];\n }\n extendToFullLines(range) {\n return new OffsetRange(findLastMonotonous(this.firstElementOffsetByLineIdx, (x) => x <= range.start) ?? 0, findFirstMonotonous(this.firstElementOffsetByLineIdx, (x) => range.endExclusive <= x) ?? this.elements.length);\n }\n };\n function isWordChar(charCode) {\n return charCode >= 97 && charCode <= 122 || charCode >= 65 && charCode <= 90 || charCode >= 48 && charCode <= 57;\n }\n function isUpperCase(charCode) {\n return charCode >= 65 && charCode <= 90;\n }\n const score = {\n [0]: 0,\n [1]: 0,\n [2]: 0,\n [3]: 10,\n [4]: 2,\n [5]: 30,\n [6]: 3,\n [7]: 10,\n [8]: 10\n };\n function getCategoryBoundaryScore(category) {\n return score[category];\n }\n function getCategory(charCode) {\n if (charCode === 10) return 8;\n else if (charCode === 13) return 7;\n else if (isSpace(charCode)) return 6;\n else if (charCode >= 97 && charCode <= 122) return 0;\n else if (charCode >= 65 && charCode <= 90) return 1;\n else if (charCode >= 48 && charCode <= 57) return 2;\n else if (charCode === -1) return 3;\n else if (charCode === 44 || charCode === 59) return 5;\n else return 4;\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/diff/defaultLinesDiffComputer/computeMovedLines.js\n function computeMovedLines(changes, originalLines, modifiedLines, hashedOriginalLines, hashedModifiedLines, timeout) {\n let { moves, excludedChanges } = computeMovesFromSimpleDeletionsToSimpleInsertions(changes, originalLines, modifiedLines, timeout);\n if (!timeout.isValid()) return [];\n const unchangedMoves = computeUnchangedMoves(changes.filter((c) => !excludedChanges.has(c)), hashedOriginalLines, hashedModifiedLines, originalLines, modifiedLines, timeout);\n pushMany(moves, unchangedMoves);\n moves = joinCloseConsecutiveMoves(moves);\n moves = moves.filter((current) => {\n const lines = current.original.toOffsetRange().slice(originalLines).map((l) => l.trim());\n return lines.join(\"\\n\").length >= 15 && countWhere(lines, (l) => l.length >= 2) >= 2;\n });\n moves = removeMovesInSameDiff(changes, moves);\n return moves;\n }\n function countWhere(arr, predicate) {\n let count = 0;\n for (const t of arr) if (predicate(t)) count++;\n return count;\n }\n function computeMovesFromSimpleDeletionsToSimpleInsertions(changes, originalLines, modifiedLines, timeout) {\n const moves = [];\n const deletions = changes.filter((c) => c.modified.isEmpty && c.original.length >= 3).map((d) => new LineRangeFragment(d.original, originalLines, d));\n const insertions = new Set(changes.filter((c) => c.original.isEmpty && c.modified.length >= 3).map((d) => new LineRangeFragment(d.modified, modifiedLines, d)));\n const excludedChanges = /* @__PURE__ */ new Set();\n for (const deletion of deletions) {\n let highestSimilarity = -1;\n let best;\n for (const insertion of insertions) {\n const similarity = deletion.computeSimilarity(insertion);\n if (similarity > highestSimilarity) {\n highestSimilarity = similarity;\n best = insertion;\n }\n }\n if (highestSimilarity > .9 && best) {\n insertions.delete(best);\n moves.push(new LineRangeMapping(deletion.range, best.range));\n excludedChanges.add(deletion.source);\n excludedChanges.add(best.source);\n }\n if (!timeout.isValid()) return {\n moves,\n excludedChanges\n };\n }\n return {\n moves,\n excludedChanges\n };\n }\n function computeUnchangedMoves(changes, hashedOriginalLines, hashedModifiedLines, originalLines, modifiedLines, timeout) {\n const moves = [];\n const original3LineHashes = new SetMap();\n for (const change of changes) for (let i = change.original.startLineNumber; i < change.original.endLineNumberExclusive - 2; i++) {\n const key = `${hashedOriginalLines[i - 1]}:${hashedOriginalLines[i + 1 - 1]}:${hashedOriginalLines[i + 2 - 1]}`;\n original3LineHashes.add(key, { range: new LineRange(i, i + 3) });\n }\n const possibleMappings = [];\n changes.sort(compareBy((c) => c.modified.startLineNumber, numberComparator));\n for (const change of changes) {\n let lastMappings = [];\n for (let i = change.modified.startLineNumber; i < change.modified.endLineNumberExclusive - 2; i++) {\n const key = `${hashedModifiedLines[i - 1]}:${hashedModifiedLines[i + 1 - 1]}:${hashedModifiedLines[i + 2 - 1]}`;\n const currentModifiedRange = new LineRange(i, i + 3);\n const nextMappings = [];\n original3LineHashes.forEach(key, ({ range }) => {\n for (const lastMapping of lastMappings) if (lastMapping.originalLineRange.endLineNumberExclusive + 1 === range.endLineNumberExclusive && lastMapping.modifiedLineRange.endLineNumberExclusive + 1 === currentModifiedRange.endLineNumberExclusive) {\n lastMapping.originalLineRange = new LineRange(lastMapping.originalLineRange.startLineNumber, range.endLineNumberExclusive);\n lastMapping.modifiedLineRange = new LineRange(lastMapping.modifiedLineRange.startLineNumber, currentModifiedRange.endLineNumberExclusive);\n nextMappings.push(lastMapping);\n return;\n }\n const mapping = {\n modifiedLineRange: currentModifiedRange,\n originalLineRange: range\n };\n possibleMappings.push(mapping);\n nextMappings.push(mapping);\n });\n lastMappings = nextMappings;\n }\n if (!timeout.isValid()) return [];\n }\n possibleMappings.sort(reverseOrder(compareBy((m) => m.modifiedLineRange.length, numberComparator)));\n const modifiedSet = new LineRangeSet();\n const originalSet = new LineRangeSet();\n for (const mapping of possibleMappings) {\n const diffOrigToMod = mapping.modifiedLineRange.startLineNumber - mapping.originalLineRange.startLineNumber;\n const modifiedSections = modifiedSet.subtractFrom(mapping.modifiedLineRange);\n const originalTranslatedSections = originalSet.subtractFrom(mapping.originalLineRange).getWithDelta(diffOrigToMod);\n const modifiedIntersectedSections = modifiedSections.getIntersection(originalTranslatedSections);\n for (const s of modifiedIntersectedSections.ranges) {\n if (s.length < 3) continue;\n const modifiedLineRange = s;\n const originalLineRange = s.delta(-diffOrigToMod);\n moves.push(new LineRangeMapping(originalLineRange, modifiedLineRange));\n modifiedSet.addRange(modifiedLineRange);\n originalSet.addRange(originalLineRange);\n }\n }\n moves.sort(compareBy((m) => m.original.startLineNumber, numberComparator));\n const monotonousChanges = new MonotonousArray(changes);\n for (let i = 0; i < moves.length; i++) {\n const move = moves[i];\n const firstTouchingChangeOrig = monotonousChanges.findLastMonotonous((c) => c.original.startLineNumber <= move.original.startLineNumber);\n const firstTouchingChangeMod = findLastMonotonous(changes, (c) => c.modified.startLineNumber <= move.modified.startLineNumber);\n const linesAbove = Math.max(move.original.startLineNumber - firstTouchingChangeOrig.original.startLineNumber, move.modified.startLineNumber - firstTouchingChangeMod.modified.startLineNumber);\n const lastTouchingChangeOrig = monotonousChanges.findLastMonotonous((c) => c.original.startLineNumber < move.original.endLineNumberExclusive);\n const lastTouchingChangeMod = findLastMonotonous(changes, (c) => c.modified.startLineNumber < move.modified.endLineNumberExclusive);\n const linesBelow = Math.max(lastTouchingChangeOrig.original.endLineNumberExclusive - move.original.endLineNumberExclusive, lastTouchingChangeMod.modified.endLineNumberExclusive - move.modified.endLineNumberExclusive);\n let extendToTop;\n for (extendToTop = 0; extendToTop < linesAbove; extendToTop++) {\n const origLine = move.original.startLineNumber - extendToTop - 1;\n const modLine = move.modified.startLineNumber - extendToTop - 1;\n if (origLine > originalLines.length || modLine > modifiedLines.length) break;\n if (modifiedSet.contains(modLine) || originalSet.contains(origLine)) break;\n if (!areLinesSimilar(originalLines[origLine - 1], modifiedLines[modLine - 1], timeout)) break;\n }\n if (extendToTop > 0) {\n originalSet.addRange(new LineRange(move.original.startLineNumber - extendToTop, move.original.startLineNumber));\n modifiedSet.addRange(new LineRange(move.modified.startLineNumber - extendToTop, move.modified.startLineNumber));\n }\n let extendToBottom;\n for (extendToBottom = 0; extendToBottom < linesBelow; extendToBottom++) {\n const origLine = move.original.endLineNumberExclusive + extendToBottom;\n const modLine = move.modified.endLineNumberExclusive + extendToBottom;\n if (origLine > originalLines.length || modLine > modifiedLines.length) break;\n if (modifiedSet.contains(modLine) || originalSet.contains(origLine)) break;\n if (!areLinesSimilar(originalLines[origLine - 1], modifiedLines[modLine - 1], timeout)) break;\n }\n if (extendToBottom > 0) {\n originalSet.addRange(new LineRange(move.original.endLineNumberExclusive, move.original.endLineNumberExclusive + extendToBottom));\n modifiedSet.addRange(new LineRange(move.modified.endLineNumberExclusive, move.modified.endLineNumberExclusive + extendToBottom));\n }\n if (extendToTop > 0 || extendToBottom > 0) moves[i] = new LineRangeMapping(new LineRange(move.original.startLineNumber - extendToTop, move.original.endLineNumberExclusive + extendToBottom), new LineRange(move.modified.startLineNumber - extendToTop, move.modified.endLineNumberExclusive + extendToBottom));\n }\n return moves;\n }\n function areLinesSimilar(line1, line2, timeout) {\n if (line1.trim() === line2.trim()) return true;\n if (line1.length > 300 && line2.length > 300) return false;\n const result = new MyersDiffAlgorithm().compute(new LinesSliceCharSequence([line1], new Range$1(1, 1, 1, line1.length), false), new LinesSliceCharSequence([line2], new Range$1(1, 1, 1, line2.length), false), timeout);\n let commonNonSpaceCharCount = 0;\n const inverted = SequenceDiff.invert(result.diffs, line1.length);\n for (const seq of inverted) seq.seq1Range.forEach((idx) => {\n if (!isSpace(line1.charCodeAt(idx))) commonNonSpaceCharCount++;\n });\n function countNonWsChars(str) {\n let count = 0;\n for (let i = 0; i < line1.length; i++) if (!isSpace(str.charCodeAt(i))) count++;\n return count;\n }\n const longerLineLength = countNonWsChars(line1.length > line2.length ? line1 : line2);\n return commonNonSpaceCharCount / longerLineLength > .6 && longerLineLength > 10;\n }\n function joinCloseConsecutiveMoves(moves) {\n if (moves.length === 0) return moves;\n moves.sort(compareBy((m) => m.original.startLineNumber, numberComparator));\n const result = [moves[0]];\n for (let i = 1; i < moves.length; i++) {\n const last = result[result.length - 1];\n const current = moves[i];\n const originalDist = current.original.startLineNumber - last.original.endLineNumberExclusive;\n const modifiedDist = current.modified.startLineNumber - last.modified.endLineNumberExclusive;\n if (originalDist >= 0 && modifiedDist >= 0 && originalDist + modifiedDist <= 2) {\n result[result.length - 1] = last.join(current);\n continue;\n }\n result.push(current);\n }\n return result;\n }\n function removeMovesInSameDiff(changes, moves) {\n const changesMonotonous = new MonotonousArray(changes);\n moves = moves.filter((m) => {\n return (changesMonotonous.findLastMonotonous((c) => c.original.startLineNumber < m.original.endLineNumberExclusive) || new LineRangeMapping(new LineRange(1, 1), new LineRange(1, 1))) !== findLastMonotonous(changes, (c) => c.modified.startLineNumber < m.modified.endLineNumberExclusive);\n });\n return moves;\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations.js\n function optimizeSequenceDiffs(sequence1, sequence2, sequenceDiffs) {\n let result = sequenceDiffs;\n result = joinSequenceDiffsByShifting(sequence1, sequence2, result);\n result = joinSequenceDiffsByShifting(sequence1, sequence2, result);\n result = shiftSequenceDiffs(sequence1, sequence2, result);\n return result;\n }\n /**\n * This function fixes issues like this:\n * ```\n * import { Baz, Bar } from \"foo\";\n * ```\n * <->\n * ```\n * import { Baz, Bar, Foo } from \"foo\";\n * ```\n * Computed diff: [ {Add \",\" after Bar}, {Add \"Foo \" after space} }\n * Improved diff: [{Add \", Foo\" after Bar}]\n */\n function joinSequenceDiffsByShifting(sequence1, sequence2, sequenceDiffs) {\n if (sequenceDiffs.length === 0) return sequenceDiffs;\n const result = [];\n result.push(sequenceDiffs[0]);\n for (let i = 1; i < sequenceDiffs.length; i++) {\n const prevResult = result[result.length - 1];\n let cur = sequenceDiffs[i];\n if (cur.seq1Range.isEmpty || cur.seq2Range.isEmpty) {\n const length = cur.seq1Range.start - prevResult.seq1Range.endExclusive;\n let d;\n for (d = 1; d <= length; d++) if (sequence1.getElement(cur.seq1Range.start - d) !== sequence1.getElement(cur.seq1Range.endExclusive - d) || sequence2.getElement(cur.seq2Range.start - d) !== sequence2.getElement(cur.seq2Range.endExclusive - d)) break;\n d--;\n if (d === length) {\n result[result.length - 1] = new SequenceDiff(new OffsetRange(prevResult.seq1Range.start, cur.seq1Range.endExclusive - length), new OffsetRange(prevResult.seq2Range.start, cur.seq2Range.endExclusive - length));\n continue;\n }\n cur = cur.delta(-d);\n }\n result.push(cur);\n }\n const result2 = [];\n for (let i = 0; i < result.length - 1; i++) {\n const nextResult = result[i + 1];\n let cur = result[i];\n if (cur.seq1Range.isEmpty || cur.seq2Range.isEmpty) {\n const length = nextResult.seq1Range.start - cur.seq1Range.endExclusive;\n let d;\n for (d = 0; d < length; d++) if (!sequence1.isStronglyEqual(cur.seq1Range.start + d, cur.seq1Range.endExclusive + d) || !sequence2.isStronglyEqual(cur.seq2Range.start + d, cur.seq2Range.endExclusive + d)) break;\n if (d === length) {\n result[i + 1] = new SequenceDiff(new OffsetRange(cur.seq1Range.start + length, nextResult.seq1Range.endExclusive), new OffsetRange(cur.seq2Range.start + length, nextResult.seq2Range.endExclusive));\n continue;\n }\n if (d > 0) cur = cur.delta(d);\n }\n result2.push(cur);\n }\n if (result.length > 0) result2.push(result[result.length - 1]);\n return result2;\n }\n function shiftSequenceDiffs(sequence1, sequence2, sequenceDiffs) {\n if (!sequence1.getBoundaryScore || !sequence2.getBoundaryScore) return sequenceDiffs;\n for (let i = 0; i < sequenceDiffs.length; i++) {\n const prevDiff = i > 0 ? sequenceDiffs[i - 1] : void 0;\n const diff = sequenceDiffs[i];\n const nextDiff = i + 1 < sequenceDiffs.length ? sequenceDiffs[i + 1] : void 0;\n const seq1ValidRange = new OffsetRange(prevDiff ? prevDiff.seq1Range.endExclusive + 1 : 0, nextDiff ? nextDiff.seq1Range.start - 1 : sequence1.length);\n const seq2ValidRange = new OffsetRange(prevDiff ? prevDiff.seq2Range.endExclusive + 1 : 0, nextDiff ? nextDiff.seq2Range.start - 1 : sequence2.length);\n if (diff.seq1Range.isEmpty) sequenceDiffs[i] = shiftDiffToBetterPosition(diff, sequence1, sequence2, seq1ValidRange, seq2ValidRange);\n else if (diff.seq2Range.isEmpty) sequenceDiffs[i] = shiftDiffToBetterPosition(diff.swap(), sequence2, sequence1, seq2ValidRange, seq1ValidRange).swap();\n }\n return sequenceDiffs;\n }\n function shiftDiffToBetterPosition(diff, sequence1, sequence2, seq1ValidRange, seq2ValidRange) {\n const maxShiftLimit = 100;\n let deltaBefore = 1;\n while (diff.seq1Range.start - deltaBefore >= seq1ValidRange.start && diff.seq2Range.start - deltaBefore >= seq2ValidRange.start && sequence2.isStronglyEqual(diff.seq2Range.start - deltaBefore, diff.seq2Range.endExclusive - deltaBefore) && deltaBefore < maxShiftLimit) deltaBefore++;\n deltaBefore--;\n let deltaAfter = 0;\n while (diff.seq1Range.start + deltaAfter < seq1ValidRange.endExclusive && diff.seq2Range.endExclusive + deltaAfter < seq2ValidRange.endExclusive && sequence2.isStronglyEqual(diff.seq2Range.start + deltaAfter, diff.seq2Range.endExclusive + deltaAfter) && deltaAfter < maxShiftLimit) deltaAfter++;\n if (deltaBefore === 0 && deltaAfter === 0) return diff;\n let bestDelta = 0;\n let bestScore = -1;\n for (let delta = -deltaBefore; delta <= deltaAfter; delta++) {\n const seq2OffsetStart = diff.seq2Range.start + delta;\n const seq2OffsetEndExclusive = diff.seq2Range.endExclusive + delta;\n const seq1Offset = diff.seq1Range.start + delta;\n const score = sequence1.getBoundaryScore(seq1Offset) + sequence2.getBoundaryScore(seq2OffsetStart) + sequence2.getBoundaryScore(seq2OffsetEndExclusive);\n if (score > bestScore) {\n bestScore = score;\n bestDelta = delta;\n }\n }\n return diff.delta(bestDelta);\n }\n function removeShortMatches(sequence1, sequence2, sequenceDiffs) {\n const result = [];\n for (const s of sequenceDiffs) {\n const last = result[result.length - 1];\n if (!last) {\n result.push(s);\n continue;\n }\n if (s.seq1Range.start - last.seq1Range.endExclusive <= 2 || s.seq2Range.start - last.seq2Range.endExclusive <= 2) result[result.length - 1] = new SequenceDiff(last.seq1Range.join(s.seq1Range), last.seq2Range.join(s.seq2Range));\n else result.push(s);\n }\n return result;\n }\n function extendDiffsToEntireWordIfAppropriate(sequence1, sequence2, sequenceDiffs, findParent, force = false) {\n const equalMappings = SequenceDiff.invert(sequenceDiffs, sequence1.length);\n const additional = [];\n let lastPoint = new OffsetPair(0, 0);\n function scanWord(pair, equalMapping) {\n if (pair.offset1 < lastPoint.offset1 || pair.offset2 < lastPoint.offset2) return;\n const w1 = findParent(sequence1, pair.offset1);\n const w2 = findParent(sequence2, pair.offset2);\n if (!w1 || !w2) return;\n let w = new SequenceDiff(w1, w2);\n const equalPart = w.intersect(equalMapping);\n let equalChars1 = equalPart.seq1Range.length;\n let equalChars2 = equalPart.seq2Range.length;\n while (equalMappings.length > 0) {\n const next = equalMappings[0];\n if (!(next.seq1Range.intersects(w.seq1Range) || next.seq2Range.intersects(w.seq2Range))) break;\n const v = new SequenceDiff(findParent(sequence1, next.seq1Range.start), findParent(sequence2, next.seq2Range.start));\n const equalPart = v.intersect(next);\n equalChars1 += equalPart.seq1Range.length;\n equalChars2 += equalPart.seq2Range.length;\n w = w.join(v);\n if (w.seq1Range.endExclusive >= next.seq1Range.endExclusive) equalMappings.shift();\n else break;\n }\n if (force && equalChars1 + equalChars2 < w.seq1Range.length + w.seq2Range.length || equalChars1 + equalChars2 < (w.seq1Range.length + w.seq2Range.length) * 2 / 3) additional.push(w);\n lastPoint = w.getEndExclusives();\n }\n while (equalMappings.length > 0) {\n const next = equalMappings.shift();\n if (next.seq1Range.isEmpty) continue;\n scanWord(next.getStarts(), next);\n scanWord(next.getEndExclusives().delta(-1), next);\n }\n return mergeSequenceDiffs(sequenceDiffs, additional);\n }\n function mergeSequenceDiffs(sequenceDiffs1, sequenceDiffs2) {\n const result = [];\n while (sequenceDiffs1.length > 0 || sequenceDiffs2.length > 0) {\n const sd1 = sequenceDiffs1[0];\n const sd2 = sequenceDiffs2[0];\n let next;\n if (sd1 && (!sd2 || sd1.seq1Range.start < sd2.seq1Range.start)) next = sequenceDiffs1.shift();\n else next = sequenceDiffs2.shift();\n if (result.length > 0 && result[result.length - 1].seq1Range.endExclusive >= next.seq1Range.start) result[result.length - 1] = result[result.length - 1].join(next);\n else result.push(next);\n }\n return result;\n }\n function removeVeryShortMatchingLinesBetweenDiffs(sequence1, _sequence2, sequenceDiffs) {\n let diffs = sequenceDiffs;\n if (diffs.length === 0) return diffs;\n let counter = 0;\n let shouldRepeat;\n do {\n shouldRepeat = false;\n const result = [diffs[0]];\n for (let i = 1; i < diffs.length; i++) {\n const cur = diffs[i];\n const lastResult = result[result.length - 1];\n function shouldJoinDiffs(before, after) {\n const unchangedRange = new OffsetRange(lastResult.seq1Range.endExclusive, cur.seq1Range.start);\n if (sequence1.getText(unchangedRange).replace(/\\s/g, \"\").length <= 4 && (before.seq1Range.length + before.seq2Range.length > 5 || after.seq1Range.length + after.seq2Range.length > 5)) return true;\n return false;\n }\n if (shouldJoinDiffs(lastResult, cur)) {\n shouldRepeat = true;\n result[result.length - 1] = result[result.length - 1].join(cur);\n } else result.push(cur);\n }\n diffs = result;\n } while (counter++ < 10 && shouldRepeat);\n return diffs;\n }\n function removeVeryShortMatchingTextBetweenLongDiffs(sequence1, sequence2, sequenceDiffs) {\n let diffs = sequenceDiffs;\n if (diffs.length === 0) return diffs;\n let counter = 0;\n let shouldRepeat;\n do {\n shouldRepeat = false;\n const result = [diffs[0]];\n for (let i = 1; i < diffs.length; i++) {\n const cur = diffs[i];\n const lastResult = result[result.length - 1];\n function shouldJoinDiffs(before, after) {\n const unchangedRange = new OffsetRange(lastResult.seq1Range.endExclusive, cur.seq1Range.start);\n if (sequence1.countLinesIn(unchangedRange) > 5 || unchangedRange.length > 500) return false;\n const unchangedText = sequence1.getText(unchangedRange).trim();\n if (unchangedText.length > 20 || unchangedText.split(/\\r\\n|\\r|\\n/).length > 1) return false;\n const beforeLineCount1 = sequence1.countLinesIn(before.seq1Range);\n const beforeSeq1Length = before.seq1Range.length;\n const beforeLineCount2 = sequence2.countLinesIn(before.seq2Range);\n const beforeSeq2Length = before.seq2Range.length;\n const afterLineCount1 = sequence1.countLinesIn(after.seq1Range);\n const afterSeq1Length = after.seq1Range.length;\n const afterLineCount2 = sequence2.countLinesIn(after.seq2Range);\n const afterSeq2Length = after.seq2Range.length;\n const max = 130;\n function cap(v) {\n return Math.min(v, max);\n }\n if (Math.pow(Math.pow(cap(beforeLineCount1 * 40 + beforeSeq1Length), 1.5) + Math.pow(cap(beforeLineCount2 * 40 + beforeSeq2Length), 1.5), 1.5) + Math.pow(Math.pow(cap(afterLineCount1 * 40 + afterSeq1Length), 1.5) + Math.pow(cap(afterLineCount2 * 40 + afterSeq2Length), 1.5), 1.5) > (max ** 1.5) ** 1.5 * 1.3) return true;\n return false;\n }\n if (shouldJoinDiffs(lastResult, cur)) {\n shouldRepeat = true;\n result[result.length - 1] = result[result.length - 1].join(cur);\n } else result.push(cur);\n }\n diffs = result;\n } while (counter++ < 10 && shouldRepeat);\n const newDiffs = [];\n forEachWithNeighbors(diffs, (prev, cur, next) => {\n let newDiff = cur;\n function shouldMarkAsChanged(text) {\n return text.length > 0 && text.trim().length <= 3 && cur.seq1Range.length + cur.seq2Range.length > 100;\n }\n const fullRange1 = sequence1.extendToFullLines(cur.seq1Range);\n const prefix = sequence1.getText(new OffsetRange(fullRange1.start, cur.seq1Range.start));\n if (shouldMarkAsChanged(prefix)) newDiff = newDiff.deltaStart(-prefix.length);\n const suffix = sequence1.getText(new OffsetRange(cur.seq1Range.endExclusive, fullRange1.endExclusive));\n if (shouldMarkAsChanged(suffix)) newDiff = newDiff.deltaEnd(suffix.length);\n const availableSpace = SequenceDiff.fromOffsetPairs(prev ? prev.getEndExclusives() : OffsetPair.zero, next ? next.getStarts() : OffsetPair.max);\n const result = newDiff.intersect(availableSpace);\n if (newDiffs.length > 0 && result.getStarts().equals(newDiffs[newDiffs.length - 1].getEndExclusives())) newDiffs[newDiffs.length - 1] = newDiffs[newDiffs.length - 1].join(result);\n else newDiffs.push(result);\n });\n return newDiffs;\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/diff/defaultLinesDiffComputer/lineSequence.js\n var LineSequence = class {\n constructor(trimmedHash, lines) {\n this.trimmedHash = trimmedHash;\n this.lines = lines;\n }\n getElement(offset) {\n return this.trimmedHash[offset];\n }\n get length() {\n return this.trimmedHash.length;\n }\n getBoundaryScore(length) {\n return 1e3 - ((length === 0 ? 0 : getIndentation(this.lines[length - 1])) + (length === this.lines.length ? 0 : getIndentation(this.lines[length])));\n }\n getText(range) {\n return this.lines.slice(range.start, range.endExclusive).join(\"\\n\");\n }\n isStronglyEqual(offset1, offset2) {\n return this.lines[offset1] === this.lines[offset2];\n }\n };\n function getIndentation(str) {\n let i = 0;\n while (i < str.length && (str.charCodeAt(i) === 32 || str.charCodeAt(i) === 9)) i++;\n return i;\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.js\n var DefaultLinesDiffComputer = class {\n constructor() {\n this.dynamicProgrammingDiffing = new DynamicProgrammingDiffing();\n this.myersDiffingAlgorithm = new MyersDiffAlgorithm();\n }\n computeDiff(originalLines, modifiedLines, options) {\n if (originalLines.length <= 1 && equals$1(originalLines, modifiedLines, (a, b) => a === b)) return new LinesDiff([], [], false);\n if (originalLines.length === 1 && originalLines[0].length === 0 || modifiedLines.length === 1 && modifiedLines[0].length === 0) return new LinesDiff([new DetailedLineRangeMapping(new LineRange(1, originalLines.length + 1), new LineRange(1, modifiedLines.length + 1), [new RangeMapping(new Range$1(1, 1, originalLines.length, originalLines[originalLines.length - 1].length + 1), new Range$1(1, 1, modifiedLines.length, modifiedLines[modifiedLines.length - 1].length + 1))])], [], false);\n const timeout = options.maxComputationTimeMs === 0 ? InfiniteTimeout.instance : new DateTimeout(options.maxComputationTimeMs);\n const considerWhitespaceChanges = !options.ignoreTrimWhitespace;\n const perfectHashes = /* @__PURE__ */ new Map();\n function getOrCreateHash(text) {\n let hash = perfectHashes.get(text);\n if (hash === void 0) {\n hash = perfectHashes.size;\n perfectHashes.set(text, hash);\n }\n return hash;\n }\n const originalLinesHashes = originalLines.map((l) => getOrCreateHash(l.trim()));\n const modifiedLinesHashes = modifiedLines.map((l) => getOrCreateHash(l.trim()));\n const sequence1 = new LineSequence(originalLinesHashes, originalLines);\n const sequence2 = new LineSequence(modifiedLinesHashes, modifiedLines);\n const lineAlignmentResult = (() => {\n if (sequence1.length + sequence2.length < 1700) return this.dynamicProgrammingDiffing.compute(sequence1, sequence2, timeout, (offset1, offset2) => originalLines[offset1] === modifiedLines[offset2] ? modifiedLines[offset2].length === 0 ? .1 : 1 + Math.log(1 + modifiedLines[offset2].length) : .99);\n return this.myersDiffingAlgorithm.compute(sequence1, sequence2, timeout);\n })();\n let lineAlignments = lineAlignmentResult.diffs;\n let hitTimeout = lineAlignmentResult.hitTimeout;\n lineAlignments = optimizeSequenceDiffs(sequence1, sequence2, lineAlignments);\n lineAlignments = removeVeryShortMatchingLinesBetweenDiffs(sequence1, sequence2, lineAlignments);\n const alignments = [];\n const scanForWhitespaceChanges = (equalLinesCount) => {\n if (!considerWhitespaceChanges) return;\n for (let i = 0; i < equalLinesCount; i++) {\n const seq1Offset = seq1LastStart + i;\n const seq2Offset = seq2LastStart + i;\n if (originalLines[seq1Offset] !== modifiedLines[seq2Offset]) {\n const characterDiffs = this.refineDiff(originalLines, modifiedLines, new SequenceDiff(new OffsetRange(seq1Offset, seq1Offset + 1), new OffsetRange(seq2Offset, seq2Offset + 1)), timeout, considerWhitespaceChanges, options);\n for (const a of characterDiffs.mappings) alignments.push(a);\n if (characterDiffs.hitTimeout) hitTimeout = true;\n }\n }\n };\n let seq1LastStart = 0;\n let seq2LastStart = 0;\n for (const diff of lineAlignments) {\n assertFn(() => diff.seq1Range.start - seq1LastStart === diff.seq2Range.start - seq2LastStart);\n scanForWhitespaceChanges(diff.seq1Range.start - seq1LastStart);\n seq1LastStart = diff.seq1Range.endExclusive;\n seq2LastStart = diff.seq2Range.endExclusive;\n const characterDiffs = this.refineDiff(originalLines, modifiedLines, diff, timeout, considerWhitespaceChanges, options);\n if (characterDiffs.hitTimeout) hitTimeout = true;\n for (const a of characterDiffs.mappings) alignments.push(a);\n }\n scanForWhitespaceChanges(originalLines.length - seq1LastStart);\n const changes = lineRangeMappingFromRangeMappings(alignments, new ArrayText(originalLines), new ArrayText(modifiedLines));\n let moves = [];\n if (options.computeMoves) moves = this.computeMoves(changes, originalLines, modifiedLines, originalLinesHashes, modifiedLinesHashes, timeout, considerWhitespaceChanges, options);\n assertFn(() => {\n function validatePosition(pos, lines) {\n if (pos.lineNumber < 1 || pos.lineNumber > lines.length) return false;\n const line = lines[pos.lineNumber - 1];\n if (pos.column < 1 || pos.column > line.length + 1) return false;\n return true;\n }\n function validateRange(range, lines) {\n if (range.startLineNumber < 1 || range.startLineNumber > lines.length + 1) return false;\n if (range.endLineNumberExclusive < 1 || range.endLineNumberExclusive > lines.length + 1) return false;\n return true;\n }\n for (const c of changes) {\n if (!c.innerChanges) return false;\n for (const ic of c.innerChanges) if (!(validatePosition(ic.modifiedRange.getStartPosition(), modifiedLines) && validatePosition(ic.modifiedRange.getEndPosition(), modifiedLines) && validatePosition(ic.originalRange.getStartPosition(), originalLines) && validatePosition(ic.originalRange.getEndPosition(), originalLines))) return false;\n if (!validateRange(c.modified, modifiedLines) || !validateRange(c.original, originalLines)) return false;\n }\n return true;\n });\n return new LinesDiff(changes, moves, hitTimeout);\n }\n computeMoves(changes, originalLines, modifiedLines, hashedOriginalLines, hashedModifiedLines, timeout, considerWhitespaceChanges, options) {\n return computeMovedLines(changes, originalLines, modifiedLines, hashedOriginalLines, hashedModifiedLines, timeout).map((m) => {\n return new MovedText(m, lineRangeMappingFromRangeMappings(this.refineDiff(originalLines, modifiedLines, new SequenceDiff(m.original.toOffsetRange(), m.modified.toOffsetRange()), timeout, considerWhitespaceChanges, options).mappings, new ArrayText(originalLines), new ArrayText(modifiedLines), true));\n });\n }\n refineDiff(originalLines, modifiedLines, diff, timeout, considerWhitespaceChanges, options) {\n const rangeMapping = toLineRangeMapping(diff).toRangeMapping2(originalLines, modifiedLines);\n const slice1 = new LinesSliceCharSequence(originalLines, rangeMapping.originalRange, considerWhitespaceChanges);\n const slice2 = new LinesSliceCharSequence(modifiedLines, rangeMapping.modifiedRange, considerWhitespaceChanges);\n const diffResult = slice1.length + slice2.length < 500 ? this.dynamicProgrammingDiffing.compute(slice1, slice2, timeout) : this.myersDiffingAlgorithm.compute(slice1, slice2, timeout);\n let diffs = diffResult.diffs;\n diffs = optimizeSequenceDiffs(slice1, slice2, diffs);\n diffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, (seq, idx) => seq.findWordContaining(idx));\n if (options.extendToSubwords) diffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, (seq, idx) => seq.findSubWordContaining(idx), true);\n diffs = removeShortMatches(slice1, slice2, diffs);\n diffs = removeVeryShortMatchingTextBetweenLongDiffs(slice1, slice2, diffs);\n return {\n mappings: diffs.map((d) => new RangeMapping(slice1.translateRange(d.seq1Range), slice2.translateRange(d.seq2Range))),\n hitTimeout: diffResult.hitTimeout\n };\n }\n };\n function toLineRangeMapping(sequenceDiff) {\n return new LineRangeMapping(new LineRange(sequenceDiff.seq1Range.start + 1, sequenceDiff.seq1Range.endExclusive + 1), new LineRange(sequenceDiff.seq2Range.start + 1, sequenceDiff.seq2Range.endExclusive + 1));\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/diff/linesDiffComputers.js\n const linesDiffComputers = {\n getLegacy: () => new LegacyLinesDiffComputer(),\n getDefault: () => new DefaultLinesDiffComputer()\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/base/common/color.js\n function roundFloat(number, decimalPoints) {\n const decimal = Math.pow(10, decimalPoints);\n return Math.round(number * decimal) / decimal;\n }\n var RGBA = class {\n constructor(r, g, b, a = 1) {\n this._rgbaBrand = void 0;\n this.r = Math.min(255, Math.max(0, r)) | 0;\n this.g = Math.min(255, Math.max(0, g)) | 0;\n this.b = Math.min(255, Math.max(0, b)) | 0;\n this.a = roundFloat(Math.max(Math.min(1, a), 0), 3);\n }\n static equals(a, b) {\n return a.r === b.r && a.g === b.g && a.b === b.b && a.a === b.a;\n }\n };\n var HSLA = class HSLA {\n constructor(h, s, l, a) {\n this._hslaBrand = void 0;\n this.h = Math.max(Math.min(360, h), 0) | 0;\n this.s = roundFloat(Math.max(Math.min(1, s), 0), 3);\n this.l = roundFloat(Math.max(Math.min(1, l), 0), 3);\n this.a = roundFloat(Math.max(Math.min(1, a), 0), 3);\n }\n static equals(a, b) {\n return a.h === b.h && a.s === b.s && a.l === b.l && a.a === b.a;\n }\n /**\n * Converts an RGB color value to HSL. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h in the set [0, 360], s, and l in the set [0, 1].\n */\n static fromRGBA(rgba) {\n const r = rgba.r / 255;\n const g = rgba.g / 255;\n const b = rgba.b / 255;\n const a = rgba.a;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = 0;\n let s = 0;\n const l = (min + max) / 2;\n const chroma = max - min;\n if (chroma > 0) {\n s = Math.min(l <= .5 ? chroma / (2 * l) : chroma / (2 - 2 * l), 1);\n switch (max) {\n case r:\n h = (g - b) / chroma + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / chroma + 2;\n break;\n case b:\n h = (r - g) / chroma + 4;\n break;\n }\n h *= 60;\n h = Math.round(h);\n }\n return new HSLA(h, s, l, a);\n }\n static _hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h in the set [0, 360] s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n */\n static toRGBA(hsla) {\n const h = hsla.h / 360;\n const { s, l, a } = hsla;\n let r, g, b;\n if (s === 0) r = g = b = l;\n else {\n const q = l < .5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = HSLA._hue2rgb(p, q, h + 1 / 3);\n g = HSLA._hue2rgb(p, q, h);\n b = HSLA._hue2rgb(p, q, h - 1 / 3);\n }\n return new RGBA(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), a);\n }\n };\n var HSVA = class HSVA {\n constructor(h, s, v, a) {\n this._hsvaBrand = void 0;\n this.h = Math.max(Math.min(360, h), 0) | 0;\n this.s = roundFloat(Math.max(Math.min(1, s), 0), 3);\n this.v = roundFloat(Math.max(Math.min(1, v), 0), 3);\n this.a = roundFloat(Math.max(Math.min(1, a), 0), 3);\n }\n static equals(a, b) {\n return a.h === b.h && a.s === b.s && a.v === b.v && a.a === b.a;\n }\n static fromRGBA(rgba) {\n const r = rgba.r / 255;\n const g = rgba.g / 255;\n const b = rgba.b / 255;\n const cmax = Math.max(r, g, b);\n const delta = cmax - Math.min(r, g, b);\n const s = cmax === 0 ? 0 : delta / cmax;\n let m;\n if (delta === 0) m = 0;\n else if (cmax === r) m = ((g - b) / delta % 6 + 6) % 6;\n else if (cmax === g) m = (b - r) / delta + 2;\n else m = (r - g) / delta + 4;\n return new HSVA(Math.round(m * 60), s, cmax, rgba.a);\n }\n static toRGBA(hsva) {\n const { h, s, v, a } = hsva;\n const c = v * s;\n const x = c * (1 - Math.abs(h / 60 % 2 - 1));\n const m = v - c;\n let [r, g, b] = [\n 0,\n 0,\n 0\n ];\n if (h < 60) {\n r = c;\n g = x;\n } else if (h < 120) {\n r = x;\n g = c;\n } else if (h < 180) {\n g = c;\n b = x;\n } else if (h < 240) {\n g = x;\n b = c;\n } else if (h < 300) {\n r = x;\n b = c;\n } else if (h <= 360) {\n r = c;\n b = x;\n }\n r = Math.round((r + m) * 255);\n g = Math.round((g + m) * 255);\n b = Math.round((b + m) * 255);\n return new RGBA(r, g, b, a);\n }\n };\n var Color$1 = class Color$1 {\n static fromHex(hex) {\n return Color$1.Format.CSS.parseHex(hex) || Color$1.red;\n }\n static equals(a, b) {\n if (!a && !b) return true;\n if (!a || !b) return false;\n return a.equals(b);\n }\n get hsla() {\n if (this._hsla) return this._hsla;\n else return HSLA.fromRGBA(this.rgba);\n }\n get hsva() {\n if (this._hsva) return this._hsva;\n return HSVA.fromRGBA(this.rgba);\n }\n constructor(arg) {\n if (!arg) throw new Error(\"Color needs a value\");\n else if (arg instanceof RGBA) this.rgba = arg;\n else if (arg instanceof HSLA) {\n this._hsla = arg;\n this.rgba = HSLA.toRGBA(arg);\n } else if (arg instanceof HSVA) {\n this._hsva = arg;\n this.rgba = HSVA.toRGBA(arg);\n } else throw new Error(\"Invalid color ctor argument\");\n }\n equals(other) {\n return !!other && RGBA.equals(this.rgba, other.rgba) && HSLA.equals(this.hsla, other.hsla) && HSVA.equals(this.hsva, other.hsva);\n }\n /**\n * http://www.w3.org/TR/WCAG20/#relativeluminancedef\n * Returns the number in the set [0, 1]. O => Darkest Black. 1 => Lightest white.\n */\n getRelativeLuminance() {\n const R = Color$1._relativeLuminanceForComponent(this.rgba.r);\n const G = Color$1._relativeLuminanceForComponent(this.rgba.g);\n const B = Color$1._relativeLuminanceForComponent(this.rgba.b);\n return roundFloat(.2126 * R + .7152 * G + .0722 * B, 4);\n }\n static _relativeLuminanceForComponent(color) {\n const c = color / 255;\n return c <= .03928 ? c / 12.92 : Math.pow((c + .055) / 1.055, 2.4);\n }\n /**\n * http://24ways.org/2010/calculating-color-contrast\n * Return 'true' if lighter color otherwise 'false'\n */\n isLighter() {\n return (this.rgba.r * 299 + this.rgba.g * 587 + this.rgba.b * 114) / 1e3 >= 128;\n }\n isLighterThan(another) {\n return this.getRelativeLuminance() > another.getRelativeLuminance();\n }\n isDarkerThan(another) {\n return this.getRelativeLuminance() < another.getRelativeLuminance();\n }\n lighten(factor) {\n return new Color$1(new HSLA(this.hsla.h, this.hsla.s, this.hsla.l + this.hsla.l * factor, this.hsla.a));\n }\n darken(factor) {\n return new Color$1(new HSLA(this.hsla.h, this.hsla.s, this.hsla.l - this.hsla.l * factor, this.hsla.a));\n }\n transparent(factor) {\n const { r, g, b, a } = this.rgba;\n return new Color$1(new RGBA(r, g, b, a * factor));\n }\n isTransparent() {\n return this.rgba.a === 0;\n }\n isOpaque() {\n return this.rgba.a === 1;\n }\n opposite() {\n return new Color$1(new RGBA(255 - this.rgba.r, 255 - this.rgba.g, 255 - this.rgba.b, this.rgba.a));\n }\n /**\n * Mixes the current color with the provided color based on the given factor.\n * @param color The color to mix with\n * @param factor The factor of mixing (0 means this color, 1 means the input color, 0.5 means equal mix)\n * @returns A new color representing the mix\n */\n mix(color, factor = .5) {\n const normalize = Math.min(Math.max(factor, 0), 1);\n const thisRGBA = this.rgba;\n const otherRGBA = color.rgba;\n const r = thisRGBA.r + (otherRGBA.r - thisRGBA.r) * normalize;\n const g = thisRGBA.g + (otherRGBA.g - thisRGBA.g) * normalize;\n const b = thisRGBA.b + (otherRGBA.b - thisRGBA.b) * normalize;\n const a = thisRGBA.a + (otherRGBA.a - thisRGBA.a) * normalize;\n return new Color$1(new RGBA(r, g, b, a));\n }\n makeOpaque(opaqueBackground) {\n if (this.isOpaque() || opaqueBackground.rgba.a !== 1) return this;\n const { r, g, b, a } = this.rgba;\n return new Color$1(new RGBA(opaqueBackground.rgba.r - a * (opaqueBackground.rgba.r - r), opaqueBackground.rgba.g - a * (opaqueBackground.rgba.g - g), opaqueBackground.rgba.b - a * (opaqueBackground.rgba.b - b), 1));\n }\n toString() {\n if (!this._toString) this._toString = Color$1.Format.CSS.format(this);\n return this._toString;\n }\n toNumber32Bit() {\n if (!this._toNumber32Bit) this._toNumber32Bit = (this.rgba.r << 24 | this.rgba.g << 16 | this.rgba.b << 8 | this.rgba.a * 255 << 0) >>> 0;\n return this._toNumber32Bit;\n }\n static getLighterColor(of, relative, factor) {\n if (of.isLighterThan(relative)) return of;\n factor = factor ? factor : .5;\n const lum1 = of.getRelativeLuminance();\n const lum2 = relative.getRelativeLuminance();\n factor = factor * (lum2 - lum1) / lum2;\n return of.lighten(factor);\n }\n static getDarkerColor(of, relative, factor) {\n if (of.isDarkerThan(relative)) return of;\n factor = factor ? factor : .5;\n const lum1 = of.getRelativeLuminance();\n const lum2 = relative.getRelativeLuminance();\n factor = factor * (lum1 - lum2) / lum1;\n return of.darken(factor);\n }\n static {\n this.white = new Color$1(new RGBA(255, 255, 255, 1));\n }\n static {\n this.black = new Color$1(new RGBA(0, 0, 0, 1));\n }\n static {\n this.red = new Color$1(new RGBA(255, 0, 0, 1));\n }\n static {\n this.blue = new Color$1(new RGBA(0, 0, 255, 1));\n }\n static {\n this.green = new Color$1(new RGBA(0, 255, 0, 1));\n }\n static {\n this.cyan = new Color$1(new RGBA(0, 255, 255, 1));\n }\n static {\n this.lightgrey = new Color$1(new RGBA(211, 211, 211, 1));\n }\n static {\n this.transparent = new Color$1(new RGBA(0, 0, 0, 0));\n }\n };\n (function(Color) {\n (function(Format) {\n (function(CSS) {\n function formatRGB(color) {\n if (color.rgba.a === 1) return `rgb(${color.rgba.r}, ${color.rgba.g}, ${color.rgba.b})`;\n return Color.Format.CSS.formatRGBA(color);\n }\n CSS.formatRGB = formatRGB;\n function formatRGBA(color) {\n return `rgba(${color.rgba.r}, ${color.rgba.g}, ${color.rgba.b}, ${+color.rgba.a.toFixed(2)})`;\n }\n CSS.formatRGBA = formatRGBA;\n function formatHSL(color) {\n if (color.hsla.a === 1) return `hsl(${color.hsla.h}, ${Math.round(color.hsla.s * 100)}%, ${Math.round(color.hsla.l * 100)}%)`;\n return Color.Format.CSS.formatHSLA(color);\n }\n CSS.formatHSL = formatHSL;\n function formatHSLA(color) {\n return `hsla(${color.hsla.h}, ${Math.round(color.hsla.s * 100)}%, ${Math.round(color.hsla.l * 100)}%, ${color.hsla.a.toFixed(2)})`;\n }\n CSS.formatHSLA = formatHSLA;\n function _toTwoDigitHex(n) {\n const r = n.toString(16);\n return r.length !== 2 ? \"0\" + r : r;\n }\n /**\n * Formats the color as #RRGGBB\n */\n function formatHex(color) {\n return `#${_toTwoDigitHex(color.rgba.r)}${_toTwoDigitHex(color.rgba.g)}${_toTwoDigitHex(color.rgba.b)}`;\n }\n CSS.formatHex = formatHex;\n /**\n * Formats the color as #RRGGBBAA\n * If 'compact' is set, colors without transparancy will be printed as #RRGGBB\n */\n function formatHexA(color, compact = false) {\n if (compact && color.rgba.a === 1) return Color.Format.CSS.formatHex(color);\n return `#${_toTwoDigitHex(color.rgba.r)}${_toTwoDigitHex(color.rgba.g)}${_toTwoDigitHex(color.rgba.b)}${_toTwoDigitHex(Math.round(color.rgba.a * 255))}`;\n }\n CSS.formatHexA = formatHexA;\n /**\n * The default format will use HEX if opaque and RGBA otherwise.\n */\n function format(color) {\n if (color.isOpaque()) return Color.Format.CSS.formatHex(color);\n return Color.Format.CSS.formatRGBA(color);\n }\n CSS.format = format;\n /**\n * Parse a CSS color and return a {@link Color}.\n * @param css The CSS color to parse.\n * @see https://drafts.csswg.org/css-color/#typedef-color\n */\n function parse(css) {\n if (css === \"transparent\") return Color.transparent;\n if (css.startsWith(\"#\")) return parseHex(css);\n if (css.startsWith(\"rgba(\")) {\n const color = css.match(/rgba\\((?<r>(?:\\+|-)?\\d+), *(?<g>(?:\\+|-)?\\d+), *(?<b>(?:\\+|-)?\\d+), *(?<a>(?:\\+|-)?\\d+(\\.\\d+)?)\\)/);\n if (!color) throw new Error(\"Invalid color format \" + css);\n return new Color(new RGBA(parseInt(color.groups?.r ?? \"0\"), parseInt(color.groups?.g ?? \"0\"), parseInt(color.groups?.b ?? \"0\"), parseFloat(color.groups?.a ?? \"0\")));\n }\n if (css.startsWith(\"rgb(\")) {\n const color = css.match(/rgb\\((?<r>(?:\\+|-)?\\d+), *(?<g>(?:\\+|-)?\\d+), *(?<b>(?:\\+|-)?\\d+)\\)/);\n if (!color) throw new Error(\"Invalid color format \" + css);\n return new Color(new RGBA(parseInt(color.groups?.r ?? \"0\"), parseInt(color.groups?.g ?? \"0\"), parseInt(color.groups?.b ?? \"0\")));\n }\n return parseNamedKeyword(css);\n }\n CSS.parse = parse;\n function parseNamedKeyword(css) {\n switch (css) {\n case \"aliceblue\": return new Color(new RGBA(240, 248, 255, 1));\n case \"antiquewhite\": return new Color(new RGBA(250, 235, 215, 1));\n case \"aqua\": return new Color(new RGBA(0, 255, 255, 1));\n case \"aquamarine\": return new Color(new RGBA(127, 255, 212, 1));\n case \"azure\": return new Color(new RGBA(240, 255, 255, 1));\n case \"beige\": return new Color(new RGBA(245, 245, 220, 1));\n case \"bisque\": return new Color(new RGBA(255, 228, 196, 1));\n case \"black\": return new Color(new RGBA(0, 0, 0, 1));\n case \"blanchedalmond\": return new Color(new RGBA(255, 235, 205, 1));\n case \"blue\": return new Color(new RGBA(0, 0, 255, 1));\n case \"blueviolet\": return new Color(new RGBA(138, 43, 226, 1));\n case \"brown\": return new Color(new RGBA(165, 42, 42, 1));\n case \"burlywood\": return new Color(new RGBA(222, 184, 135, 1));\n case \"cadetblue\": return new Color(new RGBA(95, 158, 160, 1));\n case \"chartreuse\": return new Color(new RGBA(127, 255, 0, 1));\n case \"chocolate\": return new Color(new RGBA(210, 105, 30, 1));\n case \"coral\": return new Color(new RGBA(255, 127, 80, 1));\n case \"cornflowerblue\": return new Color(new RGBA(100, 149, 237, 1));\n case \"cornsilk\": return new Color(new RGBA(255, 248, 220, 1));\n case \"crimson\": return new Color(new RGBA(220, 20, 60, 1));\n case \"cyan\": return new Color(new RGBA(0, 255, 255, 1));\n case \"darkblue\": return new Color(new RGBA(0, 0, 139, 1));\n case \"darkcyan\": return new Color(new RGBA(0, 139, 139, 1));\n case \"darkgoldenrod\": return new Color(new RGBA(184, 134, 11, 1));\n case \"darkgray\": return new Color(new RGBA(169, 169, 169, 1));\n case \"darkgreen\": return new Color(new RGBA(0, 100, 0, 1));\n case \"darkgrey\": return new Color(new RGBA(169, 169, 169, 1));\n case \"darkkhaki\": return new Color(new RGBA(189, 183, 107, 1));\n case \"darkmagenta\": return new Color(new RGBA(139, 0, 139, 1));\n case \"darkolivegreen\": return new Color(new RGBA(85, 107, 47, 1));\n case \"darkorange\": return new Color(new RGBA(255, 140, 0, 1));\n case \"darkorchid\": return new Color(new RGBA(153, 50, 204, 1));\n case \"darkred\": return new Color(new RGBA(139, 0, 0, 1));\n case \"darksalmon\": return new Color(new RGBA(233, 150, 122, 1));\n case \"darkseagreen\": return new Color(new RGBA(143, 188, 143, 1));\n case \"darkslateblue\": return new Color(new RGBA(72, 61, 139, 1));\n case \"darkslategray\": return new Color(new RGBA(47, 79, 79, 1));\n case \"darkslategrey\": return new Color(new RGBA(47, 79, 79, 1));\n case \"darkturquoise\": return new Color(new RGBA(0, 206, 209, 1));\n case \"darkviolet\": return new Color(new RGBA(148, 0, 211, 1));\n case \"deeppink\": return new Color(new RGBA(255, 20, 147, 1));\n case \"deepskyblue\": return new Color(new RGBA(0, 191, 255, 1));\n case \"dimgray\": return new Color(new RGBA(105, 105, 105, 1));\n case \"dimgrey\": return new Color(new RGBA(105, 105, 105, 1));\n case \"dodgerblue\": return new Color(new RGBA(30, 144, 255, 1));\n case \"firebrick\": return new Color(new RGBA(178, 34, 34, 1));\n case \"floralwhite\": return new Color(new RGBA(255, 250, 240, 1));\n case \"forestgreen\": return new Color(new RGBA(34, 139, 34, 1));\n case \"fuchsia\": return new Color(new RGBA(255, 0, 255, 1));\n case \"gainsboro\": return new Color(new RGBA(220, 220, 220, 1));\n case \"ghostwhite\": return new Color(new RGBA(248, 248, 255, 1));\n case \"gold\": return new Color(new RGBA(255, 215, 0, 1));\n case \"goldenrod\": return new Color(new RGBA(218, 165, 32, 1));\n case \"gray\": return new Color(new RGBA(128, 128, 128, 1));\n case \"green\": return new Color(new RGBA(0, 128, 0, 1));\n case \"greenyellow\": return new Color(new RGBA(173, 255, 47, 1));\n case \"grey\": return new Color(new RGBA(128, 128, 128, 1));\n case \"honeydew\": return new Color(new RGBA(240, 255, 240, 1));\n case \"hotpink\": return new Color(new RGBA(255, 105, 180, 1));\n case \"indianred\": return new Color(new RGBA(205, 92, 92, 1));\n case \"indigo\": return new Color(new RGBA(75, 0, 130, 1));\n case \"ivory\": return new Color(new RGBA(255, 255, 240, 1));\n case \"khaki\": return new Color(new RGBA(240, 230, 140, 1));\n case \"lavender\": return new Color(new RGBA(230, 230, 250, 1));\n case \"lavenderblush\": return new Color(new RGBA(255, 240, 245, 1));\n case \"lawngreen\": return new Color(new RGBA(124, 252, 0, 1));\n case \"lemonchiffon\": return new Color(new RGBA(255, 250, 205, 1));\n case \"lightblue\": return new Color(new RGBA(173, 216, 230, 1));\n case \"lightcoral\": return new Color(new RGBA(240, 128, 128, 1));\n case \"lightcyan\": return new Color(new RGBA(224, 255, 255, 1));\n case \"lightgoldenrodyellow\": return new Color(new RGBA(250, 250, 210, 1));\n case \"lightgray\": return new Color(new RGBA(211, 211, 211, 1));\n case \"lightgreen\": return new Color(new RGBA(144, 238, 144, 1));\n case \"lightgrey\": return new Color(new RGBA(211, 211, 211, 1));\n case \"lightpink\": return new Color(new RGBA(255, 182, 193, 1));\n case \"lightsalmon\": return new Color(new RGBA(255, 160, 122, 1));\n case \"lightseagreen\": return new Color(new RGBA(32, 178, 170, 1));\n case \"lightskyblue\": return new Color(new RGBA(135, 206, 250, 1));\n case \"lightslategray\": return new Color(new RGBA(119, 136, 153, 1));\n case \"lightslategrey\": return new Color(new RGBA(119, 136, 153, 1));\n case \"lightsteelblue\": return new Color(new RGBA(176, 196, 222, 1));\n case \"lightyellow\": return new Color(new RGBA(255, 255, 224, 1));\n case \"lime\": return new Color(new RGBA(0, 255, 0, 1));\n case \"limegreen\": return new Color(new RGBA(50, 205, 50, 1));\n case \"linen\": return new Color(new RGBA(250, 240, 230, 1));\n case \"magenta\": return new Color(new RGBA(255, 0, 255, 1));\n case \"maroon\": return new Color(new RGBA(128, 0, 0, 1));\n case \"mediumaquamarine\": return new Color(new RGBA(102, 205, 170, 1));\n case \"mediumblue\": return new Color(new RGBA(0, 0, 205, 1));\n case \"mediumorchid\": return new Color(new RGBA(186, 85, 211, 1));\n case \"mediumpurple\": return new Color(new RGBA(147, 112, 219, 1));\n case \"mediumseagreen\": return new Color(new RGBA(60, 179, 113, 1));\n case \"mediumslateblue\": return new Color(new RGBA(123, 104, 238, 1));\n case \"mediumspringgreen\": return new Color(new RGBA(0, 250, 154, 1));\n case \"mediumturquoise\": return new Color(new RGBA(72, 209, 204, 1));\n case \"mediumvioletred\": return new Color(new RGBA(199, 21, 133, 1));\n case \"midnightblue\": return new Color(new RGBA(25, 25, 112, 1));\n case \"mintcream\": return new Color(new RGBA(245, 255, 250, 1));\n case \"mistyrose\": return new Color(new RGBA(255, 228, 225, 1));\n case \"moccasin\": return new Color(new RGBA(255, 228, 181, 1));\n case \"navajowhite\": return new Color(new RGBA(255, 222, 173, 1));\n case \"navy\": return new Color(new RGBA(0, 0, 128, 1));\n case \"oldlace\": return new Color(new RGBA(253, 245, 230, 1));\n case \"olive\": return new Color(new RGBA(128, 128, 0, 1));\n case \"olivedrab\": return new Color(new RGBA(107, 142, 35, 1));\n case \"orange\": return new Color(new RGBA(255, 165, 0, 1));\n case \"orangered\": return new Color(new RGBA(255, 69, 0, 1));\n case \"orchid\": return new Color(new RGBA(218, 112, 214, 1));\n case \"palegoldenrod\": return new Color(new RGBA(238, 232, 170, 1));\n case \"palegreen\": return new Color(new RGBA(152, 251, 152, 1));\n case \"paleturquoise\": return new Color(new RGBA(175, 238, 238, 1));\n case \"palevioletred\": return new Color(new RGBA(219, 112, 147, 1));\n case \"papayawhip\": return new Color(new RGBA(255, 239, 213, 1));\n case \"peachpuff\": return new Color(new RGBA(255, 218, 185, 1));\n case \"peru\": return new Color(new RGBA(205, 133, 63, 1));\n case \"pink\": return new Color(new RGBA(255, 192, 203, 1));\n case \"plum\": return new Color(new RGBA(221, 160, 221, 1));\n case \"powderblue\": return new Color(new RGBA(176, 224, 230, 1));\n case \"purple\": return new Color(new RGBA(128, 0, 128, 1));\n case \"rebeccapurple\": return new Color(new RGBA(102, 51, 153, 1));\n case \"red\": return new Color(new RGBA(255, 0, 0, 1));\n case \"rosybrown\": return new Color(new RGBA(188, 143, 143, 1));\n case \"royalblue\": return new Color(new RGBA(65, 105, 225, 1));\n case \"saddlebrown\": return new Color(new RGBA(139, 69, 19, 1));\n case \"salmon\": return new Color(new RGBA(250, 128, 114, 1));\n case \"sandybrown\": return new Color(new RGBA(244, 164, 96, 1));\n case \"seagreen\": return new Color(new RGBA(46, 139, 87, 1));\n case \"seashell\": return new Color(new RGBA(255, 245, 238, 1));\n case \"sienna\": return new Color(new RGBA(160, 82, 45, 1));\n case \"silver\": return new Color(new RGBA(192, 192, 192, 1));\n case \"skyblue\": return new Color(new RGBA(135, 206, 235, 1));\n case \"slateblue\": return new Color(new RGBA(106, 90, 205, 1));\n case \"slategray\": return new Color(new RGBA(112, 128, 144, 1));\n case \"slategrey\": return new Color(new RGBA(112, 128, 144, 1));\n case \"snow\": return new Color(new RGBA(255, 250, 250, 1));\n case \"springgreen\": return new Color(new RGBA(0, 255, 127, 1));\n case \"steelblue\": return new Color(new RGBA(70, 130, 180, 1));\n case \"tan\": return new Color(new RGBA(210, 180, 140, 1));\n case \"teal\": return new Color(new RGBA(0, 128, 128, 1));\n case \"thistle\": return new Color(new RGBA(216, 191, 216, 1));\n case \"tomato\": return new Color(new RGBA(255, 99, 71, 1));\n case \"turquoise\": return new Color(new RGBA(64, 224, 208, 1));\n case \"violet\": return new Color(new RGBA(238, 130, 238, 1));\n case \"wheat\": return new Color(new RGBA(245, 222, 179, 1));\n case \"white\": return new Color(new RGBA(255, 255, 255, 1));\n case \"whitesmoke\": return new Color(new RGBA(245, 245, 245, 1));\n case \"yellow\": return new Color(new RGBA(255, 255, 0, 1));\n case \"yellowgreen\": return new Color(new RGBA(154, 205, 50, 1));\n default: return null;\n }\n }\n /**\n * Converts an Hex color value to a Color.\n * returns r, g, and b are contained in the set [0, 255]\n * @param hex string (#RGB, #RGBA, #RRGGBB or #RRGGBBAA).\n */\n function parseHex(hex) {\n const length = hex.length;\n if (length === 0) return null;\n if (hex.charCodeAt(0) !== 35) return null;\n if (length === 7) return new Color(new RGBA(16 * _parseHexDigit(hex.charCodeAt(1)) + _parseHexDigit(hex.charCodeAt(2)), 16 * _parseHexDigit(hex.charCodeAt(3)) + _parseHexDigit(hex.charCodeAt(4)), 16 * _parseHexDigit(hex.charCodeAt(5)) + _parseHexDigit(hex.charCodeAt(6)), 1));\n if (length === 9) return new Color(new RGBA(16 * _parseHexDigit(hex.charCodeAt(1)) + _parseHexDigit(hex.charCodeAt(2)), 16 * _parseHexDigit(hex.charCodeAt(3)) + _parseHexDigit(hex.charCodeAt(4)), 16 * _parseHexDigit(hex.charCodeAt(5)) + _parseHexDigit(hex.charCodeAt(6)), (16 * _parseHexDigit(hex.charCodeAt(7)) + _parseHexDigit(hex.charCodeAt(8))) / 255));\n if (length === 4) {\n const r = _parseHexDigit(hex.charCodeAt(1));\n const g = _parseHexDigit(hex.charCodeAt(2));\n const b = _parseHexDigit(hex.charCodeAt(3));\n return new Color(new RGBA(16 * r + r, 16 * g + g, 16 * b + b));\n }\n if (length === 5) {\n const r = _parseHexDigit(hex.charCodeAt(1));\n const g = _parseHexDigit(hex.charCodeAt(2));\n const b = _parseHexDigit(hex.charCodeAt(3));\n const a = _parseHexDigit(hex.charCodeAt(4));\n return new Color(new RGBA(16 * r + r, 16 * g + g, 16 * b + b, (16 * a + a) / 255));\n }\n return null;\n }\n CSS.parseHex = parseHex;\n function _parseHexDigit(charCode) {\n switch (charCode) {\n case 48: return 0;\n case 49: return 1;\n case 50: return 2;\n case 51: return 3;\n case 52: return 4;\n case 53: return 5;\n case 54: return 6;\n case 55: return 7;\n case 56: return 8;\n case 57: return 9;\n case 97: return 10;\n case 65: return 10;\n case 98: return 11;\n case 66: return 11;\n case 99: return 12;\n case 67: return 12;\n case 100: return 13;\n case 68: return 13;\n case 101: return 14;\n case 69: return 14;\n case 102: return 15;\n case 70: return 15;\n }\n return 0;\n }\n })(Format.CSS || (Format.CSS = {}));\n })(Color.Format || (Color.Format = {}));\n })(Color$1 || (Color$1 = {}));\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/languages/defaultDocumentColorsComputer.js\n function _parseCaptureGroups(captureGroups) {\n const values = [];\n for (const captureGroup of captureGroups) {\n const parsedNumber = Number(captureGroup);\n if (parsedNumber || parsedNumber === 0 && captureGroup.replace(/\\s/g, \"\") !== \"\") values.push(parsedNumber);\n }\n return values;\n }\n function _toIColor(r, g, b, a) {\n return {\n red: r / 255,\n blue: b / 255,\n green: g / 255,\n alpha: a\n };\n }\n function _findRange(model, match) {\n const index = match.index;\n const length = match[0].length;\n if (index === void 0) return;\n const startPosition = model.positionAt(index);\n return {\n startLineNumber: startPosition.lineNumber,\n startColumn: startPosition.column,\n endLineNumber: startPosition.lineNumber,\n endColumn: startPosition.column + length\n };\n }\n function _findHexColorInformation(range, hexValue) {\n if (!range) return;\n const parsedHexColor = Color$1.Format.CSS.parseHex(hexValue);\n if (!parsedHexColor) return;\n return {\n range,\n color: _toIColor(parsedHexColor.rgba.r, parsedHexColor.rgba.g, parsedHexColor.rgba.b, parsedHexColor.rgba.a)\n };\n }\n function _findRGBColorInformation(range, matches, isAlpha) {\n if (!range || matches.length !== 1) return;\n const parsedRegex = _parseCaptureGroups(matches[0].values());\n return {\n range,\n color: _toIColor(parsedRegex[0], parsedRegex[1], parsedRegex[2], isAlpha ? parsedRegex[3] : 1)\n };\n }\n function _findHSLColorInformation(range, matches, isAlpha) {\n if (!range || matches.length !== 1) return;\n const parsedRegex = _parseCaptureGroups(matches[0].values());\n const colorEquivalent = new Color$1(new HSLA(parsedRegex[0], parsedRegex[1] / 100, parsedRegex[2] / 100, isAlpha ? parsedRegex[3] : 1));\n return {\n range,\n color: _toIColor(colorEquivalent.rgba.r, colorEquivalent.rgba.g, colorEquivalent.rgba.b, colorEquivalent.rgba.a)\n };\n }\n function _findMatches(model, regex) {\n if (typeof model === \"string\") return [...model.matchAll(regex)];\n else return model.findMatches(regex);\n }\n function computeColors(model) {\n const result = [];\n const initialValidationMatches = _findMatches(model, /\\b(rgb|rgba|hsl|hsla)(\\([0-9\\s,.\\%]*\\))|^(#)([A-Fa-f0-9]{3})\\b|^(#)([A-Fa-f0-9]{4})\\b|^(#)([A-Fa-f0-9]{6})\\b|^(#)([A-Fa-f0-9]{8})\\b|(?<=['\"\\s])(#)([A-Fa-f0-9]{3})\\b|(?<=['\"\\s])(#)([A-Fa-f0-9]{4})\\b|(?<=['\"\\s])(#)([A-Fa-f0-9]{6})\\b|(?<=['\"\\s])(#)([A-Fa-f0-9]{8})\\b/gm);\n if (initialValidationMatches.length > 0) for (const initialMatch of initialValidationMatches) {\n const initialCaptureGroups = initialMatch.filter((captureGroup) => captureGroup !== void 0);\n const colorScheme = initialCaptureGroups[1];\n const colorParameters = initialCaptureGroups[2];\n if (!colorParameters) continue;\n let colorInformation;\n if (colorScheme === \"rgb\") colorInformation = _findRGBColorInformation(_findRange(model, initialMatch), _findMatches(colorParameters, /^\\(\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*\\)$/gm), false);\n else if (colorScheme === \"rgba\") colorInformation = _findRGBColorInformation(_findRange(model, initialMatch), _findMatches(colorParameters, /^\\(\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(0[.][0-9]+|[.][0-9]+|[01][.]|[01])\\s*\\)$/gm), true);\n else if (colorScheme === \"hsl\") colorInformation = _findHSLColorInformation(_findRange(model, initialMatch), _findMatches(colorParameters, /^\\(\\s*((?:360(?:\\.0+)?|(?:36[0]|3[0-5][0-9]|[12][0-9][0-9]|[1-9]?[0-9])(?:\\.\\d+)?))\\s*[\\s,]\\s*(100|\\d{1,2}[.]\\d*|\\d{1,2})%\\s*[\\s,]\\s*(100|\\d{1,2}[.]\\d*|\\d{1,2})%\\s*\\)$/gm), false);\n else if (colorScheme === \"hsla\") colorInformation = _findHSLColorInformation(_findRange(model, initialMatch), _findMatches(colorParameters, /^\\(\\s*((?:360(?:\\.0+)?|(?:36[0]|3[0-5][0-9]|[12][0-9][0-9]|[1-9]?[0-9])(?:\\.\\d+)?))\\s*[\\s,]\\s*(100|\\d{1,2}[.]\\d*|\\d{1,2})%\\s*[\\s,]\\s*(100|\\d{1,2}[.]\\d*|\\d{1,2})%\\s*[\\s,]\\s*(0[.][0-9]+|[.][0-9]+|[01][.]0*|[01])\\s*\\)$/gm), true);\n else if (colorScheme === \"#\") colorInformation = _findHexColorInformation(_findRange(model, initialMatch), colorScheme + colorParameters);\n if (colorInformation) result.push(colorInformation);\n }\n return result;\n }\n /**\n * Returns an array of all default document colors in the provided document\n */\n function computeDefaultDocumentColors(model) {\n if (!model || typeof model.getValue !== \"function\" || typeof model.positionAt !== \"function\") return [];\n return computeColors(model);\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/services/findSectionHeaders.js\n const trimDashesRegex = /^-+|-+$/g;\n const CHUNK_SIZE = 100;\n const MAX_SECTION_LINES = 5;\n /**\n * Find section headers in the model.\n *\n * @param model the text model to search in\n * @param options options to search with\n * @returns an array of section headers\n */\n function findSectionHeaders(model, options) {\n let headers = [];\n if (options.findRegionSectionHeaders && options.foldingRules?.markers) {\n const regionHeaders = collectRegionHeaders(model, options);\n headers = headers.concat(regionHeaders);\n }\n if (options.findMarkSectionHeaders) {\n const markHeaders = collectMarkHeaders(model, options);\n headers = headers.concat(markHeaders);\n }\n return headers;\n }\n function collectRegionHeaders(model, options) {\n const regionHeaders = [];\n const endLineNumber = model.getLineCount();\n for (let lineNumber = 1; lineNumber <= endLineNumber; lineNumber++) {\n const lineContent = model.getLineContent(lineNumber);\n const match = lineContent.match(options.foldingRules.markers.start);\n if (match) {\n const range = {\n startLineNumber: lineNumber,\n startColumn: match[0].length + 1,\n endLineNumber: lineNumber,\n endColumn: lineContent.length + 1\n };\n if (range.endColumn > range.startColumn) {\n const sectionHeader = {\n range,\n ...getHeaderText(lineContent.substring(match[0].length)),\n shouldBeInComments: false\n };\n if (sectionHeader.text || sectionHeader.hasSeparatorLine) regionHeaders.push(sectionHeader);\n }\n }\n }\n return regionHeaders;\n }\n function collectMarkHeaders(model, options) {\n const markHeaders = [];\n const endLineNumber = model.getLineCount();\n if (!options.markSectionHeaderRegex || options.markSectionHeaderRegex.trim() === \"\") return markHeaders;\n const multiline = isMultilineRegexSource(options.markSectionHeaderRegex);\n const regex = new RegExp(options.markSectionHeaderRegex, `gdm${multiline ? \"s\" : \"\"}`);\n if (regExpLeadsToEndlessLoop(regex)) return markHeaders;\n for (let startLine = 1; startLine <= endLineNumber; startLine += CHUNK_SIZE - MAX_SECTION_LINES) {\n const endLine = Math.min(startLine + CHUNK_SIZE - 1, endLineNumber);\n const lines = [];\n for (let i = startLine; i <= endLine; i++) lines.push(model.getLineContent(i));\n const text = lines.join(\"\\n\");\n regex.lastIndex = 0;\n let match;\n while ((match = regex.exec(text)) !== null) {\n const precedingText = text.substring(0, match.index);\n const lineOffset = (precedingText.match(/\\n/g) || []).length;\n const lineNumber = startLine + lineOffset;\n const matchLines = match[0].split(\"\\n\");\n const matchHeight = matchLines.length;\n const matchEndLine = lineNumber + matchHeight - 1;\n const lineStartIndex = precedingText.lastIndexOf(\"\\n\") + 1;\n const startColumn = match.index - lineStartIndex + 1;\n const lastMatchLine = matchLines[matchLines.length - 1];\n const sectionHeader = {\n range: {\n startLineNumber: lineNumber,\n startColumn,\n endLineNumber: matchEndLine,\n endColumn: matchHeight === 1 ? startColumn + match[0].length : lastMatchLine.length + 1\n },\n text: (match.groups ?? {})[\"label\"] ?? \"\",\n hasSeparatorLine: ((match.groups ?? {})[\"separator\"] ?? \"\") !== \"\",\n shouldBeInComments: true\n };\n if (sectionHeader.text || sectionHeader.hasSeparatorLine) {\n if (markHeaders.length === 0 || markHeaders[markHeaders.length - 1].range.endLineNumber < sectionHeader.range.startLineNumber) markHeaders.push(sectionHeader);\n }\n regex.lastIndex = match.index + match[0].length;\n }\n }\n return markHeaders;\n }\n function getHeaderText(text) {\n text = text.trim();\n const hasSeparatorLine = text.startsWith(\"-\");\n text = text.replace(trimDashesRegex, \"\");\n return {\n text,\n hasSeparatorLine\n };\n }\n (function() {\n const safeGlobal = globalThis;\n if (typeof safeGlobal.requestIdleCallback !== \"function\" || typeof safeGlobal.cancelIdleCallback !== \"function\");\n })();\n /**\n * Creates a promise whose resolution or rejection can be controlled imperatively.\n */\n var DeferredPromise = class {\n get isRejected() {\n return this.outcome?.outcome === 1;\n }\n get isSettled() {\n return !!this.outcome;\n }\n constructor() {\n this.p = new Promise((c, e) => {\n this.completeCallback = c;\n this.errorCallback = e;\n });\n }\n complete(value) {\n if (this.isSettled) return Promise.resolve();\n return new Promise((resolve) => {\n this.completeCallback(value);\n this.outcome = {\n outcome: 0,\n value\n };\n resolve();\n });\n }\n error(err) {\n if (this.isSettled) return Promise.resolve();\n return new Promise((resolve) => {\n this.errorCallback(err);\n this.outcome = {\n outcome: 1,\n value: err\n };\n resolve();\n });\n }\n cancel() {\n return this.error(new CancellationError());\n }\n };\n var Promises;\n (function(Promises) {\n /**\n * A drop-in replacement for `Promise.all` with the only difference\n * that the method awaits every promise to either fulfill or reject.\n *\n * Similar to `Promise.all`, only the first error will be returned\n * if any.\n */\n async function settled(promises) {\n let firstError = void 0;\n const result = await Promise.all(promises.map((promise) => promise.then((value) => value, (error) => {\n if (!firstError) firstError = error;\n })));\n if (typeof firstError !== \"undefined\") throw firstError;\n return result;\n }\n Promises.settled = settled;\n /**\n * A helper to create a new `Promise<T>` with a body that is a promise\n * itself. By default, an error that raises from the async body will\n * end up as a unhandled rejection, so this utility properly awaits the\n * body and rejects the promise as a normal promise does without async\n * body.\n *\n * This method should only be used in rare cases where otherwise `async`\n * cannot be used (e.g. when callbacks are involved that require this).\n */\n function withAsyncBody(bodyFn) {\n return new Promise(async (resolve, reject) => {\n try {\n await bodyFn(resolve, reject);\n } catch (error) {\n reject(error);\n }\n });\n }\n Promises.withAsyncBody = withAsyncBody;\n })(Promises || (Promises = {}));\n var ProducerConsumer = class {\n constructor() {\n this._unsatisfiedConsumers = [];\n this._unconsumedValues = [];\n }\n get hasFinalValue() {\n return !!this._finalValue;\n }\n produce(value) {\n this._ensureNoFinalValue();\n if (this._unsatisfiedConsumers.length > 0) {\n const deferred = this._unsatisfiedConsumers.shift();\n this._resolveOrRejectDeferred(deferred, value);\n } else this._unconsumedValues.push(value);\n }\n produceFinal(value) {\n this._ensureNoFinalValue();\n this._finalValue = value;\n for (const deferred of this._unsatisfiedConsumers) this._resolveOrRejectDeferred(deferred, value);\n this._unsatisfiedConsumers.length = 0;\n }\n _ensureNoFinalValue() {\n if (this._finalValue) throw new BugIndicatingError(\"ProducerConsumer: cannot produce after final value has been set\");\n }\n _resolveOrRejectDeferred(deferred, value) {\n if (value.ok) deferred.complete(value.value);\n else deferred.error(value.error);\n }\n consume() {\n if (this._unconsumedValues.length > 0 || this._finalValue) {\n const value = this._unconsumedValues.length > 0 ? this._unconsumedValues.shift() : this._finalValue;\n if (value.ok) return Promise.resolve(value.value);\n else return Promise.reject(value.error);\n } else {\n const deferred = new DeferredPromise();\n this._unsatisfiedConsumers.push(deferred);\n return deferred.p;\n }\n }\n };\n (class AsyncIterableProducer {\n constructor(executor, _onReturn) {\n this._onReturn = _onReturn;\n this._producerConsumer = new ProducerConsumer();\n this._iterator = {\n next: () => this._producerConsumer.consume(),\n return: () => {\n this._onReturn?.();\n return Promise.resolve({\n done: true,\n value: void 0\n });\n },\n throw: async (e) => {\n this._finishError(e);\n return {\n done: true,\n value: void 0\n };\n }\n };\n queueMicrotask(async () => {\n const p = executor({\n emitOne: (value) => this._producerConsumer.produce({\n ok: true,\n value: {\n done: false,\n value\n }\n }),\n emitMany: (values) => {\n for (const value of values) this._producerConsumer.produce({\n ok: true,\n value: {\n done: false,\n value\n }\n });\n },\n reject: (error) => this._finishError(error)\n });\n if (!this._producerConsumer.hasFinalValue) try {\n await p;\n this._finishOk();\n } catch (error) {\n this._finishError(error);\n }\n });\n }\n static fromArray(items) {\n return new AsyncIterableProducer((writer) => {\n writer.emitMany(items);\n });\n }\n static fromPromise(promise) {\n return new AsyncIterableProducer(async (emitter) => {\n emitter.emitMany(await promise);\n });\n }\n static fromPromisesResolveOrder(promises) {\n return new AsyncIterableProducer(async (emitter) => {\n await Promise.all(promises.map(async (p) => emitter.emitOne(await p)));\n });\n }\n static merge(iterables) {\n return new AsyncIterableProducer(async (emitter) => {\n await Promise.all(iterables.map(async (iterable) => {\n for await (const item of iterable) emitter.emitOne(item);\n }));\n });\n }\n static {\n this.EMPTY = AsyncIterableProducer.fromArray([]);\n }\n static map(iterable, mapFn) {\n return new AsyncIterableProducer(async (emitter) => {\n for await (const item of iterable) emitter.emitOne(mapFn(item));\n });\n }\n map(mapFn) {\n return AsyncIterableProducer.map(this, mapFn);\n }\n static coalesce(iterable) {\n return AsyncIterableProducer.filter(iterable, (item) => !!item);\n }\n coalesce() {\n return AsyncIterableProducer.coalesce(this);\n }\n static filter(iterable, filterFn) {\n return new AsyncIterableProducer(async (emitter) => {\n for await (const item of iterable) if (filterFn(item)) emitter.emitOne(item);\n });\n }\n filter(filterFn) {\n return AsyncIterableProducer.filter(this, filterFn);\n }\n _finishOk() {\n if (!this._producerConsumer.hasFinalValue) this._producerConsumer.produceFinal({\n ok: true,\n value: {\n done: true,\n value: void 0\n }\n });\n }\n _finishError(error) {\n if (!this._producerConsumer.hasFinalValue) this._producerConsumer.produceFinal({\n ok: false,\n error\n });\n }\n [Symbol.asyncIterator]() {\n return this._iterator;\n }\n });\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/model/prefixSumComputer.js\n var PrefixSumComputer = class {\n constructor(values) {\n this.values = values;\n this.prefixSum = new Uint32Array(values.length);\n this.prefixSumValidIndex = /* @__PURE__ */ new Int32Array(1);\n this.prefixSumValidIndex[0] = -1;\n }\n insertValues(insertIndex, insertValues) {\n insertIndex = toUint32(insertIndex);\n const oldValues = this.values;\n const oldPrefixSum = this.prefixSum;\n const insertValuesLen = insertValues.length;\n if (insertValuesLen === 0) return false;\n this.values = new Uint32Array(oldValues.length + insertValuesLen);\n this.values.set(oldValues.subarray(0, insertIndex), 0);\n this.values.set(oldValues.subarray(insertIndex), insertIndex + insertValuesLen);\n this.values.set(insertValues, insertIndex);\n if (insertIndex - 1 < this.prefixSumValidIndex[0]) this.prefixSumValidIndex[0] = insertIndex - 1;\n this.prefixSum = new Uint32Array(this.values.length);\n if (this.prefixSumValidIndex[0] >= 0) this.prefixSum.set(oldPrefixSum.subarray(0, this.prefixSumValidIndex[0] + 1));\n return true;\n }\n setValue(index, value) {\n index = toUint32(index);\n value = toUint32(value);\n if (this.values[index] === value) return false;\n this.values[index] = value;\n if (index - 1 < this.prefixSumValidIndex[0]) this.prefixSumValidIndex[0] = index - 1;\n return true;\n }\n removeValues(startIndex, count) {\n startIndex = toUint32(startIndex);\n count = toUint32(count);\n const oldValues = this.values;\n const oldPrefixSum = this.prefixSum;\n if (startIndex >= oldValues.length) return false;\n const maxCount = oldValues.length - startIndex;\n if (count >= maxCount) count = maxCount;\n if (count === 0) return false;\n this.values = new Uint32Array(oldValues.length - count);\n this.values.set(oldValues.subarray(0, startIndex), 0);\n this.values.set(oldValues.subarray(startIndex + count), startIndex);\n this.prefixSum = new Uint32Array(this.values.length);\n if (startIndex - 1 < this.prefixSumValidIndex[0]) this.prefixSumValidIndex[0] = startIndex - 1;\n if (this.prefixSumValidIndex[0] >= 0) this.prefixSum.set(oldPrefixSum.subarray(0, this.prefixSumValidIndex[0] + 1));\n return true;\n }\n getTotalSum() {\n if (this.values.length === 0) return 0;\n return this._getPrefixSum(this.values.length - 1);\n }\n /**\n * Returns the sum of the first `index + 1` many items.\n * @returns `SUM(0 <= j <= index, values[j])`.\n */\n getPrefixSum(index) {\n if (index < 0) return 0;\n index = toUint32(index);\n return this._getPrefixSum(index);\n }\n _getPrefixSum(index) {\n if (index <= this.prefixSumValidIndex[0]) return this.prefixSum[index];\n let startIndex = this.prefixSumValidIndex[0] + 1;\n if (startIndex === 0) {\n this.prefixSum[0] = this.values[0];\n startIndex++;\n }\n if (index >= this.values.length) index = this.values.length - 1;\n for (let i = startIndex; i <= index; i++) this.prefixSum[i] = this.prefixSum[i - 1] + this.values[i];\n this.prefixSumValidIndex[0] = Math.max(this.prefixSumValidIndex[0], index);\n return this.prefixSum[index];\n }\n getIndexOf(sum) {\n sum = Math.floor(sum);\n this.getTotalSum();\n let low = 0;\n let high = this.values.length - 1;\n let mid = 0;\n let midStop = 0;\n let midStart = 0;\n while (low <= high) {\n mid = low + (high - low) / 2 | 0;\n midStop = this.prefixSum[mid];\n midStart = midStop - this.values[mid];\n if (sum < midStart) high = mid - 1;\n else if (sum >= midStop) low = mid + 1;\n else break;\n }\n return new PrefixSumIndexOfResult(mid, sum - midStart);\n }\n };\n var PrefixSumIndexOfResult = class {\n constructor(index, remainder) {\n this.index = index;\n this.remainder = remainder;\n this._prefixSumIndexOfResultBrand = void 0;\n this.index = index;\n this.remainder = remainder;\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/model/mirrorTextModel.js\n var MirrorTextModel = class {\n constructor(uri, lines, eol, versionId) {\n this._uri = uri;\n this._lines = lines;\n this._eol = eol;\n this._versionId = versionId;\n this._lineStarts = null;\n this._cachedTextValue = null;\n }\n dispose() {\n this._lines.length = 0;\n }\n get version() {\n return this._versionId;\n }\n getText() {\n if (this._cachedTextValue === null) this._cachedTextValue = this._lines.join(this._eol);\n return this._cachedTextValue;\n }\n onEvents(e) {\n if (e.eol && e.eol !== this._eol) {\n this._eol = e.eol;\n this._lineStarts = null;\n }\n const changes = e.changes;\n for (const change of changes) {\n this._acceptDeleteRange(change.range);\n this._acceptInsertText(new Position$1(change.range.startLineNumber, change.range.startColumn), change.text);\n }\n this._versionId = e.versionId;\n this._cachedTextValue = null;\n }\n _ensureLineStarts() {\n if (!this._lineStarts) {\n const eolLength = this._eol.length;\n const linesLength = this._lines.length;\n const lineStartValues = new Uint32Array(linesLength);\n for (let i = 0; i < linesLength; i++) lineStartValues[i] = this._lines[i].length + eolLength;\n this._lineStarts = new PrefixSumComputer(lineStartValues);\n }\n }\n /**\n * All changes to a line's text go through this method\n */\n _setLineText(lineIndex, newValue) {\n this._lines[lineIndex] = newValue;\n if (this._lineStarts) this._lineStarts.setValue(lineIndex, this._lines[lineIndex].length + this._eol.length);\n }\n _acceptDeleteRange(range) {\n if (range.startLineNumber === range.endLineNumber) {\n if (range.startColumn === range.endColumn) return;\n this._setLineText(range.startLineNumber - 1, this._lines[range.startLineNumber - 1].substring(0, range.startColumn - 1) + this._lines[range.startLineNumber - 1].substring(range.endColumn - 1));\n return;\n }\n this._setLineText(range.startLineNumber - 1, this._lines[range.startLineNumber - 1].substring(0, range.startColumn - 1) + this._lines[range.endLineNumber - 1].substring(range.endColumn - 1));\n this._lines.splice(range.startLineNumber, range.endLineNumber - range.startLineNumber);\n if (this._lineStarts) this._lineStarts.removeValues(range.startLineNumber, range.endLineNumber - range.startLineNumber);\n }\n _acceptInsertText(position, insertText) {\n if (insertText.length === 0) return;\n const insertLines = splitLines(insertText);\n if (insertLines.length === 1) {\n this._setLineText(position.lineNumber - 1, this._lines[position.lineNumber - 1].substring(0, position.column - 1) + insertLines[0] + this._lines[position.lineNumber - 1].substring(position.column - 1));\n return;\n }\n insertLines[insertLines.length - 1] += this._lines[position.lineNumber - 1].substring(position.column - 1);\n this._setLineText(position.lineNumber - 1, this._lines[position.lineNumber - 1].substring(0, position.column - 1) + insertLines[0]);\n const newLengths = new Uint32Array(insertLines.length - 1);\n for (let i = 1; i < insertLines.length; i++) {\n this._lines.splice(position.lineNumber + i - 1, 0, insertLines[i]);\n newLengths[i - 1] = insertLines[i].length + this._eol.length;\n }\n if (this._lineStarts) this._lineStarts.insertValues(position.lineNumber, newLengths);\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/services/textModelSync/textModelSync.impl.js\n var WorkerTextModelSyncServer = class {\n constructor() {\n this._models = Object.create(null);\n }\n getModel(uri) {\n return this._models[uri];\n }\n getModels() {\n const all = [];\n Object.keys(this._models).forEach((key) => all.push(this._models[key]));\n return all;\n }\n $acceptNewModel(data) {\n this._models[data.url] = new MirrorModel(URI$2.parse(data.url), data.lines, data.EOL, data.versionId);\n }\n $acceptModelChanged(uri, e) {\n if (!this._models[uri]) return;\n this._models[uri].onEvents(e);\n }\n $acceptRemovedModel(uri) {\n if (!this._models[uri]) return;\n delete this._models[uri];\n }\n };\n var MirrorModel = class extends MirrorTextModel {\n get uri() {\n return this._uri;\n }\n get eol() {\n return this._eol;\n }\n getValue() {\n return this.getText();\n }\n findMatches(regex) {\n const matches = [];\n for (let i = 0; i < this._lines.length; i++) {\n const line = this._lines[i];\n const offsetToAdd = this.offsetAt(new Position$1(i + 1, 1));\n const iteratorOverMatches = line.matchAll(regex);\n for (const match of iteratorOverMatches) {\n if (match.index || match.index === 0) match.index = match.index + offsetToAdd;\n matches.push(match);\n }\n }\n return matches;\n }\n getLinesContent() {\n return this._lines.slice(0);\n }\n getLineCount() {\n return this._lines.length;\n }\n getLineContent(lineNumber) {\n return this._lines[lineNumber - 1];\n }\n getWordAtPosition(position, wordDefinition) {\n const wordAtText = getWordAtText(position.column, ensureValidWordDefinition(wordDefinition), this._lines[position.lineNumber - 1], 0);\n if (wordAtText) return new Range$1(position.lineNumber, wordAtText.startColumn, position.lineNumber, wordAtText.endColumn);\n return null;\n }\n words(wordDefinition) {\n const lines = this._lines;\n const wordenize = this._wordenize.bind(this);\n let lineNumber = 0;\n let lineText = \"\";\n let wordRangesIdx = 0;\n let wordRanges = [];\n return { *[Symbol.iterator]() {\n while (true) if (wordRangesIdx < wordRanges.length) {\n const value = lineText.substring(wordRanges[wordRangesIdx].start, wordRanges[wordRangesIdx].end);\n wordRangesIdx += 1;\n yield value;\n } else if (lineNumber < lines.length) {\n lineText = lines[lineNumber];\n wordRanges = wordenize(lineText, wordDefinition);\n wordRangesIdx = 0;\n lineNumber += 1;\n } else break;\n } };\n }\n getLineWords(lineNumber, wordDefinition) {\n const content = this._lines[lineNumber - 1];\n const ranges = this._wordenize(content, wordDefinition);\n const words = [];\n for (const range of ranges) words.push({\n word: content.substring(range.start, range.end),\n startColumn: range.start + 1,\n endColumn: range.end + 1\n });\n return words;\n }\n _wordenize(content, wordDefinition) {\n const result = [];\n let match;\n wordDefinition.lastIndex = 0;\n while (match = wordDefinition.exec(content)) {\n if (match[0].length === 0) break;\n result.push({\n start: match.index,\n end: match.index + match[0].length\n });\n }\n return result;\n }\n getValueInRange(range) {\n range = this._validateRange(range);\n if (range.startLineNumber === range.endLineNumber) return this._lines[range.startLineNumber - 1].substring(range.startColumn - 1, range.endColumn - 1);\n const lineEnding = this._eol;\n const startLineIndex = range.startLineNumber - 1;\n const endLineIndex = range.endLineNumber - 1;\n const resultLines = [];\n resultLines.push(this._lines[startLineIndex].substring(range.startColumn - 1));\n for (let i = startLineIndex + 1; i < endLineIndex; i++) resultLines.push(this._lines[i]);\n resultLines.push(this._lines[endLineIndex].substring(0, range.endColumn - 1));\n return resultLines.join(lineEnding);\n }\n offsetAt(position) {\n position = this._validatePosition(position);\n this._ensureLineStarts();\n return this._lineStarts.getPrefixSum(position.lineNumber - 2) + (position.column - 1);\n }\n positionAt(offset) {\n offset = Math.floor(offset);\n offset = Math.max(0, offset);\n this._ensureLineStarts();\n const out = this._lineStarts.getIndexOf(offset);\n const lineLength = this._lines[out.index].length;\n return {\n lineNumber: 1 + out.index,\n column: 1 + Math.min(out.remainder, lineLength)\n };\n }\n _validateRange(range) {\n const start = this._validatePosition({\n lineNumber: range.startLineNumber,\n column: range.startColumn\n });\n const end = this._validatePosition({\n lineNumber: range.endLineNumber,\n column: range.endColumn\n });\n if (start.lineNumber !== range.startLineNumber || start.column !== range.startColumn || end.lineNumber !== range.endLineNumber || end.column !== range.endColumn) return {\n startLineNumber: start.lineNumber,\n startColumn: start.column,\n endLineNumber: end.lineNumber,\n endColumn: end.column\n };\n return range;\n }\n _validatePosition(position) {\n if (!Position$1.isIPosition(position)) throw new Error(\"bad position\");\n let { lineNumber, column } = position;\n let hasChanged = false;\n if (lineNumber < 1) {\n lineNumber = 1;\n column = 1;\n hasChanged = true;\n } else if (lineNumber > this._lines.length) {\n lineNumber = this._lines.length;\n column = this._lines[lineNumber - 1].length + 1;\n hasChanged = true;\n } else {\n const maxCharacter = this._lines[lineNumber - 1].length + 1;\n if (column < 1) {\n column = 1;\n hasChanged = true;\n } else if (column > maxCharacter) {\n column = maxCharacter;\n hasChanged = true;\n }\n }\n if (!hasChanged) return position;\n else return {\n lineNumber,\n column\n };\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/services/editorWebWorker.js\n /**\n * @internal\n */\n var EditorWorker = class EditorWorker {\n constructor(_foreignModule = null) {\n this._foreignModule = _foreignModule;\n this._requestHandlerBrand = void 0;\n this._workerTextModelSyncServer = new WorkerTextModelSyncServer();\n }\n dispose() {}\n async $ping() {\n return \"pong\";\n }\n _getModel(uri) {\n return this._workerTextModelSyncServer.getModel(uri);\n }\n getModels() {\n return this._workerTextModelSyncServer.getModels();\n }\n $acceptNewModel(data) {\n this._workerTextModelSyncServer.$acceptNewModel(data);\n }\n $acceptModelChanged(uri, e) {\n this._workerTextModelSyncServer.$acceptModelChanged(uri, e);\n }\n $acceptRemovedModel(uri) {\n this._workerTextModelSyncServer.$acceptRemovedModel(uri);\n }\n async $computeUnicodeHighlights(url, options, range) {\n const model = this._getModel(url);\n if (!model) return {\n ranges: [],\n hasMore: false,\n ambiguousCharacterCount: 0,\n invisibleCharacterCount: 0,\n nonBasicAsciiCharacterCount: 0\n };\n return UnicodeTextModelHighlighter.computeUnicodeHighlights(model, options, range);\n }\n async $findSectionHeaders(url, options) {\n const model = this._getModel(url);\n if (!model) return [];\n return findSectionHeaders(model, options);\n }\n async $computeDiff(originalUrl, modifiedUrl, options, algorithm) {\n const original = this._getModel(originalUrl);\n const modified = this._getModel(modifiedUrl);\n if (!original || !modified) return null;\n return EditorWorker.computeDiff(original, modified, options, algorithm);\n }\n static computeDiff(originalTextModel, modifiedTextModel, options, algorithm) {\n const diffAlgorithm = algorithm === \"advanced\" ? linesDiffComputers.getDefault() : linesDiffComputers.getLegacy();\n const originalLines = originalTextModel.getLinesContent();\n const modifiedLines = modifiedTextModel.getLinesContent();\n const result = diffAlgorithm.computeDiff(originalLines, modifiedLines, options);\n const identical = result.changes.length > 0 ? false : this._modelsAreIdentical(originalTextModel, modifiedTextModel);\n function getLineChanges(changes) {\n return changes.map((m) => [\n m.original.startLineNumber,\n m.original.endLineNumberExclusive,\n m.modified.startLineNumber,\n m.modified.endLineNumberExclusive,\n m.innerChanges?.map((m) => [\n m.originalRange.startLineNumber,\n m.originalRange.startColumn,\n m.originalRange.endLineNumber,\n m.originalRange.endColumn,\n m.modifiedRange.startLineNumber,\n m.modifiedRange.startColumn,\n m.modifiedRange.endLineNumber,\n m.modifiedRange.endColumn\n ])\n ]);\n }\n return {\n identical,\n quitEarly: result.hitTimeout,\n changes: getLineChanges(result.changes),\n moves: result.moves.map((m) => [\n m.lineRangeMapping.original.startLineNumber,\n m.lineRangeMapping.original.endLineNumberExclusive,\n m.lineRangeMapping.modified.startLineNumber,\n m.lineRangeMapping.modified.endLineNumberExclusive,\n getLineChanges(m.changes)\n ])\n };\n }\n static _modelsAreIdentical(original, modified) {\n const originalLineCount = original.getLineCount();\n if (originalLineCount !== modified.getLineCount()) return false;\n for (let line = 1; line <= originalLineCount; line++) if (original.getLineContent(line) !== modified.getLineContent(line)) return false;\n return true;\n }\n static {\n this._diffLimit = 1e5;\n }\n async $computeMoreMinimalEdits(modelUrl, edits, pretty) {\n const model = this._getModel(modelUrl);\n if (!model) return edits;\n const result = [];\n let lastEol = void 0;\n edits = edits.slice(0).sort((a, b) => {\n if (a.range && b.range) return Range$1.compareRangesUsingStarts(a.range, b.range);\n return (a.range ? 0 : 1) - (b.range ? 0 : 1);\n });\n let writeIndex = 0;\n for (let readIndex = 1; readIndex < edits.length; readIndex++) if (Range$1.getEndPosition(edits[writeIndex].range).equals(Range$1.getStartPosition(edits[readIndex].range))) {\n edits[writeIndex].range = Range$1.fromPositions(Range$1.getStartPosition(edits[writeIndex].range), Range$1.getEndPosition(edits[readIndex].range));\n edits[writeIndex].text += edits[readIndex].text;\n } else {\n writeIndex++;\n edits[writeIndex] = edits[readIndex];\n }\n edits.length = writeIndex + 1;\n for (let { range, text, eol } of edits) {\n if (typeof eol === \"number\") lastEol = eol;\n if (Range$1.isEmpty(range) && !text) continue;\n const original = model.getValueInRange(range);\n text = text.replace(/\\r\\n|\\n|\\r/g, model.eol);\n if (original === text) continue;\n if (Math.max(text.length, original.length) > EditorWorker._diffLimit) {\n result.push({\n range,\n text\n });\n continue;\n }\n const changes = stringDiff(original, text, pretty);\n const editOffset = model.offsetAt(Range$1.lift(range).getStartPosition());\n for (const change of changes) {\n const start = model.positionAt(editOffset + change.originalStart);\n const end = model.positionAt(editOffset + change.originalStart + change.originalLength);\n const newEdit = {\n text: text.substr(change.modifiedStart, change.modifiedLength),\n range: {\n startLineNumber: start.lineNumber,\n startColumn: start.column,\n endLineNumber: end.lineNumber,\n endColumn: end.column\n }\n };\n if (model.getValueInRange(newEdit.range) !== newEdit.text) result.push(newEdit);\n }\n }\n if (typeof lastEol === \"number\") result.push({\n eol: lastEol,\n text: \"\",\n range: {\n startLineNumber: 0,\n startColumn: 0,\n endLineNumber: 0,\n endColumn: 0\n }\n });\n return result;\n }\n async $computeLinks(modelUrl) {\n const model = this._getModel(modelUrl);\n if (!model) return null;\n return computeLinks(model);\n }\n async $computeDefaultDocumentColors(modelUrl) {\n const model = this._getModel(modelUrl);\n if (!model) return null;\n return computeDefaultDocumentColors(model);\n }\n static {\n this._suggestionsLimit = 1e4;\n }\n async $textualSuggest(modelUrls, leadingWord, wordDef, wordDefFlags) {\n const sw = new StopWatch();\n const wordDefRegExp = new RegExp(wordDef, wordDefFlags);\n const seen = /* @__PURE__ */ new Set();\n outer: for (const url of modelUrls) {\n const model = this._getModel(url);\n if (!model) continue;\n for (const word of model.words(wordDefRegExp)) {\n if (word === leadingWord || !isNaN(Number(word))) continue;\n seen.add(word);\n if (seen.size > EditorWorker._suggestionsLimit) break outer;\n }\n }\n return {\n words: Array.from(seen),\n duration: sw.elapsed()\n };\n }\n async $computeWordRanges(modelUrl, range, wordDef, wordDefFlags) {\n const model = this._getModel(modelUrl);\n if (!model) return Object.create(null);\n const wordDefRegExp = new RegExp(wordDef, wordDefFlags);\n const result = Object.create(null);\n for (let line = range.startLineNumber; line < range.endLineNumber; line++) {\n const words = model.getLineWords(line, wordDefRegExp);\n for (const word of words) {\n if (!isNaN(Number(word.word))) continue;\n let array = result[word.word];\n if (!array) {\n array = [];\n result[word.word] = array;\n }\n array.push({\n startLineNumber: line,\n startColumn: word.startColumn,\n endLineNumber: line,\n endColumn: word.endColumn\n });\n }\n }\n return result;\n }\n async $navigateValueSet(modelUrl, range, up, wordDef, wordDefFlags) {\n const model = this._getModel(modelUrl);\n if (!model) return null;\n const wordDefRegExp = new RegExp(wordDef, wordDefFlags);\n if (range.startColumn === range.endColumn) range = {\n startLineNumber: range.startLineNumber,\n startColumn: range.startColumn,\n endLineNumber: range.endLineNumber,\n endColumn: range.endColumn + 1\n };\n const selectionText = model.getValueInRange(range);\n const wordRange = model.getWordAtPosition({\n lineNumber: range.startLineNumber,\n column: range.startColumn\n }, wordDefRegExp);\n if (!wordRange) return null;\n const word = model.getValueInRange(wordRange);\n return BasicInplaceReplace.INSTANCE.navigateValueSet(range, selectionText, wordRange, word, up);\n }\n $fmr(method, args) {\n if (!this._foreignModule || typeof this._foreignModule[method] !== \"function\") return Promise.reject(/* @__PURE__ */ new Error(\"Missing requestHandler or method: \" + method));\n try {\n return Promise.resolve(this._foreignModule[method].apply(this._foreignModule, args));\n } catch (e) {\n return Promise.reject(e);\n }\n }\n };\n if (typeof importScripts === \"function\") globalThis.monaco = createMonacoBaseAPI();\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/common/services/editorWorkerHost.js\n var EditorWorkerHost = class EditorWorkerHost {\n static {\n this.CHANNEL_NAME = \"editorWorkerHost\";\n }\n static getChannel(workerServer) {\n return workerServer.getChannel(EditorWorkerHost.CHANNEL_NAME);\n }\n static setChannel(workerClient, obj) {\n workerClient.setChannel(EditorWorkerHost.CHANNEL_NAME, obj);\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/editor/editor.worker.start.js\n /**\n * Used by `monaco-editor` to hook up web worker rpc.\n * @skipMangle\n * @internal\n */\n function start(createClient) {\n let client;\n const webWorkerServer = initialize$1((workerServer) => {\n const editorWorkerHost = EditorWorkerHost.getChannel(workerServer);\n client = createClient({\n host: new Proxy({}, { get(target, prop, receiver) {\n if (prop === \"then\") return;\n if (typeof prop !== \"string\") throw new Error(`Not supported`);\n return (...args) => {\n return editorWorkerHost.$fhr(prop, args);\n };\n } }),\n getMirrorModels: () => {\n return webWorkerServer.requestHandler.getModels();\n }\n });\n return new EditorWorker(client);\n });\n return client;\n }\n function initialize(callback) {\n self.onmessage = (m) => {\n start((ctx) => {\n return callback(ctx, m.data);\n });\n };\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/jsonc-parser/lib/esm/impl/scanner.js\n /**\n * Creates a JSON scanner on the given text.\n * If ignoreTrivia is set, whitespaces or comments are ignored.\n */\n function createScanner$1(text, ignoreTrivia = false) {\n const len = text.length;\n let pos = 0, value = \"\", tokenOffset = 0, token = 16, lineNumber = 0, lineStartOffset = 0, tokenLineStartOffset = 0, prevTokenLineStartOffset = 0, scanError = 0;\n function scanHexDigits(count, exact) {\n let digits = 0;\n let value = 0;\n while (digits < count || false) {\n let ch = text.charCodeAt(pos);\n if (ch >= 48 && ch <= 57) value = value * 16 + ch - 48;\n else if (ch >= 65 && ch <= 70) value = value * 16 + ch - 65 + 10;\n else if (ch >= 97 && ch <= 102) value = value * 16 + ch - 97 + 10;\n else break;\n pos++;\n digits++;\n }\n if (digits < count) value = -1;\n return value;\n }\n function setPosition(newPosition) {\n pos = newPosition;\n value = \"\";\n tokenOffset = 0;\n token = 16;\n scanError = 0;\n }\n function scanNumber() {\n let start = pos;\n if (text.charCodeAt(pos) === 48) pos++;\n else {\n pos++;\n while (pos < text.length && isDigit(text.charCodeAt(pos))) pos++;\n }\n if (pos < text.length && text.charCodeAt(pos) === 46) {\n pos++;\n if (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n while (pos < text.length && isDigit(text.charCodeAt(pos))) pos++;\n } else {\n scanError = 3;\n return text.substring(start, pos);\n }\n }\n let end = pos;\n if (pos < text.length && (text.charCodeAt(pos) === 69 || text.charCodeAt(pos) === 101)) {\n pos++;\n if (pos < text.length && text.charCodeAt(pos) === 43 || text.charCodeAt(pos) === 45) pos++;\n if (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n while (pos < text.length && isDigit(text.charCodeAt(pos))) pos++;\n end = pos;\n } else scanError = 3;\n }\n return text.substring(start, end);\n }\n function scanString() {\n let result = \"\", start = pos;\n while (true) {\n if (pos >= len) {\n result += text.substring(start, pos);\n scanError = 2;\n break;\n }\n const ch = text.charCodeAt(pos);\n if (ch === 34) {\n result += text.substring(start, pos);\n pos++;\n break;\n }\n if (ch === 92) {\n result += text.substring(start, pos);\n pos++;\n if (pos >= len) {\n scanError = 2;\n break;\n }\n switch (text.charCodeAt(pos++)) {\n case 34:\n result += \"\\\"\";\n break;\n case 92:\n result += \"\\\\\";\n break;\n case 47:\n result += \"/\";\n break;\n case 98:\n result += \"\\b\";\n break;\n case 102:\n result += \"\\f\";\n break;\n case 110:\n result += \"\\n\";\n break;\n case 114:\n result += \"\\r\";\n break;\n case 116:\n result += \" \";\n break;\n case 117:\n const ch3 = scanHexDigits(4);\n if (ch3 >= 0) result += String.fromCharCode(ch3);\n else scanError = 4;\n break;\n default: scanError = 5;\n }\n start = pos;\n continue;\n }\n if (ch >= 0 && ch <= 31) if (isLineBreak(ch)) {\n result += text.substring(start, pos);\n scanError = 2;\n break;\n } else scanError = 6;\n pos++;\n }\n return result;\n }\n function scanNext() {\n value = \"\";\n scanError = 0;\n tokenOffset = pos;\n lineStartOffset = lineNumber;\n prevTokenLineStartOffset = tokenLineStartOffset;\n if (pos >= len) {\n tokenOffset = len;\n return token = 17;\n }\n let code = text.charCodeAt(pos);\n if (isWhiteSpace(code)) {\n do {\n pos++;\n value += String.fromCharCode(code);\n code = text.charCodeAt(pos);\n } while (isWhiteSpace(code));\n return token = 15;\n }\n if (isLineBreak(code)) {\n pos++;\n value += String.fromCharCode(code);\n if (code === 13 && text.charCodeAt(pos) === 10) {\n pos++;\n value += \"\\n\";\n }\n lineNumber++;\n tokenLineStartOffset = pos;\n return token = 14;\n }\n switch (code) {\n case 123:\n pos++;\n return token = 1;\n case 125:\n pos++;\n return token = 2;\n case 91:\n pos++;\n return token = 3;\n case 93:\n pos++;\n return token = 4;\n case 58:\n pos++;\n return token = 6;\n case 44:\n pos++;\n return token = 5;\n case 34:\n pos++;\n value = scanString();\n return token = 10;\n case 47:\n const start = pos - 1;\n if (text.charCodeAt(pos + 1) === 47) {\n pos += 2;\n while (pos < len) {\n if (isLineBreak(text.charCodeAt(pos))) break;\n pos++;\n }\n value = text.substring(start, pos);\n return token = 12;\n }\n if (text.charCodeAt(pos + 1) === 42) {\n pos += 2;\n const safeLength = len - 1;\n let commentClosed = false;\n while (pos < safeLength) {\n const ch = text.charCodeAt(pos);\n if (ch === 42 && text.charCodeAt(pos + 1) === 47) {\n pos += 2;\n commentClosed = true;\n break;\n }\n pos++;\n if (isLineBreak(ch)) {\n if (ch === 13 && text.charCodeAt(pos) === 10) pos++;\n lineNumber++;\n tokenLineStartOffset = pos;\n }\n }\n if (!commentClosed) {\n pos++;\n scanError = 1;\n }\n value = text.substring(start, pos);\n return token = 13;\n }\n value += String.fromCharCode(code);\n pos++;\n return token = 16;\n case 45:\n value += String.fromCharCode(code);\n pos++;\n if (pos === len || !isDigit(text.charCodeAt(pos))) return token = 16;\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n value += scanNumber();\n return token = 11;\n default:\n while (pos < len && isUnknownContentCharacter(code)) {\n pos++;\n code = text.charCodeAt(pos);\n }\n if (tokenOffset !== pos) {\n value = text.substring(tokenOffset, pos);\n switch (value) {\n case \"true\": return token = 8;\n case \"false\": return token = 9;\n case \"null\": return token = 7;\n }\n return token = 16;\n }\n value += String.fromCharCode(code);\n pos++;\n return token = 16;\n }\n }\n function isUnknownContentCharacter(code) {\n if (isWhiteSpace(code) || isLineBreak(code)) return false;\n switch (code) {\n case 125:\n case 93:\n case 123:\n case 91:\n case 34:\n case 58:\n case 44:\n case 47: return false;\n }\n return true;\n }\n function scanNextNonTrivia() {\n let result;\n do\n result = scanNext();\n while (result >= 12 && result <= 15);\n return result;\n }\n return {\n setPosition,\n getPosition: () => pos,\n scan: ignoreTrivia ? scanNextNonTrivia : scanNext,\n getToken: () => token,\n getTokenValue: () => value,\n getTokenOffset: () => tokenOffset,\n getTokenLength: () => pos - tokenOffset,\n getTokenStartLine: () => lineStartOffset,\n getTokenStartCharacter: () => tokenOffset - prevTokenLineStartOffset,\n getTokenError: () => scanError\n };\n }\n function isWhiteSpace(ch) {\n return ch === 32 || ch === 9;\n }\n function isLineBreak(ch) {\n return ch === 10 || ch === 13;\n }\n function isDigit(ch) {\n return ch >= 48 && ch <= 57;\n }\n var CharacterCodes;\n (function(CharacterCodes) {\n CharacterCodes[CharacterCodes[\"lineFeed\"] = 10] = \"lineFeed\";\n CharacterCodes[CharacterCodes[\"carriageReturn\"] = 13] = \"carriageReturn\";\n CharacterCodes[CharacterCodes[\"space\"] = 32] = \"space\";\n CharacterCodes[CharacterCodes[\"_0\"] = 48] = \"_0\";\n CharacterCodes[CharacterCodes[\"_1\"] = 49] = \"_1\";\n CharacterCodes[CharacterCodes[\"_2\"] = 50] = \"_2\";\n CharacterCodes[CharacterCodes[\"_3\"] = 51] = \"_3\";\n CharacterCodes[CharacterCodes[\"_4\"] = 52] = \"_4\";\n CharacterCodes[CharacterCodes[\"_5\"] = 53] = \"_5\";\n CharacterCodes[CharacterCodes[\"_6\"] = 54] = \"_6\";\n CharacterCodes[CharacterCodes[\"_7\"] = 55] = \"_7\";\n CharacterCodes[CharacterCodes[\"_8\"] = 56] = \"_8\";\n CharacterCodes[CharacterCodes[\"_9\"] = 57] = \"_9\";\n CharacterCodes[CharacterCodes[\"a\"] = 97] = \"a\";\n CharacterCodes[CharacterCodes[\"b\"] = 98] = \"b\";\n CharacterCodes[CharacterCodes[\"c\"] = 99] = \"c\";\n CharacterCodes[CharacterCodes[\"d\"] = 100] = \"d\";\n CharacterCodes[CharacterCodes[\"e\"] = 101] = \"e\";\n CharacterCodes[CharacterCodes[\"f\"] = 102] = \"f\";\n CharacterCodes[CharacterCodes[\"g\"] = 103] = \"g\";\n CharacterCodes[CharacterCodes[\"h\"] = 104] = \"h\";\n CharacterCodes[CharacterCodes[\"i\"] = 105] = \"i\";\n CharacterCodes[CharacterCodes[\"j\"] = 106] = \"j\";\n CharacterCodes[CharacterCodes[\"k\"] = 107] = \"k\";\n CharacterCodes[CharacterCodes[\"l\"] = 108] = \"l\";\n CharacterCodes[CharacterCodes[\"m\"] = 109] = \"m\";\n CharacterCodes[CharacterCodes[\"n\"] = 110] = \"n\";\n CharacterCodes[CharacterCodes[\"o\"] = 111] = \"o\";\n CharacterCodes[CharacterCodes[\"p\"] = 112] = \"p\";\n CharacterCodes[CharacterCodes[\"q\"] = 113] = \"q\";\n CharacterCodes[CharacterCodes[\"r\"] = 114] = \"r\";\n CharacterCodes[CharacterCodes[\"s\"] = 115] = \"s\";\n CharacterCodes[CharacterCodes[\"t\"] = 116] = \"t\";\n CharacterCodes[CharacterCodes[\"u\"] = 117] = \"u\";\n CharacterCodes[CharacterCodes[\"v\"] = 118] = \"v\";\n CharacterCodes[CharacterCodes[\"w\"] = 119] = \"w\";\n CharacterCodes[CharacterCodes[\"x\"] = 120] = \"x\";\n CharacterCodes[CharacterCodes[\"y\"] = 121] = \"y\";\n CharacterCodes[CharacterCodes[\"z\"] = 122] = \"z\";\n CharacterCodes[CharacterCodes[\"A\"] = 65] = \"A\";\n CharacterCodes[CharacterCodes[\"B\"] = 66] = \"B\";\n CharacterCodes[CharacterCodes[\"C\"] = 67] = \"C\";\n CharacterCodes[CharacterCodes[\"D\"] = 68] = \"D\";\n CharacterCodes[CharacterCodes[\"E\"] = 69] = \"E\";\n CharacterCodes[CharacterCodes[\"F\"] = 70] = \"F\";\n CharacterCodes[CharacterCodes[\"G\"] = 71] = \"G\";\n CharacterCodes[CharacterCodes[\"H\"] = 72] = \"H\";\n CharacterCodes[CharacterCodes[\"I\"] = 73] = \"I\";\n CharacterCodes[CharacterCodes[\"J\"] = 74] = \"J\";\n CharacterCodes[CharacterCodes[\"K\"] = 75] = \"K\";\n CharacterCodes[CharacterCodes[\"L\"] = 76] = \"L\";\n CharacterCodes[CharacterCodes[\"M\"] = 77] = \"M\";\n CharacterCodes[CharacterCodes[\"N\"] = 78] = \"N\";\n CharacterCodes[CharacterCodes[\"O\"] = 79] = \"O\";\n CharacterCodes[CharacterCodes[\"P\"] = 80] = \"P\";\n CharacterCodes[CharacterCodes[\"Q\"] = 81] = \"Q\";\n CharacterCodes[CharacterCodes[\"R\"] = 82] = \"R\";\n CharacterCodes[CharacterCodes[\"S\"] = 83] = \"S\";\n CharacterCodes[CharacterCodes[\"T\"] = 84] = \"T\";\n CharacterCodes[CharacterCodes[\"U\"] = 85] = \"U\";\n CharacterCodes[CharacterCodes[\"V\"] = 86] = \"V\";\n CharacterCodes[CharacterCodes[\"W\"] = 87] = \"W\";\n CharacterCodes[CharacterCodes[\"X\"] = 88] = \"X\";\n CharacterCodes[CharacterCodes[\"Y\"] = 89] = \"Y\";\n CharacterCodes[CharacterCodes[\"Z\"] = 90] = \"Z\";\n CharacterCodes[CharacterCodes[\"asterisk\"] = 42] = \"asterisk\";\n CharacterCodes[CharacterCodes[\"backslash\"] = 92] = \"backslash\";\n CharacterCodes[CharacterCodes[\"closeBrace\"] = 125] = \"closeBrace\";\n CharacterCodes[CharacterCodes[\"closeBracket\"] = 93] = \"closeBracket\";\n CharacterCodes[CharacterCodes[\"colon\"] = 58] = \"colon\";\n CharacterCodes[CharacterCodes[\"comma\"] = 44] = \"comma\";\n CharacterCodes[CharacterCodes[\"dot\"] = 46] = \"dot\";\n CharacterCodes[CharacterCodes[\"doubleQuote\"] = 34] = \"doubleQuote\";\n CharacterCodes[CharacterCodes[\"minus\"] = 45] = \"minus\";\n CharacterCodes[CharacterCodes[\"openBrace\"] = 123] = \"openBrace\";\n CharacterCodes[CharacterCodes[\"openBracket\"] = 91] = \"openBracket\";\n CharacterCodes[CharacterCodes[\"plus\"] = 43] = \"plus\";\n CharacterCodes[CharacterCodes[\"slash\"] = 47] = \"slash\";\n CharacterCodes[CharacterCodes[\"formFeed\"] = 12] = \"formFeed\";\n CharacterCodes[CharacterCodes[\"tab\"] = 9] = \"tab\";\n })(CharacterCodes || (CharacterCodes = {}));\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/jsonc-parser/lib/esm/impl/string-intern.js\n const cachedSpaces = new Array(20).fill(0).map((_, index) => {\n return \" \".repeat(index);\n });\n const maxCachedValues = 200;\n const cachedBreakLinesWithSpaces = {\n \" \": {\n \"\\n\": new Array(maxCachedValues).fill(0).map((_, index) => {\n return \"\\n\" + \" \".repeat(index);\n }),\n \"\\r\": new Array(maxCachedValues).fill(0).map((_, index) => {\n return \"\\r\" + \" \".repeat(index);\n }),\n \"\\r\\n\": new Array(maxCachedValues).fill(0).map((_, index) => {\n return \"\\r\\n\" + \" \".repeat(index);\n })\n },\n \" \": {\n \"\\n\": new Array(maxCachedValues).fill(0).map((_, index) => {\n return \"\\n\" + \" \".repeat(index);\n }),\n \"\\r\": new Array(maxCachedValues).fill(0).map((_, index) => {\n return \"\\r\" + \" \".repeat(index);\n }),\n \"\\r\\n\": new Array(maxCachedValues).fill(0).map((_, index) => {\n return \"\\r\\n\" + \" \".repeat(index);\n })\n }\n };\n const supportedEols = [\n \"\\n\",\n \"\\r\",\n \"\\r\\n\"\n ];\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/jsonc-parser/lib/esm/impl/format.js\n function format$3(documentText, range, options) {\n let initialIndentLevel;\n let formatText;\n let formatTextStart;\n let rangeStart;\n let rangeEnd;\n if (range) {\n rangeStart = range.offset;\n rangeEnd = rangeStart + range.length;\n formatTextStart = rangeStart;\n while (formatTextStart > 0 && !isEOL(documentText, formatTextStart - 1)) formatTextStart--;\n let endOffset = rangeEnd;\n while (endOffset < documentText.length && !isEOL(documentText, endOffset)) endOffset++;\n formatText = documentText.substring(formatTextStart, endOffset);\n initialIndentLevel = computeIndentLevel(formatText, options);\n } else {\n formatText = documentText;\n initialIndentLevel = 0;\n formatTextStart = 0;\n rangeStart = 0;\n rangeEnd = documentText.length;\n }\n const eol = getEOL(options, documentText);\n const eolFastPathSupported = supportedEols.includes(eol);\n let numberLineBreaks = 0;\n let indentLevel = 0;\n let indentValue;\n if (options.insertSpaces) indentValue = cachedSpaces[options.tabSize || 4] ?? repeat(cachedSpaces[1], options.tabSize || 4);\n else indentValue = \" \";\n const indentType = indentValue === \" \" ? \" \" : \" \";\n let scanner = createScanner$1(formatText, false);\n let hasError = false;\n function newLinesAndIndent() {\n if (numberLineBreaks > 1) return repeat(eol, numberLineBreaks) + repeat(indentValue, initialIndentLevel + indentLevel);\n const amountOfSpaces = indentValue.length * (initialIndentLevel + indentLevel);\n if (!eolFastPathSupported || amountOfSpaces > cachedBreakLinesWithSpaces[indentType][eol].length) return eol + repeat(indentValue, initialIndentLevel + indentLevel);\n if (amountOfSpaces <= 0) return eol;\n return cachedBreakLinesWithSpaces[indentType][eol][amountOfSpaces];\n }\n function scanNext() {\n let token = scanner.scan();\n numberLineBreaks = 0;\n while (token === 15 || token === 14) {\n if (token === 14 && options.keepLines) numberLineBreaks += 1;\n else if (token === 14) numberLineBreaks = 1;\n token = scanner.scan();\n }\n hasError = token === 16 || scanner.getTokenError() !== 0;\n return token;\n }\n const editOperations = [];\n function addEdit(text, startOffset, endOffset) {\n if (!hasError && (!range || startOffset < rangeEnd && endOffset > rangeStart) && documentText.substring(startOffset, endOffset) !== text) editOperations.push({\n offset: startOffset,\n length: endOffset - startOffset,\n content: text\n });\n }\n let firstToken = scanNext();\n if (options.keepLines && numberLineBreaks > 0) addEdit(repeat(eol, numberLineBreaks), 0, 0);\n if (firstToken !== 17) {\n let firstTokenStart = scanner.getTokenOffset() + formatTextStart;\n addEdit(indentValue.length * initialIndentLevel < 20 && options.insertSpaces ? cachedSpaces[indentValue.length * initialIndentLevel] : repeat(indentValue, initialIndentLevel), formatTextStart, firstTokenStart);\n }\n while (firstToken !== 17) {\n let firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;\n let secondToken = scanNext();\n let replaceContent = \"\";\n let needsLineBreak = false;\n while (numberLineBreaks === 0 && (secondToken === 12 || secondToken === 13)) {\n let commentTokenStart = scanner.getTokenOffset() + formatTextStart;\n addEdit(cachedSpaces[1], firstTokenEnd, commentTokenStart);\n firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;\n needsLineBreak = secondToken === 12;\n replaceContent = needsLineBreak ? newLinesAndIndent() : \"\";\n secondToken = scanNext();\n }\n if (secondToken === 2) {\n if (firstToken !== 1) indentLevel--;\n if (options.keepLines && numberLineBreaks > 0 || !options.keepLines && firstToken !== 1) replaceContent = newLinesAndIndent();\n else if (options.keepLines) replaceContent = cachedSpaces[1];\n } else if (secondToken === 4) {\n if (firstToken !== 3) indentLevel--;\n if (options.keepLines && numberLineBreaks > 0 || !options.keepLines && firstToken !== 3) replaceContent = newLinesAndIndent();\n else if (options.keepLines) replaceContent = cachedSpaces[1];\n } else {\n switch (firstToken) {\n case 3:\n case 1:\n indentLevel++;\n if (options.keepLines && numberLineBreaks > 0 || !options.keepLines) replaceContent = newLinesAndIndent();\n else replaceContent = cachedSpaces[1];\n break;\n case 5:\n if (options.keepLines && numberLineBreaks > 0 || !options.keepLines) replaceContent = newLinesAndIndent();\n else replaceContent = cachedSpaces[1];\n break;\n case 12:\n replaceContent = newLinesAndIndent();\n break;\n case 13:\n if (numberLineBreaks > 0) replaceContent = newLinesAndIndent();\n else if (!needsLineBreak) replaceContent = cachedSpaces[1];\n break;\n case 6:\n if (options.keepLines && numberLineBreaks > 0) replaceContent = newLinesAndIndent();\n else if (!needsLineBreak) replaceContent = cachedSpaces[1];\n break;\n case 10:\n if (options.keepLines && numberLineBreaks > 0) replaceContent = newLinesAndIndent();\n else if (secondToken === 6 && !needsLineBreak) replaceContent = \"\";\n break;\n case 7:\n case 8:\n case 9:\n case 11:\n case 2:\n case 4:\n if (options.keepLines && numberLineBreaks > 0) replaceContent = newLinesAndIndent();\n else if ((secondToken === 12 || secondToken === 13) && !needsLineBreak) replaceContent = cachedSpaces[1];\n else if (secondToken !== 5 && secondToken !== 17) hasError = true;\n break;\n case 16:\n hasError = true;\n break;\n }\n if (numberLineBreaks > 0 && (secondToken === 12 || secondToken === 13)) replaceContent = newLinesAndIndent();\n }\n if (secondToken === 17) if (options.keepLines && numberLineBreaks > 0) replaceContent = newLinesAndIndent();\n else replaceContent = options.insertFinalNewline ? eol : \"\";\n const secondTokenStart = scanner.getTokenOffset() + formatTextStart;\n addEdit(replaceContent, firstTokenEnd, secondTokenStart);\n firstToken = secondToken;\n }\n return editOperations;\n }\n function repeat(s, count) {\n let result = \"\";\n for (let i = 0; i < count; i++) result += s;\n return result;\n }\n function computeIndentLevel(content, options) {\n let i = 0;\n let nChars = 0;\n const tabSize = options.tabSize || 4;\n while (i < content.length) {\n let ch = content.charAt(i);\n if (ch === cachedSpaces[1]) nChars++;\n else if (ch === \" \") nChars += tabSize;\n else break;\n i++;\n }\n return Math.floor(nChars / tabSize);\n }\n function getEOL(options, text) {\n for (let i = 0; i < text.length; i++) {\n const ch = text.charAt(i);\n if (ch === \"\\r\") {\n if (i + 1 < text.length && text.charAt(i + 1) === \"\\n\") return \"\\r\\n\";\n return \"\\r\";\n } else if (ch === \"\\n\") return \"\\n\";\n }\n return options && options.eol || \"\\n\";\n }\n function isEOL(text, offset) {\n return \"\\r\\n\".indexOf(text.charAt(offset)) !== -1;\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/jsonc-parser/lib/esm/impl/parser.js\n var ParseOptions;\n (function(ParseOptions) {\n ParseOptions.DEFAULT = { allowTrailingComma: false };\n })(ParseOptions || (ParseOptions = {}));\n /**\n * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n * Therefore always check the errors list to find out if the input was valid.\n */\n function parse$2(text, errors = [], options = ParseOptions.DEFAULT) {\n let currentProperty = null;\n let currentParent = [];\n const previousParents = [];\n function onValue(value) {\n if (Array.isArray(currentParent)) currentParent.push(value);\n else if (currentProperty !== null) currentParent[currentProperty] = value;\n }\n visit(text, {\n onObjectBegin: () => {\n const object = {};\n onValue(object);\n previousParents.push(currentParent);\n currentParent = object;\n currentProperty = null;\n },\n onObjectProperty: (name) => {\n currentProperty = name;\n },\n onObjectEnd: () => {\n currentParent = previousParents.pop();\n },\n onArrayBegin: () => {\n const array = [];\n onValue(array);\n previousParents.push(currentParent);\n currentParent = array;\n currentProperty = null;\n },\n onArrayEnd: () => {\n currentParent = previousParents.pop();\n },\n onLiteralValue: onValue,\n onError: (error, offset, length) => {\n errors.push({\n error,\n offset,\n length\n });\n }\n }, options);\n return currentParent[0];\n }\n /**\n * Gets the JSON path of the given JSON DOM node\n */\n function getNodePath$2(node) {\n if (!node.parent || !node.parent.children) return [];\n const path = getNodePath$2(node.parent);\n if (node.parent.type === \"property\") {\n const key = node.parent.children[0].value;\n path.push(key);\n } else if (node.parent.type === \"array\") {\n const index = node.parent.children.indexOf(node);\n if (index !== -1) path.push(index);\n }\n return path;\n }\n /**\n * Evaluates the JavaScript object of the given JSON DOM node\n */\n function getNodeValue$2(node) {\n switch (node.type) {\n case \"array\": return node.children.map(getNodeValue$2);\n case \"object\":\n const obj = Object.create(null);\n for (let prop of node.children) {\n const valueNode = prop.children[1];\n if (valueNode) obj[prop.children[0].value] = getNodeValue$2(valueNode);\n }\n return obj;\n case \"null\":\n case \"string\":\n case \"number\":\n case \"boolean\": return node.value;\n default: return;\n }\n }\n function contains$1(node, offset, includeRightBound = false) {\n return offset >= node.offset && offset < node.offset + node.length || includeRightBound && offset === node.offset + node.length;\n }\n /**\n * Finds the most inner node at the given offset. If includeRightBound is set, also finds nodes that end at the given offset.\n */\n function findNodeAtOffset$1(node, offset, includeRightBound = false) {\n if (contains$1(node, offset, includeRightBound)) {\n const children = node.children;\n if (Array.isArray(children)) for (let i = 0; i < children.length && children[i].offset <= offset; i++) {\n const item = findNodeAtOffset$1(children[i], offset, includeRightBound);\n if (item) return item;\n }\n return node;\n }\n }\n /**\n * Parses the given text and invokes the visitor functions for each object, array and literal reached.\n */\n function visit(text, visitor, options = ParseOptions.DEFAULT) {\n const _scanner = createScanner$1(text, false);\n const _jsonPath = [];\n function toNoArgVisit(visitFunction) {\n return visitFunction ? () => visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()) : () => true;\n }\n function toNoArgVisitWithPath(visitFunction) {\n return visitFunction ? () => visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter(), () => _jsonPath.slice()) : () => true;\n }\n function toOneArgVisit(visitFunction) {\n return visitFunction ? (arg) => visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()) : () => true;\n }\n function toOneArgVisitWithPath(visitFunction) {\n return visitFunction ? (arg) => visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter(), () => _jsonPath.slice()) : () => true;\n }\n const onObjectBegin = toNoArgVisitWithPath(visitor.onObjectBegin), onObjectProperty = toOneArgVisitWithPath(visitor.onObjectProperty), onObjectEnd = toNoArgVisit(visitor.onObjectEnd), onArrayBegin = toNoArgVisitWithPath(visitor.onArrayBegin), onArrayEnd = toNoArgVisit(visitor.onArrayEnd), onLiteralValue = toOneArgVisitWithPath(visitor.onLiteralValue), onSeparator = toOneArgVisit(visitor.onSeparator), onComment = toNoArgVisit(visitor.onComment), onError = toOneArgVisit(visitor.onError);\n const disallowComments = options && options.disallowComments;\n const allowTrailingComma = options && options.allowTrailingComma;\n function scanNext() {\n while (true) {\n const token = _scanner.scan();\n switch (_scanner.getTokenError()) {\n case 4:\n handleError(14);\n break;\n case 5:\n handleError(15);\n break;\n case 3:\n handleError(13);\n break;\n case 1:\n if (!disallowComments) handleError(11);\n break;\n case 2:\n handleError(12);\n break;\n case 6:\n handleError(16);\n break;\n }\n switch (token) {\n case 12:\n case 13:\n if (disallowComments) handleError(10);\n else onComment();\n break;\n case 16:\n handleError(1);\n break;\n case 15:\n case 14: break;\n default: return token;\n }\n }\n }\n function handleError(error, skipUntilAfter = [], skipUntil = []) {\n onError(error);\n if (skipUntilAfter.length + skipUntil.length > 0) {\n let token = _scanner.getToken();\n while (token !== 17) {\n if (skipUntilAfter.indexOf(token) !== -1) {\n scanNext();\n break;\n } else if (skipUntil.indexOf(token) !== -1) break;\n token = scanNext();\n }\n }\n }\n function parseString(isValue) {\n const value = _scanner.getTokenValue();\n if (isValue) onLiteralValue(value);\n else {\n onObjectProperty(value);\n _jsonPath.push(value);\n }\n scanNext();\n return true;\n }\n function parseLiteral() {\n switch (_scanner.getToken()) {\n case 11:\n const tokenValue = _scanner.getTokenValue();\n let value = Number(tokenValue);\n if (isNaN(value)) {\n handleError(2);\n value = 0;\n }\n onLiteralValue(value);\n break;\n case 7:\n onLiteralValue(null);\n break;\n case 8:\n onLiteralValue(true);\n break;\n case 9:\n onLiteralValue(false);\n break;\n default: return false;\n }\n scanNext();\n return true;\n }\n function parseProperty() {\n if (_scanner.getToken() !== 10) {\n handleError(3, [], [2, 5]);\n return false;\n }\n parseString(false);\n if (_scanner.getToken() === 6) {\n onSeparator(\":\");\n scanNext();\n if (!parseValue()) handleError(4, [], [2, 5]);\n } else handleError(5, [], [2, 5]);\n _jsonPath.pop();\n return true;\n }\n function parseObject() {\n onObjectBegin();\n scanNext();\n let needsComma = false;\n while (_scanner.getToken() !== 2 && _scanner.getToken() !== 17) {\n if (_scanner.getToken() === 5) {\n if (!needsComma) handleError(4, [], []);\n onSeparator(\",\");\n scanNext();\n if (_scanner.getToken() === 2 && allowTrailingComma) break;\n } else if (needsComma) handleError(6, [], []);\n if (!parseProperty()) handleError(4, [], [2, 5]);\n needsComma = true;\n }\n onObjectEnd();\n if (_scanner.getToken() !== 2) handleError(7, [2], []);\n else scanNext();\n return true;\n }\n function parseArray() {\n onArrayBegin();\n scanNext();\n let isFirstElement = true;\n let needsComma = false;\n while (_scanner.getToken() !== 4 && _scanner.getToken() !== 17) {\n if (_scanner.getToken() === 5) {\n if (!needsComma) handleError(4, [], []);\n onSeparator(\",\");\n scanNext();\n if (_scanner.getToken() === 4 && allowTrailingComma) break;\n } else if (needsComma) handleError(6, [], []);\n if (isFirstElement) {\n _jsonPath.push(0);\n isFirstElement = false;\n } else _jsonPath[_jsonPath.length - 1]++;\n if (!parseValue()) handleError(4, [], [4, 5]);\n needsComma = true;\n }\n onArrayEnd();\n if (!isFirstElement) _jsonPath.pop();\n if (_scanner.getToken() !== 4) handleError(8, [4], []);\n else scanNext();\n return true;\n }\n function parseValue() {\n switch (_scanner.getToken()) {\n case 3: return parseArray();\n case 1: return parseObject();\n case 10: return parseString(true);\n default: return parseLiteral();\n }\n }\n scanNext();\n if (_scanner.getToken() === 17) {\n if (options.allowEmptyContent) return true;\n handleError(4, [], []);\n return false;\n }\n if (!parseValue()) {\n handleError(4, [], []);\n return false;\n }\n if (_scanner.getToken() !== 17) handleError(9, [], []);\n return true;\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/jsonc-parser/lib/esm/main.js\n /**\n * Creates a JSON scanner on the given text.\n * If ignoreTrivia is set, whitespaces or comments are ignored.\n */\n const createScanner = createScanner$1;\n var ScanError;\n (function(ScanError) {\n ScanError[ScanError[\"None\"] = 0] = \"None\";\n ScanError[ScanError[\"UnexpectedEndOfComment\"] = 1] = \"UnexpectedEndOfComment\";\n ScanError[ScanError[\"UnexpectedEndOfString\"] = 2] = \"UnexpectedEndOfString\";\n ScanError[ScanError[\"UnexpectedEndOfNumber\"] = 3] = \"UnexpectedEndOfNumber\";\n ScanError[ScanError[\"InvalidUnicode\"] = 4] = \"InvalidUnicode\";\n ScanError[ScanError[\"InvalidEscapeCharacter\"] = 5] = \"InvalidEscapeCharacter\";\n ScanError[ScanError[\"InvalidCharacter\"] = 6] = \"InvalidCharacter\";\n })(ScanError || (ScanError = {}));\n var SyntaxKind;\n (function(SyntaxKind) {\n SyntaxKind[SyntaxKind[\"OpenBraceToken\"] = 1] = \"OpenBraceToken\";\n SyntaxKind[SyntaxKind[\"CloseBraceToken\"] = 2] = \"CloseBraceToken\";\n SyntaxKind[SyntaxKind[\"OpenBracketToken\"] = 3] = \"OpenBracketToken\";\n SyntaxKind[SyntaxKind[\"CloseBracketToken\"] = 4] = \"CloseBracketToken\";\n SyntaxKind[SyntaxKind[\"CommaToken\"] = 5] = \"CommaToken\";\n SyntaxKind[SyntaxKind[\"ColonToken\"] = 6] = \"ColonToken\";\n SyntaxKind[SyntaxKind[\"NullKeyword\"] = 7] = \"NullKeyword\";\n SyntaxKind[SyntaxKind[\"TrueKeyword\"] = 8] = \"TrueKeyword\";\n SyntaxKind[SyntaxKind[\"FalseKeyword\"] = 9] = \"FalseKeyword\";\n SyntaxKind[SyntaxKind[\"StringLiteral\"] = 10] = \"StringLiteral\";\n SyntaxKind[SyntaxKind[\"NumericLiteral\"] = 11] = \"NumericLiteral\";\n SyntaxKind[SyntaxKind[\"LineCommentTrivia\"] = 12] = \"LineCommentTrivia\";\n SyntaxKind[SyntaxKind[\"BlockCommentTrivia\"] = 13] = \"BlockCommentTrivia\";\n SyntaxKind[SyntaxKind[\"LineBreakTrivia\"] = 14] = \"LineBreakTrivia\";\n SyntaxKind[SyntaxKind[\"Trivia\"] = 15] = \"Trivia\";\n SyntaxKind[SyntaxKind[\"Unknown\"] = 16] = \"Unknown\";\n SyntaxKind[SyntaxKind[\"EOF\"] = 17] = \"EOF\";\n })(SyntaxKind || (SyntaxKind = {}));\n /**\n * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n * Therefore, always check the errors list to find out if the input was valid.\n */\n const parse$1 = parse$2;\n /**\n * Finds the innermost node at the given offset. If includeRightBound is set, also finds nodes that end at the given offset.\n */\n const findNodeAtOffset = findNodeAtOffset$1;\n /**\n * Gets the JSON path of the given JSON DOM node\n */\n const getNodePath$1 = getNodePath$2;\n /**\n * Evaluates the JavaScript object of the given JSON DOM node\n */\n const getNodeValue$1 = getNodeValue$2;\n var ParseErrorCode;\n (function(ParseErrorCode) {\n ParseErrorCode[ParseErrorCode[\"InvalidSymbol\"] = 1] = \"InvalidSymbol\";\n ParseErrorCode[ParseErrorCode[\"InvalidNumberFormat\"] = 2] = \"InvalidNumberFormat\";\n ParseErrorCode[ParseErrorCode[\"PropertyNameExpected\"] = 3] = \"PropertyNameExpected\";\n ParseErrorCode[ParseErrorCode[\"ValueExpected\"] = 4] = \"ValueExpected\";\n ParseErrorCode[ParseErrorCode[\"ColonExpected\"] = 5] = \"ColonExpected\";\n ParseErrorCode[ParseErrorCode[\"CommaExpected\"] = 6] = \"CommaExpected\";\n ParseErrorCode[ParseErrorCode[\"CloseBraceExpected\"] = 7] = \"CloseBraceExpected\";\n ParseErrorCode[ParseErrorCode[\"CloseBracketExpected\"] = 8] = \"CloseBracketExpected\";\n ParseErrorCode[ParseErrorCode[\"EndOfFileExpected\"] = 9] = \"EndOfFileExpected\";\n ParseErrorCode[ParseErrorCode[\"InvalidCommentToken\"] = 10] = \"InvalidCommentToken\";\n ParseErrorCode[ParseErrorCode[\"UnexpectedEndOfComment\"] = 11] = \"UnexpectedEndOfComment\";\n ParseErrorCode[ParseErrorCode[\"UnexpectedEndOfString\"] = 12] = \"UnexpectedEndOfString\";\n ParseErrorCode[ParseErrorCode[\"UnexpectedEndOfNumber\"] = 13] = \"UnexpectedEndOfNumber\";\n ParseErrorCode[ParseErrorCode[\"InvalidUnicode\"] = 14] = \"InvalidUnicode\";\n ParseErrorCode[ParseErrorCode[\"InvalidEscapeCharacter\"] = 15] = \"InvalidEscapeCharacter\";\n ParseErrorCode[ParseErrorCode[\"InvalidCharacter\"] = 16] = \"InvalidCharacter\";\n })(ParseErrorCode || (ParseErrorCode = {}));\n /**\n * Computes the edit operations needed to format a JSON document.\n *\n * @param documentText The input text\n * @param range The range to format or `undefined` to format the full content\n * @param options The formatting options\n * @returns The edit operations describing the formatting changes to the original document following the format described in {@linkcode EditResult}.\n * To apply the edit operations to the input, use {@linkcode applyEdits}.\n */\n function format$2(documentText, range, options) {\n return format$3(documentText, range, options);\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/utils/objects.js\n function equals(one, other) {\n if (one === other) return true;\n if (one === null || one === void 0 || other === null || other === void 0) return false;\n if (typeof one !== typeof other) return false;\n if (typeof one !== \"object\") return false;\n if (Array.isArray(one) !== Array.isArray(other)) return false;\n let i, key;\n if (Array.isArray(one)) {\n if (one.length !== other.length) return false;\n for (i = 0; i < one.length; i++) if (!equals(one[i], other[i])) return false;\n } else {\n const oneKeys = [];\n for (key in one) oneKeys.push(key);\n oneKeys.sort();\n const otherKeys = [];\n for (key in other) otherKeys.push(key);\n otherKeys.sort();\n if (!equals(oneKeys, otherKeys)) return false;\n for (i = 0; i < oneKeys.length; i++) if (!equals(one[oneKeys[i]], other[oneKeys[i]])) return false;\n }\n return true;\n }\n function isNumber(val) {\n return typeof val === \"number\";\n }\n function isDefined(val) {\n return typeof val !== \"undefined\";\n }\n function isBoolean(val) {\n return typeof val === \"boolean\";\n }\n function isString(val) {\n return typeof val === \"string\";\n }\n function isObject(val) {\n return typeof val === \"object\" && val !== null && !Array.isArray(val);\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/utils/strings.js\n function startsWith(haystack, needle) {\n if (haystack.length < needle.length) return false;\n for (let i = 0; i < needle.length; i++) if (haystack[i] !== needle[i]) return false;\n return true;\n }\n /**\n * Determines if haystack ends with needle.\n */\n function endsWith(haystack, needle) {\n const diff = haystack.length - needle.length;\n if (diff > 0) return haystack.lastIndexOf(needle) === diff;\n else if (diff === 0) return haystack === needle;\n else return false;\n }\n function extendedRegExp(pattern) {\n let flags = \"\";\n if (startsWith(pattern, \"(?i)\")) {\n pattern = pattern.substring(4);\n flags = \"i\";\n }\n try {\n return new RegExp(pattern, flags + \"u\");\n } catch (e) {\n try {\n return new RegExp(pattern, flags);\n } catch (e) {\n return;\n }\n }\n }\n function stringLength(str) {\n let count = 0;\n for (let i = 0; i < str.length; i++) {\n count++;\n const code = str.charCodeAt(i);\n if (55296 <= code && code <= 56319) i++;\n }\n return count;\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-languageserver-types/lib/esm/main.js\n var DocumentUri;\n (function(DocumentUri) {\n function is(value) {\n return typeof value === \"string\";\n }\n DocumentUri.is = is;\n })(DocumentUri || (DocumentUri = {}));\n var URI$1;\n (function(URI) {\n function is(value) {\n return typeof value === \"string\";\n }\n URI.is = is;\n })(URI$1 || (URI$1 = {}));\n var integer;\n (function(integer) {\n integer.MIN_VALUE = -2147483648;\n integer.MAX_VALUE = 2147483647;\n function is(value) {\n return typeof value === \"number\" && integer.MIN_VALUE <= value && value <= integer.MAX_VALUE;\n }\n integer.is = is;\n })(integer || (integer = {}));\n var uinteger;\n (function(uinteger) {\n uinteger.MIN_VALUE = 0;\n uinteger.MAX_VALUE = 2147483647;\n function is(value) {\n return typeof value === \"number\" && uinteger.MIN_VALUE <= value && value <= uinteger.MAX_VALUE;\n }\n uinteger.is = is;\n })(uinteger || (uinteger = {}));\n /**\n * The Position namespace provides helper functions to work with\n * {@link Position} literals.\n */\n var Position;\n (function(Position) {\n /**\n * Creates a new Position literal from the given line and character.\n * @param line The position's line.\n * @param character The position's character.\n */\n function create(line, character) {\n if (line === Number.MAX_VALUE) line = uinteger.MAX_VALUE;\n if (character === Number.MAX_VALUE) character = uinteger.MAX_VALUE;\n return {\n line,\n character\n };\n }\n Position.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Position} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character);\n }\n Position.is = is;\n })(Position || (Position = {}));\n /**\n * The Range namespace provides helper functions to work with\n * {@link Range} literals.\n */\n var Range;\n (function(Range) {\n function create(one, two, three, four) {\n if (Is.uinteger(one) && Is.uinteger(two) && Is.uinteger(three) && Is.uinteger(four)) return {\n start: Position.create(one, two),\n end: Position.create(three, four)\n };\n else if (Position.is(one) && Position.is(two)) return {\n start: one,\n end: two\n };\n else throw new Error(`Range#create called with invalid arguments[${one}, ${two}, ${three}, ${four}]`);\n }\n Range.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Range} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);\n }\n Range.is = is;\n })(Range || (Range = {}));\n /**\n * The Location namespace provides helper functions to work with\n * {@link Location} literals.\n */\n var Location;\n (function(Location) {\n /**\n * Creates a Location literal.\n * @param uri The location's uri.\n * @param range The location's range.\n */\n function create(uri, range) {\n return {\n uri,\n range\n };\n }\n Location.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Location} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));\n }\n Location.is = is;\n })(Location || (Location = {}));\n /**\n * The LocationLink namespace provides helper functions to work with\n * {@link LocationLink} literals.\n */\n var LocationLink;\n (function(LocationLink) {\n /**\n * Creates a LocationLink literal.\n * @param targetUri The definition's uri.\n * @param targetRange The full range of the definition.\n * @param targetSelectionRange The span of the symbol definition at the target.\n * @param originSelectionRange The span of the symbol being defined in the originating source file.\n */\n function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {\n return {\n targetUri,\n targetRange,\n targetSelectionRange,\n originSelectionRange\n };\n }\n LocationLink.create = create;\n /**\n * Checks whether the given literal conforms to the {@link LocationLink} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri) && Range.is(candidate.targetSelectionRange) && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));\n }\n LocationLink.is = is;\n })(LocationLink || (LocationLink = {}));\n /**\n * The Color namespace provides helper functions to work with\n * {@link Color} literals.\n */\n var Color;\n (function(Color) {\n /**\n * Creates a new Color literal.\n */\n function create(red, green, blue, alpha) {\n return {\n red,\n green,\n blue,\n alpha\n };\n }\n Color.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Color} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.numberRange(candidate.red, 0, 1) && Is.numberRange(candidate.green, 0, 1) && Is.numberRange(candidate.blue, 0, 1) && Is.numberRange(candidate.alpha, 0, 1);\n }\n Color.is = is;\n })(Color || (Color = {}));\n /**\n * The ColorInformation namespace provides helper functions to work with\n * {@link ColorInformation} literals.\n */\n var ColorInformation;\n (function(ColorInformation) {\n /**\n * Creates a new ColorInformation literal.\n */\n function create(range, color) {\n return {\n range,\n color\n };\n }\n ColorInformation.create = create;\n /**\n * Checks whether the given literal conforms to the {@link ColorInformation} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.range) && Color.is(candidate.color);\n }\n ColorInformation.is = is;\n })(ColorInformation || (ColorInformation = {}));\n /**\n * The Color namespace provides helper functions to work with\n * {@link ColorPresentation} literals.\n */\n var ColorPresentation;\n (function(ColorPresentation) {\n /**\n * Creates a new ColorInformation literal.\n */\n function create(label, textEdit, additionalTextEdits) {\n return {\n label,\n textEdit,\n additionalTextEdits\n };\n }\n ColorPresentation.create = create;\n /**\n * Checks whether the given literal conforms to the {@link ColorInformation} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.label) && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate)) && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));\n }\n ColorPresentation.is = is;\n })(ColorPresentation || (ColorPresentation = {}));\n /**\n * A set of predefined range kinds.\n */\n var FoldingRangeKind;\n (function(FoldingRangeKind) {\n /**\n * Folding range for a comment\n */\n FoldingRangeKind.Comment = \"comment\";\n /**\n * Folding range for an import or include\n */\n FoldingRangeKind.Imports = \"imports\";\n /**\n * Folding range for a region (e.g. `#region`)\n */\n FoldingRangeKind.Region = \"region\";\n })(FoldingRangeKind || (FoldingRangeKind = {}));\n /**\n * The folding range namespace provides helper functions to work with\n * {@link FoldingRange} literals.\n */\n var FoldingRange;\n (function(FoldingRange) {\n /**\n * Creates a new FoldingRange literal.\n */\n function create(startLine, endLine, startCharacter, endCharacter, kind, collapsedText) {\n const result = {\n startLine,\n endLine\n };\n if (Is.defined(startCharacter)) result.startCharacter = startCharacter;\n if (Is.defined(endCharacter)) result.endCharacter = endCharacter;\n if (Is.defined(kind)) result.kind = kind;\n if (Is.defined(collapsedText)) result.collapsedText = collapsedText;\n return result;\n }\n FoldingRange.create = create;\n /**\n * Checks whether the given literal conforms to the {@link FoldingRange} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.uinteger(candidate.startLine) && Is.uinteger(candidate.startLine) && (Is.undefined(candidate.startCharacter) || Is.uinteger(candidate.startCharacter)) && (Is.undefined(candidate.endCharacter) || Is.uinteger(candidate.endCharacter)) && (Is.undefined(candidate.kind) || Is.string(candidate.kind));\n }\n FoldingRange.is = is;\n })(FoldingRange || (FoldingRange = {}));\n /**\n * The DiagnosticRelatedInformation namespace provides helper functions to work with\n * {@link DiagnosticRelatedInformation} literals.\n */\n var DiagnosticRelatedInformation;\n (function(DiagnosticRelatedInformation) {\n /**\n * Creates a new DiagnosticRelatedInformation literal.\n */\n function create(location, message) {\n return {\n location,\n message\n };\n }\n DiagnosticRelatedInformation.create = create;\n /**\n * Checks whether the given literal conforms to the {@link DiagnosticRelatedInformation} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);\n }\n DiagnosticRelatedInformation.is = is;\n })(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));\n /**\n * The diagnostic's severity.\n */\n var DiagnosticSeverity;\n (function(DiagnosticSeverity) {\n /**\n * Reports an error.\n */\n DiagnosticSeverity.Error = 1;\n /**\n * Reports a warning.\n */\n DiagnosticSeverity.Warning = 2;\n /**\n * Reports an information.\n */\n DiagnosticSeverity.Information = 3;\n /**\n * Reports a hint.\n */\n DiagnosticSeverity.Hint = 4;\n })(DiagnosticSeverity || (DiagnosticSeverity = {}));\n /**\n * The diagnostic tags.\n *\n * @since 3.15.0\n */\n var DiagnosticTag;\n (function(DiagnosticTag) {\n /**\n * Unused or unnecessary code.\n *\n * Clients are allowed to render diagnostics with this tag faded out instead of having\n * an error squiggle.\n */\n DiagnosticTag.Unnecessary = 1;\n /**\n * Deprecated or obsolete code.\n *\n * Clients are allowed to rendered diagnostics with this tag strike through.\n */\n DiagnosticTag.Deprecated = 2;\n })(DiagnosticTag || (DiagnosticTag = {}));\n /**\n * The CodeDescription namespace provides functions to deal with descriptions for diagnostic codes.\n *\n * @since 3.16.0\n */\n var CodeDescription;\n (function(CodeDescription) {\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.href);\n }\n CodeDescription.is = is;\n })(CodeDescription || (CodeDescription = {}));\n /**\n * The Diagnostic namespace provides helper functions to work with\n * {@link Diagnostic} literals.\n */\n var Diagnostic;\n (function(Diagnostic) {\n /**\n * Creates a new Diagnostic literal.\n */\n function create(range, message, severity, code, source, relatedInformation) {\n let result = {\n range,\n message\n };\n if (Is.defined(severity)) result.severity = severity;\n if (Is.defined(code)) result.code = code;\n if (Is.defined(source)) result.source = source;\n if (Is.defined(relatedInformation)) result.relatedInformation = relatedInformation;\n return result;\n }\n Diagnostic.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Diagnostic} interface.\n */\n function is(value) {\n var _a;\n let candidate = value;\n return Is.defined(candidate) && Range.is(candidate.range) && Is.string(candidate.message) && (Is.number(candidate.severity) || Is.undefined(candidate.severity)) && (Is.integer(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code)) && (Is.undefined(candidate.codeDescription) || Is.string((_a = candidate.codeDescription) === null || _a === void 0 ? void 0 : _a.href)) && (Is.string(candidate.source) || Is.undefined(candidate.source)) && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));\n }\n Diagnostic.is = is;\n })(Diagnostic || (Diagnostic = {}));\n /**\n * The Command namespace provides helper functions to work with\n * {@link Command} literals.\n */\n var Command;\n (function(Command) {\n /**\n * Creates a new Command literal.\n */\n function create(title, command, ...args) {\n let result = {\n title,\n command\n };\n if (Is.defined(args) && args.length > 0) result.arguments = args;\n return result;\n }\n Command.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Command} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);\n }\n Command.is = is;\n })(Command || (Command = {}));\n /**\n * The TextEdit namespace provides helper function to create replace,\n * insert and delete edits more easily.\n */\n var TextEdit;\n (function(TextEdit) {\n /**\n * Creates a replace text edit.\n * @param range The range of text to be replaced.\n * @param newText The new text.\n */\n function replace(range, newText) {\n return {\n range,\n newText\n };\n }\n TextEdit.replace = replace;\n /**\n * Creates an insert text edit.\n * @param position The position to insert the text at.\n * @param newText The text to be inserted.\n */\n function insert(position, newText) {\n return {\n range: {\n start: position,\n end: position\n },\n newText\n };\n }\n TextEdit.insert = insert;\n /**\n * Creates a delete text edit.\n * @param range The range of text to be deleted.\n */\n function del(range) {\n return {\n range,\n newText: \"\"\n };\n }\n TextEdit.del = del;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.newText) && Range.is(candidate.range);\n }\n TextEdit.is = is;\n })(TextEdit || (TextEdit = {}));\n var ChangeAnnotation;\n (function(ChangeAnnotation) {\n function create(label, needsConfirmation, description) {\n const result = { label };\n if (needsConfirmation !== void 0) result.needsConfirmation = needsConfirmation;\n if (description !== void 0) result.description = description;\n return result;\n }\n ChangeAnnotation.create = create;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.label) && (Is.boolean(candidate.needsConfirmation) || candidate.needsConfirmation === void 0) && (Is.string(candidate.description) || candidate.description === void 0);\n }\n ChangeAnnotation.is = is;\n })(ChangeAnnotation || (ChangeAnnotation = {}));\n var ChangeAnnotationIdentifier;\n (function(ChangeAnnotationIdentifier) {\n function is(value) {\n const candidate = value;\n return Is.string(candidate);\n }\n ChangeAnnotationIdentifier.is = is;\n })(ChangeAnnotationIdentifier || (ChangeAnnotationIdentifier = {}));\n var AnnotatedTextEdit;\n (function(AnnotatedTextEdit) {\n /**\n * Creates an annotated replace text edit.\n *\n * @param range The range of text to be replaced.\n * @param newText The new text.\n * @param annotation The annotation.\n */\n function replace(range, newText, annotation) {\n return {\n range,\n newText,\n annotationId: annotation\n };\n }\n AnnotatedTextEdit.replace = replace;\n /**\n * Creates an annotated insert text edit.\n *\n * @param position The position to insert the text at.\n * @param newText The text to be inserted.\n * @param annotation The annotation.\n */\n function insert(position, newText, annotation) {\n return {\n range: {\n start: position,\n end: position\n },\n newText,\n annotationId: annotation\n };\n }\n AnnotatedTextEdit.insert = insert;\n /**\n * Creates an annotated delete text edit.\n *\n * @param range The range of text to be deleted.\n * @param annotation The annotation.\n */\n function del(range, annotation) {\n return {\n range,\n newText: \"\",\n annotationId: annotation\n };\n }\n AnnotatedTextEdit.del = del;\n function is(value) {\n const candidate = value;\n return TextEdit.is(candidate) && (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n AnnotatedTextEdit.is = is;\n })(AnnotatedTextEdit || (AnnotatedTextEdit = {}));\n /**\n * The TextDocumentEdit namespace provides helper function to create\n * an edit that manipulates a text document.\n */\n var TextDocumentEdit;\n (function(TextDocumentEdit) {\n /**\n * Creates a new `TextDocumentEdit`\n */\n function create(textDocument, edits) {\n return {\n textDocument,\n edits\n };\n }\n TextDocumentEdit.create = create;\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument) && Array.isArray(candidate.edits);\n }\n TextDocumentEdit.is = is;\n })(TextDocumentEdit || (TextDocumentEdit = {}));\n var CreateFile;\n (function(CreateFile) {\n function create(uri, options, annotation) {\n let result = {\n kind: \"create\",\n uri\n };\n if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) result.options = options;\n if (annotation !== void 0) result.annotationId = annotation;\n return result;\n }\n CreateFile.create = create;\n function is(value) {\n let candidate = value;\n return candidate && candidate.kind === \"create\" && Is.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n CreateFile.is = is;\n })(CreateFile || (CreateFile = {}));\n var RenameFile;\n (function(RenameFile) {\n function create(oldUri, newUri, options, annotation) {\n let result = {\n kind: \"rename\",\n oldUri,\n newUri\n };\n if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) result.options = options;\n if (annotation !== void 0) result.annotationId = annotation;\n return result;\n }\n RenameFile.create = create;\n function is(value) {\n let candidate = value;\n return candidate && candidate.kind === \"rename\" && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n RenameFile.is = is;\n })(RenameFile || (RenameFile = {}));\n var DeleteFile;\n (function(DeleteFile) {\n function create(uri, options, annotation) {\n let result = {\n kind: \"delete\",\n uri\n };\n if (options !== void 0 && (options.recursive !== void 0 || options.ignoreIfNotExists !== void 0)) result.options = options;\n if (annotation !== void 0) result.annotationId = annotation;\n return result;\n }\n DeleteFile.create = create;\n function is(value) {\n let candidate = value;\n return candidate && candidate.kind === \"delete\" && Is.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.recursive === void 0 || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === void 0 || Is.boolean(candidate.options.ignoreIfNotExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n DeleteFile.is = is;\n })(DeleteFile || (DeleteFile = {}));\n var WorkspaceEdit;\n (function(WorkspaceEdit) {\n function is(value) {\n let candidate = value;\n return candidate && (candidate.changes !== void 0 || candidate.documentChanges !== void 0) && (candidate.documentChanges === void 0 || candidate.documentChanges.every((change) => {\n if (Is.string(change.kind)) return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);\n else return TextDocumentEdit.is(change);\n }));\n }\n WorkspaceEdit.is = is;\n })(WorkspaceEdit || (WorkspaceEdit = {}));\n /**\n * The TextDocumentIdentifier namespace provides helper functions to work with\n * {@link TextDocumentIdentifier} literals.\n */\n var TextDocumentIdentifier;\n (function(TextDocumentIdentifier) {\n /**\n * Creates a new TextDocumentIdentifier literal.\n * @param uri The document's uri.\n */\n function create(uri) {\n return { uri };\n }\n TextDocumentIdentifier.create = create;\n /**\n * Checks whether the given literal conforms to the {@link TextDocumentIdentifier} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri);\n }\n TextDocumentIdentifier.is = is;\n })(TextDocumentIdentifier || (TextDocumentIdentifier = {}));\n /**\n * The VersionedTextDocumentIdentifier namespace provides helper functions to work with\n * {@link VersionedTextDocumentIdentifier} literals.\n */\n var VersionedTextDocumentIdentifier;\n (function(VersionedTextDocumentIdentifier) {\n /**\n * Creates a new VersionedTextDocumentIdentifier literal.\n * @param uri The document's uri.\n * @param version The document's version.\n */\n function create(uri, version) {\n return {\n uri,\n version\n };\n }\n VersionedTextDocumentIdentifier.create = create;\n /**\n * Checks whether the given literal conforms to the {@link VersionedTextDocumentIdentifier} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version);\n }\n VersionedTextDocumentIdentifier.is = is;\n })(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));\n /**\n * The OptionalVersionedTextDocumentIdentifier namespace provides helper functions to work with\n * {@link OptionalVersionedTextDocumentIdentifier} literals.\n */\n var OptionalVersionedTextDocumentIdentifier;\n (function(OptionalVersionedTextDocumentIdentifier) {\n /**\n * Creates a new OptionalVersionedTextDocumentIdentifier literal.\n * @param uri The document's uri.\n * @param version The document's version.\n */\n function create(uri, version) {\n return {\n uri,\n version\n };\n }\n OptionalVersionedTextDocumentIdentifier.create = create;\n /**\n * Checks whether the given literal conforms to the {@link OptionalVersionedTextDocumentIdentifier} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.integer(candidate.version));\n }\n OptionalVersionedTextDocumentIdentifier.is = is;\n })(OptionalVersionedTextDocumentIdentifier || (OptionalVersionedTextDocumentIdentifier = {}));\n /**\n * The TextDocumentItem namespace provides helper functions to work with\n * {@link TextDocumentItem} literals.\n */\n var TextDocumentItem;\n (function(TextDocumentItem) {\n /**\n * Creates a new TextDocumentItem literal.\n * @param uri The document's uri.\n * @param languageId The document's language identifier.\n * @param version The document's version number.\n * @param text The document's text.\n */\n function create(uri, languageId, version, text) {\n return {\n uri,\n languageId,\n version,\n text\n };\n }\n TextDocumentItem.create = create;\n /**\n * Checks whether the given literal conforms to the {@link TextDocumentItem} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.integer(candidate.version) && Is.string(candidate.text);\n }\n TextDocumentItem.is = is;\n })(TextDocumentItem || (TextDocumentItem = {}));\n /**\n * Describes the content type that a client supports in various\n * result literals like `Hover`, `ParameterInfo` or `CompletionItem`.\n *\n * Please note that `MarkupKinds` must not start with a `$`. This kinds\n * are reserved for internal usage.\n */\n var MarkupKind;\n (function(MarkupKind) {\n /**\n * Plain text is supported as a content format\n */\n MarkupKind.PlainText = \"plaintext\";\n /**\n * Markdown is supported as a content format\n */\n MarkupKind.Markdown = \"markdown\";\n /**\n * Checks whether the given value is a value of the {@link MarkupKind} type.\n */\n function is(value) {\n const candidate = value;\n return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;\n }\n MarkupKind.is = is;\n })(MarkupKind || (MarkupKind = {}));\n var MarkupContent;\n (function(MarkupContent) {\n /**\n * Checks whether the given value conforms to the {@link MarkupContent} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);\n }\n MarkupContent.is = is;\n })(MarkupContent || (MarkupContent = {}));\n /**\n * The kind of a completion entry.\n */\n var CompletionItemKind;\n (function(CompletionItemKind) {\n CompletionItemKind.Text = 1;\n CompletionItemKind.Method = 2;\n CompletionItemKind.Function = 3;\n CompletionItemKind.Constructor = 4;\n CompletionItemKind.Field = 5;\n CompletionItemKind.Variable = 6;\n CompletionItemKind.Class = 7;\n CompletionItemKind.Interface = 8;\n CompletionItemKind.Module = 9;\n CompletionItemKind.Property = 10;\n CompletionItemKind.Unit = 11;\n CompletionItemKind.Value = 12;\n CompletionItemKind.Enum = 13;\n CompletionItemKind.Keyword = 14;\n CompletionItemKind.Snippet = 15;\n CompletionItemKind.Color = 16;\n CompletionItemKind.File = 17;\n CompletionItemKind.Reference = 18;\n CompletionItemKind.Folder = 19;\n CompletionItemKind.EnumMember = 20;\n CompletionItemKind.Constant = 21;\n CompletionItemKind.Struct = 22;\n CompletionItemKind.Event = 23;\n CompletionItemKind.Operator = 24;\n CompletionItemKind.TypeParameter = 25;\n })(CompletionItemKind || (CompletionItemKind = {}));\n /**\n * Defines whether the insert text in a completion item should be interpreted as\n * plain text or a snippet.\n */\n var InsertTextFormat;\n (function(InsertTextFormat) {\n /**\n * The primary text to be inserted is treated as a plain string.\n */\n InsertTextFormat.PlainText = 1;\n /**\n * The primary text to be inserted is treated as a snippet.\n *\n * A snippet can define tab stops and placeholders with `$1`, `$2`\n * and `${3:foo}`. `$0` defines the final tab stop, it defaults to\n * the end of the snippet. Placeholders with equal identifiers are linked,\n * that is typing in one will update others too.\n *\n * See also: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#snippet_syntax\n */\n InsertTextFormat.Snippet = 2;\n })(InsertTextFormat || (InsertTextFormat = {}));\n /**\n * Completion item tags are extra annotations that tweak the rendering of a completion\n * item.\n *\n * @since 3.15.0\n */\n var CompletionItemTag;\n (function(CompletionItemTag) {\n /**\n * Render a completion as obsolete, usually using a strike-out.\n */\n CompletionItemTag.Deprecated = 1;\n })(CompletionItemTag || (CompletionItemTag = {}));\n /**\n * The InsertReplaceEdit namespace provides functions to deal with insert / replace edits.\n *\n * @since 3.16.0\n */\n var InsertReplaceEdit;\n (function(InsertReplaceEdit) {\n /**\n * Creates a new insert / replace edit\n */\n function create(newText, insert, replace) {\n return {\n newText,\n insert,\n replace\n };\n }\n InsertReplaceEdit.create = create;\n /**\n * Checks whether the given literal conforms to the {@link InsertReplaceEdit} interface.\n */\n function is(value) {\n const candidate = value;\n return candidate && Is.string(candidate.newText) && Range.is(candidate.insert) && Range.is(candidate.replace);\n }\n InsertReplaceEdit.is = is;\n })(InsertReplaceEdit || (InsertReplaceEdit = {}));\n /**\n * How whitespace and indentation is handled during completion\n * item insertion.\n *\n * @since 3.16.0\n */\n var InsertTextMode;\n (function(InsertTextMode) {\n /**\n * The insertion or replace strings is taken as it is. If the\n * value is multi line the lines below the cursor will be\n * inserted using the indentation defined in the string value.\n * The client will not apply any kind of adjustments to the\n * string.\n */\n InsertTextMode.asIs = 1;\n /**\n * The editor adjusts leading whitespace of new lines so that\n * they match the indentation up to the cursor of the line for\n * which the item is accepted.\n *\n * Consider a line like this: <2tabs><cursor><3tabs>foo. Accepting a\n * multi line completion item is indented using 2 tabs and all\n * following lines inserted will be indented using 2 tabs as well.\n */\n InsertTextMode.adjustIndentation = 2;\n })(InsertTextMode || (InsertTextMode = {}));\n var CompletionItemLabelDetails;\n (function(CompletionItemLabelDetails) {\n function is(value) {\n const candidate = value;\n return candidate && (Is.string(candidate.detail) || candidate.detail === void 0) && (Is.string(candidate.description) || candidate.description === void 0);\n }\n CompletionItemLabelDetails.is = is;\n })(CompletionItemLabelDetails || (CompletionItemLabelDetails = {}));\n /**\n * The CompletionItem namespace provides functions to deal with\n * completion items.\n */\n var CompletionItem;\n (function(CompletionItem) {\n /**\n * Create a completion item and seed it with a label.\n * @param label The completion item's label\n */\n function create(label) {\n return { label };\n }\n CompletionItem.create = create;\n })(CompletionItem || (CompletionItem = {}));\n /**\n * The CompletionList namespace provides functions to deal with\n * completion lists.\n */\n var CompletionList;\n (function(CompletionList) {\n /**\n * Creates a new completion list.\n *\n * @param items The completion items.\n * @param isIncomplete The list is not complete.\n */\n function create(items, isIncomplete) {\n return {\n items: items ? items : [],\n isIncomplete: !!isIncomplete\n };\n }\n CompletionList.create = create;\n })(CompletionList || (CompletionList = {}));\n var MarkedString;\n (function(MarkedString) {\n /**\n * Creates a marked string from plain text.\n *\n * @param plainText The plain text.\n */\n function fromPlainText(plainText) {\n return plainText.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g, \"\\\\$&\");\n }\n MarkedString.fromPlainText = fromPlainText;\n /**\n * Checks whether the given value conforms to the {@link MarkedString} type.\n */\n function is(value) {\n const candidate = value;\n return Is.string(candidate) || Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value);\n }\n MarkedString.is = is;\n })(MarkedString || (MarkedString = {}));\n var Hover;\n (function(Hover) {\n /**\n * Checks whether the given value conforms to the {@link Hover} interface.\n */\n function is(value) {\n let candidate = value;\n return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) || MarkedString.is(candidate.contents) || Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === void 0 || Range.is(value.range));\n }\n Hover.is = is;\n })(Hover || (Hover = {}));\n /**\n * The ParameterInformation namespace provides helper functions to work with\n * {@link ParameterInformation} literals.\n */\n var ParameterInformation;\n (function(ParameterInformation) {\n /**\n * Creates a new parameter information literal.\n *\n * @param label A label string.\n * @param documentation A doc string.\n */\n function create(label, documentation) {\n return documentation ? {\n label,\n documentation\n } : { label };\n }\n ParameterInformation.create = create;\n })(ParameterInformation || (ParameterInformation = {}));\n /**\n * The SignatureInformation namespace provides helper functions to work with\n * {@link SignatureInformation} literals.\n */\n var SignatureInformation;\n (function(SignatureInformation) {\n function create(label, documentation, ...parameters) {\n let result = { label };\n if (Is.defined(documentation)) result.documentation = documentation;\n if (Is.defined(parameters)) result.parameters = parameters;\n else result.parameters = [];\n return result;\n }\n SignatureInformation.create = create;\n })(SignatureInformation || (SignatureInformation = {}));\n /**\n * A document highlight kind.\n */\n var DocumentHighlightKind;\n (function(DocumentHighlightKind) {\n /**\n * A textual occurrence.\n */\n DocumentHighlightKind.Text = 1;\n /**\n * Read-access of a symbol, like reading a variable.\n */\n DocumentHighlightKind.Read = 2;\n /**\n * Write-access of a symbol, like writing to a variable.\n */\n DocumentHighlightKind.Write = 3;\n })(DocumentHighlightKind || (DocumentHighlightKind = {}));\n /**\n * DocumentHighlight namespace to provide helper functions to work with\n * {@link DocumentHighlight} literals.\n */\n var DocumentHighlight;\n (function(DocumentHighlight) {\n /**\n * Create a DocumentHighlight object.\n * @param range The range the highlight applies to.\n * @param kind The highlight kind\n */\n function create(range, kind) {\n let result = { range };\n if (Is.number(kind)) result.kind = kind;\n return result;\n }\n DocumentHighlight.create = create;\n })(DocumentHighlight || (DocumentHighlight = {}));\n /**\n * A symbol kind.\n */\n var SymbolKind;\n (function(SymbolKind) {\n SymbolKind.File = 1;\n SymbolKind.Module = 2;\n SymbolKind.Namespace = 3;\n SymbolKind.Package = 4;\n SymbolKind.Class = 5;\n SymbolKind.Method = 6;\n SymbolKind.Property = 7;\n SymbolKind.Field = 8;\n SymbolKind.Constructor = 9;\n SymbolKind.Enum = 10;\n SymbolKind.Interface = 11;\n SymbolKind.Function = 12;\n SymbolKind.Variable = 13;\n SymbolKind.Constant = 14;\n SymbolKind.String = 15;\n SymbolKind.Number = 16;\n SymbolKind.Boolean = 17;\n SymbolKind.Array = 18;\n SymbolKind.Object = 19;\n SymbolKind.Key = 20;\n SymbolKind.Null = 21;\n SymbolKind.EnumMember = 22;\n SymbolKind.Struct = 23;\n SymbolKind.Event = 24;\n SymbolKind.Operator = 25;\n SymbolKind.TypeParameter = 26;\n })(SymbolKind || (SymbolKind = {}));\n /**\n * Symbol tags are extra annotations that tweak the rendering of a symbol.\n *\n * @since 3.16\n */\n var SymbolTag;\n (function(SymbolTag) {\n /**\n * Render a symbol as obsolete, usually using a strike-out.\n */\n SymbolTag.Deprecated = 1;\n })(SymbolTag || (SymbolTag = {}));\n var SymbolInformation;\n (function(SymbolInformation) {\n /**\n * Creates a new symbol information literal.\n *\n * @param name The name of the symbol.\n * @param kind The kind of the symbol.\n * @param range The range of the location of the symbol.\n * @param uri The resource of the location of symbol.\n * @param containerName The name of the symbol containing the symbol.\n */\n function create(name, kind, range, uri, containerName) {\n let result = {\n name,\n kind,\n location: {\n uri,\n range\n }\n };\n if (containerName) result.containerName = containerName;\n return result;\n }\n SymbolInformation.create = create;\n })(SymbolInformation || (SymbolInformation = {}));\n var WorkspaceSymbol;\n (function(WorkspaceSymbol) {\n /**\n * Create a new workspace symbol.\n *\n * @param name The name of the symbol.\n * @param kind The kind of the symbol.\n * @param uri The resource of the location of the symbol.\n * @param range An options range of the location.\n * @returns A WorkspaceSymbol.\n */\n function create(name, kind, uri, range) {\n return range !== void 0 ? {\n name,\n kind,\n location: {\n uri,\n range\n }\n } : {\n name,\n kind,\n location: { uri }\n };\n }\n WorkspaceSymbol.create = create;\n })(WorkspaceSymbol || (WorkspaceSymbol = {}));\n var DocumentSymbol;\n (function(DocumentSymbol) {\n /**\n * Creates a new symbol information literal.\n *\n * @param name The name of the symbol.\n * @param detail The detail of the symbol.\n * @param kind The kind of the symbol.\n * @param range The range of the symbol.\n * @param selectionRange The selectionRange of the symbol.\n * @param children Children of the symbol.\n */\n function create(name, detail, kind, range, selectionRange, children) {\n let result = {\n name,\n detail,\n kind,\n range,\n selectionRange\n };\n if (children !== void 0) result.children = children;\n return result;\n }\n DocumentSymbol.create = create;\n /**\n * Checks whether the given literal conforms to the {@link DocumentSymbol} interface.\n */\n function is(value) {\n let candidate = value;\n return candidate && Is.string(candidate.name) && Is.number(candidate.kind) && Range.is(candidate.range) && Range.is(candidate.selectionRange) && (candidate.detail === void 0 || Is.string(candidate.detail)) && (candidate.deprecated === void 0 || Is.boolean(candidate.deprecated)) && (candidate.children === void 0 || Array.isArray(candidate.children)) && (candidate.tags === void 0 || Array.isArray(candidate.tags));\n }\n DocumentSymbol.is = is;\n })(DocumentSymbol || (DocumentSymbol = {}));\n /**\n * A set of predefined code action kinds\n */\n var CodeActionKind;\n (function(CodeActionKind) {\n /**\n * Empty kind.\n */\n CodeActionKind.Empty = \"\";\n /**\n * Base kind for quickfix actions: 'quickfix'\n */\n CodeActionKind.QuickFix = \"quickfix\";\n /**\n * Base kind for refactoring actions: 'refactor'\n */\n CodeActionKind.Refactor = \"refactor\";\n /**\n * Base kind for refactoring extraction actions: 'refactor.extract'\n *\n * Example extract actions:\n *\n * - Extract method\n * - Extract function\n * - Extract variable\n * - Extract interface from class\n * - ...\n */\n CodeActionKind.RefactorExtract = \"refactor.extract\";\n /**\n * Base kind for refactoring inline actions: 'refactor.inline'\n *\n * Example inline actions:\n *\n * - Inline function\n * - Inline variable\n * - Inline constant\n * - ...\n */\n CodeActionKind.RefactorInline = \"refactor.inline\";\n /**\n * Base kind for refactoring rewrite actions: 'refactor.rewrite'\n *\n * Example rewrite actions:\n *\n * - Convert JavaScript function to class\n * - Add or remove parameter\n * - Encapsulate field\n * - Make method static\n * - Move method to base class\n * - ...\n */\n CodeActionKind.RefactorRewrite = \"refactor.rewrite\";\n /**\n * Base kind for source actions: `source`\n *\n * Source code actions apply to the entire file.\n */\n CodeActionKind.Source = \"source\";\n /**\n * Base kind for an organize imports source action: `source.organizeImports`\n */\n CodeActionKind.SourceOrganizeImports = \"source.organizeImports\";\n /**\n * Base kind for auto-fix source actions: `source.fixAll`.\n *\n * Fix all actions automatically fix errors that have a clear fix that do not require user input.\n * They should not suppress errors or perform unsafe fixes such as generating new types or classes.\n *\n * @since 3.15.0\n */\n CodeActionKind.SourceFixAll = \"source.fixAll\";\n })(CodeActionKind || (CodeActionKind = {}));\n /**\n * The reason why code actions were requested.\n *\n * @since 3.17.0\n */\n var CodeActionTriggerKind;\n (function(CodeActionTriggerKind) {\n /**\n * Code actions were explicitly requested by the user or by an extension.\n */\n CodeActionTriggerKind.Invoked = 1;\n /**\n * Code actions were requested automatically.\n *\n * This typically happens when current selection in a file changes, but can\n * also be triggered when file content changes.\n */\n CodeActionTriggerKind.Automatic = 2;\n })(CodeActionTriggerKind || (CodeActionTriggerKind = {}));\n /**\n * The CodeActionContext namespace provides helper functions to work with\n * {@link CodeActionContext} literals.\n */\n var CodeActionContext;\n (function(CodeActionContext) {\n /**\n * Creates a new CodeActionContext literal.\n */\n function create(diagnostics, only, triggerKind) {\n let result = { diagnostics };\n if (only !== void 0 && only !== null) result.only = only;\n if (triggerKind !== void 0 && triggerKind !== null) result.triggerKind = triggerKind;\n return result;\n }\n CodeActionContext.create = create;\n /**\n * Checks whether the given literal conforms to the {@link CodeActionContext} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === void 0 || Is.typedArray(candidate.only, Is.string)) && (candidate.triggerKind === void 0 || candidate.triggerKind === CodeActionTriggerKind.Invoked || candidate.triggerKind === CodeActionTriggerKind.Automatic);\n }\n CodeActionContext.is = is;\n })(CodeActionContext || (CodeActionContext = {}));\n var CodeAction;\n (function(CodeAction) {\n function create(title, kindOrCommandOrEdit, kind) {\n let result = { title };\n let checkKind = true;\n if (typeof kindOrCommandOrEdit === \"string\") {\n checkKind = false;\n result.kind = kindOrCommandOrEdit;\n } else if (Command.is(kindOrCommandOrEdit)) result.command = kindOrCommandOrEdit;\n else result.edit = kindOrCommandOrEdit;\n if (checkKind && kind !== void 0) result.kind = kind;\n return result;\n }\n CodeAction.create = create;\n function is(value) {\n let candidate = value;\n return candidate && Is.string(candidate.title) && (candidate.diagnostics === void 0 || Is.typedArray(candidate.diagnostics, Diagnostic.is)) && (candidate.kind === void 0 || Is.string(candidate.kind)) && (candidate.edit !== void 0 || candidate.command !== void 0) && (candidate.command === void 0 || Command.is(candidate.command)) && (candidate.isPreferred === void 0 || Is.boolean(candidate.isPreferred)) && (candidate.edit === void 0 || WorkspaceEdit.is(candidate.edit));\n }\n CodeAction.is = is;\n })(CodeAction || (CodeAction = {}));\n /**\n * The CodeLens namespace provides helper functions to work with\n * {@link CodeLens} literals.\n */\n var CodeLens;\n (function(CodeLens) {\n /**\n * Creates a new CodeLens literal.\n */\n function create(range, data) {\n let result = { range };\n if (Is.defined(data)) result.data = data;\n return result;\n }\n CodeLens.create = create;\n /**\n * Checks whether the given literal conforms to the {@link CodeLens} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));\n }\n CodeLens.is = is;\n })(CodeLens || (CodeLens = {}));\n /**\n * The FormattingOptions namespace provides helper functions to work with\n * {@link FormattingOptions} literals.\n */\n var FormattingOptions;\n (function(FormattingOptions) {\n /**\n * Creates a new FormattingOptions literal.\n */\n function create(tabSize, insertSpaces) {\n return {\n tabSize,\n insertSpaces\n };\n }\n FormattingOptions.create = create;\n /**\n * Checks whether the given literal conforms to the {@link FormattingOptions} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces);\n }\n FormattingOptions.is = is;\n })(FormattingOptions || (FormattingOptions = {}));\n /**\n * The DocumentLink namespace provides helper functions to work with\n * {@link DocumentLink} literals.\n */\n var DocumentLink;\n (function(DocumentLink) {\n /**\n * Creates a new DocumentLink literal.\n */\n function create(range, target, data) {\n return {\n range,\n target,\n data\n };\n }\n DocumentLink.create = create;\n /**\n * Checks whether the given literal conforms to the {@link DocumentLink} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));\n }\n DocumentLink.is = is;\n })(DocumentLink || (DocumentLink = {}));\n /**\n * The SelectionRange namespace provides helper function to work with\n * SelectionRange literals.\n */\n var SelectionRange;\n (function(SelectionRange) {\n /**\n * Creates a new SelectionRange\n * @param range the range.\n * @param parent an optional parent.\n */\n function create(range, parent) {\n return {\n range,\n parent\n };\n }\n SelectionRange.create = create;\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.range) && (candidate.parent === void 0 || SelectionRange.is(candidate.parent));\n }\n SelectionRange.is = is;\n })(SelectionRange || (SelectionRange = {}));\n /**\n * A set of predefined token types. This set is not fixed\n * an clients can specify additional token types via the\n * corresponding client capabilities.\n *\n * @since 3.16.0\n */\n var SemanticTokenTypes;\n (function(SemanticTokenTypes) {\n SemanticTokenTypes[\"namespace\"] = \"namespace\";\n /**\n * Represents a generic type. Acts as a fallback for types which can't be mapped to\n * a specific type like class or enum.\n */\n SemanticTokenTypes[\"type\"] = \"type\";\n SemanticTokenTypes[\"class\"] = \"class\";\n SemanticTokenTypes[\"enum\"] = \"enum\";\n SemanticTokenTypes[\"interface\"] = \"interface\";\n SemanticTokenTypes[\"struct\"] = \"struct\";\n SemanticTokenTypes[\"typeParameter\"] = \"typeParameter\";\n SemanticTokenTypes[\"parameter\"] = \"parameter\";\n SemanticTokenTypes[\"variable\"] = \"variable\";\n SemanticTokenTypes[\"property\"] = \"property\";\n SemanticTokenTypes[\"enumMember\"] = \"enumMember\";\n SemanticTokenTypes[\"event\"] = \"event\";\n SemanticTokenTypes[\"function\"] = \"function\";\n SemanticTokenTypes[\"method\"] = \"method\";\n SemanticTokenTypes[\"macro\"] = \"macro\";\n SemanticTokenTypes[\"keyword\"] = \"keyword\";\n SemanticTokenTypes[\"modifier\"] = \"modifier\";\n SemanticTokenTypes[\"comment\"] = \"comment\";\n SemanticTokenTypes[\"string\"] = \"string\";\n SemanticTokenTypes[\"number\"] = \"number\";\n SemanticTokenTypes[\"regexp\"] = \"regexp\";\n SemanticTokenTypes[\"operator\"] = \"operator\";\n /**\n * @since 3.17.0\n */\n SemanticTokenTypes[\"decorator\"] = \"decorator\";\n })(SemanticTokenTypes || (SemanticTokenTypes = {}));\n /**\n * A set of predefined token modifiers. This set is not fixed\n * an clients can specify additional token types via the\n * corresponding client capabilities.\n *\n * @since 3.16.0\n */\n var SemanticTokenModifiers;\n (function(SemanticTokenModifiers) {\n SemanticTokenModifiers[\"declaration\"] = \"declaration\";\n SemanticTokenModifiers[\"definition\"] = \"definition\";\n SemanticTokenModifiers[\"readonly\"] = \"readonly\";\n SemanticTokenModifiers[\"static\"] = \"static\";\n SemanticTokenModifiers[\"deprecated\"] = \"deprecated\";\n SemanticTokenModifiers[\"abstract\"] = \"abstract\";\n SemanticTokenModifiers[\"async\"] = \"async\";\n SemanticTokenModifiers[\"modification\"] = \"modification\";\n SemanticTokenModifiers[\"documentation\"] = \"documentation\";\n SemanticTokenModifiers[\"defaultLibrary\"] = \"defaultLibrary\";\n })(SemanticTokenModifiers || (SemanticTokenModifiers = {}));\n /**\n * @since 3.16.0\n */\n var SemanticTokens;\n (function(SemanticTokens) {\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && (candidate.resultId === void 0 || typeof candidate.resultId === \"string\") && Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === \"number\");\n }\n SemanticTokens.is = is;\n })(SemanticTokens || (SemanticTokens = {}));\n /**\n * The InlineValueText namespace provides functions to deal with InlineValueTexts.\n *\n * @since 3.17.0\n */\n var InlineValueText;\n (function(InlineValueText) {\n /**\n * Creates a new InlineValueText literal.\n */\n function create(range, text) {\n return {\n range,\n text\n };\n }\n InlineValueText.create = create;\n function is(value) {\n const candidate = value;\n return candidate !== void 0 && candidate !== null && Range.is(candidate.range) && Is.string(candidate.text);\n }\n InlineValueText.is = is;\n })(InlineValueText || (InlineValueText = {}));\n /**\n * The InlineValueVariableLookup namespace provides functions to deal with InlineValueVariableLookups.\n *\n * @since 3.17.0\n */\n var InlineValueVariableLookup;\n (function(InlineValueVariableLookup) {\n /**\n * Creates a new InlineValueText literal.\n */\n function create(range, variableName, caseSensitiveLookup) {\n return {\n range,\n variableName,\n caseSensitiveLookup\n };\n }\n InlineValueVariableLookup.create = create;\n function is(value) {\n const candidate = value;\n return candidate !== void 0 && candidate !== null && Range.is(candidate.range) && Is.boolean(candidate.caseSensitiveLookup) && (Is.string(candidate.variableName) || candidate.variableName === void 0);\n }\n InlineValueVariableLookup.is = is;\n })(InlineValueVariableLookup || (InlineValueVariableLookup = {}));\n /**\n * The InlineValueEvaluatableExpression namespace provides functions to deal with InlineValueEvaluatableExpression.\n *\n * @since 3.17.0\n */\n var InlineValueEvaluatableExpression;\n (function(InlineValueEvaluatableExpression) {\n /**\n * Creates a new InlineValueEvaluatableExpression literal.\n */\n function create(range, expression) {\n return {\n range,\n expression\n };\n }\n InlineValueEvaluatableExpression.create = create;\n function is(value) {\n const candidate = value;\n return candidate !== void 0 && candidate !== null && Range.is(candidate.range) && (Is.string(candidate.expression) || candidate.expression === void 0);\n }\n InlineValueEvaluatableExpression.is = is;\n })(InlineValueEvaluatableExpression || (InlineValueEvaluatableExpression = {}));\n /**\n * The InlineValueContext namespace provides helper functions to work with\n * {@link InlineValueContext} literals.\n *\n * @since 3.17.0\n */\n var InlineValueContext;\n (function(InlineValueContext) {\n /**\n * Creates a new InlineValueContext literal.\n */\n function create(frameId, stoppedLocation) {\n return {\n frameId,\n stoppedLocation\n };\n }\n InlineValueContext.create = create;\n /**\n * Checks whether the given literal conforms to the {@link InlineValueContext} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.defined(candidate) && Range.is(value.stoppedLocation);\n }\n InlineValueContext.is = is;\n })(InlineValueContext || (InlineValueContext = {}));\n /**\n * Inlay hint kinds.\n *\n * @since 3.17.0\n */\n var InlayHintKind;\n (function(InlayHintKind) {\n /**\n * An inlay hint that for a type annotation.\n */\n InlayHintKind.Type = 1;\n /**\n * An inlay hint that is for a parameter.\n */\n InlayHintKind.Parameter = 2;\n function is(value) {\n return value === 1 || value === 2;\n }\n InlayHintKind.is = is;\n })(InlayHintKind || (InlayHintKind = {}));\n var InlayHintLabelPart;\n (function(InlayHintLabelPart) {\n function create(value) {\n return { value };\n }\n InlayHintLabelPart.create = create;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && (candidate.tooltip === void 0 || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip)) && (candidate.location === void 0 || Location.is(candidate.location)) && (candidate.command === void 0 || Command.is(candidate.command));\n }\n InlayHintLabelPart.is = is;\n })(InlayHintLabelPart || (InlayHintLabelPart = {}));\n var InlayHint;\n (function(InlayHint) {\n function create(position, label, kind) {\n const result = {\n position,\n label\n };\n if (kind !== void 0) result.kind = kind;\n return result;\n }\n InlayHint.create = create;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Position.is(candidate.position) && (Is.string(candidate.label) || Is.typedArray(candidate.label, InlayHintLabelPart.is)) && (candidate.kind === void 0 || InlayHintKind.is(candidate.kind)) && candidate.textEdits === void 0 || Is.typedArray(candidate.textEdits, TextEdit.is) && (candidate.tooltip === void 0 || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip)) && (candidate.paddingLeft === void 0 || Is.boolean(candidate.paddingLeft)) && (candidate.paddingRight === void 0 || Is.boolean(candidate.paddingRight));\n }\n InlayHint.is = is;\n })(InlayHint || (InlayHint = {}));\n var StringValue;\n (function(StringValue) {\n function createSnippet(value) {\n return {\n kind: \"snippet\",\n value\n };\n }\n StringValue.createSnippet = createSnippet;\n })(StringValue || (StringValue = {}));\n var InlineCompletionItem;\n (function(InlineCompletionItem) {\n function create(insertText, filterText, range, command) {\n return {\n insertText,\n filterText,\n range,\n command\n };\n }\n InlineCompletionItem.create = create;\n })(InlineCompletionItem || (InlineCompletionItem = {}));\n var InlineCompletionList;\n (function(InlineCompletionList) {\n function create(items) {\n return { items };\n }\n InlineCompletionList.create = create;\n })(InlineCompletionList || (InlineCompletionList = {}));\n /**\n * Describes how an {@link InlineCompletionItemProvider inline completion provider} was triggered.\n *\n * @since 3.18.0\n * @proposed\n */\n var InlineCompletionTriggerKind;\n (function(InlineCompletionTriggerKind) {\n /**\n * Completion was triggered explicitly by a user gesture.\n */\n InlineCompletionTriggerKind.Invoked = 0;\n /**\n * Completion was triggered automatically while editing.\n */\n InlineCompletionTriggerKind.Automatic = 1;\n })(InlineCompletionTriggerKind || (InlineCompletionTriggerKind = {}));\n var SelectedCompletionInfo;\n (function(SelectedCompletionInfo) {\n function create(range, text) {\n return {\n range,\n text\n };\n }\n SelectedCompletionInfo.create = create;\n })(SelectedCompletionInfo || (SelectedCompletionInfo = {}));\n var InlineCompletionContext;\n (function(InlineCompletionContext) {\n function create(triggerKind, selectedCompletionInfo) {\n return {\n triggerKind,\n selectedCompletionInfo\n };\n }\n InlineCompletionContext.create = create;\n })(InlineCompletionContext || (InlineCompletionContext = {}));\n var WorkspaceFolder;\n (function(WorkspaceFolder) {\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && URI$1.is(candidate.uri) && Is.string(candidate.name);\n }\n WorkspaceFolder.is = is;\n })(WorkspaceFolder || (WorkspaceFolder = {}));\n /**\n * @deprecated Use the text document from the new vscode-languageserver-textdocument package.\n */\n var TextDocument$1;\n (function(TextDocument) {\n /**\n * Creates a new ITextDocument literal from the given uri and content.\n * @param uri The document's uri.\n * @param languageId The document's language Id.\n * @param version The document's version.\n * @param content The document's content.\n */\n function create(uri, languageId, version, content) {\n return new FullTextDocument$1(uri, languageId, version, content);\n }\n TextDocument.create = create;\n /**\n * Checks whether the given literal conforms to the {@link ITextDocument} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.uinteger(candidate.lineCount) && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;\n }\n TextDocument.is = is;\n function applyEdits(document, edits) {\n let text = document.getText();\n let sortedEdits = mergeSort(edits, (a, b) => {\n let diff = a.range.start.line - b.range.start.line;\n if (diff === 0) return a.range.start.character - b.range.start.character;\n return diff;\n });\n let lastModifiedOffset = text.length;\n for (let i = sortedEdits.length - 1; i >= 0; i--) {\n let e = sortedEdits[i];\n let startOffset = document.offsetAt(e.range.start);\n let endOffset = document.offsetAt(e.range.end);\n if (endOffset <= lastModifiedOffset) text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);\n else throw new Error(\"Overlapping edit\");\n lastModifiedOffset = startOffset;\n }\n return text;\n }\n TextDocument.applyEdits = applyEdits;\n function mergeSort(data, compare) {\n if (data.length <= 1) return data;\n const p = data.length / 2 | 0;\n const left = data.slice(0, p);\n const right = data.slice(p);\n mergeSort(left, compare);\n mergeSort(right, compare);\n let leftIdx = 0;\n let rightIdx = 0;\n let i = 0;\n while (leftIdx < left.length && rightIdx < right.length) if (compare(left[leftIdx], right[rightIdx]) <= 0) data[i++] = left[leftIdx++];\n else data[i++] = right[rightIdx++];\n while (leftIdx < left.length) data[i++] = left[leftIdx++];\n while (rightIdx < right.length) data[i++] = right[rightIdx++];\n return data;\n }\n })(TextDocument$1 || (TextDocument$1 = {}));\n /**\n * @deprecated Use the text document from the new vscode-languageserver-textdocument package.\n */\n var FullTextDocument$1 = class {\n constructor(uri, languageId, version, content) {\n this._uri = uri;\n this._languageId = languageId;\n this._version = version;\n this._content = content;\n this._lineOffsets = void 0;\n }\n get uri() {\n return this._uri;\n }\n get languageId() {\n return this._languageId;\n }\n get version() {\n return this._version;\n }\n getText(range) {\n if (range) {\n let start = this.offsetAt(range.start);\n let end = this.offsetAt(range.end);\n return this._content.substring(start, end);\n }\n return this._content;\n }\n update(event, version) {\n this._content = event.text;\n this._version = version;\n this._lineOffsets = void 0;\n }\n getLineOffsets() {\n if (this._lineOffsets === void 0) {\n let lineOffsets = [];\n let text = this._content;\n let isLineStart = true;\n for (let i = 0; i < text.length; i++) {\n if (isLineStart) {\n lineOffsets.push(i);\n isLineStart = false;\n }\n let ch = text.charAt(i);\n isLineStart = ch === \"\\r\" || ch === \"\\n\";\n if (ch === \"\\r\" && i + 1 < text.length && text.charAt(i + 1) === \"\\n\") i++;\n }\n if (isLineStart && text.length > 0) lineOffsets.push(text.length);\n this._lineOffsets = lineOffsets;\n }\n return this._lineOffsets;\n }\n positionAt(offset) {\n offset = Math.max(Math.min(offset, this._content.length), 0);\n let lineOffsets = this.getLineOffsets();\n let low = 0, high = lineOffsets.length;\n if (high === 0) return Position.create(0, offset);\n while (low < high) {\n let mid = Math.floor((low + high) / 2);\n if (lineOffsets[mid] > offset) high = mid;\n else low = mid + 1;\n }\n let line = low - 1;\n return Position.create(line, offset - lineOffsets[line]);\n }\n offsetAt(position) {\n let lineOffsets = this.getLineOffsets();\n if (position.line >= lineOffsets.length) return this._content.length;\n else if (position.line < 0) return 0;\n let lineOffset = lineOffsets[position.line];\n let nextLineOffset = position.line + 1 < lineOffsets.length ? lineOffsets[position.line + 1] : this._content.length;\n return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);\n }\n get lineCount() {\n return this.getLineOffsets().length;\n }\n };\n var Is;\n (function(Is) {\n const toString = Object.prototype.toString;\n function defined(value) {\n return typeof value !== \"undefined\";\n }\n Is.defined = defined;\n function undefined$1(value) {\n return typeof value === \"undefined\";\n }\n Is.undefined = undefined$1;\n function boolean(value) {\n return value === true || value === false;\n }\n Is.boolean = boolean;\n function string(value) {\n return toString.call(value) === \"[object String]\";\n }\n Is.string = string;\n function number(value) {\n return toString.call(value) === \"[object Number]\";\n }\n Is.number = number;\n function numberRange(value, min, max) {\n return toString.call(value) === \"[object Number]\" && min <= value && value <= max;\n }\n Is.numberRange = numberRange;\n function integer(value) {\n return toString.call(value) === \"[object Number]\" && -2147483648 <= value && value <= 2147483647;\n }\n Is.integer = integer;\n function uinteger(value) {\n return toString.call(value) === \"[object Number]\" && 0 <= value && value <= 2147483647;\n }\n Is.uinteger = uinteger;\n function func(value) {\n return toString.call(value) === \"[object Function]\";\n }\n Is.func = func;\n function objectLiteral(value) {\n return value !== null && typeof value === \"object\";\n }\n Is.objectLiteral = objectLiteral;\n function typedArray(value, check) {\n return Array.isArray(value) && value.every(check);\n }\n Is.typedArray = typedArray;\n })(Is || (Is = {}));\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-languageserver-textdocument/lib/esm/main.js\n var FullTextDocument = class FullTextDocument {\n constructor(uri, languageId, version, content) {\n this._uri = uri;\n this._languageId = languageId;\n this._version = version;\n this._content = content;\n this._lineOffsets = void 0;\n }\n get uri() {\n return this._uri;\n }\n get languageId() {\n return this._languageId;\n }\n get version() {\n return this._version;\n }\n getText(range) {\n if (range) {\n const start = this.offsetAt(range.start);\n const end = this.offsetAt(range.end);\n return this._content.substring(start, end);\n }\n return this._content;\n }\n update(changes, version) {\n for (let change of changes) if (FullTextDocument.isIncremental(change)) {\n const range = getWellformedRange(change.range);\n const startOffset = this.offsetAt(range.start);\n const endOffset = this.offsetAt(range.end);\n this._content = this._content.substring(0, startOffset) + change.text + this._content.substring(endOffset, this._content.length);\n const startLine = Math.max(range.start.line, 0);\n const endLine = Math.max(range.end.line, 0);\n let lineOffsets = this._lineOffsets;\n const addedLineOffsets = computeLineOffsets(change.text, false, startOffset);\n if (endLine - startLine === addedLineOffsets.length) for (let i = 0, len = addedLineOffsets.length; i < len; i++) lineOffsets[i + startLine + 1] = addedLineOffsets[i];\n else if (addedLineOffsets.length < 1e4) lineOffsets.splice(startLine + 1, endLine - startLine, ...addedLineOffsets);\n else this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1));\n const diff = change.text.length - (endOffset - startOffset);\n if (diff !== 0) for (let i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i < len; i++) lineOffsets[i] = lineOffsets[i] + diff;\n } else if (FullTextDocument.isFull(change)) {\n this._content = change.text;\n this._lineOffsets = void 0;\n } else throw new Error(\"Unknown change event received\");\n this._version = version;\n }\n getLineOffsets() {\n if (this._lineOffsets === void 0) this._lineOffsets = computeLineOffsets(this._content, true);\n return this._lineOffsets;\n }\n positionAt(offset) {\n offset = Math.max(Math.min(offset, this._content.length), 0);\n let lineOffsets = this.getLineOffsets();\n let low = 0, high = lineOffsets.length;\n if (high === 0) return {\n line: 0,\n character: offset\n };\n while (low < high) {\n let mid = Math.floor((low + high) / 2);\n if (lineOffsets[mid] > offset) high = mid;\n else low = mid + 1;\n }\n let line = low - 1;\n return {\n line,\n character: offset - lineOffsets[line]\n };\n }\n offsetAt(position) {\n let lineOffsets = this.getLineOffsets();\n if (position.line >= lineOffsets.length) return this._content.length;\n else if (position.line < 0) return 0;\n let lineOffset = lineOffsets[position.line];\n let nextLineOffset = position.line + 1 < lineOffsets.length ? lineOffsets[position.line + 1] : this._content.length;\n return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);\n }\n get lineCount() {\n return this.getLineOffsets().length;\n }\n static isIncremental(event) {\n let candidate = event;\n return candidate !== void 0 && candidate !== null && typeof candidate.text === \"string\" && candidate.range !== void 0 && (candidate.rangeLength === void 0 || typeof candidate.rangeLength === \"number\");\n }\n static isFull(event) {\n let candidate = event;\n return candidate !== void 0 && candidate !== null && typeof candidate.text === \"string\" && candidate.range === void 0 && candidate.rangeLength === void 0;\n }\n };\n var TextDocument;\n (function(TextDocument) {\n /**\n * Creates a new text document.\n *\n * @param uri The document's uri.\n * @param languageId The document's language Id.\n * @param version The document's initial version number.\n * @param content The document's content.\n */\n function create(uri, languageId, version, content) {\n return new FullTextDocument(uri, languageId, version, content);\n }\n TextDocument.create = create;\n /**\n * Updates a TextDocument by modifying its content.\n *\n * @param document the document to update. Only documents created by TextDocument.create are valid inputs.\n * @param changes the changes to apply to the document.\n * @param version the changes version for the document.\n * @returns The updated TextDocument. Note: That's the same document instance passed in as first parameter.\n *\n */\n function update(document, changes, version) {\n if (document instanceof FullTextDocument) {\n document.update(changes, version);\n return document;\n } else throw new Error(\"TextDocument.update: document must be created by TextDocument.create\");\n }\n TextDocument.update = update;\n function applyEdits(document, edits) {\n let text = document.getText();\n let sortedEdits = mergeSort(edits.map(getWellformedEdit), (a, b) => {\n let diff = a.range.start.line - b.range.start.line;\n if (diff === 0) return a.range.start.character - b.range.start.character;\n return diff;\n });\n let lastModifiedOffset = 0;\n const spans = [];\n for (const e of sortedEdits) {\n let startOffset = document.offsetAt(e.range.start);\n if (startOffset < lastModifiedOffset) throw new Error(\"Overlapping edit\");\n else if (startOffset > lastModifiedOffset) spans.push(text.substring(lastModifiedOffset, startOffset));\n if (e.newText.length) spans.push(e.newText);\n lastModifiedOffset = document.offsetAt(e.range.end);\n }\n spans.push(text.substr(lastModifiedOffset));\n return spans.join(\"\");\n }\n TextDocument.applyEdits = applyEdits;\n })(TextDocument || (TextDocument = {}));\n function mergeSort(data, compare) {\n if (data.length <= 1) return data;\n const p = data.length / 2 | 0;\n const left = data.slice(0, p);\n const right = data.slice(p);\n mergeSort(left, compare);\n mergeSort(right, compare);\n let leftIdx = 0;\n let rightIdx = 0;\n let i = 0;\n while (leftIdx < left.length && rightIdx < right.length) if (compare(left[leftIdx], right[rightIdx]) <= 0) data[i++] = left[leftIdx++];\n else data[i++] = right[rightIdx++];\n while (leftIdx < left.length) data[i++] = left[leftIdx++];\n while (rightIdx < right.length) data[i++] = right[rightIdx++];\n return data;\n }\n function computeLineOffsets(text, isAtLineStart, textOffset = 0) {\n const result = isAtLineStart ? [textOffset] : [];\n for (let i = 0; i < text.length; i++) {\n let ch = text.charCodeAt(i);\n if (ch === 13 || ch === 10) {\n if (ch === 13 && i + 1 < text.length && text.charCodeAt(i + 1) === 10) i++;\n result.push(textOffset + i + 1);\n }\n }\n return result;\n }\n function getWellformedRange(range) {\n const start = range.start;\n const end = range.end;\n if (start.line > end.line || start.line === end.line && start.character > end.character) return {\n start: end,\n end: start\n };\n return range;\n }\n function getWellformedEdit(textEdit) {\n const range = getWellformedRange(textEdit.range);\n if (range !== textEdit.range) return {\n newText: textEdit.newText,\n range\n };\n return textEdit;\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/jsonLanguageTypes.js\n /**\n * Error codes used by diagnostics\n */\n var ErrorCode;\n (function(ErrorCode) {\n ErrorCode[ErrorCode[\"Undefined\"] = 0] = \"Undefined\";\n ErrorCode[ErrorCode[\"EnumValueMismatch\"] = 1] = \"EnumValueMismatch\";\n ErrorCode[ErrorCode[\"Deprecated\"] = 2] = \"Deprecated\";\n ErrorCode[ErrorCode[\"UnexpectedEndOfComment\"] = 257] = \"UnexpectedEndOfComment\";\n ErrorCode[ErrorCode[\"UnexpectedEndOfString\"] = 258] = \"UnexpectedEndOfString\";\n ErrorCode[ErrorCode[\"UnexpectedEndOfNumber\"] = 259] = \"UnexpectedEndOfNumber\";\n ErrorCode[ErrorCode[\"InvalidUnicode\"] = 260] = \"InvalidUnicode\";\n ErrorCode[ErrorCode[\"InvalidEscapeCharacter\"] = 261] = \"InvalidEscapeCharacter\";\n ErrorCode[ErrorCode[\"InvalidCharacter\"] = 262] = \"InvalidCharacter\";\n ErrorCode[ErrorCode[\"PropertyExpected\"] = 513] = \"PropertyExpected\";\n ErrorCode[ErrorCode[\"CommaExpected\"] = 514] = \"CommaExpected\";\n ErrorCode[ErrorCode[\"ColonExpected\"] = 515] = \"ColonExpected\";\n ErrorCode[ErrorCode[\"ValueExpected\"] = 516] = \"ValueExpected\";\n ErrorCode[ErrorCode[\"CommaOrCloseBacketExpected\"] = 517] = \"CommaOrCloseBacketExpected\";\n ErrorCode[ErrorCode[\"CommaOrCloseBraceExpected\"] = 518] = \"CommaOrCloseBraceExpected\";\n ErrorCode[ErrorCode[\"TrailingComma\"] = 519] = \"TrailingComma\";\n ErrorCode[ErrorCode[\"DuplicateKey\"] = 520] = \"DuplicateKey\";\n ErrorCode[ErrorCode[\"CommentNotPermitted\"] = 521] = \"CommentNotPermitted\";\n ErrorCode[ErrorCode[\"PropertyKeysMustBeDoublequoted\"] = 528] = \"PropertyKeysMustBeDoublequoted\";\n ErrorCode[ErrorCode[\"SchemaResolveError\"] = 768] = \"SchemaResolveError\";\n ErrorCode[ErrorCode[\"SchemaUnsupportedFeature\"] = 769] = \"SchemaUnsupportedFeature\";\n })(ErrorCode || (ErrorCode = {}));\n var SchemaDraft;\n (function(SchemaDraft) {\n SchemaDraft[SchemaDraft[\"v3\"] = 3] = \"v3\";\n SchemaDraft[SchemaDraft[\"v4\"] = 4] = \"v4\";\n SchemaDraft[SchemaDraft[\"v6\"] = 6] = \"v6\";\n SchemaDraft[SchemaDraft[\"v7\"] = 7] = \"v7\";\n SchemaDraft[SchemaDraft[\"v2019_09\"] = 19] = \"v2019_09\";\n SchemaDraft[SchemaDraft[\"v2020_12\"] = 20] = \"v2020_12\";\n })(SchemaDraft || (SchemaDraft = {}));\n var ClientCapabilities;\n (function(ClientCapabilities) {\n ClientCapabilities.LATEST = { textDocument: { completion: { completionItem: {\n documentationFormat: [MarkupKind.Markdown, MarkupKind.PlainText],\n commitCharactersSupport: true,\n labelDetailsSupport: true\n } } } };\n })(ClientCapabilities || (ClientCapabilities = {}));\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/@vscode/l10n/dist/browser.js\n function t(...args) {\n const firstArg = args[0];\n let key;\n let message;\n let formatArgs;\n if (typeof firstArg === \"string\") {\n key = firstArg;\n message = firstArg;\n args.splice(0, 1);\n formatArgs = !args || typeof args[0] !== \"object\" ? args : args[0];\n } else if (firstArg instanceof Array) {\n const replacements = args.slice(1);\n if (firstArg.length !== replacements.length + 1) throw new Error(\"expected a string as the first argument to l10n.t\");\n let str = firstArg[0];\n for (let i = 1; i < firstArg.length; i++) str += `{${i - 1}}` + firstArg[i];\n return t(str, ...replacements);\n } else {\n message = firstArg.message;\n key = message;\n if (firstArg.comment && firstArg.comment.length > 0) key += `/${Array.isArray(firstArg.comment) ? firstArg.comment.join(\"\") : firstArg.comment}`;\n formatArgs = firstArg.args ?? {};\n }\n return format$1(message, formatArgs);\n }\n var _format2Regexp = /{([^}]+)}/g;\n function format$1(template, values) {\n if (Object.keys(values).length === 0) return template;\n return template.replace(_format2Regexp, (match, group) => values[group] ?? match);\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/parser/jsonParser.js\n const formats = {\n \"color-hex\": {\n errorMessage: t(\"Invalid color format. Use #RGB, #RGBA, #RRGGBB or #RRGGBBAA.\"),\n pattern: /^#([0-9A-Fa-f]{3,4}|([0-9A-Fa-f]{2}){3,4})$/\n },\n \"date-time\": {\n errorMessage: t(\"String is not a RFC3339 date-time.\"),\n pattern: /^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)([01][0-9]|2[0-3]):([0-5][0-9]))$/i\n },\n \"date\": {\n errorMessage: t(\"String is not a RFC3339 date.\"),\n pattern: /^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/i\n },\n \"time\": {\n errorMessage: t(\"String is not a RFC3339 time.\"),\n pattern: /^([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)([01][0-9]|2[0-3]):([0-5][0-9]))$/i\n },\n \"email\": {\n errorMessage: t(\"String is not an e-mail address.\"),\n pattern: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,}))$/\n },\n \"hostname\": {\n errorMessage: t(\"String is not a hostname.\"),\n pattern: /^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i\n },\n \"ipv4\": {\n errorMessage: t(\"String is not an IPv4 address.\"),\n pattern: /^(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)$/\n },\n \"ipv6\": {\n errorMessage: t(\"String is not an IPv6 address.\"),\n pattern: /^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))$/i\n }\n };\n var ASTNodeImpl = class {\n constructor(parent, offset, length = 0) {\n this.offset = offset;\n this.length = length;\n this.parent = parent;\n }\n get children() {\n return [];\n }\n toString() {\n return \"type: \" + this.type + \" (\" + this.offset + \"/\" + this.length + \")\" + (this.parent ? \" parent: {\" + this.parent.toString() + \"}\" : \"\");\n }\n };\n var NullASTNodeImpl = class extends ASTNodeImpl {\n constructor(parent, offset) {\n super(parent, offset);\n this.type = \"null\";\n this.value = null;\n }\n };\n var BooleanASTNodeImpl = class extends ASTNodeImpl {\n constructor(parent, boolValue, offset) {\n super(parent, offset);\n this.type = \"boolean\";\n this.value = boolValue;\n }\n };\n var ArrayASTNodeImpl = class extends ASTNodeImpl {\n constructor(parent, offset) {\n super(parent, offset);\n this.type = \"array\";\n this.items = [];\n }\n get children() {\n return this.items;\n }\n };\n var NumberASTNodeImpl = class extends ASTNodeImpl {\n constructor(parent, offset) {\n super(parent, offset);\n this.type = \"number\";\n this.isInteger = true;\n this.value = NaN;\n }\n };\n var StringASTNodeImpl = class extends ASTNodeImpl {\n constructor(parent, offset, length) {\n super(parent, offset, length);\n this.type = \"string\";\n this.value = \"\";\n }\n };\n var PropertyASTNodeImpl = class extends ASTNodeImpl {\n constructor(parent, offset, keyNode) {\n super(parent, offset);\n this.type = \"property\";\n this.colonOffset = -1;\n this.keyNode = keyNode;\n }\n get children() {\n return this.valueNode ? [this.keyNode, this.valueNode] : [this.keyNode];\n }\n };\n var ObjectASTNodeImpl = class extends ASTNodeImpl {\n constructor(parent, offset) {\n super(parent, offset);\n this.type = \"object\";\n this.properties = [];\n }\n get children() {\n return this.properties;\n }\n };\n function asSchema(schema) {\n if (isBoolean(schema)) return schema ? {} : { \"not\": {} };\n return schema;\n }\n var EnumMatch;\n (function(EnumMatch) {\n EnumMatch[EnumMatch[\"Key\"] = 0] = \"Key\";\n EnumMatch[EnumMatch[\"Enum\"] = 1] = \"Enum\";\n })(EnumMatch || (EnumMatch = {}));\n const schemaDraftFromId = {\n \"http://json-schema.org/draft-03/schema#\": SchemaDraft.v3,\n \"http://json-schema.org/draft-04/schema#\": SchemaDraft.v4,\n \"http://json-schema.org/draft-06/schema#\": SchemaDraft.v6,\n \"http://json-schema.org/draft-07/schema#\": SchemaDraft.v7,\n \"https://json-schema.org/draft/2019-09/schema\": SchemaDraft.v2019_09,\n \"https://json-schema.org/draft/2020-12/schema\": SchemaDraft.v2020_12\n };\n var EvaluationContext = class {\n constructor(schemaDraft) {\n this.schemaDraft = schemaDraft;\n }\n };\n var SchemaCollector = class SchemaCollector {\n constructor(focusOffset = -1, exclude) {\n this.focusOffset = focusOffset;\n this.exclude = exclude;\n this.schemas = [];\n }\n add(schema) {\n this.schemas.push(schema);\n }\n merge(other) {\n Array.prototype.push.apply(this.schemas, other.schemas);\n }\n include(node) {\n return (this.focusOffset === -1 || contains(node, this.focusOffset)) && node !== this.exclude;\n }\n newSub() {\n return new SchemaCollector(-1, this.exclude);\n }\n };\n var NoOpSchemaCollector = class {\n constructor() {}\n get schemas() {\n return [];\n }\n add(_schema) {}\n merge(_other) {}\n include(_node) {\n return true;\n }\n newSub() {\n return this;\n }\n };\n NoOpSchemaCollector.instance = new NoOpSchemaCollector();\n var ValidationResult = class {\n constructor() {\n this.problems = [];\n this.propertiesMatches = 0;\n this.processedProperties = /* @__PURE__ */ new Set();\n this.propertiesValueMatches = 0;\n this.primaryValueMatches = 0;\n this.enumValueMatch = false;\n this.enumValues = void 0;\n }\n hasProblems() {\n return !!this.problems.length;\n }\n merge(validationResult) {\n this.problems = this.problems.concat(validationResult.problems);\n this.propertiesMatches += validationResult.propertiesMatches;\n this.propertiesValueMatches += validationResult.propertiesValueMatches;\n this.mergeProcessedProperties(validationResult);\n }\n mergeEnumValues(validationResult) {\n if (!this.enumValueMatch && !validationResult.enumValueMatch && this.enumValues && validationResult.enumValues) {\n this.enumValues = this.enumValues.concat(validationResult.enumValues);\n for (const error of this.problems) if (error.code === ErrorCode.EnumValueMismatch) error.message = t(\"Value is not accepted. Valid values: {0}.\", this.enumValues.map((v) => JSON.stringify(v)).join(\", \"));\n }\n }\n mergePropertyMatch(propertyValidationResult) {\n this.problems = this.problems.concat(propertyValidationResult.problems);\n this.propertiesMatches++;\n if (propertyValidationResult.enumValueMatch || !propertyValidationResult.hasProblems() && propertyValidationResult.propertiesMatches) this.propertiesValueMatches++;\n if (propertyValidationResult.enumValueMatch && propertyValidationResult.enumValues && propertyValidationResult.enumValues.length === 1) this.primaryValueMatches++;\n }\n mergeProcessedProperties(validationResult) {\n validationResult.processedProperties.forEach((p) => this.processedProperties.add(p));\n }\n compare(other) {\n const hasProblems = this.hasProblems();\n if (hasProblems !== other.hasProblems()) return hasProblems ? -1 : 1;\n if (this.enumValueMatch !== other.enumValueMatch) return other.enumValueMatch ? -1 : 1;\n if (this.primaryValueMatches !== other.primaryValueMatches) return this.primaryValueMatches - other.primaryValueMatches;\n if (this.propertiesValueMatches !== other.propertiesValueMatches) return this.propertiesValueMatches - other.propertiesValueMatches;\n return this.propertiesMatches - other.propertiesMatches;\n }\n };\n function newJSONDocument(root, diagnostics = []) {\n return new JSONDocument(root, diagnostics, []);\n }\n function getNodeValue(node) {\n return getNodeValue$1(node);\n }\n function getNodePath(node) {\n return getNodePath$1(node);\n }\n function contains(node, offset, includeRightBound = false) {\n return offset >= node.offset && offset < node.offset + node.length || includeRightBound && offset === node.offset + node.length;\n }\n var JSONDocument = class {\n constructor(root, syntaxErrors = [], comments = []) {\n this.root = root;\n this.syntaxErrors = syntaxErrors;\n this.comments = comments;\n }\n getNodeFromOffset(offset, includeRightBound = false) {\n if (this.root) return findNodeAtOffset(this.root, offset, includeRightBound);\n }\n visit(visitor) {\n if (this.root) {\n const doVisit = (node) => {\n let ctn = visitor(node);\n const children = node.children;\n if (Array.isArray(children)) for (let i = 0; i < children.length && ctn; i++) ctn = doVisit(children[i]);\n return ctn;\n };\n doVisit(this.root);\n }\n }\n validate(textDocument, schema, severity = DiagnosticSeverity.Warning, schemaDraft) {\n if (this.root && schema) {\n const validationResult = new ValidationResult();\n validate(this.root, schema, validationResult, NoOpSchemaCollector.instance, new EvaluationContext(schemaDraft ?? getSchemaDraft(schema)));\n return validationResult.problems.map((p) => {\n const range = Range.create(textDocument.positionAt(p.location.offset), textDocument.positionAt(p.location.offset + p.location.length));\n return Diagnostic.create(range, p.message, p.severity ?? severity, p.code);\n });\n }\n }\n getMatchingSchemas(schema, focusOffset = -1, exclude) {\n if (this.root && schema) {\n const matchingSchemas = new SchemaCollector(focusOffset, exclude);\n const context = new EvaluationContext(getSchemaDraft(schema));\n validate(this.root, schema, new ValidationResult(), matchingSchemas, context);\n return matchingSchemas.schemas;\n }\n return [];\n }\n };\n function getSchemaDraft(schema, fallBack = SchemaDraft.v2020_12) {\n let schemaId = schema.$schema;\n if (schemaId) return schemaDraftFromId[schemaId] ?? fallBack;\n return fallBack;\n }\n function validate(n, schema, validationResult, matchingSchemas, context) {\n if (!n || !matchingSchemas.include(n)) return;\n if (n.type === \"property\") return validate(n.valueNode, schema, validationResult, matchingSchemas, context);\n const node = n;\n _validateNode();\n switch (node.type) {\n case \"object\":\n _validateObjectNode(node);\n break;\n case \"array\":\n _validateArrayNode(node);\n break;\n case \"string\":\n _validateStringNode(node);\n break;\n case \"number\":\n _validateNumberNode(node);\n break;\n }\n matchingSchemas.add({\n node,\n schema\n });\n function _validateNode() {\n function matchesType(type) {\n return node.type === type || type === \"integer\" && node.type === \"number\" && node.isInteger;\n }\n if (Array.isArray(schema.type)) {\n if (!schema.type.some(matchesType)) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: schema.errorMessage || t(\"Incorrect type. Expected one of {0}.\", schema.type.join(\", \"))\n });\n } else if (schema.type) {\n if (!matchesType(schema.type)) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: schema.errorMessage || t(\"Incorrect type. Expected \\\"{0}\\\".\", schema.type)\n });\n }\n if (Array.isArray(schema.allOf)) for (const subSchemaRef of schema.allOf) {\n const subValidationResult = new ValidationResult();\n const subMatchingSchemas = matchingSchemas.newSub();\n validate(node, asSchema(subSchemaRef), subValidationResult, subMatchingSchemas, context);\n validationResult.merge(subValidationResult);\n matchingSchemas.merge(subMatchingSchemas);\n }\n const notSchema = asSchema(schema.not);\n if (notSchema) {\n const subValidationResult = new ValidationResult();\n const subMatchingSchemas = matchingSchemas.newSub();\n validate(node, notSchema, subValidationResult, subMatchingSchemas, context);\n if (!subValidationResult.hasProblems()) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: schema.errorMessage || t(\"Matches a schema that is not allowed.\")\n });\n for (const ms of subMatchingSchemas.schemas) {\n ms.inverted = !ms.inverted;\n matchingSchemas.add(ms);\n }\n }\n const testAlternatives = (alternatives, maxOneMatch) => {\n const matches = [];\n let bestMatch = void 0;\n for (const subSchemaRef of alternatives) {\n const subSchema = asSchema(subSchemaRef);\n const subValidationResult = new ValidationResult();\n const subMatchingSchemas = matchingSchemas.newSub();\n validate(node, subSchema, subValidationResult, subMatchingSchemas, context);\n if (!subValidationResult.hasProblems()) matches.push(subSchema);\n if (!bestMatch) bestMatch = {\n schema: subSchema,\n validationResult: subValidationResult,\n matchingSchemas: subMatchingSchemas\n };\n else if (!maxOneMatch && !subValidationResult.hasProblems() && !bestMatch.validationResult.hasProblems()) {\n bestMatch.matchingSchemas.merge(subMatchingSchemas);\n bestMatch.validationResult.propertiesMatches += subValidationResult.propertiesMatches;\n bestMatch.validationResult.propertiesValueMatches += subValidationResult.propertiesValueMatches;\n bestMatch.validationResult.mergeProcessedProperties(subValidationResult);\n } else {\n const compareResult = subValidationResult.compare(bestMatch.validationResult);\n if (compareResult > 0) bestMatch = {\n schema: subSchema,\n validationResult: subValidationResult,\n matchingSchemas: subMatchingSchemas\n };\n else if (compareResult === 0) {\n bestMatch.matchingSchemas.merge(subMatchingSchemas);\n bestMatch.validationResult.mergeEnumValues(subValidationResult);\n }\n }\n }\n if (matches.length > 1 && maxOneMatch) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: 1\n },\n message: t(\"Matches multiple schemas when only one must validate.\")\n });\n if (bestMatch) {\n validationResult.merge(bestMatch.validationResult);\n matchingSchemas.merge(bestMatch.matchingSchemas);\n }\n return matches.length;\n };\n if (Array.isArray(schema.anyOf)) testAlternatives(schema.anyOf, false);\n if (Array.isArray(schema.oneOf)) testAlternatives(schema.oneOf, true);\n const testBranch = (schema) => {\n const subValidationResult = new ValidationResult();\n const subMatchingSchemas = matchingSchemas.newSub();\n validate(node, asSchema(schema), subValidationResult, subMatchingSchemas, context);\n validationResult.merge(subValidationResult);\n matchingSchemas.merge(subMatchingSchemas);\n };\n const testCondition = (ifSchema, thenSchema, elseSchema) => {\n const subSchema = asSchema(ifSchema);\n const subValidationResult = new ValidationResult();\n const subMatchingSchemas = matchingSchemas.newSub();\n validate(node, subSchema, subValidationResult, subMatchingSchemas, context);\n matchingSchemas.merge(subMatchingSchemas);\n validationResult.mergeProcessedProperties(subValidationResult);\n if (!subValidationResult.hasProblems()) {\n if (thenSchema) testBranch(thenSchema);\n } else if (elseSchema) testBranch(elseSchema);\n };\n const ifSchema = asSchema(schema.if);\n if (ifSchema) testCondition(ifSchema, asSchema(schema.then), asSchema(schema.else));\n if (Array.isArray(schema.enum)) {\n const val = getNodeValue(node);\n let enumValueMatch = false;\n for (const e of schema.enum) if (equals(val, e)) {\n enumValueMatch = true;\n break;\n }\n validationResult.enumValues = schema.enum;\n validationResult.enumValueMatch = enumValueMatch;\n if (!enumValueMatch) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n code: ErrorCode.EnumValueMismatch,\n message: schema.errorMessage || t(\"Value is not accepted. Valid values: {0}.\", schema.enum.map((v) => JSON.stringify(v)).join(\", \"))\n });\n }\n if (isDefined(schema.const)) {\n if (!equals(getNodeValue(node), schema.const)) {\n validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n code: ErrorCode.EnumValueMismatch,\n message: schema.errorMessage || t(\"Value must be {0}.\", JSON.stringify(schema.const))\n });\n validationResult.enumValueMatch = false;\n } else validationResult.enumValueMatch = true;\n validationResult.enumValues = [schema.const];\n }\n let deprecationMessage = schema.deprecationMessage;\n if (deprecationMessage || schema.deprecated) {\n deprecationMessage = deprecationMessage || t(\"Value is deprecated\");\n let targetNode = node.parent?.type === \"property\" ? node.parent : node;\n validationResult.problems.push({\n location: {\n offset: targetNode.offset,\n length: targetNode.length\n },\n severity: DiagnosticSeverity.Warning,\n message: deprecationMessage,\n code: ErrorCode.Deprecated\n });\n }\n }\n function _validateNumberNode(node) {\n const val = node.value;\n function normalizeFloats(float) {\n const parts = /^(-?\\d+)(?:\\.(\\d+))?(?:e([-+]\\d+))?$/.exec(float.toString());\n return parts && {\n value: Number(parts[1] + (parts[2] || \"\")),\n multiplier: (parts[2]?.length || 0) - (parseInt(parts[3]) || 0)\n };\n }\n if (isNumber(schema.multipleOf)) {\n let remainder = -1;\n if (Number.isInteger(schema.multipleOf)) remainder = val % schema.multipleOf;\n else {\n let normMultipleOf = normalizeFloats(schema.multipleOf);\n let normValue = normalizeFloats(val);\n if (normMultipleOf && normValue) {\n const multiplier = 10 ** Math.abs(normValue.multiplier - normMultipleOf.multiplier);\n if (normValue.multiplier < normMultipleOf.multiplier) normValue.value *= multiplier;\n else normMultipleOf.value *= multiplier;\n remainder = normValue.value % normMultipleOf.value;\n }\n }\n if (remainder !== 0) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: t(\"Value is not divisible by {0}.\", schema.multipleOf)\n });\n }\n function getExclusiveLimit(limit, exclusive) {\n if (isNumber(exclusive)) return exclusive;\n if (isBoolean(exclusive) && exclusive) return limit;\n }\n function getLimit(limit, exclusive) {\n if (!isBoolean(exclusive) || !exclusive) return limit;\n }\n const exclusiveMinimum = getExclusiveLimit(schema.minimum, schema.exclusiveMinimum);\n if (isNumber(exclusiveMinimum) && val <= exclusiveMinimum) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: t(\"Value is below the exclusive minimum of {0}.\", exclusiveMinimum)\n });\n const exclusiveMaximum = getExclusiveLimit(schema.maximum, schema.exclusiveMaximum);\n if (isNumber(exclusiveMaximum) && val >= exclusiveMaximum) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: t(\"Value is above the exclusive maximum of {0}.\", exclusiveMaximum)\n });\n const minimum = getLimit(schema.minimum, schema.exclusiveMinimum);\n if (isNumber(minimum) && val < minimum) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: t(\"Value is below the minimum of {0}.\", minimum)\n });\n const maximum = getLimit(schema.maximum, schema.exclusiveMaximum);\n if (isNumber(maximum) && val > maximum) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: t(\"Value is above the maximum of {0}.\", maximum)\n });\n }\n function _validateStringNode(node) {\n if (isNumber(schema.minLength) && stringLength(node.value) < schema.minLength) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: t(\"String is shorter than the minimum length of {0}.\", schema.minLength)\n });\n if (isNumber(schema.maxLength) && stringLength(node.value) > schema.maxLength) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: t(\"String is longer than the maximum length of {0}.\", schema.maxLength)\n });\n if (isString(schema.pattern)) {\n if (!extendedRegExp(schema.pattern)?.test(node.value)) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: schema.patternErrorMessage || schema.errorMessage || t(\"String does not match the pattern of \\\"{0}\\\".\", schema.pattern)\n });\n }\n if (schema.format) switch (schema.format) {\n case \"uri\":\n case \"uri-reference\":\n {\n let errorMessage;\n if (!node.value) errorMessage = t(\"URI expected.\");\n else {\n const match = /^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/.exec(node.value);\n if (!match) errorMessage = t(\"URI is expected.\");\n else if (!match[2] && schema.format === \"uri\") errorMessage = t(\"URI with a scheme is expected.\");\n }\n if (errorMessage) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: schema.patternErrorMessage || schema.errorMessage || t(\"String is not a URI: {0}\", errorMessage)\n });\n }\n break;\n case \"color-hex\":\n case \"date-time\":\n case \"date\":\n case \"time\":\n case \"email\":\n case \"hostname\":\n case \"ipv4\":\n case \"ipv6\":\n const format = formats[schema.format];\n if (!node.value || !format.pattern.exec(node.value)) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: schema.patternErrorMessage || schema.errorMessage || format.errorMessage\n });\n }\n }\n function _validateArrayNode(node) {\n let prefixItemsSchemas;\n let additionalItemSchema;\n if (context.schemaDraft >= SchemaDraft.v2020_12) {\n prefixItemsSchemas = schema.prefixItems;\n additionalItemSchema = !Array.isArray(schema.items) ? schema.items : void 0;\n } else {\n prefixItemsSchemas = Array.isArray(schema.items) ? schema.items : void 0;\n additionalItemSchema = !Array.isArray(schema.items) ? schema.items : schema.additionalItems;\n }\n let index = 0;\n if (prefixItemsSchemas !== void 0) {\n const max = Math.min(prefixItemsSchemas.length, node.items.length);\n for (; index < max; index++) {\n const subSchemaRef = prefixItemsSchemas[index];\n const subSchema = asSchema(subSchemaRef);\n const itemValidationResult = new ValidationResult();\n const item = node.items[index];\n if (item) {\n validate(item, subSchema, itemValidationResult, matchingSchemas, context);\n validationResult.mergePropertyMatch(itemValidationResult);\n }\n validationResult.processedProperties.add(String(index));\n }\n }\n if (additionalItemSchema !== void 0 && index < node.items.length) if (typeof additionalItemSchema === \"boolean\") {\n if (additionalItemSchema === false) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: t(\"Array has too many items according to schema. Expected {0} or fewer.\", index)\n });\n for (; index < node.items.length; index++) {\n validationResult.processedProperties.add(String(index));\n validationResult.propertiesValueMatches++;\n }\n } else for (; index < node.items.length; index++) {\n const itemValidationResult = new ValidationResult();\n validate(node.items[index], additionalItemSchema, itemValidationResult, matchingSchemas, context);\n validationResult.mergePropertyMatch(itemValidationResult);\n validationResult.processedProperties.add(String(index));\n }\n const containsSchema = asSchema(schema.contains);\n if (containsSchema) {\n let containsCount = 0;\n for (let index = 0; index < node.items.length; index++) {\n const item = node.items[index];\n const itemValidationResult = new ValidationResult();\n validate(item, containsSchema, itemValidationResult, NoOpSchemaCollector.instance, context);\n if (!itemValidationResult.hasProblems()) {\n containsCount++;\n if (context.schemaDraft >= SchemaDraft.v2020_12) validationResult.processedProperties.add(String(index));\n }\n }\n if (containsCount === 0 && !isNumber(schema.minContains)) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: schema.errorMessage || t(\"Array does not contain required item.\")\n });\n if (isNumber(schema.minContains) && containsCount < schema.minContains) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: schema.errorMessage || t(\"Array has too few items that match the contains contraint. Expected {0} or more.\", schema.minContains)\n });\n if (isNumber(schema.maxContains) && containsCount > schema.maxContains) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: schema.errorMessage || t(\"Array has too many items that match the contains contraint. Expected {0} or less.\", schema.maxContains)\n });\n }\n const unevaluatedItems = schema.unevaluatedItems;\n if (unevaluatedItems !== void 0) for (let i = 0; i < node.items.length; i++) {\n if (!validationResult.processedProperties.has(String(i))) if (unevaluatedItems === false) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: t(\"Item does not match any validation rule from the array.\")\n });\n else {\n const itemValidationResult = new ValidationResult();\n validate(node.items[i], schema.unevaluatedItems, itemValidationResult, matchingSchemas, context);\n validationResult.mergePropertyMatch(itemValidationResult);\n }\n validationResult.processedProperties.add(String(i));\n validationResult.propertiesValueMatches++;\n }\n if (isNumber(schema.minItems) && node.items.length < schema.minItems) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: t(\"Array has too few items. Expected {0} or more.\", schema.minItems)\n });\n if (isNumber(schema.maxItems) && node.items.length > schema.maxItems) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: t(\"Array has too many items. Expected {0} or fewer.\", schema.maxItems)\n });\n if (schema.uniqueItems === true) {\n const values = getNodeValue(node);\n function hasDuplicates() {\n for (let i = 0; i < values.length - 1; i++) {\n const value = values[i];\n for (let j = i + 1; j < values.length; j++) if (equals(value, values[j])) return true;\n }\n return false;\n }\n if (hasDuplicates()) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: t(\"Array has duplicate items.\")\n });\n }\n }\n function _validateObjectNode(node) {\n const seenKeys = Object.create(null);\n const unprocessedProperties = /* @__PURE__ */ new Set();\n for (const propertyNode of node.properties) {\n const key = propertyNode.keyNode.value;\n seenKeys[key] = propertyNode.valueNode;\n unprocessedProperties.add(key);\n }\n if (Array.isArray(schema.required)) {\n for (const propertyName of schema.required) if (!seenKeys[propertyName]) {\n const keyNode = node.parent && node.parent.type === \"property\" && node.parent.keyNode;\n const location = keyNode ? {\n offset: keyNode.offset,\n length: keyNode.length\n } : {\n offset: node.offset,\n length: 1\n };\n validationResult.problems.push({\n location,\n message: t(\"Missing property \\\"{0}\\\".\", propertyName)\n });\n }\n }\n const propertyProcessed = (prop) => {\n unprocessedProperties.delete(prop);\n validationResult.processedProperties.add(prop);\n };\n if (schema.properties) for (const propertyName of Object.keys(schema.properties)) {\n propertyProcessed(propertyName);\n const propertySchema = schema.properties[propertyName];\n const child = seenKeys[propertyName];\n if (child) if (isBoolean(propertySchema)) if (!propertySchema) {\n const propertyNode = child.parent;\n validationResult.problems.push({\n location: {\n offset: propertyNode.keyNode.offset,\n length: propertyNode.keyNode.length\n },\n message: schema.errorMessage || t(\"Property {0} is not allowed.\", propertyName)\n });\n } else {\n validationResult.propertiesMatches++;\n validationResult.propertiesValueMatches++;\n }\n else {\n const propertyValidationResult = new ValidationResult();\n validate(child, propertySchema, propertyValidationResult, matchingSchemas, context);\n validationResult.mergePropertyMatch(propertyValidationResult);\n }\n }\n if (schema.patternProperties) for (const propertyPattern of Object.keys(schema.patternProperties)) {\n const regex = extendedRegExp(propertyPattern);\n if (regex) {\n const processed = [];\n for (const propertyName of unprocessedProperties) if (regex.test(propertyName)) {\n processed.push(propertyName);\n const child = seenKeys[propertyName];\n if (child) {\n const propertySchema = schema.patternProperties[propertyPattern];\n if (isBoolean(propertySchema)) if (!propertySchema) {\n const propertyNode = child.parent;\n validationResult.problems.push({\n location: {\n offset: propertyNode.keyNode.offset,\n length: propertyNode.keyNode.length\n },\n message: schema.errorMessage || t(\"Property {0} is not allowed.\", propertyName)\n });\n } else {\n validationResult.propertiesMatches++;\n validationResult.propertiesValueMatches++;\n }\n else {\n const propertyValidationResult = new ValidationResult();\n validate(child, propertySchema, propertyValidationResult, matchingSchemas, context);\n validationResult.mergePropertyMatch(propertyValidationResult);\n }\n }\n }\n processed.forEach(propertyProcessed);\n }\n }\n const additionalProperties = schema.additionalProperties;\n if (additionalProperties !== void 0) for (const propertyName of unprocessedProperties) {\n propertyProcessed(propertyName);\n const child = seenKeys[propertyName];\n if (child) {\n if (additionalProperties === false) {\n const propertyNode = child.parent;\n validationResult.problems.push({\n location: {\n offset: propertyNode.keyNode.offset,\n length: propertyNode.keyNode.length\n },\n message: schema.errorMessage || t(\"Property {0} is not allowed.\", propertyName)\n });\n } else if (additionalProperties !== true) {\n const propertyValidationResult = new ValidationResult();\n validate(child, additionalProperties, propertyValidationResult, matchingSchemas, context);\n validationResult.mergePropertyMatch(propertyValidationResult);\n }\n }\n }\n const unevaluatedProperties = schema.unevaluatedProperties;\n if (unevaluatedProperties !== void 0) {\n const processed = [];\n for (const propertyName of unprocessedProperties) if (!validationResult.processedProperties.has(propertyName)) {\n processed.push(propertyName);\n const child = seenKeys[propertyName];\n if (child) {\n if (unevaluatedProperties === false) {\n const propertyNode = child.parent;\n validationResult.problems.push({\n location: {\n offset: propertyNode.keyNode.offset,\n length: propertyNode.keyNode.length\n },\n message: schema.errorMessage || t(\"Property {0} is not allowed.\", propertyName)\n });\n } else if (unevaluatedProperties !== true) {\n const propertyValidationResult = new ValidationResult();\n validate(child, unevaluatedProperties, propertyValidationResult, matchingSchemas, context);\n validationResult.mergePropertyMatch(propertyValidationResult);\n }\n }\n }\n processed.forEach(propertyProcessed);\n }\n if (isNumber(schema.maxProperties)) {\n if (node.properties.length > schema.maxProperties) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: t(\"Object has more properties than limit of {0}.\", schema.maxProperties)\n });\n }\n if (isNumber(schema.minProperties)) {\n if (node.properties.length < schema.minProperties) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: t(\"Object has fewer properties than the required number of {0}\", schema.minProperties)\n });\n }\n if (schema.dependentRequired) for (const key in schema.dependentRequired) {\n const prop = seenKeys[key];\n const propertyDeps = schema.dependentRequired[key];\n if (prop && Array.isArray(propertyDeps)) _validatePropertyDependencies(key, propertyDeps);\n }\n if (schema.dependentSchemas) for (const key in schema.dependentSchemas) {\n const prop = seenKeys[key];\n const propertyDeps = schema.dependentSchemas[key];\n if (prop && isObject(propertyDeps)) _validatePropertyDependencies(key, propertyDeps);\n }\n if (schema.dependencies) {\n for (const key in schema.dependencies) if (seenKeys[key]) _validatePropertyDependencies(key, schema.dependencies[key]);\n }\n const propertyNames = asSchema(schema.propertyNames);\n if (propertyNames) for (const f of node.properties) {\n const key = f.keyNode;\n if (key) validate(key, propertyNames, validationResult, NoOpSchemaCollector.instance, context);\n }\n function _validatePropertyDependencies(key, propertyDep) {\n if (Array.isArray(propertyDep)) for (const requiredProp of propertyDep) if (!seenKeys[requiredProp]) validationResult.problems.push({\n location: {\n offset: node.offset,\n length: node.length\n },\n message: t(\"Object is missing property {0} required by property {1}.\", requiredProp, key)\n });\n else validationResult.propertiesValueMatches++;\n else {\n const propertySchema = asSchema(propertyDep);\n if (propertySchema) {\n const propertyValidationResult = new ValidationResult();\n validate(node, propertySchema, propertyValidationResult, matchingSchemas, context);\n validationResult.mergePropertyMatch(propertyValidationResult);\n }\n }\n }\n }\n }\n function parse(textDocument, config) {\n const problems = [];\n let lastProblemOffset = -1;\n const text = textDocument.getText();\n const scanner = createScanner(text, false);\n const commentRanges = config && config.collectComments ? [] : void 0;\n function _scanNext() {\n while (true) {\n const token = scanner.scan();\n _checkScanError();\n switch (token) {\n case 12:\n case 13:\n if (Array.isArray(commentRanges)) commentRanges.push(Range.create(textDocument.positionAt(scanner.getTokenOffset()), textDocument.positionAt(scanner.getTokenOffset() + scanner.getTokenLength())));\n break;\n case 15:\n case 14: break;\n default: return token;\n }\n }\n }\n function _errorAtRange(message, code, startOffset, endOffset, severity = DiagnosticSeverity.Error) {\n if (problems.length === 0 || startOffset !== lastProblemOffset) {\n const range = Range.create(textDocument.positionAt(startOffset), textDocument.positionAt(endOffset));\n problems.push(Diagnostic.create(range, message, severity, code, textDocument.languageId));\n lastProblemOffset = startOffset;\n }\n }\n function _error(message, code, node = void 0, skipUntilAfter = [], skipUntil = []) {\n let start = scanner.getTokenOffset();\n let end = scanner.getTokenOffset() + scanner.getTokenLength();\n if (start === end && start > 0) {\n start--;\n while (start > 0 && /\\s/.test(text.charAt(start))) start--;\n end = start + 1;\n }\n _errorAtRange(message, code, start, end);\n if (node) _finalize(node, false);\n if (skipUntilAfter.length + skipUntil.length > 0) {\n let token = scanner.getToken();\n while (token !== 17) {\n if (skipUntilAfter.indexOf(token) !== -1) {\n _scanNext();\n break;\n } else if (skipUntil.indexOf(token) !== -1) break;\n token = _scanNext();\n }\n }\n return node;\n }\n function _checkScanError() {\n switch (scanner.getTokenError()) {\n case 4:\n _error(t(\"Invalid unicode sequence in string.\"), ErrorCode.InvalidUnicode);\n return true;\n case 5:\n _error(t(\"Invalid escape character in string.\"), ErrorCode.InvalidEscapeCharacter);\n return true;\n case 3:\n _error(t(\"Unexpected end of number.\"), ErrorCode.UnexpectedEndOfNumber);\n return true;\n case 1:\n _error(t(\"Unexpected end of comment.\"), ErrorCode.UnexpectedEndOfComment);\n return true;\n case 2:\n _error(t(\"Unexpected end of string.\"), ErrorCode.UnexpectedEndOfString);\n return true;\n case 6:\n _error(t(\"Invalid characters in string. Control characters must be escaped.\"), ErrorCode.InvalidCharacter);\n return true;\n }\n return false;\n }\n function _finalize(node, scanNext) {\n node.length = scanner.getTokenOffset() + scanner.getTokenLength() - node.offset;\n if (scanNext) _scanNext();\n return node;\n }\n function _parseArray(parent) {\n if (scanner.getToken() !== 3) return;\n const node = new ArrayASTNodeImpl(parent, scanner.getTokenOffset());\n _scanNext();\n let needsComma = false;\n while (scanner.getToken() !== 4 && scanner.getToken() !== 17) {\n if (scanner.getToken() === 5) {\n if (!needsComma) _error(t(\"Value expected\"), ErrorCode.ValueExpected);\n const commaOffset = scanner.getTokenOffset();\n _scanNext();\n if (scanner.getToken() === 4) {\n if (needsComma) _errorAtRange(t(\"Trailing comma\"), ErrorCode.TrailingComma, commaOffset, commaOffset + 1);\n continue;\n }\n } else if (needsComma) _error(t(\"Expected comma\"), ErrorCode.CommaExpected);\n const item = _parseValue(node);\n if (!item) _error(t(\"Value expected\"), ErrorCode.ValueExpected, void 0, [], [4, 5]);\n else node.items.push(item);\n needsComma = true;\n }\n if (scanner.getToken() !== 4) return _error(t(\"Expected comma or closing bracket\"), ErrorCode.CommaOrCloseBacketExpected, node);\n return _finalize(node, true);\n }\n const keyPlaceholder = new StringASTNodeImpl(void 0, 0, 0);\n function _parseProperty(parent, keysSeen) {\n const node = new PropertyASTNodeImpl(parent, scanner.getTokenOffset(), keyPlaceholder);\n let key = _parseString(node);\n if (!key) if (scanner.getToken() === 16) {\n _error(t(\"Property keys must be doublequoted\"), ErrorCode.PropertyKeysMustBeDoublequoted);\n const keyNode = new StringASTNodeImpl(node, scanner.getTokenOffset(), scanner.getTokenLength());\n keyNode.value = scanner.getTokenValue();\n key = keyNode;\n _scanNext();\n } else return;\n node.keyNode = key;\n if (key.value !== \"//\") {\n const seen = keysSeen[key.value];\n if (seen) {\n _errorAtRange(t(\"Duplicate object key\"), ErrorCode.DuplicateKey, node.keyNode.offset, node.keyNode.offset + node.keyNode.length, DiagnosticSeverity.Warning);\n if (isObject(seen)) _errorAtRange(t(\"Duplicate object key\"), ErrorCode.DuplicateKey, seen.keyNode.offset, seen.keyNode.offset + seen.keyNode.length, DiagnosticSeverity.Warning);\n keysSeen[key.value] = true;\n } else keysSeen[key.value] = node;\n }\n if (scanner.getToken() === 6) {\n node.colonOffset = scanner.getTokenOffset();\n _scanNext();\n } else {\n _error(t(\"Colon expected\"), ErrorCode.ColonExpected);\n if (scanner.getToken() === 10 && textDocument.positionAt(key.offset + key.length).line < textDocument.positionAt(scanner.getTokenOffset()).line) {\n node.length = key.length;\n return node;\n }\n }\n const value = _parseValue(node);\n if (!value) return _error(t(\"Value expected\"), ErrorCode.ValueExpected, node, [], [2, 5]);\n node.valueNode = value;\n node.length = value.offset + value.length - node.offset;\n return node;\n }\n function _parseObject(parent) {\n if (scanner.getToken() !== 1) return;\n const node = new ObjectASTNodeImpl(parent, scanner.getTokenOffset());\n const keysSeen = Object.create(null);\n _scanNext();\n let needsComma = false;\n while (scanner.getToken() !== 2 && scanner.getToken() !== 17) {\n if (scanner.getToken() === 5) {\n if (!needsComma) _error(t(\"Property expected\"), ErrorCode.PropertyExpected);\n const commaOffset = scanner.getTokenOffset();\n _scanNext();\n if (scanner.getToken() === 2) {\n if (needsComma) _errorAtRange(t(\"Trailing comma\"), ErrorCode.TrailingComma, commaOffset, commaOffset + 1);\n continue;\n }\n } else if (needsComma) _error(t(\"Expected comma\"), ErrorCode.CommaExpected);\n const property = _parseProperty(node, keysSeen);\n if (!property) _error(t(\"Property expected\"), ErrorCode.PropertyExpected, void 0, [], [2, 5]);\n else node.properties.push(property);\n needsComma = true;\n }\n if (scanner.getToken() !== 2) return _error(t(\"Expected comma or closing brace\"), ErrorCode.CommaOrCloseBraceExpected, node);\n return _finalize(node, true);\n }\n function _parseString(parent) {\n if (scanner.getToken() !== 10) return;\n const node = new StringASTNodeImpl(parent, scanner.getTokenOffset());\n node.value = scanner.getTokenValue();\n return _finalize(node, true);\n }\n function _parseNumber(parent) {\n if (scanner.getToken() !== 11) return;\n const node = new NumberASTNodeImpl(parent, scanner.getTokenOffset());\n if (scanner.getTokenError() === 0) {\n const tokenValue = scanner.getTokenValue();\n try {\n const numberValue = JSON.parse(tokenValue);\n if (!isNumber(numberValue)) return _error(t(\"Invalid number format.\"), ErrorCode.Undefined, node);\n node.value = numberValue;\n } catch (e) {\n return _error(t(\"Invalid number format.\"), ErrorCode.Undefined, node);\n }\n node.isInteger = tokenValue.indexOf(\".\") === -1;\n }\n return _finalize(node, true);\n }\n function _parseLiteral(parent) {\n switch (scanner.getToken()) {\n case 7: return _finalize(new NullASTNodeImpl(parent, scanner.getTokenOffset()), true);\n case 8: return _finalize(new BooleanASTNodeImpl(parent, true, scanner.getTokenOffset()), true);\n case 9: return _finalize(new BooleanASTNodeImpl(parent, false, scanner.getTokenOffset()), true);\n default: return;\n }\n }\n function _parseValue(parent) {\n return _parseArray(parent) || _parseObject(parent) || _parseString(parent) || _parseNumber(parent) || _parseLiteral(parent);\n }\n let _root = void 0;\n if (_scanNext() !== 17) {\n _root = _parseValue(_root);\n if (!_root) _error(t(\"Expected a JSON object, array or literal.\"), ErrorCode.Undefined);\n else if (scanner.getToken() !== 17) _error(t(\"End of file expected.\"), ErrorCode.Undefined);\n }\n return new JSONDocument(_root, problems, commentRanges);\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/utils/json.js\n function stringifyObject(obj, indent, stringifyLiteral) {\n if (obj !== null && typeof obj === \"object\") {\n const newIndent = indent + \" \";\n if (Array.isArray(obj)) {\n if (obj.length === 0) return \"[]\";\n let result = \"[\\n\";\n for (let i = 0; i < obj.length; i++) {\n result += newIndent + stringifyObject(obj[i], newIndent, stringifyLiteral);\n if (i < obj.length - 1) result += \",\";\n result += \"\\n\";\n }\n result += indent + \"]\";\n return result;\n } else {\n const keys = Object.keys(obj);\n if (keys.length === 0) return \"{}\";\n let result = \"{\\n\";\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n result += newIndent + JSON.stringify(key) + \": \" + stringifyObject(obj[key], newIndent, stringifyLiteral);\n if (i < keys.length - 1) result += \",\";\n result += \"\\n\";\n }\n result += indent + \"}\";\n return result;\n }\n }\n return stringifyLiteral(obj);\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/services/jsonCompletion.js\n var JSONCompletion = class {\n constructor(schemaService, contributions = [], promiseConstructor = Promise, clientCapabilities = {}) {\n this.schemaService = schemaService;\n this.contributions = contributions;\n this.promiseConstructor = promiseConstructor;\n this.clientCapabilities = clientCapabilities;\n }\n doResolve(item) {\n for (let i = this.contributions.length - 1; i >= 0; i--) {\n const resolveCompletion = this.contributions[i].resolveCompletion;\n if (resolveCompletion) {\n const resolver = resolveCompletion(item);\n if (resolver) return resolver;\n }\n }\n return this.promiseConstructor.resolve(item);\n }\n doComplete(document, position, doc) {\n const result = {\n items: [],\n isIncomplete: false\n };\n const text = document.getText();\n const offset = document.offsetAt(position);\n let node = doc.getNodeFromOffset(offset, true);\n if (this.isInComment(document, node ? node.offset : 0, offset)) return Promise.resolve(result);\n if (node && offset === node.offset + node.length && offset > 0) {\n const ch = text[offset - 1];\n if (node.type === \"object\" && ch === \"}\" || node.type === \"array\" && ch === \"]\") node = node.parent;\n }\n const currentWord = this.getCurrentWord(document, offset);\n let overwriteRange;\n if (node && (node.type === \"string\" || node.type === \"number\" || node.type === \"boolean\" || node.type === \"null\")) overwriteRange = Range.create(document.positionAt(node.offset), document.positionAt(node.offset + node.length));\n else {\n let overwriteStart = offset - currentWord.length;\n if (overwriteStart > 0 && text[overwriteStart - 1] === \"\\\"\") overwriteStart--;\n overwriteRange = Range.create(document.positionAt(overwriteStart), position);\n }\n const proposed = /* @__PURE__ */ new Map();\n const collector = {\n add: (suggestion) => {\n let label = suggestion.label;\n const existing = proposed.get(label);\n if (!existing) {\n label = label.replace(/[\\n]/g, \"↵\");\n if (label.length > 60) {\n const shortendedLabel = label.substr(0, 57).trim() + \"...\";\n if (!proposed.has(shortendedLabel)) label = shortendedLabel;\n }\n suggestion.textEdit = TextEdit.replace(overwriteRange, suggestion.insertText);\n suggestion.label = label;\n proposed.set(label, suggestion);\n result.items.push(suggestion);\n } else {\n if (!existing.documentation) existing.documentation = suggestion.documentation;\n if (!existing.detail) existing.detail = suggestion.detail;\n if (!existing.labelDetails) existing.labelDetails = suggestion.labelDetails;\n }\n },\n setAsIncomplete: () => {\n result.isIncomplete = true;\n },\n error: (message) => {\n console.error(message);\n },\n getNumberOfProposals: () => {\n return result.items.length;\n }\n };\n return this.schemaService.getSchemaForResource(document.uri, doc).then((schema) => {\n const collectionPromises = [];\n let addValue = true;\n let currentKey = \"\";\n let currentProperty = void 0;\n if (node) {\n if (node.type === \"string\") {\n const parent = node.parent;\n if (parent && parent.type === \"property\" && parent.keyNode === node) {\n addValue = !parent.valueNode;\n currentProperty = parent;\n currentKey = text.substr(node.offset + 1, node.length - 2);\n if (parent) node = parent.parent;\n }\n }\n }\n if (node && node.type === \"object\") {\n if (node.offset === offset) return result;\n node.properties.forEach((p) => {\n if (!currentProperty || currentProperty !== p) proposed.set(p.keyNode.value, CompletionItem.create(\"__\"));\n });\n let separatorAfter = \"\";\n if (addValue) separatorAfter = this.evaluateSeparatorAfter(document, document.offsetAt(overwriteRange.end));\n if (schema) this.getPropertyCompletions(schema, doc, node, addValue, separatorAfter, collector);\n else this.getSchemaLessPropertyCompletions(doc, node, currentKey, collector);\n const location = getNodePath(node);\n this.contributions.forEach((contribution) => {\n const collectPromise = contribution.collectPropertyCompletions(document.uri, location, currentWord, addValue, separatorAfter === \"\", collector);\n if (collectPromise) collectionPromises.push(collectPromise);\n });\n if (!schema && currentWord.length > 0 && text.charAt(offset - currentWord.length - 1) !== \"\\\"\") {\n collector.add({\n kind: CompletionItemKind.Property,\n label: this.getLabelForValue(currentWord),\n insertText: this.getInsertTextForProperty(currentWord, void 0, false, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n documentation: \"\"\n });\n collector.setAsIncomplete();\n }\n }\n const types = {};\n if (schema) this.getValueCompletions(schema, doc, node, offset, document, collector, types);\n else this.getSchemaLessValueCompletions(doc, node, offset, document, collector);\n if (this.contributions.length > 0) this.getContributedValueCompletions(doc, node, offset, document, collector, collectionPromises);\n return this.promiseConstructor.all(collectionPromises).then(() => {\n if (collector.getNumberOfProposals() === 0) {\n let offsetForSeparator = offset;\n if (node && (node.type === \"string\" || node.type === \"number\" || node.type === \"boolean\" || node.type === \"null\")) offsetForSeparator = node.offset + node.length;\n const separatorAfter = this.evaluateSeparatorAfter(document, offsetForSeparator);\n this.addFillerValueCompletions(types, separatorAfter, collector);\n }\n return result;\n });\n });\n }\n getPropertyCompletions(schema, doc, node, addValue, separatorAfter, collector) {\n doc.getMatchingSchemas(schema.schema, node.offset).forEach((s) => {\n if (s.node === node && !s.inverted) {\n const schemaProperties = s.schema.properties;\n if (schemaProperties) Object.keys(schemaProperties).forEach((key) => {\n const propertySchema = schemaProperties[key];\n if (typeof propertySchema === \"object\" && !propertySchema.deprecationMessage && !propertySchema.doNotSuggest) {\n const proposal = {\n kind: CompletionItemKind.Property,\n label: key,\n insertText: this.getInsertTextForProperty(key, propertySchema, addValue, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n filterText: this.getFilterTextForValue(key),\n documentation: this.fromMarkup(propertySchema.markdownDescription) || propertySchema.description || \"\"\n };\n if (propertySchema.suggestSortText !== void 0) proposal.sortText = propertySchema.suggestSortText;\n if (proposal.insertText && endsWith(proposal.insertText, `$1${separatorAfter}`)) proposal.command = {\n title: \"Suggest\",\n command: \"editor.action.triggerSuggest\"\n };\n collector.add(proposal);\n }\n });\n const schemaPropertyNames = s.schema.propertyNames;\n if (typeof schemaPropertyNames === \"object\" && !schemaPropertyNames.deprecationMessage && !schemaPropertyNames.doNotSuggest) {\n const propertyNameCompletionItem = (name, enumDescription = void 0) => {\n const proposal = {\n kind: CompletionItemKind.Property,\n label: name,\n insertText: this.getInsertTextForProperty(name, void 0, addValue, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n filterText: this.getFilterTextForValue(name),\n documentation: enumDescription || this.fromMarkup(schemaPropertyNames.markdownDescription) || schemaPropertyNames.description || \"\"\n };\n if (schemaPropertyNames.suggestSortText !== void 0) proposal.sortText = schemaPropertyNames.suggestSortText;\n if (proposal.insertText && endsWith(proposal.insertText, `$1${separatorAfter}`)) proposal.command = {\n title: \"Suggest\",\n command: \"editor.action.triggerSuggest\"\n };\n collector.add(proposal);\n };\n if (schemaPropertyNames.enum) for (let i = 0; i < schemaPropertyNames.enum.length; i++) {\n let enumDescription = void 0;\n if (schemaPropertyNames.markdownEnumDescriptions && i < schemaPropertyNames.markdownEnumDescriptions.length) enumDescription = this.fromMarkup(schemaPropertyNames.markdownEnumDescriptions[i]);\n else if (schemaPropertyNames.enumDescriptions && i < schemaPropertyNames.enumDescriptions.length) enumDescription = schemaPropertyNames.enumDescriptions[i];\n propertyNameCompletionItem(schemaPropertyNames.enum[i], enumDescription);\n }\n if (schemaPropertyNames.const) propertyNameCompletionItem(schemaPropertyNames.const);\n }\n }\n });\n }\n getSchemaLessPropertyCompletions(doc, node, currentKey, collector) {\n const collectCompletionsForSimilarObject = (obj) => {\n obj.properties.forEach((p) => {\n const key = p.keyNode.value;\n collector.add({\n kind: CompletionItemKind.Property,\n label: key,\n insertText: this.getInsertTextForValue(key, \"\"),\n insertTextFormat: InsertTextFormat.Snippet,\n filterText: this.getFilterTextForValue(key),\n documentation: \"\"\n });\n });\n };\n if (node.parent) {\n if (node.parent.type === \"property\") {\n const parentKey = node.parent.keyNode.value;\n doc.visit((n) => {\n if (n.type === \"property\" && n !== node.parent && n.keyNode.value === parentKey && n.valueNode && n.valueNode.type === \"object\") collectCompletionsForSimilarObject(n.valueNode);\n return true;\n });\n } else if (node.parent.type === \"array\") node.parent.items.forEach((n) => {\n if (n.type === \"object\" && n !== node) collectCompletionsForSimilarObject(n);\n });\n } else if (node.type === \"object\") collector.add({\n kind: CompletionItemKind.Property,\n label: \"$schema\",\n insertText: this.getInsertTextForProperty(\"$schema\", void 0, true, \"\"),\n insertTextFormat: InsertTextFormat.Snippet,\n documentation: \"\",\n filterText: this.getFilterTextForValue(\"$schema\")\n });\n }\n getSchemaLessValueCompletions(doc, node, offset, document, collector) {\n let offsetForSeparator = offset;\n if (node && (node.type === \"string\" || node.type === \"number\" || node.type === \"boolean\" || node.type === \"null\")) {\n offsetForSeparator = node.offset + node.length;\n node = node.parent;\n }\n if (!node) {\n collector.add({\n kind: this.getSuggestionKind(\"object\"),\n label: \"Empty object\",\n insertText: this.getInsertTextForValue({}, \"\"),\n insertTextFormat: InsertTextFormat.Snippet,\n documentation: \"\"\n });\n collector.add({\n kind: this.getSuggestionKind(\"array\"),\n label: \"Empty array\",\n insertText: this.getInsertTextForValue([], \"\"),\n insertTextFormat: InsertTextFormat.Snippet,\n documentation: \"\"\n });\n return;\n }\n const separatorAfter = this.evaluateSeparatorAfter(document, offsetForSeparator);\n const collectSuggestionsForValues = (value) => {\n if (value.parent && !contains(value.parent, offset, true)) collector.add({\n kind: this.getSuggestionKind(value.type),\n label: this.getLabelTextForMatchingNode(value, document),\n insertText: this.getInsertTextForMatchingNode(value, document, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n documentation: \"\"\n });\n if (value.type === \"boolean\") this.addBooleanValueCompletion(!value.value, separatorAfter, collector);\n };\n if (node.type === \"property\") {\n if (offset > (node.colonOffset || 0)) {\n const valueNode = node.valueNode;\n if (valueNode && (offset > valueNode.offset + valueNode.length || valueNode.type === \"object\" || valueNode.type === \"array\")) return;\n const parentKey = node.keyNode.value;\n doc.visit((n) => {\n if (n.type === \"property\" && n.keyNode.value === parentKey && n.valueNode) collectSuggestionsForValues(n.valueNode);\n return true;\n });\n if (parentKey === \"$schema\" && node.parent && !node.parent.parent) this.addDollarSchemaCompletions(separatorAfter, collector);\n }\n }\n if (node.type === \"array\") if (node.parent && node.parent.type === \"property\") {\n const parentKey = node.parent.keyNode.value;\n doc.visit((n) => {\n if (n.type === \"property\" && n.keyNode.value === parentKey && n.valueNode && n.valueNode.type === \"array\") n.valueNode.items.forEach(collectSuggestionsForValues);\n return true;\n });\n } else node.items.forEach(collectSuggestionsForValues);\n }\n getValueCompletions(schema, doc, node, offset, document, collector, types) {\n let offsetForSeparator = offset;\n let parentKey = void 0;\n let valueNode = void 0;\n if (node && (node.type === \"string\" || node.type === \"number\" || node.type === \"boolean\" || node.type === \"null\")) {\n offsetForSeparator = node.offset + node.length;\n valueNode = node;\n node = node.parent;\n }\n if (!node) {\n this.addSchemaValueCompletions(schema.schema, \"\", collector, types);\n return;\n }\n if (node.type === \"property\" && offset > (node.colonOffset || 0)) {\n const valueNode = node.valueNode;\n if (valueNode && offset > valueNode.offset + valueNode.length) return;\n parentKey = node.keyNode.value;\n node = node.parent;\n }\n if (node && (parentKey !== void 0 || node.type === \"array\")) {\n const separatorAfter = this.evaluateSeparatorAfter(document, offsetForSeparator);\n const matchingSchemas = doc.getMatchingSchemas(schema.schema, node.offset, valueNode);\n for (const s of matchingSchemas) if (s.node === node && !s.inverted && s.schema) {\n if (node.type === \"array\" && s.schema.items) {\n let c = collector;\n if (s.schema.uniqueItems) {\n const existingValues = /* @__PURE__ */ new Set();\n node.children.forEach((n) => {\n if (n.type !== \"array\" && n.type !== \"object\") existingValues.add(this.getLabelForValue(getNodeValue(n)));\n });\n c = {\n ...collector,\n add(suggestion) {\n if (!existingValues.has(suggestion.label)) collector.add(suggestion);\n }\n };\n }\n if (Array.isArray(s.schema.items)) {\n const index = this.findItemAtOffset(node, document, offset);\n if (index < s.schema.items.length) this.addSchemaValueCompletions(s.schema.items[index], separatorAfter, c, types);\n } else this.addSchemaValueCompletions(s.schema.items, separatorAfter, c, types);\n }\n if (parentKey !== void 0) {\n let propertyMatched = false;\n if (s.schema.properties) {\n const propertySchema = s.schema.properties[parentKey];\n if (propertySchema) {\n propertyMatched = true;\n this.addSchemaValueCompletions(propertySchema, separatorAfter, collector, types);\n }\n }\n if (s.schema.patternProperties && !propertyMatched) {\n for (const pattern of Object.keys(s.schema.patternProperties)) if (extendedRegExp(pattern)?.test(parentKey)) {\n propertyMatched = true;\n const propertySchema = s.schema.patternProperties[pattern];\n this.addSchemaValueCompletions(propertySchema, separatorAfter, collector, types);\n }\n }\n if (s.schema.additionalProperties && !propertyMatched) {\n const propertySchema = s.schema.additionalProperties;\n this.addSchemaValueCompletions(propertySchema, separatorAfter, collector, types);\n }\n }\n }\n if (parentKey === \"$schema\" && !node.parent) this.addDollarSchemaCompletions(separatorAfter, collector);\n if (types[\"boolean\"]) {\n this.addBooleanValueCompletion(true, separatorAfter, collector);\n this.addBooleanValueCompletion(false, separatorAfter, collector);\n }\n if (types[\"null\"]) this.addNullValueCompletion(separatorAfter, collector);\n }\n }\n getContributedValueCompletions(doc, node, offset, document, collector, collectionPromises) {\n if (!node) this.contributions.forEach((contribution) => {\n const collectPromise = contribution.collectDefaultCompletions(document.uri, collector);\n if (collectPromise) collectionPromises.push(collectPromise);\n });\n else {\n if (node.type === \"string\" || node.type === \"number\" || node.type === \"boolean\" || node.type === \"null\") node = node.parent;\n if (node && node.type === \"property\" && offset > (node.colonOffset || 0)) {\n const parentKey = node.keyNode.value;\n const valueNode = node.valueNode;\n if ((!valueNode || offset <= valueNode.offset + valueNode.length) && node.parent) {\n const location = getNodePath(node.parent);\n this.contributions.forEach((contribution) => {\n const collectPromise = contribution.collectValueCompletions(document.uri, location, parentKey, collector);\n if (collectPromise) collectionPromises.push(collectPromise);\n });\n }\n }\n }\n }\n addSchemaValueCompletions(schema, separatorAfter, collector, types) {\n if (typeof schema === \"object\") {\n this.addEnumValueCompletions(schema, separatorAfter, collector);\n this.addDefaultValueCompletions(schema, separatorAfter, collector);\n this.collectTypes(schema, types);\n if (Array.isArray(schema.allOf)) schema.allOf.forEach((s) => this.addSchemaValueCompletions(s, separatorAfter, collector, types));\n if (Array.isArray(schema.anyOf)) schema.anyOf.forEach((s) => this.addSchemaValueCompletions(s, separatorAfter, collector, types));\n if (Array.isArray(schema.oneOf)) schema.oneOf.forEach((s) => this.addSchemaValueCompletions(s, separatorAfter, collector, types));\n }\n }\n addDefaultValueCompletions(schema, separatorAfter, collector, arrayDepth = 0) {\n let hasProposals = false;\n if (isDefined(schema.default)) {\n let type = schema.type;\n let value = schema.default;\n for (let i = arrayDepth; i > 0; i--) {\n value = [value];\n type = \"array\";\n }\n const completionItem = {\n kind: this.getSuggestionKind(type),\n label: this.getLabelForValue(value),\n insertText: this.getInsertTextForValue(value, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet\n };\n if (this.doesSupportsLabelDetails()) completionItem.labelDetails = { description: t(\"Default value\") };\n else completionItem.detail = t(\"Default value\");\n collector.add(completionItem);\n hasProposals = true;\n }\n if (Array.isArray(schema.examples)) schema.examples.forEach((example) => {\n let type = schema.type;\n let value = example;\n for (let i = arrayDepth; i > 0; i--) {\n value = [value];\n type = \"array\";\n }\n collector.add({\n kind: this.getSuggestionKind(type),\n label: this.getLabelForValue(value),\n insertText: this.getInsertTextForValue(value, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet\n });\n hasProposals = true;\n });\n if (Array.isArray(schema.defaultSnippets)) schema.defaultSnippets.forEach((s) => {\n let type = schema.type;\n let value = s.body;\n let label = s.label;\n let insertText;\n let filterText;\n if (isDefined(value)) {\n schema.type;\n for (let i = arrayDepth; i > 0; i--) value = [value];\n insertText = this.getInsertTextForSnippetValue(value, separatorAfter);\n filterText = this.getFilterTextForSnippetValue(value);\n label = label || this.getLabelForSnippetValue(value);\n } else if (typeof s.bodyText === \"string\") {\n let prefix = \"\", suffix = \"\", indent = \"\";\n for (let i = arrayDepth; i > 0; i--) {\n prefix = prefix + indent + \"[\\n\";\n suffix = suffix + \"\\n\" + indent + \"]\";\n indent += \" \";\n type = \"array\";\n }\n insertText = prefix + indent + s.bodyText.split(\"\\n\").join(\"\\n\" + indent) + suffix + separatorAfter;\n label = label || insertText, filterText = insertText.replace(/[\\n]/g, \"\");\n } else return;\n collector.add({\n kind: this.getSuggestionKind(type),\n label,\n documentation: this.fromMarkup(s.markdownDescription) || s.description,\n insertText,\n insertTextFormat: InsertTextFormat.Snippet,\n filterText\n });\n hasProposals = true;\n });\n if (!hasProposals && typeof schema.items === \"object\" && !Array.isArray(schema.items) && arrayDepth < 5) this.addDefaultValueCompletions(schema.items, separatorAfter, collector, arrayDepth + 1);\n }\n addEnumValueCompletions(schema, separatorAfter, collector) {\n if (isDefined(schema.const)) collector.add({\n kind: this.getSuggestionKind(schema.type),\n label: this.getLabelForValue(schema.const),\n insertText: this.getInsertTextForValue(schema.const, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n documentation: this.fromMarkup(schema.markdownDescription) || schema.description\n });\n if (Array.isArray(schema.enum)) for (let i = 0, length = schema.enum.length; i < length; i++) {\n const enm = schema.enum[i];\n let documentation = this.fromMarkup(schema.markdownDescription) || schema.description;\n if (schema.markdownEnumDescriptions && i < schema.markdownEnumDescriptions.length && this.doesSupportMarkdown()) documentation = this.fromMarkup(schema.markdownEnumDescriptions[i]);\n else if (schema.enumDescriptions && i < schema.enumDescriptions.length) documentation = schema.enumDescriptions[i];\n collector.add({\n kind: this.getSuggestionKind(schema.type),\n label: this.getLabelForValue(enm),\n insertText: this.getInsertTextForValue(enm, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n documentation\n });\n }\n }\n collectTypes(schema, types) {\n if (Array.isArray(schema.enum) || isDefined(schema.const)) return;\n const type = schema.type;\n if (Array.isArray(type)) type.forEach((t) => types[t] = true);\n else if (type) types[type] = true;\n }\n addFillerValueCompletions(types, separatorAfter, collector) {\n if (types[\"object\"]) collector.add({\n kind: this.getSuggestionKind(\"object\"),\n label: \"{}\",\n insertText: this.getInsertTextForGuessedValue({}, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n detail: t(\"New object\"),\n documentation: \"\"\n });\n if (types[\"array\"]) collector.add({\n kind: this.getSuggestionKind(\"array\"),\n label: \"[]\",\n insertText: this.getInsertTextForGuessedValue([], separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n detail: t(\"New array\"),\n documentation: \"\"\n });\n }\n addBooleanValueCompletion(value, separatorAfter, collector) {\n collector.add({\n kind: this.getSuggestionKind(\"boolean\"),\n label: value ? \"true\" : \"false\",\n insertText: this.getInsertTextForValue(value, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n documentation: \"\"\n });\n }\n addNullValueCompletion(separatorAfter, collector) {\n collector.add({\n kind: this.getSuggestionKind(\"null\"),\n label: \"null\",\n insertText: \"null\" + separatorAfter,\n insertTextFormat: InsertTextFormat.Snippet,\n documentation: \"\"\n });\n }\n addDollarSchemaCompletions(separatorAfter, collector) {\n this.schemaService.getRegisteredSchemaIds((schema) => schema === \"http\" || schema === \"https\").forEach((schemaId) => {\n if (schemaId.startsWith(\"http://json-schema.org/draft-\")) schemaId = schemaId + \"#\";\n collector.add({\n kind: CompletionItemKind.Module,\n label: this.getLabelForValue(schemaId),\n filterText: this.getFilterTextForValue(schemaId),\n insertText: this.getInsertTextForValue(schemaId, separatorAfter),\n insertTextFormat: InsertTextFormat.Snippet,\n documentation: \"\"\n });\n });\n }\n getLabelForValue(value) {\n return JSON.stringify(value);\n }\n getValueFromLabel(value) {\n return JSON.parse(value);\n }\n getFilterTextForValue(value) {\n return JSON.stringify(value);\n }\n getFilterTextForSnippetValue(value) {\n return JSON.stringify(value).replace(/\\$\\{\\d+:([^}]+)\\}|\\$\\d+/g, \"$1\");\n }\n getLabelForSnippetValue(value) {\n return JSON.stringify(value).replace(/\\$\\{\\d+:([^}]+)\\}|\\$\\d+/g, \"$1\");\n }\n getInsertTextForPlainText(text) {\n return text.replace(/[\\\\\\$\\}]/g, \"\\\\$&\");\n }\n getInsertTextForValue(value, separatorAfter) {\n const text = JSON.stringify(value, null, \" \");\n if (text === \"{}\") return \"{$1}\" + separatorAfter;\n else if (text === \"[]\") return \"[$1]\" + separatorAfter;\n return this.getInsertTextForPlainText(text + separatorAfter);\n }\n getInsertTextForSnippetValue(value, separatorAfter) {\n const replacer = (value) => {\n if (typeof value === \"string\") {\n if (value[0] === \"^\") return value.substr(1);\n }\n return JSON.stringify(value);\n };\n return stringifyObject(value, \"\", replacer) + separatorAfter;\n }\n getInsertTextForGuessedValue(value, separatorAfter) {\n switch (typeof value) {\n case \"object\":\n if (value === null) return \"${1:null}\" + separatorAfter;\n return this.getInsertTextForValue(value, separatorAfter);\n case \"string\":\n let snippetValue = JSON.stringify(value);\n snippetValue = snippetValue.substr(1, snippetValue.length - 2);\n snippetValue = this.getInsertTextForPlainText(snippetValue);\n return \"\\\"${1:\" + snippetValue + \"}\\\"\" + separatorAfter;\n case \"number\":\n case \"boolean\": return \"${1:\" + JSON.stringify(value) + \"}\" + separatorAfter;\n }\n return this.getInsertTextForValue(value, separatorAfter);\n }\n getSuggestionKind(type) {\n if (Array.isArray(type)) {\n const array = type;\n type = array.length > 0 ? array[0] : void 0;\n }\n if (!type) return CompletionItemKind.Value;\n switch (type) {\n case \"string\": return CompletionItemKind.Value;\n case \"object\": return CompletionItemKind.Module;\n case \"property\": return CompletionItemKind.Property;\n default: return CompletionItemKind.Value;\n }\n }\n getLabelTextForMatchingNode(node, document) {\n switch (node.type) {\n case \"array\": return \"[]\";\n case \"object\": return \"{}\";\n default: return document.getText().substr(node.offset, node.length);\n }\n }\n getInsertTextForMatchingNode(node, document, separatorAfter) {\n switch (node.type) {\n case \"array\": return this.getInsertTextForValue([], separatorAfter);\n case \"object\": return this.getInsertTextForValue({}, separatorAfter);\n default:\n const content = document.getText().substr(node.offset, node.length) + separatorAfter;\n return this.getInsertTextForPlainText(content);\n }\n }\n getInsertTextForProperty(key, propertySchema, addValue, separatorAfter) {\n const propertyText = this.getInsertTextForValue(key, \"\");\n if (!addValue) return propertyText;\n const resultText = propertyText + \": \";\n let value;\n let nValueProposals = 0;\n if (propertySchema) {\n if (Array.isArray(propertySchema.defaultSnippets)) {\n if (propertySchema.defaultSnippets.length === 1) {\n const body = propertySchema.defaultSnippets[0].body;\n if (isDefined(body)) value = this.getInsertTextForSnippetValue(body, \"\");\n }\n nValueProposals += propertySchema.defaultSnippets.length;\n }\n if (propertySchema.enum) {\n if (!value && propertySchema.enum.length === 1) value = this.getInsertTextForGuessedValue(propertySchema.enum[0], \"\");\n nValueProposals += propertySchema.enum.length;\n }\n if (isDefined(propertySchema.const)) {\n if (!value) value = this.getInsertTextForGuessedValue(propertySchema.const, \"\");\n nValueProposals++;\n }\n if (isDefined(propertySchema.default)) {\n if (!value) value = this.getInsertTextForGuessedValue(propertySchema.default, \"\");\n nValueProposals++;\n }\n if (Array.isArray(propertySchema.examples) && propertySchema.examples.length) {\n if (!value) value = this.getInsertTextForGuessedValue(propertySchema.examples[0], \"\");\n nValueProposals += propertySchema.examples.length;\n }\n if (nValueProposals === 0) {\n let type = Array.isArray(propertySchema.type) ? propertySchema.type[0] : propertySchema.type;\n if (!type) {\n if (propertySchema.properties) type = \"object\";\n else if (propertySchema.items) type = \"array\";\n }\n switch (type) {\n case \"boolean\":\n value = \"$1\";\n break;\n case \"string\":\n value = \"\\\"$1\\\"\";\n break;\n case \"object\":\n value = \"{$1}\";\n break;\n case \"array\":\n value = \"[$1]\";\n break;\n case \"number\":\n case \"integer\":\n value = \"${1:0}\";\n break;\n case \"null\":\n value = \"${1:null}\";\n break;\n default: return propertyText;\n }\n }\n }\n if (!value || nValueProposals > 1) value = \"$1\";\n return resultText + value + separatorAfter;\n }\n getCurrentWord(document, offset) {\n let i = offset - 1;\n const text = document.getText();\n while (i >= 0 && \" \\n\\r\\v\\\":{[,]}\".indexOf(text.charAt(i)) === -1) i--;\n return text.substring(i + 1, offset);\n }\n evaluateSeparatorAfter(document, offset) {\n const scanner = createScanner(document.getText(), true);\n scanner.setPosition(offset);\n switch (scanner.scan()) {\n case 5:\n case 2:\n case 4:\n case 17: return \"\";\n default: return \",\";\n }\n }\n findItemAtOffset(node, document, offset) {\n const scanner = createScanner(document.getText(), true);\n const children = node.items;\n for (let i = children.length - 1; i >= 0; i--) {\n const child = children[i];\n if (offset > child.offset + child.length) {\n scanner.setPosition(child.offset + child.length);\n if (scanner.scan() === 5 && offset >= scanner.getTokenOffset() + scanner.getTokenLength()) return i + 1;\n return i;\n } else if (offset >= child.offset) return i;\n }\n return 0;\n }\n isInComment(document, start, offset) {\n const scanner = createScanner(document.getText(), false);\n scanner.setPosition(start);\n let token = scanner.scan();\n while (token !== 17 && scanner.getTokenOffset() + scanner.getTokenLength() < offset) token = scanner.scan();\n return (token === 12 || token === 13) && scanner.getTokenOffset() <= offset;\n }\n fromMarkup(markupString) {\n if (markupString && this.doesSupportMarkdown()) return {\n kind: MarkupKind.Markdown,\n value: markupString\n };\n }\n doesSupportMarkdown() {\n if (!isDefined(this.supportsMarkdown)) {\n const documentationFormat = this.clientCapabilities.textDocument?.completion?.completionItem?.documentationFormat;\n this.supportsMarkdown = Array.isArray(documentationFormat) && documentationFormat.indexOf(MarkupKind.Markdown) !== -1;\n }\n return this.supportsMarkdown;\n }\n doesSupportsCommitCharacters() {\n if (!isDefined(this.supportsCommitCharacters)) this.labelDetailsSupport = this.clientCapabilities.textDocument?.completion?.completionItem?.commitCharactersSupport;\n return this.supportsCommitCharacters;\n }\n doesSupportsLabelDetails() {\n if (!isDefined(this.labelDetailsSupport)) this.labelDetailsSupport = this.clientCapabilities.textDocument?.completion?.completionItem?.labelDetailsSupport;\n return this.labelDetailsSupport;\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/services/jsonHover.js\n var JSONHover = class {\n constructor(schemaService, contributions = [], promiseConstructor) {\n this.schemaService = schemaService;\n this.contributions = contributions;\n this.promise = promiseConstructor || Promise;\n }\n doHover(document, position, doc) {\n const offset = document.offsetAt(position);\n let node = doc.getNodeFromOffset(offset);\n if (!node || (node.type === \"object\" || node.type === \"array\") && offset > node.offset + 1 && offset < node.offset + node.length - 1) return this.promise.resolve(null);\n const hoverRangeNode = node;\n if (node.type === \"string\") {\n const parent = node.parent;\n if (parent && parent.type === \"property\" && parent.keyNode === node) {\n node = parent.valueNode;\n if (!node) return this.promise.resolve(null);\n }\n }\n const hoverRange = Range.create(document.positionAt(hoverRangeNode.offset), document.positionAt(hoverRangeNode.offset + hoverRangeNode.length));\n const createHover = (contents) => {\n return {\n contents,\n range: hoverRange\n };\n };\n const location = getNodePath(node);\n for (let i = this.contributions.length - 1; i >= 0; i--) {\n const promise = this.contributions[i].getInfoContribution(document.uri, location);\n if (promise) return promise.then((htmlContent) => createHover(htmlContent));\n }\n return this.schemaService.getSchemaForResource(document.uri, doc).then((schema) => {\n if (schema && node) {\n const matchingSchemas = doc.getMatchingSchemas(schema.schema, node.offset);\n let title = void 0;\n let markdownDescription = void 0;\n let markdownEnumValueDescription = void 0, enumValue = void 0;\n matchingSchemas.every((s) => {\n if (s.node === node && !s.inverted && s.schema) {\n title = title || s.schema.title;\n markdownDescription = markdownDescription || s.schema.markdownDescription || toMarkdown(s.schema.description);\n if (s.schema.enum) {\n const idx = s.schema.enum.indexOf(getNodeValue(node));\n if (s.schema.markdownEnumDescriptions) markdownEnumValueDescription = s.schema.markdownEnumDescriptions[idx];\n else if (s.schema.enumDescriptions) markdownEnumValueDescription = toMarkdown(s.schema.enumDescriptions[idx]);\n if (markdownEnumValueDescription) {\n enumValue = s.schema.enum[idx];\n if (typeof enumValue !== \"string\") enumValue = JSON.stringify(enumValue);\n }\n }\n }\n return true;\n });\n let result = \"\";\n if (title) result = toMarkdown(title);\n if (markdownDescription) {\n if (result.length > 0) result += \"\\n\\n\";\n result += markdownDescription;\n }\n if (markdownEnumValueDescription) {\n if (result.length > 0) result += \"\\n\\n\";\n result += `\\`${toMarkdownCodeBlock(enumValue)}\\`: ${markdownEnumValueDescription}`;\n }\n return createHover([result]);\n }\n return null;\n });\n }\n };\n function toMarkdown(plain) {\n if (plain) return plain.replace(/([^\\n\\r])(\\r?\\n)([^\\n\\r])/gm, \"$1\\n\\n$3\").replace(/[\\\\`*_{}[\\]()#+\\-.!]/g, \"\\\\$&\");\n }\n function toMarkdownCodeBlock(content) {\n if (content.indexOf(\"`\") !== -1) return \"`` \" + content + \" ``\";\n return content;\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/services/jsonValidation.js\n var JSONValidation = class {\n constructor(jsonSchemaService, promiseConstructor) {\n this.jsonSchemaService = jsonSchemaService;\n this.promise = promiseConstructor;\n this.validationEnabled = true;\n }\n configure(raw) {\n if (raw) {\n this.validationEnabled = raw.validate !== false;\n this.commentSeverity = raw.allowComments ? void 0 : DiagnosticSeverity.Error;\n }\n }\n doValidation(textDocument, jsonDocument, documentSettings, schema) {\n if (!this.validationEnabled) return this.promise.resolve([]);\n const diagnostics = [];\n const added = {};\n const addProblem = (problem) => {\n const signature = problem.range.start.line + \" \" + problem.range.start.character + \" \" + problem.message;\n if (!added[signature]) {\n added[signature] = true;\n diagnostics.push(problem);\n }\n };\n const getDiagnostics = (schema) => {\n let trailingCommaSeverity = documentSettings?.trailingCommas ? toDiagnosticSeverity(documentSettings.trailingCommas) : DiagnosticSeverity.Error;\n let commentSeverity = documentSettings?.comments ? toDiagnosticSeverity(documentSettings.comments) : this.commentSeverity;\n let schemaValidation = documentSettings?.schemaValidation ? toDiagnosticSeverity(documentSettings.schemaValidation) : DiagnosticSeverity.Warning;\n let schemaRequest = documentSettings?.schemaRequest ? toDiagnosticSeverity(documentSettings.schemaRequest) : DiagnosticSeverity.Warning;\n if (schema) {\n const addSchemaProblem = (errorMessage, errorCode) => {\n if (jsonDocument.root && schemaRequest) {\n const astRoot = jsonDocument.root;\n const property = astRoot.type === \"object\" ? astRoot.properties[0] : void 0;\n if (property && property.keyNode.value === \"$schema\") {\n const node = property.valueNode || property;\n const range = Range.create(textDocument.positionAt(node.offset), textDocument.positionAt(node.offset + node.length));\n addProblem(Diagnostic.create(range, errorMessage, schemaRequest, errorCode));\n } else {\n const range = Range.create(textDocument.positionAt(astRoot.offset), textDocument.positionAt(astRoot.offset + 1));\n addProblem(Diagnostic.create(range, errorMessage, schemaRequest, errorCode));\n }\n }\n };\n if (schema.errors.length) addSchemaProblem(schema.errors[0], ErrorCode.SchemaResolveError);\n else if (schemaValidation) {\n for (const warning of schema.warnings) addSchemaProblem(warning, ErrorCode.SchemaUnsupportedFeature);\n const semanticErrors = jsonDocument.validate(textDocument, schema.schema, schemaValidation, documentSettings?.schemaDraft);\n if (semanticErrors) semanticErrors.forEach(addProblem);\n }\n if (schemaAllowsComments(schema.schema)) commentSeverity = void 0;\n if (schemaAllowsTrailingCommas(schema.schema)) trailingCommaSeverity = void 0;\n }\n for (const p of jsonDocument.syntaxErrors) {\n if (p.code === ErrorCode.TrailingComma) {\n if (typeof trailingCommaSeverity !== \"number\") continue;\n p.severity = trailingCommaSeverity;\n }\n addProblem(p);\n }\n if (typeof commentSeverity === \"number\") {\n const message = t(\"Comments are not permitted in JSON.\");\n jsonDocument.comments.forEach((c) => {\n addProblem(Diagnostic.create(c, message, commentSeverity, ErrorCode.CommentNotPermitted));\n });\n }\n return diagnostics;\n };\n if (schema) {\n const uri = schema.id || \"schemaservice://untitled/\" + idCounter$1++;\n return this.jsonSchemaService.registerExternalSchema({\n uri,\n schema\n }).getResolvedSchema().then((resolvedSchema) => {\n return getDiagnostics(resolvedSchema);\n });\n }\n return this.jsonSchemaService.getSchemaForResource(textDocument.uri, jsonDocument).then((schema) => {\n return getDiagnostics(schema);\n });\n }\n getLanguageStatus(textDocument, jsonDocument) {\n return { schemas: this.jsonSchemaService.getSchemaURIsForResource(textDocument.uri, jsonDocument) };\n }\n };\n let idCounter$1 = 0;\n function schemaAllowsComments(schemaRef) {\n if (schemaRef && typeof schemaRef === \"object\") {\n if (isBoolean(schemaRef.allowComments)) return schemaRef.allowComments;\n if (schemaRef.allOf) for (const schema of schemaRef.allOf) {\n const allow = schemaAllowsComments(schema);\n if (isBoolean(allow)) return allow;\n }\n }\n }\n function schemaAllowsTrailingCommas(schemaRef) {\n if (schemaRef && typeof schemaRef === \"object\") {\n if (isBoolean(schemaRef.allowTrailingCommas)) return schemaRef.allowTrailingCommas;\n const deprSchemaRef = schemaRef;\n if (isBoolean(deprSchemaRef[\"allowsTrailingCommas\"])) return deprSchemaRef[\"allowsTrailingCommas\"];\n if (schemaRef.allOf) for (const schema of schemaRef.allOf) {\n const allow = schemaAllowsTrailingCommas(schema);\n if (isBoolean(allow)) return allow;\n }\n }\n }\n function toDiagnosticSeverity(severityLevel) {\n switch (severityLevel) {\n case \"error\": return DiagnosticSeverity.Error;\n case \"warning\": return DiagnosticSeverity.Warning;\n case \"ignore\": return;\n }\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/utils/colors.js\n const Digit0 = 48;\n const Digit9 = 57;\n const A = 65;\n const a = 97;\n const f = 102;\n function hexDigit(charCode) {\n if (charCode < Digit0) return 0;\n if (charCode <= Digit9) return charCode - Digit0;\n if (charCode < a) charCode += a - A;\n if (charCode >= a && charCode <= f) return charCode - a + 10;\n return 0;\n }\n function colorFromHex(text) {\n if (text[0] !== \"#\") return;\n switch (text.length) {\n case 4: return {\n red: hexDigit(text.charCodeAt(1)) * 17 / 255,\n green: hexDigit(text.charCodeAt(2)) * 17 / 255,\n blue: hexDigit(text.charCodeAt(3)) * 17 / 255,\n alpha: 1\n };\n case 5: return {\n red: hexDigit(text.charCodeAt(1)) * 17 / 255,\n green: hexDigit(text.charCodeAt(2)) * 17 / 255,\n blue: hexDigit(text.charCodeAt(3)) * 17 / 255,\n alpha: hexDigit(text.charCodeAt(4)) * 17 / 255\n };\n case 7: return {\n red: (hexDigit(text.charCodeAt(1)) * 16 + hexDigit(text.charCodeAt(2))) / 255,\n green: (hexDigit(text.charCodeAt(3)) * 16 + hexDigit(text.charCodeAt(4))) / 255,\n blue: (hexDigit(text.charCodeAt(5)) * 16 + hexDigit(text.charCodeAt(6))) / 255,\n alpha: 1\n };\n case 9: return {\n red: (hexDigit(text.charCodeAt(1)) * 16 + hexDigit(text.charCodeAt(2))) / 255,\n green: (hexDigit(text.charCodeAt(3)) * 16 + hexDigit(text.charCodeAt(4))) / 255,\n blue: (hexDigit(text.charCodeAt(5)) * 16 + hexDigit(text.charCodeAt(6))) / 255,\n alpha: (hexDigit(text.charCodeAt(7)) * 16 + hexDigit(text.charCodeAt(8))) / 255\n };\n }\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/services/jsonDocumentSymbols.js\n var JSONDocumentSymbols = class {\n constructor(schemaService) {\n this.schemaService = schemaService;\n }\n findDocumentSymbols(document, doc, context = { resultLimit: Number.MAX_VALUE }) {\n const root = doc.root;\n if (!root) return [];\n let limit = context.resultLimit || Number.MAX_VALUE;\n const resourceString = document.uri;\n if (resourceString === \"vscode://defaultsettings/keybindings.json\" || endsWith(resourceString.toLowerCase(), \"/user/keybindings.json\")) {\n if (root.type === \"array\") {\n const result = [];\n for (const item of root.items) if (item.type === \"object\") {\n for (const property of item.properties) if (property.keyNode.value === \"key\" && property.valueNode) {\n const location = Location.create(document.uri, getRange(document, item));\n result.push({\n name: getName(property.valueNode),\n kind: SymbolKind.Function,\n location\n });\n limit--;\n if (limit <= 0) {\n if (context && context.onResultLimitExceeded) context.onResultLimitExceeded(resourceString);\n return result;\n }\n }\n }\n return result;\n }\n }\n const toVisit = [{\n node: root,\n containerName: \"\"\n }];\n let nextToVisit = 0;\n let limitExceeded = false;\n const result = [];\n const collectOutlineEntries = (node, containerName) => {\n if (node.type === \"array\") node.items.forEach((node) => {\n if (node) toVisit.push({\n node,\n containerName\n });\n });\n else if (node.type === \"object\") node.properties.forEach((property) => {\n const valueNode = property.valueNode;\n if (valueNode) if (limit > 0) {\n limit--;\n const location = Location.create(document.uri, getRange(document, property));\n const childContainerName = containerName ? containerName + \".\" + property.keyNode.value : property.keyNode.value;\n result.push({\n name: this.getKeyLabel(property),\n kind: this.getSymbolKind(valueNode.type),\n location,\n containerName\n });\n toVisit.push({\n node: valueNode,\n containerName: childContainerName\n });\n } else limitExceeded = true;\n });\n };\n while (nextToVisit < toVisit.length) {\n const next = toVisit[nextToVisit++];\n collectOutlineEntries(next.node, next.containerName);\n }\n if (limitExceeded && context && context.onResultLimitExceeded) context.onResultLimitExceeded(resourceString);\n return result;\n }\n findDocumentSymbols2(document, doc, context = { resultLimit: Number.MAX_VALUE }) {\n const root = doc.root;\n if (!root) return [];\n let limit = context.resultLimit || Number.MAX_VALUE;\n const resourceString = document.uri;\n if (resourceString === \"vscode://defaultsettings/keybindings.json\" || endsWith(resourceString.toLowerCase(), \"/user/keybindings.json\")) {\n if (root.type === \"array\") {\n const result = [];\n for (const item of root.items) if (item.type === \"object\") {\n for (const property of item.properties) if (property.keyNode.value === \"key\" && property.valueNode) {\n const range = getRange(document, item);\n const selectionRange = getRange(document, property.keyNode);\n result.push({\n name: getName(property.valueNode),\n kind: SymbolKind.Function,\n range,\n selectionRange\n });\n limit--;\n if (limit <= 0) {\n if (context && context.onResultLimitExceeded) context.onResultLimitExceeded(resourceString);\n return result;\n }\n }\n }\n return result;\n }\n }\n const result = [];\n const toVisit = [{\n node: root,\n result\n }];\n let nextToVisit = 0;\n let limitExceeded = false;\n const collectOutlineEntries = (node, result) => {\n if (node.type === \"array\") node.items.forEach((node, index) => {\n if (node) if (limit > 0) {\n limit--;\n const range = getRange(document, node);\n const selectionRange = range;\n const symbol = {\n name: String(index),\n kind: this.getSymbolKind(node.type),\n range,\n selectionRange,\n children: []\n };\n result.push(symbol);\n toVisit.push({\n result: symbol.children,\n node\n });\n } else limitExceeded = true;\n });\n else if (node.type === \"object\") node.properties.forEach((property) => {\n const valueNode = property.valueNode;\n if (valueNode) if (limit > 0) {\n limit--;\n const range = getRange(document, property);\n const selectionRange = getRange(document, property.keyNode);\n const children = [];\n const symbol = {\n name: this.getKeyLabel(property),\n kind: this.getSymbolKind(valueNode.type),\n range,\n selectionRange,\n children,\n detail: this.getDetail(valueNode)\n };\n result.push(symbol);\n toVisit.push({\n result: children,\n node: valueNode\n });\n } else limitExceeded = true;\n });\n };\n while (nextToVisit < toVisit.length) {\n const next = toVisit[nextToVisit++];\n collectOutlineEntries(next.node, next.result);\n }\n if (limitExceeded && context && context.onResultLimitExceeded) context.onResultLimitExceeded(resourceString);\n return result;\n }\n getSymbolKind(nodeType) {\n switch (nodeType) {\n case \"object\": return SymbolKind.Module;\n case \"string\": return SymbolKind.String;\n case \"number\": return SymbolKind.Number;\n case \"array\": return SymbolKind.Array;\n case \"boolean\": return SymbolKind.Boolean;\n default: return SymbolKind.Variable;\n }\n }\n getKeyLabel(property) {\n let name = property.keyNode.value;\n if (name) name = name.replace(/[\\n]/g, \"↵\");\n if (name && name.trim()) return name;\n return `\"${name}\"`;\n }\n getDetail(node) {\n if (!node) return;\n if (node.type === \"boolean\" || node.type === \"number\" || node.type === \"null\" || node.type === \"string\") return String(node.value);\n else if (node.type === \"array\") return node.children.length ? void 0 : \"[]\";\n else if (node.type === \"object\") return node.children.length ? void 0 : \"{}\";\n }\n findDocumentColors(document, doc, context) {\n return this.schemaService.getSchemaForResource(document.uri, doc).then((schema) => {\n const result = [];\n if (schema) {\n let limit = context && typeof context.resultLimit === \"number\" ? context.resultLimit : Number.MAX_VALUE;\n const matchingSchemas = doc.getMatchingSchemas(schema.schema);\n const visitedNode = {};\n for (const s of matchingSchemas) if (!s.inverted && s.schema && (s.schema.format === \"color\" || s.schema.format === \"color-hex\") && s.node && s.node.type === \"string\") {\n const nodeId = String(s.node.offset);\n if (!visitedNode[nodeId]) {\n const color = colorFromHex(getNodeValue(s.node));\n if (color) {\n const range = getRange(document, s.node);\n result.push({\n color,\n range\n });\n }\n visitedNode[nodeId] = true;\n limit--;\n if (limit <= 0) {\n if (context && context.onResultLimitExceeded) context.onResultLimitExceeded(document.uri);\n return result;\n }\n }\n }\n }\n return result;\n });\n }\n getColorPresentations(document, doc, color, range) {\n const result = [];\n const red256 = Math.round(color.red * 255), green256 = Math.round(color.green * 255), blue256 = Math.round(color.blue * 255);\n function toTwoDigitHex(n) {\n const r = n.toString(16);\n return r.length !== 2 ? \"0\" + r : r;\n }\n let label;\n if (color.alpha === 1) label = `#${toTwoDigitHex(red256)}${toTwoDigitHex(green256)}${toTwoDigitHex(blue256)}`;\n else label = `#${toTwoDigitHex(red256)}${toTwoDigitHex(green256)}${toTwoDigitHex(blue256)}${toTwoDigitHex(Math.round(color.alpha * 255))}`;\n result.push({\n label,\n textEdit: TextEdit.replace(range, JSON.stringify(label))\n });\n return result;\n }\n };\n function getRange(document, node) {\n return Range.create(document.positionAt(node.offset), document.positionAt(node.offset + node.length));\n }\n function getName(node) {\n return getNodeValue(node) || t(\"<empty>\");\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/services/configuration.js\n const schemaContributions = {\n schemaAssociations: [],\n schemas: {\n \"http://json-schema.org/draft-04/schema#\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n \"definitions\": {\n \"schemaArray\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": { \"$ref\": \"#\" }\n },\n \"positiveInteger\": {\n \"type\": \"integer\",\n \"minimum\": 0\n },\n \"positiveIntegerDefault0\": { \"allOf\": [{ \"$ref\": \"#/definitions/positiveInteger\" }, { \"default\": 0 }] },\n \"simpleTypes\": {\n \"type\": \"string\",\n \"enum\": [\n \"array\",\n \"boolean\",\n \"integer\",\n \"null\",\n \"number\",\n \"object\",\n \"string\"\n ]\n },\n \"stringArray\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"minItems\": 1,\n \"uniqueItems\": true\n }\n },\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"format\": \"uri\"\n },\n \"$schema\": {\n \"type\": \"string\",\n \"format\": \"uri\"\n },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": {},\n \"multipleOf\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"exclusiveMinimum\": true\n },\n \"maximum\": { \"type\": \"number\" },\n \"exclusiveMaximum\": {\n \"type\": \"boolean\",\n \"default\": false\n },\n \"minimum\": { \"type\": \"number\" },\n \"exclusiveMinimum\": {\n \"type\": \"boolean\",\n \"default\": false\n },\n \"maxLength\": { \"allOf\": [{ \"$ref\": \"#/definitions/positiveInteger\" }] },\n \"minLength\": { \"allOf\": [{ \"$ref\": \"#/definitions/positiveIntegerDefault0\" }] },\n \"pattern\": {\n \"type\": \"string\",\n \"format\": \"regex\"\n },\n \"additionalItems\": {\n \"anyOf\": [{ \"type\": \"boolean\" }, { \"$ref\": \"#\" }],\n \"default\": {}\n },\n \"items\": {\n \"anyOf\": [{ \"$ref\": \"#\" }, { \"$ref\": \"#/definitions/schemaArray\" }],\n \"default\": {}\n },\n \"maxItems\": { \"allOf\": [{ \"$ref\": \"#/definitions/positiveInteger\" }] },\n \"minItems\": { \"allOf\": [{ \"$ref\": \"#/definitions/positiveIntegerDefault0\" }] },\n \"uniqueItems\": {\n \"type\": \"boolean\",\n \"default\": false\n },\n \"maxProperties\": { \"allOf\": [{ \"$ref\": \"#/definitions/positiveInteger\" }] },\n \"minProperties\": { \"allOf\": [{ \"$ref\": \"#/definitions/positiveIntegerDefault0\" }] },\n \"required\": { \"allOf\": [{ \"$ref\": \"#/definitions/stringArray\" }] },\n \"additionalProperties\": {\n \"anyOf\": [{ \"type\": \"boolean\" }, { \"$ref\": \"#\" }],\n \"default\": {}\n },\n \"definitions\": {\n \"type\": \"object\",\n \"additionalProperties\": { \"$ref\": \"#\" },\n \"default\": {}\n },\n \"properties\": {\n \"type\": \"object\",\n \"additionalProperties\": { \"$ref\": \"#\" },\n \"default\": {}\n },\n \"patternProperties\": {\n \"type\": \"object\",\n \"additionalProperties\": { \"$ref\": \"#\" },\n \"default\": {}\n },\n \"dependencies\": {\n \"type\": \"object\",\n \"additionalProperties\": { \"anyOf\": [{ \"$ref\": \"#\" }, { \"$ref\": \"#/definitions/stringArray\" }] }\n },\n \"enum\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"uniqueItems\": true\n },\n \"type\": { \"anyOf\": [{ \"$ref\": \"#/definitions/simpleTypes\" }, {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/definitions/simpleTypes\" },\n \"minItems\": 1,\n \"uniqueItems\": true\n }] },\n \"format\": { \"anyOf\": [{\n \"type\": \"string\",\n \"enum\": [\n \"date-time\",\n \"uri\",\n \"email\",\n \"hostname\",\n \"ipv4\",\n \"ipv6\",\n \"regex\"\n ]\n }, { \"type\": \"string\" }] },\n \"allOf\": { \"allOf\": [{ \"$ref\": \"#/definitions/schemaArray\" }] },\n \"anyOf\": { \"allOf\": [{ \"$ref\": \"#/definitions/schemaArray\" }] },\n \"oneOf\": { \"allOf\": [{ \"$ref\": \"#/definitions/schemaArray\" }] },\n \"not\": { \"allOf\": [{ \"$ref\": \"#\" }] }\n },\n \"dependencies\": {\n \"exclusiveMaximum\": [\"maximum\"],\n \"exclusiveMinimum\": [\"minimum\"]\n },\n \"default\": {}\n },\n \"http://json-schema.org/draft-07/schema#\": {\n \"definitions\": {\n \"schemaArray\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": { \"$ref\": \"#\" }\n },\n \"nonNegativeInteger\": {\n \"type\": \"integer\",\n \"minimum\": 0\n },\n \"nonNegativeIntegerDefault0\": { \"allOf\": [{ \"$ref\": \"#/definitions/nonNegativeInteger\" }, { \"default\": 0 }] },\n \"simpleTypes\": { \"enum\": [\n \"array\",\n \"boolean\",\n \"integer\",\n \"null\",\n \"number\",\n \"object\",\n \"string\"\n ] },\n \"stringArray\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"uniqueItems\": true,\n \"default\": []\n }\n },\n \"type\": [\"object\", \"boolean\"],\n \"properties\": {\n \"$id\": {\n \"type\": \"string\",\n \"format\": \"uri-reference\"\n },\n \"$schema\": {\n \"type\": \"string\",\n \"format\": \"uri\"\n },\n \"$ref\": {\n \"type\": \"string\",\n \"format\": \"uri-reference\"\n },\n \"$comment\": { \"type\": \"string\" },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": true,\n \"readOnly\": {\n \"type\": \"boolean\",\n \"default\": false\n },\n \"examples\": {\n \"type\": \"array\",\n \"items\": true\n },\n \"multipleOf\": {\n \"type\": \"number\",\n \"exclusiveMinimum\": 0\n },\n \"maximum\": { \"type\": \"number\" },\n \"exclusiveMaximum\": { \"type\": \"number\" },\n \"minimum\": { \"type\": \"number\" },\n \"exclusiveMinimum\": { \"type\": \"number\" },\n \"maxLength\": { \"$ref\": \"#/definitions/nonNegativeInteger\" },\n \"minLength\": { \"$ref\": \"#/definitions/nonNegativeIntegerDefault0\" },\n \"pattern\": {\n \"type\": \"string\",\n \"format\": \"regex\"\n },\n \"additionalItems\": { \"$ref\": \"#\" },\n \"items\": {\n \"anyOf\": [{ \"$ref\": \"#\" }, { \"$ref\": \"#/definitions/schemaArray\" }],\n \"default\": true\n },\n \"maxItems\": { \"$ref\": \"#/definitions/nonNegativeInteger\" },\n \"minItems\": { \"$ref\": \"#/definitions/nonNegativeIntegerDefault0\" },\n \"uniqueItems\": {\n \"type\": \"boolean\",\n \"default\": false\n },\n \"contains\": { \"$ref\": \"#\" },\n \"maxProperties\": { \"$ref\": \"#/definitions/nonNegativeInteger\" },\n \"minProperties\": { \"$ref\": \"#/definitions/nonNegativeIntegerDefault0\" },\n \"required\": { \"$ref\": \"#/definitions/stringArray\" },\n \"additionalProperties\": { \"$ref\": \"#\" },\n \"definitions\": {\n \"type\": \"object\",\n \"additionalProperties\": { \"$ref\": \"#\" },\n \"default\": {}\n },\n \"properties\": {\n \"type\": \"object\",\n \"additionalProperties\": { \"$ref\": \"#\" },\n \"default\": {}\n },\n \"patternProperties\": {\n \"type\": \"object\",\n \"additionalProperties\": { \"$ref\": \"#\" },\n \"propertyNames\": { \"format\": \"regex\" },\n \"default\": {}\n },\n \"dependencies\": {\n \"type\": \"object\",\n \"additionalProperties\": { \"anyOf\": [{ \"$ref\": \"#\" }, { \"$ref\": \"#/definitions/stringArray\" }] }\n },\n \"propertyNames\": { \"$ref\": \"#\" },\n \"const\": true,\n \"enum\": {\n \"type\": \"array\",\n \"items\": true,\n \"minItems\": 1,\n \"uniqueItems\": true\n },\n \"type\": { \"anyOf\": [{ \"$ref\": \"#/definitions/simpleTypes\" }, {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/definitions/simpleTypes\" },\n \"minItems\": 1,\n \"uniqueItems\": true\n }] },\n \"format\": { \"type\": \"string\" },\n \"contentMediaType\": { \"type\": \"string\" },\n \"contentEncoding\": { \"type\": \"string\" },\n \"if\": { \"$ref\": \"#\" },\n \"then\": { \"$ref\": \"#\" },\n \"else\": { \"$ref\": \"#\" },\n \"allOf\": { \"$ref\": \"#/definitions/schemaArray\" },\n \"anyOf\": { \"$ref\": \"#/definitions/schemaArray\" },\n \"oneOf\": { \"$ref\": \"#/definitions/schemaArray\" },\n \"not\": { \"$ref\": \"#\" }\n },\n \"default\": true\n }\n }\n };\n const descriptions = {\n id: t(\"A unique identifier for the schema.\"),\n $schema: t(\"The schema to verify this document against.\"),\n title: t(\"A descriptive title of the element.\"),\n description: t(\"A long description of the element. Used in hover menus and suggestions.\"),\n default: t(\"A default value. Used by suggestions.\"),\n multipleOf: t(\"A number that should cleanly divide the current value (i.e. have no remainder).\"),\n maximum: t(\"The maximum numerical value, inclusive by default.\"),\n exclusiveMaximum: t(\"Makes the maximum property exclusive.\"),\n minimum: t(\"The minimum numerical value, inclusive by default.\"),\n exclusiveMinimum: t(\"Makes the minimum property exclusive.\"),\n maxLength: t(\"The maximum length of a string.\"),\n minLength: t(\"The minimum length of a string.\"),\n pattern: t(\"A regular expression to match the string against. It is not implicitly anchored.\"),\n additionalItems: t(\"For arrays, only when items is set as an array. If it is a schema, then this schema validates items after the ones specified by the items array. If it is false, then additional items will cause validation to fail.\"),\n items: t(\"For arrays. Can either be a schema to validate every element against or an array of schemas to validate each item against in order (the first schema will validate the first element, the second schema will validate the second element, and so on.\"),\n maxItems: t(\"The maximum number of items that can be inside an array. Inclusive.\"),\n minItems: t(\"The minimum number of items that can be inside an array. Inclusive.\"),\n uniqueItems: t(\"If all of the items in the array must be unique. Defaults to false.\"),\n maxProperties: t(\"The maximum number of properties an object can have. Inclusive.\"),\n minProperties: t(\"The minimum number of properties an object can have. Inclusive.\"),\n required: t(\"An array of strings that lists the names of all properties required on this object.\"),\n additionalProperties: t(\"Either a schema or a boolean. If a schema, then used to validate all properties not matched by 'properties' or 'patternProperties'. If false, then any properties not matched by either will cause this schema to fail.\"),\n definitions: t(\"Not used for validation. Place subschemas here that you wish to reference inline with $ref.\"),\n properties: t(\"A map of property names to schemas for each property.\"),\n patternProperties: t(\"A map of regular expressions on property names to schemas for matching properties.\"),\n dependencies: t(\"A map of property names to either an array of property names or a schema. An array of property names means the property named in the key depends on the properties in the array being present in the object in order to be valid. If the value is a schema, then the schema is only applied to the object if the property in the key exists on the object.\"),\n enum: t(\"The set of literal values that are valid.\"),\n type: t(\"Either a string of one of the basic schema types (number, integer, null, array, object, boolean, string) or an array of strings specifying a subset of those types.\"),\n format: t(\"Describes the format expected for the value.\"),\n allOf: t(\"An array of schemas, all of which must match.\"),\n anyOf: t(\"An array of schemas, where at least one must match.\"),\n oneOf: t(\"An array of schemas, exactly one of which must match.\"),\n not: t(\"A schema which must not match.\"),\n $id: t(\"A unique identifier for the schema.\"),\n $ref: t(\"Reference a definition hosted on any location.\"),\n $comment: t(\"Comments from schema authors to readers or maintainers of the schema.\"),\n readOnly: t(\"Indicates that the value of the instance is managed exclusively by the owning authority.\"),\n examples: t(\"Sample JSON values associated with a particular schema, for the purpose of illustrating usage.\"),\n contains: t(\"An array instance is valid against \\\"contains\\\" if at least one of its elements is valid against the given schema.\"),\n propertyNames: t(\"If the instance is an object, this keyword validates if every property name in the instance validates against the provided schema.\"),\n const: t(\"An instance validates successfully against this keyword if its value is equal to the value of the keyword.\"),\n contentMediaType: t(\"Describes the media type of a string property.\"),\n contentEncoding: t(\"Describes the content encoding of a string property.\"),\n if: t(\"The validation outcome of the \\\"if\\\" subschema controls which of the \\\"then\\\" or \\\"else\\\" keywords are evaluated.\"),\n then: t(\"The \\\"if\\\" subschema is used for validation when the \\\"if\\\" subschema succeeds.\"),\n else: t(\"The \\\"else\\\" subschema is used for validation when the \\\"if\\\" subschema fails.\")\n };\n for (const schemaName in schemaContributions.schemas) {\n const schema = schemaContributions.schemas[schemaName];\n for (const property in schema.properties) {\n let propertyObject = schema.properties[property];\n if (typeof propertyObject === \"boolean\") propertyObject = schema.properties[property] = {};\n const description = descriptions[property];\n if (description) propertyObject[\"description\"] = description;\n }\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-uri/lib/esm/index.js\n var LIB;\n (() => {\n var t = { 470: (t) => {\n function e(t) {\n if (\"string\" != typeof t) throw new TypeError(\"Path must be a string. Received \" + JSON.stringify(t));\n }\n function r(t, e) {\n for (var r, n = \"\", i = 0, o = -1, s = 0, h = 0; h <= t.length; ++h) {\n if (h < t.length) r = t.charCodeAt(h);\n else {\n if (47 === r) break;\n r = 47;\n }\n if (47 === r) {\n if (o === h - 1 || 1 === s);\n else if (o !== h - 1 && 2 === s) {\n if (n.length < 2 || 2 !== i || 46 !== n.charCodeAt(n.length - 1) || 46 !== n.charCodeAt(n.length - 2)) {\n if (n.length > 2) {\n var a = n.lastIndexOf(\"/\");\n if (a !== n.length - 1) {\n -1 === a ? (n = \"\", i = 0) : i = (n = n.slice(0, a)).length - 1 - n.lastIndexOf(\"/\"), o = h, s = 0;\n continue;\n }\n } else if (2 === n.length || 1 === n.length) {\n n = \"\", i = 0, o = h, s = 0;\n continue;\n }\n }\n e && (n.length > 0 ? n += \"/..\" : n = \"..\", i = 2);\n } else n.length > 0 ? n += \"/\" + t.slice(o + 1, h) : n = t.slice(o + 1, h), i = h - o - 1;\n o = h, s = 0;\n } else 46 === r && -1 !== s ? ++s : s = -1;\n }\n return n;\n }\n var n = {\n resolve: function() {\n for (var t, n = \"\", i = false, o = arguments.length - 1; o >= -1 && !i; o--) {\n var s;\n o >= 0 ? s = arguments[o] : (void 0 === t && (t = process.cwd()), s = t), e(s), 0 !== s.length && (n = s + \"/\" + n, i = 47 === s.charCodeAt(0));\n }\n return n = r(n, !i), i ? n.length > 0 ? \"/\" + n : \"/\" : n.length > 0 ? n : \".\";\n },\n normalize: function(t) {\n if (e(t), 0 === t.length) return \".\";\n var n = 47 === t.charCodeAt(0), i = 47 === t.charCodeAt(t.length - 1);\n return 0 !== (t = r(t, !n)).length || n || (t = \".\"), t.length > 0 && i && (t += \"/\"), n ? \"/\" + t : t;\n },\n isAbsolute: function(t) {\n return e(t), t.length > 0 && 47 === t.charCodeAt(0);\n },\n join: function() {\n if (0 === arguments.length) return \".\";\n for (var t, r = 0; r < arguments.length; ++r) {\n var i = arguments[r];\n e(i), i.length > 0 && (void 0 === t ? t = i : t += \"/\" + i);\n }\n return void 0 === t ? \".\" : n.normalize(t);\n },\n relative: function(t, r) {\n if (e(t), e(r), t === r) return \"\";\n if ((t = n.resolve(t)) === (r = n.resolve(r))) return \"\";\n for (var i = 1; i < t.length && 47 === t.charCodeAt(i); ++i);\n for (var o = t.length, s = o - i, h = 1; h < r.length && 47 === r.charCodeAt(h); ++h);\n for (var a = r.length - h, c = s < a ? s : a, f = -1, u = 0; u <= c; ++u) {\n if (u === c) {\n if (a > c) {\n if (47 === r.charCodeAt(h + u)) return r.slice(h + u + 1);\n if (0 === u) return r.slice(h + u);\n } else s > c && (47 === t.charCodeAt(i + u) ? f = u : 0 === u && (f = 0));\n break;\n }\n var l = t.charCodeAt(i + u);\n if (l !== r.charCodeAt(h + u)) break;\n 47 === l && (f = u);\n }\n var g = \"\";\n for (u = i + f + 1; u <= o; ++u) u !== o && 47 !== t.charCodeAt(u) || (0 === g.length ? g += \"..\" : g += \"/..\");\n return g.length > 0 ? g + r.slice(h + f) : (h += f, 47 === r.charCodeAt(h) && ++h, r.slice(h));\n },\n _makeLong: function(t) {\n return t;\n },\n dirname: function(t) {\n if (e(t), 0 === t.length) return \".\";\n for (var r = t.charCodeAt(0), n = 47 === r, i = -1, o = true, s = t.length - 1; s >= 1; --s) if (47 === (r = t.charCodeAt(s))) {\n if (!o) {\n i = s;\n break;\n }\n } else o = false;\n return -1 === i ? n ? \"/\" : \".\" : n && 1 === i ? \"//\" : t.slice(0, i);\n },\n basename: function(t, r) {\n if (void 0 !== r && \"string\" != typeof r) throw new TypeError(\"\\\"ext\\\" argument must be a string\");\n e(t);\n var n, i = 0, o = -1, s = true;\n if (void 0 !== r && r.length > 0 && r.length <= t.length) {\n if (r.length === t.length && r === t) return \"\";\n var h = r.length - 1, a = -1;\n for (n = t.length - 1; n >= 0; --n) {\n var c = t.charCodeAt(n);\n if (47 === c) {\n if (!s) {\n i = n + 1;\n break;\n }\n } else -1 === a && (s = false, a = n + 1), h >= 0 && (c === r.charCodeAt(h) ? -1 == --h && (o = n) : (h = -1, o = a));\n }\n return i === o ? o = a : -1 === o && (o = t.length), t.slice(i, o);\n }\n for (n = t.length - 1; n >= 0; --n) if (47 === t.charCodeAt(n)) {\n if (!s) {\n i = n + 1;\n break;\n }\n } else -1 === o && (s = false, o = n + 1);\n return -1 === o ? \"\" : t.slice(i, o);\n },\n extname: function(t) {\n e(t);\n for (var r = -1, n = 0, i = -1, o = true, s = 0, h = t.length - 1; h >= 0; --h) {\n var a = t.charCodeAt(h);\n if (47 !== a) -1 === i && (o = false, i = h + 1), 46 === a ? -1 === r ? r = h : 1 !== s && (s = 1) : -1 !== r && (s = -1);\n else if (!o) {\n n = h + 1;\n break;\n }\n }\n return -1 === r || -1 === i || 0 === s || 1 === s && r === i - 1 && r === n + 1 ? \"\" : t.slice(r, i);\n },\n format: function(t) {\n if (null === t || \"object\" != typeof t) throw new TypeError(\"The \\\"pathObject\\\" argument must be of type Object. Received type \" + typeof t);\n return function(t, e) {\n var r = e.dir || e.root, n = e.base || (e.name || \"\") + (e.ext || \"\");\n return r ? r === e.root ? r + n : r + \"/\" + n : n;\n }(0, t);\n },\n parse: function(t) {\n e(t);\n var r = {\n root: \"\",\n dir: \"\",\n base: \"\",\n ext: \"\",\n name: \"\"\n };\n if (0 === t.length) return r;\n var n, i = t.charCodeAt(0), o = 47 === i;\n o ? (r.root = \"/\", n = 1) : n = 0;\n for (var s = -1, h = 0, a = -1, c = true, f = t.length - 1, u = 0; f >= n; --f) if (47 !== (i = t.charCodeAt(f))) -1 === a && (c = false, a = f + 1), 46 === i ? -1 === s ? s = f : 1 !== u && (u = 1) : -1 !== s && (u = -1);\n else if (!c) {\n h = f + 1;\n break;\n }\n return -1 === s || -1 === a || 0 === u || 1 === u && s === a - 1 && s === h + 1 ? -1 !== a && (r.base = r.name = 0 === h && o ? t.slice(1, a) : t.slice(h, a)) : (0 === h && o ? (r.name = t.slice(1, s), r.base = t.slice(1, a)) : (r.name = t.slice(h, s), r.base = t.slice(h, a)), r.ext = t.slice(s, a)), h > 0 ? r.dir = t.slice(0, h - 1) : o && (r.dir = \"/\"), r;\n },\n sep: \"/\",\n delimiter: \":\",\n win32: null,\n posix: null\n };\n n.posix = n, t.exports = n;\n } }, e = {};\n function r(n) {\n var i = e[n];\n if (void 0 !== i) return i.exports;\n var o = e[n] = { exports: {} };\n return t[n](o, o.exports, r), o.exports;\n }\n r.d = (t, e) => {\n for (var n in e) r.o(e, n) && !r.o(t, n) && Object.defineProperty(t, n, {\n enumerable: true,\n get: e[n]\n });\n }, r.o = (t, e) => Object.prototype.hasOwnProperty.call(t, e), r.r = (t) => {\n \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, { value: \"Module\" }), Object.defineProperty(t, \"__esModule\", { value: true });\n };\n var n = {};\n (() => {\n let t;\n if (r.r(n), r.d(n, {\n URI: () => f,\n Utils: () => P\n }), \"object\" == typeof process) t = \"win32\" === process.platform;\n else if (\"object\" == typeof navigator) t = navigator.userAgent.indexOf(\"Windows\") >= 0;\n const e = /^\\w[\\w\\d+.-]*$/, i = /^\\//, o = /^\\/\\//;\n function s(t, r) {\n if (!t.scheme && r) throw new Error(`[UriError]: Scheme is missing: {scheme: \"\", authority: \"${t.authority}\", path: \"${t.path}\", query: \"${t.query}\", fragment: \"${t.fragment}\"}`);\n if (t.scheme && !e.test(t.scheme)) throw new Error(\"[UriError]: Scheme contains illegal characters.\");\n if (t.path) {\n if (t.authority) {\n if (!i.test(t.path)) throw new Error(\"[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\\\"/\\\") character\");\n } else if (o.test(t.path)) throw new Error(\"[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\\\"//\\\")\");\n }\n }\n const h = \"\", a = \"/\", c = /^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;\n class f {\n static isUri(t) {\n return t instanceof f || !!t && \"string\" == typeof t.authority && \"string\" == typeof t.fragment && \"string\" == typeof t.path && \"string\" == typeof t.query && \"string\" == typeof t.scheme && \"string\" == typeof t.fsPath && \"function\" == typeof t.with && \"function\" == typeof t.toString;\n }\n scheme;\n authority;\n path;\n query;\n fragment;\n constructor(t, e, r, n, i, o = false) {\n \"object\" == typeof t ? (this.scheme = t.scheme || h, this.authority = t.authority || h, this.path = t.path || h, this.query = t.query || h, this.fragment = t.fragment || h) : (this.scheme = function(t, e) {\n return t || e ? t : \"file\";\n }(t, o), this.authority = e || h, this.path = function(t, e) {\n switch (t) {\n case \"https\":\n case \"http\":\n case \"file\": e ? e[0] !== a && (e = a + e) : e = a;\n }\n return e;\n }(this.scheme, r || h), this.query = n || h, this.fragment = i || h, s(this, o));\n }\n get fsPath() {\n return m(this);\n }\n with(t) {\n if (!t) return this;\n let { scheme: e, authority: r, path: n, query: i, fragment: o } = t;\n return void 0 === e ? e = this.scheme : null === e && (e = h), void 0 === r ? r = this.authority : null === r && (r = h), void 0 === n ? n = this.path : null === n && (n = h), void 0 === i ? i = this.query : null === i && (i = h), void 0 === o ? o = this.fragment : null === o && (o = h), e === this.scheme && r === this.authority && n === this.path && i === this.query && o === this.fragment ? this : new l(e, r, n, i, o);\n }\n static parse(t, e = false) {\n const r = c.exec(t);\n return r ? new l(r[2] || h, C(r[4] || h), C(r[5] || h), C(r[7] || h), C(r[9] || h), e) : new l(h, h, h, h, h);\n }\n static file(e) {\n let r = h;\n if (t && (e = e.replace(/\\\\/g, a)), e[0] === a && e[1] === a) {\n const t = e.indexOf(a, 2);\n -1 === t ? (r = e.substring(2), e = a) : (r = e.substring(2, t), e = e.substring(t) || a);\n }\n return new l(\"file\", r, e, h, h);\n }\n static from(t) {\n const e = new l(t.scheme, t.authority, t.path, t.query, t.fragment);\n return s(e, true), e;\n }\n toString(t = false) {\n return y(this, t);\n }\n toJSON() {\n return this;\n }\n static revive(t) {\n if (t) {\n if (t instanceof f) return t;\n {\n const e = new l(t);\n return e._formatted = t.external, e._fsPath = t._sep === u ? t.fsPath : null, e;\n }\n }\n return t;\n }\n }\n const u = t ? 1 : void 0;\n class l extends f {\n _formatted = null;\n _fsPath = null;\n get fsPath() {\n return this._fsPath || (this._fsPath = m(this)), this._fsPath;\n }\n toString(t = false) {\n return t ? y(this, true) : (this._formatted || (this._formatted = y(this, false)), this._formatted);\n }\n toJSON() {\n const t = { $mid: 1 };\n return this._fsPath && (t.fsPath = this._fsPath, t._sep = u), this._formatted && (t.external = this._formatted), this.path && (t.path = this.path), this.scheme && (t.scheme = this.scheme), this.authority && (t.authority = this.authority), this.query && (t.query = this.query), this.fragment && (t.fragment = this.fragment), t;\n }\n }\n const g = {\n 58: \"%3A\",\n 47: \"%2F\",\n 63: \"%3F\",\n 35: \"%23\",\n 91: \"%5B\",\n 93: \"%5D\",\n 64: \"%40\",\n 33: \"%21\",\n 36: \"%24\",\n 38: \"%26\",\n 39: \"%27\",\n 40: \"%28\",\n 41: \"%29\",\n 42: \"%2A\",\n 43: \"%2B\",\n 44: \"%2C\",\n 59: \"%3B\",\n 61: \"%3D\",\n 32: \"%20\"\n };\n function d(t, e, r) {\n let n, i = -1;\n for (let o = 0; o < t.length; o++) {\n const s = t.charCodeAt(o);\n if (s >= 97 && s <= 122 || s >= 65 && s <= 90 || s >= 48 && s <= 57 || 45 === s || 46 === s || 95 === s || 126 === s || e && 47 === s || r && 91 === s || r && 93 === s || r && 58 === s) -1 !== i && (n += encodeURIComponent(t.substring(i, o)), i = -1), void 0 !== n && (n += t.charAt(o));\n else {\n void 0 === n && (n = t.substr(0, o));\n const e = g[s];\n void 0 !== e ? (-1 !== i && (n += encodeURIComponent(t.substring(i, o)), i = -1), n += e) : -1 === i && (i = o);\n }\n }\n return -1 !== i && (n += encodeURIComponent(t.substring(i))), void 0 !== n ? n : t;\n }\n function p(t) {\n let e;\n for (let r = 0; r < t.length; r++) {\n const n = t.charCodeAt(r);\n 35 === n || 63 === n ? (void 0 === e && (e = t.substr(0, r)), e += g[n]) : void 0 !== e && (e += t[r]);\n }\n return void 0 !== e ? e : t;\n }\n function m(e, r) {\n let n;\n return n = e.authority && e.path.length > 1 && \"file\" === e.scheme ? `//${e.authority}${e.path}` : 47 === e.path.charCodeAt(0) && (e.path.charCodeAt(1) >= 65 && e.path.charCodeAt(1) <= 90 || e.path.charCodeAt(1) >= 97 && e.path.charCodeAt(1) <= 122) && 58 === e.path.charCodeAt(2) ? e.path[1].toLowerCase() + e.path.substr(2) : e.path, t && (n = n.replace(/\\//g, \"\\\\\")), n;\n }\n function y(t, e) {\n const r = e ? p : d;\n let n = \"\", { scheme: i, authority: o, path: s, query: h, fragment: c } = t;\n if (i && (n += i, n += \":\"), (o || \"file\" === i) && (n += a, n += a), o) {\n let t = o.indexOf(\"@\");\n if (-1 !== t) {\n const e = o.substr(0, t);\n o = o.substr(t + 1), t = e.lastIndexOf(\":\"), -1 === t ? n += r(e, false, false) : (n += r(e.substr(0, t), false, false), n += \":\", n += r(e.substr(t + 1), false, true)), n += \"@\";\n }\n o = o.toLowerCase(), t = o.lastIndexOf(\":\"), -1 === t ? n += r(o, false, true) : (n += r(o.substr(0, t), false, true), n += o.substr(t));\n }\n if (s) {\n if (s.length >= 3 && 47 === s.charCodeAt(0) && 58 === s.charCodeAt(2)) {\n const t = s.charCodeAt(1);\n t >= 65 && t <= 90 && (s = `/${String.fromCharCode(t + 32)}:${s.substr(3)}`);\n } else if (s.length >= 2 && 58 === s.charCodeAt(1)) {\n const t = s.charCodeAt(0);\n t >= 65 && t <= 90 && (s = `${String.fromCharCode(t + 32)}:${s.substr(2)}`);\n }\n n += r(s, true, false);\n }\n return h && (n += \"?\", n += r(h, false, false)), c && (n += \"#\", n += e ? c : d(c, false, false)), n;\n }\n function v(t) {\n try {\n return decodeURIComponent(t);\n } catch {\n return t.length > 3 ? t.substr(0, 3) + v(t.substr(3)) : t;\n }\n }\n const b = /(%[0-9A-Za-z][0-9A-Za-z])+/g;\n function C(t) {\n return t.match(b) ? t.replace(b, ((t) => v(t))) : t;\n }\n var A = r(470);\n const w = A.posix || A, x = \"/\";\n var P;\n (function(t) {\n t.joinPath = function(t, ...e) {\n return t.with({ path: w.join(t.path, ...e) });\n }, t.resolvePath = function(t, ...e) {\n let r = t.path, n = false;\n r[0] !== x && (r = x + r, n = true);\n let i = w.resolve(r, ...e);\n return n && i[0] === x && !t.authority && (i = i.substring(1)), t.with({ path: i });\n }, t.dirname = function(t) {\n if (0 === t.path.length || t.path === x) return t;\n let e = w.dirname(t.path);\n return 1 === e.length && 46 === e.charCodeAt(0) && (e = \"\"), t.with({ path: e });\n }, t.basename = function(t) {\n return w.basename(t.path);\n }, t.extname = function(t) {\n return w.extname(t.path);\n };\n })(P || (P = {}));\n })(), LIB = n;\n })();\n const { URI, Utils } = LIB;\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/utils/glob.js\n function createRegex(glob, opts) {\n if (typeof glob !== \"string\") throw new TypeError(\"Expected a string\");\n const str = String(glob);\n let reStr = \"\";\n const extended = opts ? true : false;\n const globstar = opts ? true : false;\n let inGroup = false;\n const flags = opts && typeof opts.flags === \"string\" ? opts.flags : \"\";\n let c;\n for (let i = 0, len = str.length; i < len; i++) {\n c = str[i];\n switch (c) {\n case \"/\":\n case \"$\":\n case \"^\":\n case \"+\":\n case \".\":\n case \"(\":\n case \")\":\n case \"=\":\n case \"!\":\n case \"|\":\n reStr += \"\\\\\" + c;\n break;\n case \"?\": if (extended) {\n reStr += \".\";\n break;\n }\n case \"[\":\n case \"]\": if (extended) {\n reStr += c;\n break;\n }\n case \"{\": if (extended) {\n inGroup = true;\n reStr += \"(\";\n break;\n }\n case \"}\": if (extended) {\n inGroup = false;\n reStr += \")\";\n break;\n }\n case \",\":\n if (inGroup) {\n reStr += \"|\";\n break;\n }\n reStr += \"\\\\\" + c;\n break;\n case \"*\":\n const prevChar = str[i - 1];\n let starCount = 1;\n while (str[i + 1] === \"*\") {\n starCount++;\n i++;\n }\n const nextChar = str[i + 1];\n if (!globstar) reStr += \".*\";\n else if (starCount > 1 && (prevChar === \"/\" || prevChar === void 0 || prevChar === \"{\" || prevChar === \",\") && (nextChar === \"/\" || nextChar === void 0 || nextChar === \",\" || nextChar === \"}\")) {\n if (nextChar === \"/\") i++;\n else if (prevChar === \"/\" && reStr.endsWith(\"\\\\/\")) reStr = reStr.substr(0, reStr.length - 2);\n reStr += \"((?:[^/]*(?:/|$))*)\";\n } else reStr += \"([^/]*)\";\n break;\n default: reStr += c;\n }\n }\n if (!flags || !~flags.indexOf(\"g\")) reStr = \"^\" + reStr + \"$\";\n return new RegExp(reStr, flags);\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/services/jsonSchemaService.js\n const BANG = \"!\";\n const PATH_SEP = \"/\";\n var FilePatternAssociation = class {\n constructor(pattern, folderUri, uris) {\n this.folderUri = folderUri;\n this.uris = uris;\n this.globWrappers = [];\n try {\n for (let patternString of pattern) {\n const include = patternString[0] !== BANG;\n if (!include) patternString = patternString.substring(1);\n if (patternString.length > 0) {\n if (patternString[0] === PATH_SEP) patternString = patternString.substring(1);\n this.globWrappers.push({\n regexp: createRegex(\"**/\" + patternString, {\n extended: true,\n globstar: true\n }),\n include\n });\n }\n }\n if (folderUri) {\n folderUri = normalizeResourceForMatching(folderUri);\n if (!folderUri.endsWith(\"/\")) folderUri = folderUri + \"/\";\n this.folderUri = folderUri;\n }\n } catch (e) {\n this.globWrappers.length = 0;\n this.uris = [];\n }\n }\n matchesPattern(fileName) {\n if (this.folderUri && !fileName.startsWith(this.folderUri)) return false;\n let match = false;\n for (const { regexp, include } of this.globWrappers) if (regexp.test(fileName)) match = include;\n return match;\n }\n getURIs() {\n return this.uris;\n }\n };\n var SchemaHandle = class {\n constructor(service, uri, unresolvedSchemaContent) {\n this.service = service;\n this.uri = uri;\n this.dependencies = /* @__PURE__ */ new Set();\n this.anchors = void 0;\n if (unresolvedSchemaContent) this.unresolvedSchema = this.service.promise.resolve(new UnresolvedSchema(unresolvedSchemaContent));\n }\n getUnresolvedSchema() {\n if (!this.unresolvedSchema) this.unresolvedSchema = this.service.loadSchema(this.uri);\n return this.unresolvedSchema;\n }\n getResolvedSchema() {\n if (!this.resolvedSchema) this.resolvedSchema = this.getUnresolvedSchema().then((unresolved) => {\n return this.service.resolveSchemaContent(unresolved, this);\n });\n return this.resolvedSchema;\n }\n clearSchema() {\n const hasChanges = !!this.unresolvedSchema;\n this.resolvedSchema = void 0;\n this.unresolvedSchema = void 0;\n this.dependencies.clear();\n this.anchors = void 0;\n return hasChanges;\n }\n };\n var UnresolvedSchema = class {\n constructor(schema, errors = []) {\n this.schema = schema;\n this.errors = errors;\n }\n };\n var ResolvedSchema = class {\n constructor(schema, errors = [], warnings = [], schemaDraft) {\n this.schema = schema;\n this.errors = errors;\n this.warnings = warnings;\n this.schemaDraft = schemaDraft;\n }\n getSection(path) {\n const schemaRef = this.getSectionRecursive(path, this.schema);\n if (schemaRef) return asSchema(schemaRef);\n }\n getSectionRecursive(path, schema) {\n if (!schema || typeof schema === \"boolean\" || path.length === 0) return schema;\n const next = path.shift();\n if (schema.properties && typeof schema.properties[next]) return this.getSectionRecursive(path, schema.properties[next]);\n else if (schema.patternProperties) {\n for (const pattern of Object.keys(schema.patternProperties)) if (extendedRegExp(pattern)?.test(next)) return this.getSectionRecursive(path, schema.patternProperties[pattern]);\n } else if (typeof schema.additionalProperties === \"object\") return this.getSectionRecursive(path, schema.additionalProperties);\n else if (next.match(\"[0-9]+\")) {\n if (Array.isArray(schema.items)) {\n const index = parseInt(next, 10);\n if (!isNaN(index) && schema.items[index]) return this.getSectionRecursive(path, schema.items[index]);\n } else if (schema.items) return this.getSectionRecursive(path, schema.items);\n }\n }\n };\n var JSONSchemaService = class {\n constructor(requestService, contextService, promiseConstructor) {\n this.contextService = contextService;\n this.requestService = requestService;\n this.promiseConstructor = promiseConstructor || Promise;\n this.callOnDispose = [];\n this.contributionSchemas = {};\n this.contributionAssociations = [];\n this.schemasById = {};\n this.filePatternAssociations = [];\n this.registeredSchemasIds = {};\n }\n getRegisteredSchemaIds(filter) {\n return Object.keys(this.registeredSchemasIds).filter((id) => {\n const scheme = URI.parse(id).scheme;\n return scheme !== \"schemaservice\" && (!filter || filter(scheme));\n });\n }\n get promise() {\n return this.promiseConstructor;\n }\n dispose() {\n while (this.callOnDispose.length > 0) this.callOnDispose.pop()();\n }\n onResourceChange(uri) {\n this.cachedSchemaForResource = void 0;\n let hasChanges = false;\n uri = normalizeId(uri);\n const toWalk = [uri];\n const all = Object.keys(this.schemasById).map((key) => this.schemasById[key]);\n while (toWalk.length) {\n const curr = toWalk.pop();\n for (let i = 0; i < all.length; i++) {\n const handle = all[i];\n if (handle && (handle.uri === curr || handle.dependencies.has(curr))) {\n if (handle.uri !== curr) toWalk.push(handle.uri);\n if (handle.clearSchema()) hasChanges = true;\n all[i] = void 0;\n }\n }\n }\n return hasChanges;\n }\n setSchemaContributions(schemaContributions) {\n if (schemaContributions.schemas) {\n const schemas = schemaContributions.schemas;\n for (const id in schemas) {\n const normalizedId = normalizeId(id);\n this.contributionSchemas[normalizedId] = this.addSchemaHandle(normalizedId, schemas[id]);\n }\n }\n if (Array.isArray(schemaContributions.schemaAssociations)) {\n const schemaAssociations = schemaContributions.schemaAssociations;\n for (let schemaAssociation of schemaAssociations) {\n const uris = schemaAssociation.uris.map(normalizeId);\n const association = this.addFilePatternAssociation(schemaAssociation.pattern, schemaAssociation.folderUri, uris);\n this.contributionAssociations.push(association);\n }\n }\n }\n addSchemaHandle(id, unresolvedSchemaContent) {\n const schemaHandle = new SchemaHandle(this, id, unresolvedSchemaContent);\n this.schemasById[id] = schemaHandle;\n return schemaHandle;\n }\n getOrAddSchemaHandle(id, unresolvedSchemaContent) {\n return this.schemasById[id] || this.addSchemaHandle(id, unresolvedSchemaContent);\n }\n addFilePatternAssociation(pattern, folderUri, uris) {\n const fpa = new FilePatternAssociation(pattern, folderUri, uris);\n this.filePatternAssociations.push(fpa);\n return fpa;\n }\n registerExternalSchema(config) {\n const id = normalizeId(config.uri);\n this.registeredSchemasIds[id] = true;\n this.cachedSchemaForResource = void 0;\n if (config.fileMatch && config.fileMatch.length) this.addFilePatternAssociation(config.fileMatch, config.folderUri, [id]);\n return config.schema ? this.addSchemaHandle(id, config.schema) : this.getOrAddSchemaHandle(id);\n }\n clearExternalSchemas() {\n this.schemasById = {};\n this.filePatternAssociations = [];\n this.registeredSchemasIds = {};\n this.cachedSchemaForResource = void 0;\n for (const id in this.contributionSchemas) {\n this.schemasById[id] = this.contributionSchemas[id];\n this.registeredSchemasIds[id] = true;\n }\n for (const contributionAssociation of this.contributionAssociations) this.filePatternAssociations.push(contributionAssociation);\n }\n getResolvedSchema(schemaId) {\n const id = normalizeId(schemaId);\n const schemaHandle = this.schemasById[id];\n if (schemaHandle) return schemaHandle.getResolvedSchema();\n return this.promise.resolve(void 0);\n }\n loadSchema(url) {\n if (!this.requestService) {\n const errorMessage = t(\"Unable to load schema from '{0}'. No schema request service available\", toDisplayString(url));\n return this.promise.resolve(new UnresolvedSchema({}, [errorMessage]));\n }\n if (url.startsWith(\"http://json-schema.org/\")) url = \"https\" + url.substring(4);\n return this.requestService(url).then((content) => {\n if (!content) return new UnresolvedSchema({}, [t(\"Unable to load schema from '{0}': No content.\", toDisplayString(url))]);\n const errors = [];\n if (content.charCodeAt(0) === 65279) {\n errors.push(t(\"Problem reading content from '{0}': UTF-8 with BOM detected, only UTF 8 is allowed.\", toDisplayString(url)));\n content = content.trimStart();\n }\n let schemaContent = {};\n const jsonErrors = [];\n schemaContent = parse$1(content, jsonErrors);\n if (jsonErrors.length) errors.push(t(\"Unable to parse content from '{0}': Parse error at offset {1}.\", toDisplayString(url), jsonErrors[0].offset));\n return new UnresolvedSchema(schemaContent, errors);\n }, (error) => {\n let errorMessage = error.toString();\n const errorSplit = error.toString().split(\"Error: \");\n if (errorSplit.length > 1) errorMessage = errorSplit[1];\n if (endsWith(errorMessage, \".\")) errorMessage = errorMessage.substr(0, errorMessage.length - 1);\n return new UnresolvedSchema({}, [t(\"Unable to load schema from '{0}': {1}.\", toDisplayString(url), errorMessage)]);\n });\n }\n resolveSchemaContent(schemaToResolve, handle) {\n const resolveErrors = schemaToResolve.errors.slice(0);\n const schema = schemaToResolve.schema;\n let schemaDraft = schema.$schema ? normalizeId(schema.$schema) : void 0;\n if (schemaDraft === \"http://json-schema.org/draft-03/schema\") return this.promise.resolve(new ResolvedSchema({}, [t(\"Draft-03 schemas are not supported.\")], [], schemaDraft));\n let usesUnsupportedFeatures = /* @__PURE__ */ new Set();\n const contextService = this.contextService;\n const findSectionByJSONPointer = (schema, path) => {\n path = decodeURIComponent(path);\n let current = schema;\n if (path[0] === \"/\") path = path.substring(1);\n path.split(\"/\").some((part) => {\n part = part.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n current = current[part];\n return !current;\n });\n return current;\n };\n const findSchemaById = (schema, handle, id) => {\n if (!handle.anchors) handle.anchors = collectAnchors(schema);\n return handle.anchors.get(id);\n };\n const merge = (target, section) => {\n for (const key in section) if (section.hasOwnProperty(key) && key !== \"id\" && key !== \"$id\") target[key] = section[key];\n };\n const mergeRef = (target, sourceRoot, sourceHandle, refSegment) => {\n let section;\n if (refSegment === void 0 || refSegment.length === 0) section = sourceRoot;\n else if (refSegment.charAt(0) === \"/\") section = findSectionByJSONPointer(sourceRoot, refSegment);\n else section = findSchemaById(sourceRoot, sourceHandle, refSegment);\n if (section) merge(target, section);\n else resolveErrors.push(t(\"$ref '{0}' in '{1}' can not be resolved.\", refSegment || \"\", sourceHandle.uri));\n };\n const resolveExternalLink = (node, uri, refSegment, parentHandle) => {\n if (contextService && !/^[A-Za-z][A-Za-z0-9+\\-.+]*:\\/\\/.*/.test(uri)) uri = contextService.resolveRelativePath(uri, parentHandle.uri);\n uri = normalizeId(uri);\n const referencedHandle = this.getOrAddSchemaHandle(uri);\n return referencedHandle.getUnresolvedSchema().then((unresolvedSchema) => {\n parentHandle.dependencies.add(uri);\n if (unresolvedSchema.errors.length) {\n const loc = refSegment ? uri + \"#\" + refSegment : uri;\n resolveErrors.push(t(\"Problems loading reference '{0}': {1}\", loc, unresolvedSchema.errors[0]));\n }\n mergeRef(node, unresolvedSchema.schema, referencedHandle, refSegment);\n return resolveRefs(node, unresolvedSchema.schema, referencedHandle);\n });\n };\n const resolveRefs = (node, parentSchema, parentHandle) => {\n const openPromises = [];\n this.traverseNodes(node, (next) => {\n const seenRefs = /* @__PURE__ */ new Set();\n while (next.$ref) {\n const ref = next.$ref;\n const segments = ref.split(\"#\", 2);\n delete next.$ref;\n if (segments[0].length > 0) {\n openPromises.push(resolveExternalLink(next, segments[0], segments[1], parentHandle));\n return;\n } else if (!seenRefs.has(ref)) {\n const id = segments[1];\n mergeRef(next, parentSchema, parentHandle, id);\n seenRefs.add(ref);\n }\n }\n if (next.$recursiveRef) usesUnsupportedFeatures.add(\"$recursiveRef\");\n if (next.$dynamicRef) usesUnsupportedFeatures.add(\"$dynamicRef\");\n });\n return this.promise.all(openPromises);\n };\n const collectAnchors = (root) => {\n const result = /* @__PURE__ */ new Map();\n this.traverseNodes(root, (next) => {\n const id = next.$id || next.id;\n const anchor = isString(id) && id.charAt(0) === \"#\" ? id.substring(1) : next.$anchor;\n if (anchor) if (result.has(anchor)) resolveErrors.push(t(\"Duplicate anchor declaration: '{0}'\", anchor));\n else result.set(anchor, next);\n if (next.$recursiveAnchor) usesUnsupportedFeatures.add(\"$recursiveAnchor\");\n if (next.$dynamicAnchor) usesUnsupportedFeatures.add(\"$dynamicAnchor\");\n });\n return result;\n };\n return resolveRefs(schema, schema, handle).then((_) => {\n let resolveWarnings = [];\n if (usesUnsupportedFeatures.size) resolveWarnings.push(t(\"The schema uses meta-schema features ({0}) that are not yet supported by the validator.\", Array.from(usesUnsupportedFeatures.keys()).join(\", \")));\n return new ResolvedSchema(schema, resolveErrors, resolveWarnings, schemaDraft);\n });\n }\n traverseNodes(root, handle) {\n if (!root || typeof root !== \"object\") return Promise.resolve(null);\n const seen = /* @__PURE__ */ new Set();\n const collectEntries = (...entries) => {\n for (const entry of entries) if (isObject(entry)) toWalk.push(entry);\n };\n const collectMapEntries = (...maps) => {\n for (const map of maps) if (isObject(map)) for (const k in map) {\n const entry = map[k];\n if (isObject(entry)) toWalk.push(entry);\n }\n };\n const collectArrayEntries = (...arrays) => {\n for (const array of arrays) if (Array.isArray(array)) {\n for (const entry of array) if (isObject(entry)) toWalk.push(entry);\n }\n };\n const collectEntryOrArrayEntries = (items) => {\n if (Array.isArray(items)) {\n for (const entry of items) if (isObject(entry)) toWalk.push(entry);\n } else if (isObject(items)) toWalk.push(items);\n };\n const toWalk = [root];\n let next = toWalk.pop();\n while (next) {\n if (!seen.has(next)) {\n seen.add(next);\n handle(next);\n collectEntries(next.additionalItems, next.additionalProperties, next.not, next.contains, next.propertyNames, next.if, next.then, next.else, next.unevaluatedItems, next.unevaluatedProperties);\n collectMapEntries(next.definitions, next.$defs, next.properties, next.patternProperties, next.dependencies, next.dependentSchemas);\n collectArrayEntries(next.anyOf, next.allOf, next.oneOf, next.prefixItems);\n collectEntryOrArrayEntries(next.items);\n }\n next = toWalk.pop();\n }\n }\n getSchemaFromProperty(resource, document) {\n if (document.root?.type === \"object\") {\n for (const p of document.root.properties) if (p.keyNode.value === \"$schema\" && p.valueNode?.type === \"string\") {\n let schemaId = p.valueNode.value;\n if (this.contextService && !/^\\w[\\w\\d+.-]*:/.test(schemaId)) schemaId = this.contextService.resolveRelativePath(schemaId, resource);\n return schemaId;\n }\n }\n }\n getAssociatedSchemas(resource) {\n const seen = Object.create(null);\n const schemas = [];\n const normalizedResource = normalizeResourceForMatching(resource);\n for (const entry of this.filePatternAssociations) if (entry.matchesPattern(normalizedResource)) {\n for (const schemaId of entry.getURIs()) if (!seen[schemaId]) {\n schemas.push(schemaId);\n seen[schemaId] = true;\n }\n }\n return schemas;\n }\n getSchemaURIsForResource(resource, document) {\n let schemeId = document && this.getSchemaFromProperty(resource, document);\n if (schemeId) return [schemeId];\n return this.getAssociatedSchemas(resource);\n }\n getSchemaForResource(resource, document) {\n if (document) {\n let schemeId = this.getSchemaFromProperty(resource, document);\n if (schemeId) {\n const id = normalizeId(schemeId);\n return this.getOrAddSchemaHandle(id).getResolvedSchema();\n }\n }\n if (this.cachedSchemaForResource && this.cachedSchemaForResource.resource === resource) return this.cachedSchemaForResource.resolvedSchema;\n const schemas = this.getAssociatedSchemas(resource);\n const resolvedSchema = schemas.length > 0 ? this.createCombinedSchema(resource, schemas).getResolvedSchema() : this.promise.resolve(void 0);\n this.cachedSchemaForResource = {\n resource,\n resolvedSchema\n };\n return resolvedSchema;\n }\n createCombinedSchema(resource, schemaIds) {\n if (schemaIds.length === 1) return this.getOrAddSchemaHandle(schemaIds[0]);\n else {\n const combinedSchemaId = \"schemaservice://combinedSchema/\" + encodeURIComponent(resource);\n const combinedSchema = { allOf: schemaIds.map((schemaId) => ({ $ref: schemaId })) };\n return this.addSchemaHandle(combinedSchemaId, combinedSchema);\n }\n }\n getMatchingSchemas(document, jsonDocument, schema) {\n if (schema) {\n const id = schema.id || \"schemaservice://untitled/matchingSchemas/\" + idCounter++;\n return this.addSchemaHandle(id, schema).getResolvedSchema().then((resolvedSchema) => {\n return jsonDocument.getMatchingSchemas(resolvedSchema.schema).filter((s) => !s.inverted);\n });\n }\n return this.getSchemaForResource(document.uri, jsonDocument).then((schema) => {\n if (schema) return jsonDocument.getMatchingSchemas(schema.schema).filter((s) => !s.inverted);\n return [];\n });\n }\n };\n let idCounter = 0;\n function normalizeId(id) {\n try {\n return URI.parse(id).toString(true);\n } catch (e) {\n return id;\n }\n }\n function normalizeResourceForMatching(resource) {\n try {\n return URI.parse(resource).with({\n fragment: null,\n query: null\n }).toString(true);\n } catch (e) {\n return resource;\n }\n }\n function toDisplayString(url) {\n try {\n const uri = URI.parse(url);\n if (uri.scheme === \"file\") return uri.fsPath;\n } catch (e) {}\n return url;\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/services/jsonFolding.js\n function getFoldingRanges(document, context) {\n const ranges = [];\n const nestingLevels = [];\n const stack = [];\n let prevStart = -1;\n const scanner = createScanner(document.getText(), false);\n let token = scanner.scan();\n function addRange(range) {\n ranges.push(range);\n nestingLevels.push(stack.length);\n }\n while (token !== 17) {\n switch (token) {\n case 1:\n case 3: {\n const startLine = document.positionAt(scanner.getTokenOffset()).line;\n const range = {\n startLine,\n endLine: startLine,\n kind: token === 1 ? \"object\" : \"array\"\n };\n stack.push(range);\n break;\n }\n case 2:\n case 4: {\n const kind = token === 2 ? \"object\" : \"array\";\n if (stack.length > 0 && stack[stack.length - 1].kind === kind) {\n const range = stack.pop();\n const line = document.positionAt(scanner.getTokenOffset()).line;\n if (range && line > range.startLine + 1 && prevStart !== range.startLine) {\n range.endLine = line - 1;\n addRange(range);\n prevStart = range.startLine;\n }\n }\n break;\n }\n case 13: {\n const startLine = document.positionAt(scanner.getTokenOffset()).line;\n const endLine = document.positionAt(scanner.getTokenOffset() + scanner.getTokenLength()).line;\n if (scanner.getTokenError() === 1 && startLine + 1 < document.lineCount) scanner.setPosition(document.offsetAt(Position.create(startLine + 1, 0)));\n else if (startLine < endLine) {\n addRange({\n startLine,\n endLine,\n kind: FoldingRangeKind.Comment\n });\n prevStart = startLine;\n }\n break;\n }\n case 12: {\n const m = document.getText().substr(scanner.getTokenOffset(), scanner.getTokenLength()).match(/^\\/\\/\\s*#(region\\b)|(endregion\\b)/);\n if (m) {\n const line = document.positionAt(scanner.getTokenOffset()).line;\n if (m[1]) {\n const range = {\n startLine: line,\n endLine: line,\n kind: FoldingRangeKind.Region\n };\n stack.push(range);\n } else {\n let i = stack.length - 1;\n while (i >= 0 && stack[i].kind !== FoldingRangeKind.Region) i--;\n if (i >= 0) {\n const range = stack[i];\n stack.length = i;\n if (line > range.startLine && prevStart !== range.startLine) {\n range.endLine = line;\n addRange(range);\n prevStart = range.startLine;\n }\n }\n }\n }\n break;\n }\n }\n token = scanner.scan();\n }\n const rangeLimit = context && context.rangeLimit;\n if (typeof rangeLimit !== \"number\" || ranges.length <= rangeLimit) return ranges;\n if (context && context.onRangeLimitExceeded) context.onRangeLimitExceeded(document.uri);\n const counts = [];\n for (let level of nestingLevels) if (level < 30) counts[level] = (counts[level] || 0) + 1;\n let entries = 0;\n let maxLevel = 0;\n for (let i = 0; i < counts.length; i++) {\n const n = counts[i];\n if (n) {\n if (n + entries > rangeLimit) {\n maxLevel = i;\n break;\n }\n entries += n;\n }\n }\n const result = [];\n for (let i = 0; i < ranges.length; i++) {\n const level = nestingLevels[i];\n if (typeof level === \"number\") {\n if (level < maxLevel || level === maxLevel && entries++ < rangeLimit) result.push(ranges[i]);\n }\n }\n return result;\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/services/jsonSelectionRanges.js\n function getSelectionRanges(document, positions, doc) {\n function getSelectionRange(position) {\n let offset = document.offsetAt(position);\n let node = doc.getNodeFromOffset(offset, true);\n const result = [];\n while (node) {\n switch (node.type) {\n case \"string\":\n case \"object\":\n case \"array\":\n const cStart = node.offset + 1, cEnd = node.offset + node.length - 1;\n if (cStart < cEnd && offset >= cStart && offset <= cEnd) result.push(newRange(cStart, cEnd));\n result.push(newRange(node.offset, node.offset + node.length));\n break;\n case \"number\":\n case \"boolean\":\n case \"null\":\n case \"property\":\n result.push(newRange(node.offset, node.offset + node.length));\n break;\n }\n if (node.type === \"property\" || node.parent && node.parent.type === \"array\") {\n const afterCommaOffset = getOffsetAfterNextToken(node.offset + node.length, 5);\n if (afterCommaOffset !== -1) result.push(newRange(node.offset, afterCommaOffset));\n }\n node = node.parent;\n }\n let current = void 0;\n for (let index = result.length - 1; index >= 0; index--) current = SelectionRange.create(result[index], current);\n if (!current) current = SelectionRange.create(Range.create(position, position));\n return current;\n }\n function newRange(start, end) {\n return Range.create(document.positionAt(start), document.positionAt(end));\n }\n const scanner = createScanner(document.getText(), true);\n function getOffsetAfterNextToken(offset, expectedToken) {\n scanner.setPosition(offset);\n if (scanner.scan() === expectedToken) return scanner.getTokenOffset() + scanner.getTokenLength();\n return -1;\n }\n return positions.map(getSelectionRange);\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/utils/format.js\n function format(documentToFormat, formattingOptions, formattingRange) {\n let range = void 0;\n if (formattingRange) {\n const offset = documentToFormat.offsetAt(formattingRange.start);\n range = {\n offset,\n length: documentToFormat.offsetAt(formattingRange.end) - offset\n };\n }\n const options = {\n tabSize: formattingOptions ? formattingOptions.tabSize : 4,\n insertSpaces: formattingOptions?.insertSpaces === true,\n insertFinalNewline: formattingOptions?.insertFinalNewline === true,\n eol: \"\\n\",\n keepLines: formattingOptions?.keepLines === true\n };\n return format$2(documentToFormat.getText(), range, options).map((edit) => {\n return TextEdit.replace(Range.create(documentToFormat.positionAt(edit.offset), documentToFormat.positionAt(edit.offset + edit.length)), edit.content);\n });\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/utils/propertyTree.js\n var Container;\n (function(Container) {\n Container[Container[\"Object\"] = 0] = \"Object\";\n Container[Container[\"Array\"] = 1] = \"Array\";\n })(Container || (Container = {}));\n var PropertyTree = class {\n constructor(propertyName, beginningLineNumber) {\n this.propertyName = propertyName ?? \"\";\n this.beginningLineNumber = beginningLineNumber;\n this.childrenProperties = [];\n this.lastProperty = false;\n this.noKeyName = false;\n }\n addChildProperty(childProperty) {\n childProperty.parent = this;\n if (this.childrenProperties.length > 0) {\n let insertionIndex = 0;\n if (childProperty.noKeyName) insertionIndex = this.childrenProperties.length;\n else insertionIndex = binarySearchOnPropertyArray(this.childrenProperties, childProperty, compareProperties);\n if (insertionIndex < 0) insertionIndex = insertionIndex * -1 - 1;\n this.childrenProperties.splice(insertionIndex, 0, childProperty);\n } else this.childrenProperties.push(childProperty);\n return childProperty;\n }\n };\n function compareProperties(propertyTree1, propertyTree2) {\n const propertyName1 = propertyTree1.propertyName.toLowerCase();\n const propertyName2 = propertyTree2.propertyName.toLowerCase();\n if (propertyName1 < propertyName2) return -1;\n else if (propertyName1 > propertyName2) return 1;\n return 0;\n }\n function binarySearchOnPropertyArray(propertyTreeArray, propertyTree, compare_fn) {\n const propertyName = propertyTree.propertyName.toLowerCase();\n const firstPropertyInArrayName = propertyTreeArray[0].propertyName.toLowerCase();\n const lastPropertyInArrayName = propertyTreeArray[propertyTreeArray.length - 1].propertyName.toLowerCase();\n if (propertyName < firstPropertyInArrayName) return 0;\n if (propertyName > lastPropertyInArrayName) return propertyTreeArray.length;\n let m = 0;\n let n = propertyTreeArray.length - 1;\n while (m <= n) {\n let k = n + m >> 1;\n let cmp = compare_fn(propertyTree, propertyTreeArray[k]);\n if (cmp > 0) m = k + 1;\n else if (cmp < 0) n = k - 1;\n else return k;\n }\n return -m - 1;\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/utils/sort.js\n function sort(documentToSort, formattingOptions) {\n const options = {\n ...formattingOptions,\n keepLines: false\n };\n const formattedJsonString = TextDocument.applyEdits(documentToSort, format(documentToSort, options, void 0));\n const formattedJsonDocument = TextDocument.create(\"test://test.json\", \"json\", 0, formattedJsonString);\n const sortedJsonDocument = sortJsoncDocument(formattedJsonDocument, findJsoncPropertyTree(formattedJsonDocument));\n const edits = format(sortedJsonDocument, options, void 0);\n const sortedAndFormattedJsonDocument = TextDocument.applyEdits(sortedJsonDocument, edits);\n return [TextEdit.replace(Range.create(Position.create(0, 0), documentToSort.positionAt(documentToSort.getText().length)), sortedAndFormattedJsonDocument)];\n }\n function findJsoncPropertyTree(formattedDocument) {\n const scanner = createScanner(formattedDocument.getText(), false);\n let rootTree = new PropertyTree();\n let currentTree = rootTree;\n let currentProperty = rootTree;\n let lastProperty = rootTree;\n let token = void 0;\n let lastTokenLine = 0;\n let numberOfCharactersOnPreviousLines = 0;\n let lastNonTriviaNonCommentToken = void 0;\n let secondToLastNonTriviaNonCommentToken = void 0;\n let lineOfLastNonTriviaNonCommentToken = -1;\n let endIndexOfLastNonTriviaNonCommentToken = -1;\n let beginningLineNumber = 0;\n let endLineNumber = 0;\n let currentContainerStack = [];\n let updateLastPropertyEndLineNumber = false;\n let updateBeginningLineNumber = false;\n while ((token = scanner.scan()) !== 17) {\n if (updateLastPropertyEndLineNumber === true && token !== 14 && token !== 15 && token !== 12 && token !== 13 && currentProperty.endLineNumber === void 0) {\n let endLineNumber = scanner.getTokenStartLine();\n if (secondToLastNonTriviaNonCommentToken === 2 || secondToLastNonTriviaNonCommentToken === 4) lastProperty.endLineNumber = endLineNumber - 1;\n else currentProperty.endLineNumber = endLineNumber - 1;\n beginningLineNumber = endLineNumber;\n updateLastPropertyEndLineNumber = false;\n }\n if (updateBeginningLineNumber === true && token !== 14 && token !== 15 && token !== 12 && token !== 13) {\n beginningLineNumber = scanner.getTokenStartLine();\n updateBeginningLineNumber = false;\n }\n if (scanner.getTokenStartLine() !== lastTokenLine) {\n for (let i = lastTokenLine; i < scanner.getTokenStartLine(); i++) {\n const lengthOfLine = formattedDocument.getText(Range.create(Position.create(i, 0), Position.create(i + 1, 0))).length;\n numberOfCharactersOnPreviousLines = numberOfCharactersOnPreviousLines + lengthOfLine;\n }\n lastTokenLine = scanner.getTokenStartLine();\n }\n switch (token) {\n case 10:\n if (lastNonTriviaNonCommentToken === void 0 || lastNonTriviaNonCommentToken === 1 || lastNonTriviaNonCommentToken === 5 && currentContainerStack[currentContainerStack.length - 1] === Container.Object) {\n const childProperty = new PropertyTree(scanner.getTokenValue(), beginningLineNumber);\n lastProperty = currentProperty;\n currentProperty = currentTree.addChildProperty(childProperty);\n }\n break;\n case 3:\n if (rootTree.beginningLineNumber === void 0) rootTree.beginningLineNumber = scanner.getTokenStartLine();\n if (currentContainerStack[currentContainerStack.length - 1] === Container.Object) currentTree = currentProperty;\n else if (currentContainerStack[currentContainerStack.length - 1] === Container.Array) {\n const childProperty = new PropertyTree(scanner.getTokenValue(), beginningLineNumber);\n childProperty.noKeyName = true;\n lastProperty = currentProperty;\n currentProperty = currentTree.addChildProperty(childProperty);\n currentTree = currentProperty;\n }\n currentContainerStack.push(Container.Array);\n currentProperty.type = Container.Array;\n beginningLineNumber = scanner.getTokenStartLine();\n beginningLineNumber++;\n break;\n case 1:\n if (rootTree.beginningLineNumber === void 0) rootTree.beginningLineNumber = scanner.getTokenStartLine();\n else if (currentContainerStack[currentContainerStack.length - 1] === Container.Array) {\n const childProperty = new PropertyTree(scanner.getTokenValue(), beginningLineNumber);\n childProperty.noKeyName = true;\n lastProperty = currentProperty;\n currentProperty = currentTree.addChildProperty(childProperty);\n }\n currentProperty.type = Container.Object;\n currentContainerStack.push(Container.Object);\n currentTree = currentProperty;\n beginningLineNumber = scanner.getTokenStartLine();\n beginningLineNumber++;\n break;\n case 4:\n endLineNumber = scanner.getTokenStartLine();\n currentContainerStack.pop();\n if (currentProperty.endLineNumber === void 0 && (lastNonTriviaNonCommentToken === 2 || lastNonTriviaNonCommentToken === 4)) {\n currentProperty.endLineNumber = endLineNumber - 1;\n currentProperty.lastProperty = true;\n currentProperty.lineWhereToAddComma = lineOfLastNonTriviaNonCommentToken;\n currentProperty.indexWhereToAddComa = endIndexOfLastNonTriviaNonCommentToken;\n lastProperty = currentProperty;\n currentProperty = currentProperty ? currentProperty.parent : void 0;\n currentTree = currentProperty;\n }\n rootTree.endLineNumber = endLineNumber;\n beginningLineNumber = endLineNumber + 1;\n break;\n case 2:\n endLineNumber = scanner.getTokenStartLine();\n currentContainerStack.pop();\n if (lastNonTriviaNonCommentToken !== 1) {\n if (currentProperty.endLineNumber === void 0) {\n currentProperty.endLineNumber = endLineNumber - 1;\n currentProperty.lastProperty = true;\n currentProperty.lineWhereToAddComma = lineOfLastNonTriviaNonCommentToken;\n currentProperty.indexWhereToAddComa = endIndexOfLastNonTriviaNonCommentToken;\n }\n lastProperty = currentProperty;\n currentProperty = currentProperty ? currentProperty.parent : void 0;\n currentTree = currentProperty;\n }\n rootTree.endLineNumber = scanner.getTokenStartLine();\n beginningLineNumber = endLineNumber + 1;\n break;\n case 5:\n endLineNumber = scanner.getTokenStartLine();\n if (currentProperty.endLineNumber === void 0 && (currentContainerStack[currentContainerStack.length - 1] === Container.Object || currentContainerStack[currentContainerStack.length - 1] === Container.Array && (lastNonTriviaNonCommentToken === 2 || lastNonTriviaNonCommentToken === 4))) {\n currentProperty.endLineNumber = endLineNumber;\n currentProperty.commaIndex = scanner.getTokenOffset() - numberOfCharactersOnPreviousLines;\n currentProperty.commaLine = endLineNumber;\n }\n if (lastNonTriviaNonCommentToken === 2 || lastNonTriviaNonCommentToken === 4) {\n lastProperty = currentProperty;\n currentProperty = currentProperty ? currentProperty.parent : void 0;\n currentTree = currentProperty;\n }\n beginningLineNumber = endLineNumber + 1;\n break;\n case 13:\n if (lastNonTriviaNonCommentToken === 5 && lineOfLastNonTriviaNonCommentToken === scanner.getTokenStartLine() && (currentContainerStack[currentContainerStack.length - 1] === Container.Array && (secondToLastNonTriviaNonCommentToken === 2 || secondToLastNonTriviaNonCommentToken === 4) || currentContainerStack[currentContainerStack.length - 1] === Container.Object)) {\n if (currentContainerStack[currentContainerStack.length - 1] === Container.Array && (secondToLastNonTriviaNonCommentToken === 2 || secondToLastNonTriviaNonCommentToken === 4) || currentContainerStack[currentContainerStack.length - 1] === Container.Object) {\n currentProperty.endLineNumber = void 0;\n updateLastPropertyEndLineNumber = true;\n }\n }\n if ((lastNonTriviaNonCommentToken === 1 || lastNonTriviaNonCommentToken === 3) && lineOfLastNonTriviaNonCommentToken === scanner.getTokenStartLine()) updateBeginningLineNumber = true;\n break;\n }\n if (token !== 14 && token !== 13 && token !== 12 && token !== 15) {\n secondToLastNonTriviaNonCommentToken = lastNonTriviaNonCommentToken;\n lastNonTriviaNonCommentToken = token;\n lineOfLastNonTriviaNonCommentToken = scanner.getTokenStartLine();\n endIndexOfLastNonTriviaNonCommentToken = scanner.getTokenOffset() + scanner.getTokenLength() - numberOfCharactersOnPreviousLines;\n }\n }\n return rootTree;\n }\n function sortJsoncDocument(jsonDocument, propertyTree) {\n if (propertyTree.childrenProperties.length === 0) return jsonDocument;\n const sortedJsonDocument = TextDocument.create(\"test://test.json\", \"json\", 0, jsonDocument.getText());\n const queueToSort = [];\n updateSortingQueue(queueToSort, propertyTree, propertyTree.beginningLineNumber);\n while (queueToSort.length > 0) {\n const dataToSort = queueToSort.shift();\n const propertyTreeArray = dataToSort.propertyTreeArray;\n let beginningLineNumber = dataToSort.beginningLineNumber;\n for (let i = 0; i < propertyTreeArray.length; i++) {\n const propertyTree = propertyTreeArray[i];\n const range = Range.create(Position.create(propertyTree.beginningLineNumber, 0), Position.create(propertyTree.endLineNumber + 1, 0));\n const jsonContentToReplace = jsonDocument.getText(range);\n const jsonDocumentToReplace = TextDocument.create(\"test://test.json\", \"json\", 0, jsonContentToReplace);\n if (propertyTree.lastProperty === true && i !== propertyTreeArray.length - 1) {\n const lineWhereToAddComma = propertyTree.lineWhereToAddComma - propertyTree.beginningLineNumber;\n const indexWhereToAddComma = propertyTree.indexWhereToAddComa;\n const edit = {\n range: Range.create(Position.create(lineWhereToAddComma, indexWhereToAddComma), Position.create(lineWhereToAddComma, indexWhereToAddComma)),\n text: \",\"\n };\n TextDocument.update(jsonDocumentToReplace, [edit], 1);\n } else if (propertyTree.lastProperty === false && i === propertyTreeArray.length - 1) {\n const commaIndex = propertyTree.commaIndex;\n const lineWhereToRemoveComma = propertyTree.commaLine - propertyTree.beginningLineNumber;\n const edit = {\n range: Range.create(Position.create(lineWhereToRemoveComma, commaIndex), Position.create(lineWhereToRemoveComma, commaIndex + 1)),\n text: \"\"\n };\n TextDocument.update(jsonDocumentToReplace, [edit], 1);\n }\n const length = propertyTree.endLineNumber - propertyTree.beginningLineNumber + 1;\n const edit = {\n range: Range.create(Position.create(beginningLineNumber, 0), Position.create(beginningLineNumber + length, 0)),\n text: jsonDocumentToReplace.getText()\n };\n TextDocument.update(sortedJsonDocument, [edit], 1);\n updateSortingQueue(queueToSort, propertyTree, beginningLineNumber);\n beginningLineNumber = beginningLineNumber + length;\n }\n }\n return sortedJsonDocument;\n }\n function updateSortingQueue(queue, propertyTree, beginningLineNumber) {\n if (propertyTree.childrenProperties.length === 0) return;\n if (propertyTree.type === Container.Object) {\n let minimumBeginningLineNumber = Infinity;\n for (const childProperty of propertyTree.childrenProperties) if (childProperty.beginningLineNumber < minimumBeginningLineNumber) minimumBeginningLineNumber = childProperty.beginningLineNumber;\n const diff = minimumBeginningLineNumber - propertyTree.beginningLineNumber;\n beginningLineNumber = beginningLineNumber + diff;\n queue.push(new SortingRange(beginningLineNumber, propertyTree.childrenProperties));\n } else if (propertyTree.type === Container.Array) updateSortingQueueForArrayProperties(queue, propertyTree, beginningLineNumber);\n }\n function updateSortingQueueForArrayProperties(queue, propertyTree, beginningLineNumber) {\n for (const subObject of propertyTree.childrenProperties) {\n if (subObject.type === Container.Object) {\n let minimumBeginningLineNumber = Infinity;\n for (const childProperty of subObject.childrenProperties) if (childProperty.beginningLineNumber < minimumBeginningLineNumber) minimumBeginningLineNumber = childProperty.beginningLineNumber;\n const diff = minimumBeginningLineNumber - subObject.beginningLineNumber;\n queue.push(new SortingRange(beginningLineNumber + subObject.beginningLineNumber - propertyTree.beginningLineNumber + diff, subObject.childrenProperties));\n }\n if (subObject.type === Container.Array) updateSortingQueueForArrayProperties(queue, subObject, beginningLineNumber + subObject.beginningLineNumber - propertyTree.beginningLineNumber);\n }\n }\n var SortingRange = class {\n constructor(beginningLineNumber, propertyTreeArray) {\n this.beginningLineNumber = beginningLineNumber;\n this.propertyTreeArray = propertyTreeArray;\n }\n };\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/services/jsonLinks.js\n function findLinks(document, doc) {\n const links = [];\n doc.visit((node) => {\n if (node.type === \"property\" && node.keyNode.value === \"$ref\" && node.valueNode?.type === \"string\") {\n const path = node.valueNode.value;\n const targetNode = findTargetNode(doc, path);\n if (targetNode) {\n const targetPos = document.positionAt(targetNode.offset);\n links.push({\n target: `${document.uri}#${targetPos.line + 1},${targetPos.character + 1}`,\n range: createRange(document, node.valueNode)\n });\n }\n }\n return true;\n });\n return Promise.resolve(links);\n }\n function createRange(document, node) {\n return Range.create(document.positionAt(node.offset + 1), document.positionAt(node.offset + node.length - 1));\n }\n function findTargetNode(doc, path) {\n const tokens = parseJSONPointer(path);\n if (!tokens) return null;\n return findNode(tokens, doc.root);\n }\n function findNode(pointer, node) {\n if (!node) return null;\n if (pointer.length === 0) return node;\n const token = pointer.shift();\n if (node && node.type === \"object\") {\n const propertyNode = node.properties.find((propertyNode) => propertyNode.keyNode.value === token);\n if (!propertyNode) return null;\n return findNode(pointer, propertyNode.valueNode);\n } else if (node && node.type === \"array\") {\n if (token.match(/^(0|[1-9][0-9]*)$/)) {\n const index = Number.parseInt(token);\n const arrayItem = node.items[index];\n if (!arrayItem) return null;\n return findNode(pointer, arrayItem);\n }\n }\n return null;\n }\n function parseJSONPointer(path) {\n if (path === \"#\") return [];\n if (path[0] !== \"#\" || path[1] !== \"/\") return null;\n return path.substring(2).split(/\\//).map(unescape);\n }\n function unescape(str) {\n return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/external/vscode-json-languageservice/lib/esm/jsonLanguageService.js\n function getLanguageService(params) {\n const promise = params.promiseConstructor || Promise;\n const jsonSchemaService = new JSONSchemaService(params.schemaRequestService, params.workspaceContext, promise);\n jsonSchemaService.setSchemaContributions(schemaContributions);\n const jsonCompletion = new JSONCompletion(jsonSchemaService, params.contributions, promise, params.clientCapabilities);\n const jsonHover = new JSONHover(jsonSchemaService, params.contributions, promise);\n const jsonDocumentSymbols = new JSONDocumentSymbols(jsonSchemaService);\n const jsonValidation = new JSONValidation(jsonSchemaService, promise);\n return {\n configure: (settings) => {\n jsonSchemaService.clearExternalSchemas();\n settings.schemas?.forEach(jsonSchemaService.registerExternalSchema.bind(jsonSchemaService));\n jsonValidation.configure(settings);\n },\n resetSchema: (uri) => jsonSchemaService.onResourceChange(uri),\n doValidation: jsonValidation.doValidation.bind(jsonValidation),\n getLanguageStatus: jsonValidation.getLanguageStatus.bind(jsonValidation),\n parseJSONDocument: (document) => parse(document, { collectComments: true }),\n newJSONDocument: (root, diagnostics) => newJSONDocument(root, diagnostics),\n getMatchingSchemas: jsonSchemaService.getMatchingSchemas.bind(jsonSchemaService),\n doResolve: jsonCompletion.doResolve.bind(jsonCompletion),\n doComplete: jsonCompletion.doComplete.bind(jsonCompletion),\n findDocumentSymbols: jsonDocumentSymbols.findDocumentSymbols.bind(jsonDocumentSymbols),\n findDocumentSymbols2: jsonDocumentSymbols.findDocumentSymbols2.bind(jsonDocumentSymbols),\n findDocumentColors: jsonDocumentSymbols.findDocumentColors.bind(jsonDocumentSymbols),\n getColorPresentations: jsonDocumentSymbols.getColorPresentations.bind(jsonDocumentSymbols),\n doHover: jsonHover.doHover.bind(jsonHover),\n getFoldingRanges,\n getSelectionRanges,\n findDefinition: () => Promise.resolve([]),\n findLinks,\n format: (document, range, options) => format(document, options, range),\n sort: (document, options) => sort(document, options)\n };\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/language/json/jsonWorker.js\n let defaultSchemaRequestService;\n if (typeof fetch !== \"undefined\") defaultSchemaRequestService = function(url) {\n return fetch(url).then((response) => response.text());\n };\n var JSONWorker = class {\n constructor(ctx, createData) {\n this._ctx = ctx;\n this._languageSettings = createData.languageSettings;\n this._languageId = createData.languageId;\n this._languageService = getLanguageService({\n workspaceContext: { resolveRelativePath: (relativePath, resource) => {\n return resolvePath(resource.substr(0, resource.lastIndexOf(\"/\") + 1), relativePath);\n } },\n schemaRequestService: createData.enableSchemaRequest ? defaultSchemaRequestService : void 0,\n clientCapabilities: ClientCapabilities.LATEST\n });\n this._languageService.configure(this._languageSettings);\n }\n async doValidation(uri) {\n let document = this._getTextDocument(uri);\n if (document) {\n let jsonDocument = this._languageService.parseJSONDocument(document);\n return this._languageService.doValidation(document, jsonDocument, this._languageSettings);\n }\n return Promise.resolve([]);\n }\n async doComplete(uri, position) {\n let document = this._getTextDocument(uri);\n if (!document) return null;\n let jsonDocument = this._languageService.parseJSONDocument(document);\n return this._languageService.doComplete(document, position, jsonDocument);\n }\n async doResolve(item) {\n return this._languageService.doResolve(item);\n }\n async doHover(uri, position) {\n let document = this._getTextDocument(uri);\n if (!document) return null;\n let jsonDocument = this._languageService.parseJSONDocument(document);\n return this._languageService.doHover(document, position, jsonDocument);\n }\n async format(uri, range, options) {\n let document = this._getTextDocument(uri);\n if (!document) return [];\n let textEdits = this._languageService.format(document, range, options);\n return Promise.resolve(textEdits);\n }\n async resetSchema(uri) {\n return Promise.resolve(this._languageService.resetSchema(uri));\n }\n async findDocumentSymbols(uri) {\n let document = this._getTextDocument(uri);\n if (!document) return [];\n let jsonDocument = this._languageService.parseJSONDocument(document);\n let symbols = this._languageService.findDocumentSymbols2(document, jsonDocument);\n return Promise.resolve(symbols);\n }\n async findDocumentColors(uri) {\n let document = this._getTextDocument(uri);\n if (!document) return [];\n let jsonDocument = this._languageService.parseJSONDocument(document);\n let colorSymbols = this._languageService.findDocumentColors(document, jsonDocument);\n return Promise.resolve(colorSymbols);\n }\n async getColorPresentations(uri, color, range) {\n let document = this._getTextDocument(uri);\n if (!document) return [];\n let jsonDocument = this._languageService.parseJSONDocument(document);\n let colorPresentations = this._languageService.getColorPresentations(document, jsonDocument, color, range);\n return Promise.resolve(colorPresentations);\n }\n async getFoldingRanges(uri, context) {\n let document = this._getTextDocument(uri);\n if (!document) return [];\n let ranges = this._languageService.getFoldingRanges(document, context);\n return Promise.resolve(ranges);\n }\n async getSelectionRanges(uri, positions) {\n let document = this._getTextDocument(uri);\n if (!document) return [];\n let jsonDocument = this._languageService.parseJSONDocument(document);\n let ranges = this._languageService.getSelectionRanges(document, positions, jsonDocument);\n return Promise.resolve(ranges);\n }\n async parseJSONDocument(uri) {\n let document = this._getTextDocument(uri);\n if (!document) return null;\n let jsonDocument = this._languageService.parseJSONDocument(document);\n return Promise.resolve(jsonDocument);\n }\n async getMatchingSchemas(uri) {\n let document = this._getTextDocument(uri);\n if (!document) return [];\n let jsonDocument = this._languageService.parseJSONDocument(document);\n return Promise.resolve(this._languageService.getMatchingSchemas(document, jsonDocument));\n }\n _getTextDocument(uri) {\n let models = this._ctx.getMirrorModels();\n for (let model of models) if (model.uri.toString() === uri) return TextDocument.create(uri, this._languageId, model.version, model.getValue());\n return null;\n }\n };\n const Slash = \"/\".charCodeAt(0);\n const Dot = \".\".charCodeAt(0);\n function isAbsolutePath(path) {\n return path.charCodeAt(0) === Slash;\n }\n function resolvePath(uriString, path) {\n if (isAbsolutePath(path)) {\n const uri = URI.parse(uriString);\n const parts = path.split(\"/\");\n return uri.with({ path: normalizePath(parts) }).toString();\n }\n return joinPath(uriString, path);\n }\n function normalizePath(parts) {\n const newParts = [];\n for (const part of parts) if (part.length === 0 || part.length === 1 && part.charCodeAt(0) === Dot);\n else if (part.length === 2 && part.charCodeAt(0) === Dot && part.charCodeAt(1) === Dot) newParts.pop();\n else newParts.push(part);\n if (parts.length > 1 && parts[parts.length - 1].length === 0) newParts.push(\"\");\n let res = newParts.join(\"/\");\n if (parts[0].length === 0) res = \"/\" + res;\n return res;\n }\n function joinPath(uriString, ...paths) {\n const uri = URI.parse(uriString);\n const parts = uri.path.split(\"/\");\n for (let path of paths) parts.push(...path.split(\"/\"));\n return uri.with({ path: normalizePath(parts) }).toString();\n }\n //#endregion\n //#region ../../node_modules/.pnpm/monaco-editor@0.55.1_patch_hash=4ff367d15dba642fa0ee85c07218d6c7ee602de735f6d2f26dc8695ed3187656/node_modules/monaco-editor/esm/vs/language/json/json.worker.js\n self.onmessage = () => {\n initialize((ctx, createData) => {\n return new JSONWorker(ctx, createData);\n });\n };\n //#endregion\n})();\n\n//# sourceMappingURL=json.worker-D0DAGjXV.js.map";
|
|
3
|
+
var blob = typeof self !== "undefined" && self.Blob && new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);", jsContent], { type: "text/javascript;charset=utf-8" });
|
|
4
|
+
function WorkerWrapper(options) {
|
|
5
|
+
let objURL;
|
|
6
|
+
try {
|
|
7
|
+
objURL = blob && (self.URL || self.webkitURL).createObjectURL(blob);
|
|
8
|
+
if (!objURL) throw "";
|
|
9
|
+
const worker = new Worker(objURL, { name: options?.name });
|
|
10
|
+
worker.addEventListener("error", () => {
|
|
11
|
+
(self.URL || self.webkitURL).revokeObjectURL(objURL);
|
|
12
|
+
});
|
|
13
|
+
return worker;
|
|
14
|
+
} catch (e) {
|
|
15
|
+
return new Worker("data:text/javascript;charset=utf-8," + encodeURIComponent(jsContent), { name: options?.name });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { WorkerWrapper as default };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=json.worker-CQ_9P0P7.js.map
|