UNPKG

@graphql-yoga/render-graphiql

Version:
10 lines • 470 kB
//#region src/graphiql.ts
const js = "(function(global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ?  factory(exports, require('react'), require('react-dom/client'), require('graphiql/style.css'), require('@graphiql/plugin-explorer/style.css'), require('graphiql'), require('graphql'), require('@graphiql/plugin-explorer'), require('@graphql-tools/url-loader'), require('json-bigint-patch'), require('react/jsx-runtime')) :\n  typeof define === 'function' && define.amd ? define(['exports', 'react', 'react-dom/client', 'graphiql/style.css', '@graphiql/plugin-explorer/style.css', 'graphiql', 'graphql', '@graphiql/plugin-explorer', '@graphql-tools/url-loader', 'json-bigint-patch', 'react/jsx-runtime'], factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.YogaGraphiQL = {}), global.react,global.react_dom_client,global.graphiql_style_css,global._graphiql_plugin_explorer_style_css,global.graphiql,global.graphql,global._graphiql_plugin_explorer,global._graphql_tools_url_loader,global.json_bigint_patch,global.react_jsx_runtime));\n})(this, function(exports, react, react_dom_client, graphiql_style_css, _graphiql_plugin_explorer_style_css, graphiql, graphql, _graphiql_plugin_explorer, _graphql_tools_url_loader, json_bigint_patch, react_jsx_runtime) {\n//#region rolldown:runtime\n	var __create = Object.create;\n	var __defProp = Object.defineProperty;\n	var __getOwnPropDesc = Object.getOwnPropertyDescriptor;\n	var __getOwnPropNames = Object.getOwnPropertyNames;\n	var __getProtoOf = Object.getPrototypeOf;\n	var __hasOwnProp = Object.prototype.hasOwnProperty;\n	var __copyProps = (to, from, except, desc) => {\n		if (from && typeof from === \"object\" || typeof from === \"function\") {\n			for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {\n				key = keys[i];\n				if (!__hasOwnProp.call(to, key) && key !== except) {\n					__defProp(to, key, {\n						get: ((k) => from[k]).bind(null, key),\n						enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n					});\n				}\n			}\n		}\n		return to;\n	};\n	var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", {\n		value: mod,\n		enumerable: true\n	}) : target, mod));\n\n//#endregion\nreact = __toESM(react);\n\n//#region src/YogaLogo.tsx\n	const YogaLogo = () => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"svg\", {\n		viewBox: \"0 0 90 90\",\n		fill: \"none\",\n		xmlns: \"http://www.w3.org/2000/svg\",\n		children: [\n			/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"path\", {\n				d: \"M21 25.35c.728 0 1.42.156 2.043.435l19.1-10.985c.9-.5 2-.8 3-.8 1.1 0 2.1.3 3 .8l16.4 9.5c-1.2.8-2.1 2-2.7 3.4l-15.9-9.2c-.3-.2-.599-.2-.899-.2-.3 0-.6.1-.9.2L25.823 29.025A5.005 5.005 0 0 1 21 35.35a5 5 0 0 1 0-10Z\",\n				fill: \"url(#a)\"\n			}),\n			/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"path\", {\n				d: \"M67.244 35.033A5.002 5.002 0 0 1 69 25.35a5 5 0 0 1 2.544 9.305V55.2c0 2.2-1.2 4.2-3 5.3l-16.4 9.4c0-1.5-.5-3-1.4-4.1l15.6-9c.6-.3.9-.9.9-1.6V35.033Z\",\n				fill: \"url(#b)\"\n			}),\n			/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"path\", {\n				d: \"M49.844 69.106a5 5 0 1 1-9.78 2.043L21.843 60.6c-1.9-1.1-3-3.1-3-5.3V36.8c.7.2 1.5.4 2.2.4.7 0 1.4-.1 2-.3v18.4c0 .7.4 1.3.9 1.6l17.382 10.058a5.002 5.002 0 0 1 8.516 2.14l.002.002v.006Z\",\n				fill: \"url(#c)\"\n			}),\n			/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"mask\", {\n				id: \"g\",\n				style: { maskType: \"alpha\" },\n				maskUnits: \"userSpaceOnUse\",\n				x: 16,\n				y: 14,\n				width: 58,\n				height: 62,\n				children: [\n					/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"path\", {\n						d: \"M21 25.35c.728 0 1.42.156 2.043.435l19.1-10.985c.9-.5 2-.8 3-.8 1.1 0 2.1.3 3 .8l16.4 9.5c-1.2.8-2.1 2-2.7 3.4l-15.9-9.2c-.3-.2-.599-.2-.899-.2-.3 0-.6.1-.9.2L25.823 29.025A5.005 5.005 0 0 1 21 35.35a5 5 0 0 1 0-10Z\",\n						fill: \"url(#d)\"\n					}),\n					/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"path\", {\n						d: \"M67.244 35.033A5.002 5.002 0 0 1 69 25.35a5 5 0 0 1 2.544 9.305V55.2c0 2.2-1.2 4.2-3 5.3l-16.4 9.4c0-1.5-.5-3-1.4-4.1l15.6-9c.6-.3.9-.9.9-1.6V35.033Z\",\n						fill: \"url(#e)\"\n					}),\n					/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"path\", {\n						d: \"M49.844 69.106a5 5 0 1 1-9.78 2.043L21.843 60.6c-1.9-1.1-3-3.1-3-5.3V36.8c.7.2 1.5.4 2.2.4.7 0 1.4-.1 2-.3v18.4c0 .7.4 1.3.9 1.6l17.382 10.058a5.002 5.002 0 0 1 8.516 2.14l.002.002v.006Z\",\n						fill: \"url(#f)\"\n					})\n				]\n			}),\n			/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"g\", {\n				mask: \"url(#g)\",\n				children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"g\", {\n					filter: \"url(#h)\",\n					children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"circle\", {\n						cx: 73,\n						cy: 25,\n						r: 26,\n						fill: \"#ED2E7E\"\n					})\n				}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"g\", {\n					filter: \"url(#i)\",\n					children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"circle\", {\n						cx: 26,\n						cy: 69,\n						r: 26,\n						fill: \"#1CC8EE\"\n					})\n				})]\n			}),\n			/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"path\", {\n				fillRule: \"evenodd\",\n				clipRule: \"evenodd\",\n				d: \"M49.395 32.395c0 2.314-1.815 6.152-4.395 6.152-2.573 0-4.395-3.836-4.395-6.152A4.4 4.4 0 0 1 45 28a4.4 4.4 0 0 1 4.395 4.395ZM35.331 49.043v-.828c0-5.403 2.521-7.215 4.548-8.67.513-.368.98-.705 1.369-1.07 1.08 1.19 2.377 1.83 3.751 1.83 1.375 0 2.672-.64 3.753-1.83.388.366.855.702 1.367 1.07 2.027 1.455 4.548 3.267 4.548 8.67v.828l-.827.049c-3.856.227-6.976-2.192-8.841-5.514-1.884 3.357-5.015 5.74-8.84 5.514l-.828-.049Zm22.814 2.032c-1.128-.184-8.133-1.324-13.145 4.618-4.99-5.938-11.804-4.834-13.091-4.625a1.74 1.74 0 0 1-.21.028l.002.023c.024.281.266 3.156 2.355 5.123L30 58h30l-4.104-1.758c1.958-1.766 2.244-3.973 2.355-4.833.019-.146.033-.253.049-.313a1.388 1.388 0 0 1-.154-.021Zm-17.662-.971c1.912-.783 3.19-1.93 4.516-3.494 1.332 1.574 2.616 2.716 4.516 3.494l.06.114.01.021c-1.495.574-3.16 1.586-4.581 2.905-1.414-1.322-3.038-2.324-4.58-2.929l.059-.111Z\",\n				fill: \"url(#j)\"\n			}),\n			/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"mask\", {\n				id: \"k\",\n				style: { maskType: \"alpha\" },\n				maskUnits: \"userSpaceOnUse\",\n				x: 30,\n				y: 28,\n				width: 30,\n				height: 30,\n				children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"path\", {\n					fillRule: \"evenodd\",\n					clipRule: \"evenodd\",\n					d: \"M49.395 32.395c0 2.314-1.815 6.152-4.395 6.152-2.573 0-4.395-3.836-4.395-6.152A4.4 4.4 0 0 1 45 28a4.4 4.4 0 0 1 4.395 4.395ZM35.331 49.043v-.828c0-5.403 2.521-7.215 4.548-8.67.513-.368.98-.705 1.369-1.07 1.08 1.19 2.377 1.83 3.751 1.83 1.375 0 2.672-.64 3.753-1.83.388.366.855.702 1.367 1.07 2.027 1.455 4.548 3.267 4.548 8.67v.828l-.827.049c-3.856.227-6.976-2.192-8.841-5.514-1.884 3.357-5.015 5.74-8.84 5.514l-.828-.049Zm22.814 2.032c-1.128-.184-8.133-1.324-13.145 4.618-4.99-5.938-11.804-4.834-13.091-4.625a1.74 1.74 0 0 1-.21.028l.002.023c.024.281.266 3.156 2.355 5.123L30 58h30l-4.104-1.758c1.958-1.766 2.244-3.973 2.355-4.833.019-.146.033-.253.049-.313a1.388 1.388 0 0 1-.154-.021Zm-17.662-.971c1.912-.783 3.19-1.93 4.516-3.494 1.332 1.574 2.616 2.716 4.516 3.494l.06.114.01.021c-1.495.574-3.16 1.586-4.581 2.905-1.414-1.322-3.038-2.324-4.58-2.929l.059-.111Z\",\n					fill: \"#000\"\n				})\n			}),\n			/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"g\", {\n				mask: \"url(#k)\",\n				children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"g\", {\n					filter: \"url(#l)\",\n					children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"circle\", {\n						cx: 38,\n						cy: 6,\n						r: 26,\n						fill: \"#ED2E7E\"\n					})\n				}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"g\", {\n					filter: \"url(#m)\",\n					children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"circle\", {\n						cx: 63,\n						cy: 69,\n						r: 26,\n						fill: \"#1CC8EE\"\n					})\n				})]\n			}),\n			/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"defs\", { children: [\n				/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"linearGradient\", {\n					id: \"a\",\n					x1: 16,\n					y1: 14,\n					x2: 87.213,\n					y2: 44.598,\n					gradientUnits: \"userSpaceOnUse\",\n					children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", { stopColor: \"#7433FF\" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", {\n						offset: 1,\n						stopColor: \"#FFA3FD\"\n					})]\n				}),\n				/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"linearGradient\", {\n					id: \"b\",\n					x1: 16,\n					y1: 14,\n					x2: 87.213,\n					y2: 44.598,\n					gradientUnits: \"userSpaceOnUse\",\n					children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", { stopColor: \"#7433FF\" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", {\n						offset: 1,\n						stopColor: \"#FFA3FD\"\n					})]\n				}),\n				/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"linearGradient\", {\n					id: \"c\",\n					x1: 16,\n					y1: 14,\n					x2: 87.213,\n					y2: 44.598,\n					gradientUnits: \"userSpaceOnUse\",\n					children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", { stopColor: \"#7433FF\" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", {\n						offset: 1,\n						stopColor: \"#FFA3FD\"\n					})]\n				}),\n				/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"linearGradient\", {\n					id: \"d\",\n					x1: 16,\n					y1: 14,\n					x2: 87.213,\n					y2: 44.598,\n					gradientUnits: \"userSpaceOnUse\",\n					children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", { stopColor: \"#7433FF\" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", {\n						offset: 1,\n						stopColor: \"#FFA3FD\"\n					})]\n				}),\n				/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"linearGradient\", {\n					id: \"e\",\n					x1: 16,\n					y1: 14,\n					x2: 87.213,\n					y2: 44.598,\n					gradientUnits: \"userSpaceOnUse\",\n					children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", { stopColor: \"#7433FF\" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", {\n						offset: 1,\n						stopColor: \"#FFA3FD\"\n					})]\n				}),\n				/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"linearGradient\", {\n					id: \"f\",\n					x1: 16,\n					y1: 14,\n					x2: 87.213,\n					y2: 44.598,\n					gradientUnits: \"userSpaceOnUse\",\n					children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", { stopColor: \"#7433FF\" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", {\n						offset: 1,\n						stopColor: \"#FFA3FD\"\n					})]\n				}),\n				/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"linearGradient\", {\n					id: \"j\",\n					x1: 30,\n					y1: 28,\n					x2: 66.165,\n					y2: 44.436,\n					gradientUnits: \"userSpaceOnUse\",\n					children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", { stopColor: \"#7433FF\" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"stop\", {\n						offset: 1,\n						stopColor: \"#FFA3FD\"\n					})]\n				}),\n				/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"filter\", {\n					id: \"h\",\n					x: 23,\n					y: -25,\n					width: 100,\n					height: 100,\n					filterUnits: \"userSpaceOnUse\",\n					colorInterpolationFilters: \"sRGB\",\n					children: [\n						/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feFlood\", {\n							floodOpacity: 0,\n							result: \"BackgroundImageFix\"\n						}),\n						/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feBlend\", {\n							in: \"SourceGraphic\",\n							in2: \"BackgroundImageFix\",\n							result: \"shape\"\n						}),\n						/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feGaussianBlur\", {\n							stdDeviation: 12,\n							result: \"effect1_foregroundBlur_1677_11483\"\n						})\n					]\n				}),\n				/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"filter\", {\n					id: \"i\",\n					x: -24,\n					y: 19,\n					width: 100,\n					height: 100,\n					filterUnits: \"userSpaceOnUse\",\n					colorInterpolationFilters: \"sRGB\",\n					children: [\n						/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feFlood\", {\n							floodOpacity: 0,\n							result: \"BackgroundImageFix\"\n						}),\n						/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feBlend\", {\n							in: \"SourceGraphic\",\n							in2: \"BackgroundImageFix\",\n							result: \"shape\"\n						}),\n						/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feGaussianBlur\", {\n							stdDeviation: 12,\n							result: \"effect1_foregroundBlur_1677_11483\"\n						})\n					]\n				}),\n				/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"filter\", {\n					id: \"l\",\n					x: -12,\n					y: -44,\n					width: 100,\n					height: 100,\n					filterUnits: \"userSpaceOnUse\",\n					colorInterpolationFilters: \"sRGB\",\n					children: [\n						/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feFlood\", {\n							floodOpacity: 0,\n							result: \"BackgroundImageFix\"\n						}),\n						/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feBlend\", {\n							in: \"SourceGraphic\",\n							in2: \"BackgroundImageFix\",\n							result: \"shape\"\n						}),\n						/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feGaussianBlur\", {\n							stdDeviation: 12,\n							result: \"effect1_foregroundBlur_1677_11483\"\n						})\n					]\n				}),\n				/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"filter\", {\n					id: \"m\",\n					x: 13,\n					y: 19,\n					width: 100,\n					height: 100,\n					filterUnits: \"userSpaceOnUse\",\n					colorInterpolationFilters: \"sRGB\",\n					children: [\n						/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feFlood\", {\n							floodOpacity: 0,\n							result: \"BackgroundImageFix\"\n						}),\n						/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feBlend\", {\n							in: \"SourceGraphic\",\n							in2: \"BackgroundImageFix\",\n							result: \"shape\"\n						}),\n						/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"feGaussianBlur\", {\n							stdDeviation: 12,\n							result: \"effect1_foregroundBlur_1677_11483\"\n						})\n					]\n				})\n			] })\n		]\n	});\n\n//#endregion\n//#region src/YogaGraphiQL.tsx\n	const getOperationWithFragments = (document, operationName) => {\n		const definitions = document.definitions.filter((definition) => {\n			if (definition.kind === graphql.Kind.OPERATION_DEFINITION && operationName && definition.name?.value !== operationName) return false;\n			return true;\n		});\n		return {\n			kind: graphql.Kind.DOCUMENT,\n			definitions\n		};\n	};\n	function YogaGraphiQL(props) {\n		const initialQuery = `#\n# Welcome to ${props.title || \"Yoga GraphiQL\"}\n#\n# ${props.title || \"Yoga GraphiQL\"} is an in-browser tool for writing, validating, and\n# testing GraphQL queries.\n#\n# Type queries into this side of the screen, and you will see intelligent\n# typeaheads aware of the current GraphQL type schema and live syntax and\n# validation errors highlighted within the text.\n#\n# GraphQL queries typically start with a \"{\" character. Lines that start\n# with a # are ignored.\n#\n# An example GraphQL query might look like:\n#\n#     {\n#       field(arg: \"value\") {\n#         subField\n#       }\n#     }\n#\n# Keyboard shortcuts:\n#\n#  Prettify Query:  Shift-Ctrl-P (or press the prettify button above)\n#\n#     Merge Query:  Shift-Ctrl-M (or press the merge button above)\n#\n#       Run Query:  Ctrl-Enter (or press the play button above)\n#\n#   Auto Complete:  Ctrl-Space (or just start typing)\n#\n`;\n		const endpoint = new URL(props.endpoint ?? location.pathname, location.href).toString();\n		const urlLoader = (0, react.useMemo)(() => new _graphql_tools_url_loader.UrlLoader(), []);\n		const fetcher = (0, react.useMemo)(() => {\n			if (props.fetcher) {\n				if (props.endpoint) console.warn(\"You are using a custom fetcher and an endpoint. The endpoint will be ignored.\");\n				return props.fetcher;\n			}\n			const executor = urlLoader.getExecutorAsync(endpoint, {\n				subscriptionsProtocol: _graphql_tools_url_loader.SubscriptionProtocol.GRAPHQL_SSE,\n				subscriptionsEndpoint: endpoint,\n				credentials: \"same-origin\",\n				specifiedByUrl: true,\n				directiveIsRepeatable: true,\n				inputValueDeprecation: true,\n				...props,\n				headers: props.additionalHeaders || {},\n				fetch: (...args) => globalThis.fetch(...args)\n			});\n			return function fetcher(graphQLParams, opts) {\n				return executor({\n					document: getOperationWithFragments((0, graphql.parse)(graphQLParams.query), graphQLParams.operationName ?? void 0),\n					operationName: graphQLParams.operationName ?? void 0,\n					variables: graphQLParams.variables,\n					extensions: { headers: opts?.headers }\n				});\n			};\n		}, [\n			urlLoader,\n			endpoint,\n			props.fetcher\n		]);\n		const explorer = (0, _graphiql_plugin_explorer.explorerPlugin)({ showAttribution: true });\n		const currentUrl = new URL(location.href);\n		const initialQueryFromUrl = currentUrl.searchParams.get(\"query\") || props.query || initialQuery;\n		const { query: deprecatedInitialQuery = initialQueryFromUrl, headers: deprecatedInitialHeaders, variables: deprecatedInitialVariables, ...otherProps } = props;\n		return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"div\", {\n			className: \"graphiql-container\",\n			children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(graphiql.GraphiQL, {\n				shouldPersistHeaders: true,\n				plugins: [explorer],\n				schemaDescription: true,\n				inputValueDeprecation: true,\n				isHeadersEditorEnabled: true,\n				defaultEditorToolsVisibility: true,\n				initialQuery: deprecatedInitialQuery,\n				defaultHeaders: deprecatedInitialHeaders,\n				initialVariables: deprecatedInitialVariables,\n				onEditQuery: (query, ast) => {\n					currentUrl.searchParams.set(\"query\", query);\n					history.replaceState({}, \"\", currentUrl);\n					props.onEditQuery?.(query, ast);\n				},\n				...otherProps,\n				fetcher,\n				children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(graphiql.GraphiQL.Logo, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(\"div\", {\n					style: {\n						display: \"flex\",\n						alignItems: \"center\"\n					},\n					children: [typeof props?.logo === \"string\" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"div\", {\n						style: {\n							width: 40,\n							display: \"flex\"\n						},\n						dangerouslySetInnerHTML: { __html: props.logo }\n					}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"div\", {\n						style: {\n							width: 40,\n							display: \"flex\"\n						},\n						children: props?.logo || /* @__PURE__ */ (0, react_jsx_runtime.jsx)(YogaLogo, {})\n					}), typeof props?.title === \"string\" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"span\", { dangerouslySetInnerHTML: { __html: props.title } }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"span\", { children: props?.title || /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [\n						\"Yoga Graph\",\n						/* @__PURE__ */ (0, react_jsx_runtime.jsx)(\"em\", { children: \"i\" }),\n						\"QL\"\n					] }) })]\n				}) })\n			})\n		});\n	}\n\n//#endregion\n//#region src/index.tsx\n	function renderYogaGraphiQL(element, opts) {\n		(0, react_dom_client.createRoot)(element).render(react.default.createElement(YogaGraphiQL, opts));\n	}\n	globalThis.React = react.default;\n\n//#endregion\nexports.renderYogaGraphiQL = renderYogaGraphiQL;\n});";
const css = "body,\nhtml {\n  margin: 0;\n}\n\n.graphiql-container {\n  height: 100vh;\n  width: 100vw;\n}\n\n";
const favicon = "data:image/x-icon;base64,AAABAAYAAAAAAAEAIABiNgAAZgAAAICAAAABACAAKAgBAMg2AABAQAAAAQAgAChCAADwPgEAMDAAAAEAIACoJQAAGIEBACAgAAABACAAqBAAAMCmAQAQEAAAAQAgAGgEAABotwEAiVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAA2KUlEQVR42u3dd5hURbYA8HOq6obunp7AMDDEGQYERDKCijkjJhQRFAVz1lVXd01P367Z1VXXXSMgoICKSBQwIeoTEBUDInFgBkbi5JkON1TV+0NxVdKE25H6fZ9/yHRX3arue/rWvVWnABRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURTloIOJPgAlfhYOXkupK3KJI7PRFjpxJYIEAASQGgrQwJFM1pz0Za8diT5WJT5UADgIvHfkmjziyONYmPeUFI9CKfuDgBwUkoIEBAQAAjYQqJIAP6CEd8EnVwOVi05Y3sdO9PErsaMCQJp678h1SC1uSArn0oi4BbnshkLmNujNCBwQdgGFFcQQz0oJnxz/TR8r0W1SvKcCQBpaOHitwcLiPOKKO4kj+oIE0uTCECRqchFo8l7ic787dsmAaKLbp3hHBYA08/6Adb2o5d5EuBiBXOZ4VKwEKjcRJmdTXT5x9Nd9tye6nYo3VABIA/OPKmYs6nZAIS5mFr8dhcwGaMav/r4guEhFCWHiGUT55jHf9S9PdNuV5lEBIMXNGrzWHwjLq6jNryRc9GzW5X5DIUgkYhY13ElU5x8ctXxQONH9oDSNCgApav7hG3QmxBHUcu8mXByHQgbifAgSiSwnGv8MAG5kmlNx1IpBTqL7RWkcFQBSzLzBJUwP232R86uYw69GIWP/i38AhIpqwviLqLkvHb1iUEmij0dpOBUAUsiswaUZ/rB1O7Oc0USIQ0Amz+eHKB0gchkzrNeJHp121PLj6hJ9TMqBJc0XSNm3dwdubKnZzlnU4XdTzotAAkv0Me0LorSo5i4FKf+qG9E1g1YcXZvoY1L2TQWAJDZ7cIlmRJxTmO1eRTk/F4WkiT6mhkIiqilz3tB067kjVhz9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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADeV5gC3E6gDN5WmzbeVZ423kqkC+BYnwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2USnVNYyt8DUKr380ybA/9MmwP/UKr381jG5wdk+sFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4GaJB9Y2sp7TKL/80ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ye//Nc1t57iX5wHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN1WlALWNbOV0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9c0uJnfUqYDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2USlRtMovvzTJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0yi//dk8s0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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0ybA/9cqu+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM8vvhzTJ8D80ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MnwPzTNcAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADOJ8Pr0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0SbB+r8pyzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANQnvj7TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ya/+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzTLAA9IpwMDTJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0yrAvdI3wAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANImwPnTJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0SbBPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3jW1BdcsvFHVKL/U0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ybA/9MmwP/TJsD/0ifA788rw4rMLMURAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANk6uAHWM7wP1Cm/FtMnwBfULr8U0zW+BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////gf///////////////////wD///////////////////wAP//////////////////4AB//////////////////+AAf//////////////////AAD//////////////////wAA//////////////////wAAP/////////////////wAACP////////////////4AAAg////////////////4AAAIH///////////////4AAAGAf//////////////8AAABAB//////////////8AAAAwAP/////////////8AAIAcAA/////////////8AAPw/AAD////////////8AAP//8AAP///////////+AAP///wAB///////////+AAH///+AAH//////////+AAH////4AAf//////////AAH/////gAB//////////AAH/////+AAH/////////gAD//////4AB/////////wAD///////AAP////////4AD///////8AB////////+ABwAAAAAADgAP////////gB+AAAAAAB/AD////////wB/4AAAAAB/4A////////8A//gAAAAB//gH////////AP/wAAAAAP/4B////////wD/8AAAAAD/+Af///////8A/+AABgAAf/gH////////AP/gABCAAH/4B////////wD/4AAgQAB/+Af///////8A/8AAwDAAf/gH////////AP/AAwAMAD/4B////////wD///4AB///+Af///////8A//8GAAYP//gH////////AP//AYAYD//4B////////wD//wBAIA//+Af///////8A//8AEIAP//gH////////AP//AAAAD//4B////////wD//wAGAA//+Af///////8A//8ABgAP//gH////////AP//AAAAD//4B////////wD//wAAAA//+Af///////8A//+AAAAf//gH////////AP//gAAAH//4B////////wD//8AAAD//+Af///////8A///gAAB///gH////////AP//8AAA///4B////////wD///gGAf//+Af///////8A///8GYP///gH////////AP///yBP///4B////////wD////AP///+Af///////8A////gB////gH/////////////4Af///4B////////4H///8AD///+Af///////4Af//+AAf//+AH///////8AD///gAH///AA///////+AA///4AB///wAH///////gAH//+AAf//4AB///////wAB///gAH//+AAP//////8AAf//4AB///gAD///////AAH//+AAf//4AA///////wAB///wAP//+AAP//////8AAP//+AH///gAD///////AAA///wD///4AA///////4AAD//+B///GAAf//////+AAAP//////BwAH///////wAAB//////gOAD///////+AAAH/////gBgB////////8IAAf////wAPD//////////gAD////wAD///////////8AAP///wAA////////////4AA///wAA/////////////AAH//4AA/////////////4AAf/4AAf/////////////wAB/4AAf/////////////+AAH4AAf//////////////4AAYAAf///////////////gAAAAf///////////////8AAAAP////////////////wAAAP/////////////////AAAP/////////////////8AAH//////////////////wAH//////////////////+AH///////////////////4H///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////KAAAAEAAAACAAAAAAQAgAAAAAAAAQAAASywAAEssAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADXN7JF1S26j9Utu4/XNbZFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANk6uADVLb4J0yrAC9M1vgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////w/////////8A/////////wD////////+AP////////gAH///////4AAH///////AAAP//////wABAP/////8Af+AP/////AD/8AP////4A//8AP////AP//8A////4CAAAEB////gYAAAcH///+H4AAH4P///4fAAAPg////h8AAA+D///+HwAAD4P///4f4AB/g////h/gAH+D///+H+AAf4P///4f4AB/g////h/gAH+D///+H+AAf4P///4f8AD/g////h/4Af+D///+H/wD/4P///4f/gf/g////h/+B/+D///8D/wD/wP///gH/AP+Af//+Af8A/4B///4B/wD/gH///gD/gf+Af//+AD/D/AB///8AD//wAP///8AH/+Az/////AH/gD//////AH4A///////AGAH//////+AAB///////+AAf///////+AH////////+A/////////8P////////////////////////////////////////////////////////////////////////////////////////////////////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAAEssAABLLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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0ybA99MmwP/TJsD/0ybA/NInwKbQKsIfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZOrgA1Su+KdMowHvTJ8CB0ynAOM80wgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///D///wAA///4H///AAD///gf//8AAP//4Af//wAA//+AAf//AAD//gAAf/8AAP/8BCA//wAA//AP8A//AAD/4D/8A/8AAP/A//8D/wAA/4AAAAH/AAD/h4AB4f8AAP+HAADh/wAA/4cAAOH/AAD/h8AD4f8AAP+HwAPh/wAA/4fAA+H/AAD/h8AD4f8AAP+H4Afh/wAA/4fgB+H/AAD/h/gf4f8AAP+H+B/h/wAA/4P4H8H/AAD/A/gfwP8AAP8D+B/A/wAA/wH4H8D/AAD/AH5+AP8AAP+AH/gB/wAA//gH4B//AAD//gHAf/8AAP//AAD//wAA///AA///AAD///AP//8AAP//+B///wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAABLLAAASywAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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";
const editorWorkerService = "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { SimpleWorkerServer } from '../base/common/worker/simpleWorker.js';\nimport { EditorSimpleWorker } from './common/services/editorSimpleWorker.js';\nimport { EditorWorkerHost } from './common/services/editorWorkerHost.js';\nlet initialized = false;\nexport function initialize(foreignModule) {\n    if (initialized) {\n        return;\n    }\n    initialized = true;\n    const simpleWorker = new SimpleWorkerServer((msg) => {\n        globalThis.postMessage(msg);\n    }, (workerServer) => new EditorSimpleWorker(EditorWorkerHost.getChannel(workerServer), foreignModule));\n    globalThis.onmessage = (e) => {\n        simpleWorker.onmessage(e.data);\n    };\n}\nglobalThis.onmessage = (e) => {\n    // Ignore first message in this case and initialize if not yet initialized\n    if (!initialized) {\n        initialize(null);\n    }\n};\n";
const jsonWorker = "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.52.2(404545bded1df6ffa41ea0af4e8ddb219018c6c1)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\n\n\n// src/language/json/json.worker.ts\nimport * as worker from \"../../editor/editor.worker.js\";\n\n// node_modules/jsonc-parser/lib/esm/impl/scanner.js\nfunction createScanner(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 value2 = 0;\n    while (digits < count || !exact) {\n      let ch = text.charCodeAt(pos);\n      if (ch >= 48 && ch <= 57) {\n        value2 = value2 * 16 + ch - 48;\n      } else if (ch >= 65 && ch <= 70) {\n        value2 = value2 * 16 + ch - 65 + 10;\n      } else if (ch >= 97 && ch <= 102) {\n        value2 = value2 * 16 + ch - 97 + 10;\n      } else {\n        break;\n      }\n      pos++;\n      digits++;\n    }\n    if (digits < count) {\n      value2 = -1;\n    }\n    return value2;\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) {\n      pos++;\n    } else {\n      pos++;\n      while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n        pos++;\n      }\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))) {\n          pos++;\n        }\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) {\n        pos++;\n      }\n      if (pos < text.length && isDigit(text.charCodeAt(pos))) {\n        pos++;\n        while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n          pos++;\n        }\n        end = pos;\n      } else {\n        scanError = 3;\n      }\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        const ch2 = text.charCodeAt(pos++);\n        switch (ch2) {\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, true);\n            if (ch3 >= 0) {\n              result += String.fromCharCode(ch3);\n            } else {\n              scanError = 4;\n            }\n            break;\n          default:\n            scanError = 5;\n        }\n        start = pos;\n        continue;\n      }\n      if (ch >= 0 && ch <= 31) {\n        if (isLineBreak(ch)) {\n          result += text.substring(start, pos);\n          scanError = 2;\n          break;\n        } else {\n          scanError = 6;\n        }\n      }\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))) {\n              break;\n            }\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) {\n                pos++;\n              }\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))) {\n          return token = 16;\n        }\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\":\n              return token = 8;\n            case \"false\":\n              return token = 9;\n            case \"null\":\n              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)) {\n      return false;\n    }\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:\n        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}\nfunction isWhiteSpace(ch) {\n  return ch === 32 || ch === 9;\n}\nfunction isLineBreak(ch) {\n  return ch === 10 || ch === 13;\n}\nfunction isDigit(ch) {\n  return ch >= 48 && ch <= 57;\n}\nvar CharacterCodes;\n(function(CharacterCodes2) {\n  CharacterCodes2[CharacterCodes2[\"lineFeed\"] = 10] = \"lineFeed\";\n  CharacterCodes2[CharacterCodes2[\"carriageReturn\"] = 13] = \"carriageReturn\";\n  CharacterCodes2[CharacterCodes2[\"space\"] = 32] = \"space\";\n  CharacterCodes2[CharacterCodes2[\"_0\"] = 48] = \"_0\";\n  CharacterCodes2[CharacterCodes2[\"_1\"] = 49] = \"_1\";\n  CharacterCodes2[CharacterCodes2[\"_2\"] = 50] = \"_2\";\n  CharacterCodes2[CharacterCodes2[\"_3\"] = 51] = \"_3\";\n  CharacterCodes2[CharacterCodes2[\"_4\"] = 52] = \"_4\";\n  CharacterCodes2[CharacterCodes2[\"_5\"] = 53] = \"_5\";\n  CharacterCodes2[CharacterCodes2[\"_6\"] = 54] = \"_6\";\n  CharacterCodes2[CharacterCodes2[\"_7\"] = 55] = \"_7\";\n  CharacterCodes2[CharacterCodes2[\"_8\"] = 56] = \"_8\";\n  CharacterCodes2[CharacterCodes2[\"_9\"] = 57] = \"_9\";\n  CharacterCodes2[CharacterCodes2[\"a\"] = 97] = \"a\";\n  CharacterCodes2[CharacterCodes2[\"b\"] = 98] = \"b\";\n  CharacterCodes2[CharacterCodes2[\"c\"] = 99] = \"c\";\n  CharacterCodes2[CharacterCodes2[\"d\"] = 100] = \"d\";\n  CharacterCodes2[CharacterCodes2[\"e\"] = 101] = \"e\";\n  CharacterCodes2[CharacterCodes2[\"f\"] = 102] = \"f\";\n  CharacterCodes2[CharacterCodes2[\"g\"] = 103] = \"g\";\n  CharacterCodes2[CharacterCodes2[\"h\"] = 104] = \"h\";\n  CharacterCodes2[CharacterCodes2[\"i\"] = 105] = \"i\";\n  CharacterCodes2[CharacterCodes2[\"j\"] = 106] = \"j\";\n  CharacterCodes2[CharacterCodes2[\"k\"] = 107] = \"k\";\n  CharacterCodes2[CharacterCodes2[\"l\"] = 108] = \"l\";\n  CharacterCodes2[CharacterCodes2[\"m\"] = 109] = \"m\";\n  CharacterCodes2[CharacterCodes2[\"n\"] = 110] = \"n\";\n  CharacterCodes2[CharacterCodes2[\"o\"] = 111] = \"o\";\n  CharacterCodes2[CharacterCodes2[\"p\"] = 112] = \"p\";\n  CharacterCodes2[CharacterCodes2[\"q\"] = 113] = \"q\";\n  CharacterCodes2[CharacterCodes2[\"r\"] = 114] = \"r\";\n  CharacterCodes2[CharacterCodes2[\"s\"] = 115] = \"s\";\n  CharacterCodes2[CharacterCodes2[\"t\"] = 116] = \"t\";\n  CharacterCodes2[CharacterCodes2[\"u\"] = 117] = \"u\";\n  CharacterCodes2[CharacterCodes2[\"v\"] = 118] = \"v\";\n  CharacterCodes2[CharacterCodes2[\"w\"] = 119] = \"w\";\n  CharacterCodes2[CharacterCodes2[\"x\"] = 120] = \"x\";\n  CharacterCodes2[CharacterCodes2[\"y\"] = 121] = \"y\";\n  CharacterCodes2[CharacterCodes2[\"z\"] = 122] = \"z\";\n  CharacterCodes2[CharacterCodes2[\"A\"] = 65] = \"A\";\n  CharacterCodes2[CharacterCodes2[\"B\"] = 66] = \"B\";\n  CharacterCodes2[CharacterCodes2[\"C\"] = 67] = \"C\";\n  CharacterCodes2[CharacterCodes2[\"D\"] = 68] = \"D\";\n  CharacterCodes2[CharacterCodes2[\"E\"] = 69] = \"E\";\n  CharacterCodes2[CharacterCodes2[\"F\"] = 70] = \"F\";\n  CharacterCodes2[CharacterCodes2[\"G\"] = 71] = \"G\";\n  CharacterCodes2[CharacterCodes2[\"H\"] = 72] = \"H\";\n  CharacterCodes2[CharacterCodes2[\"I\"] = 73] = \"I\";\n  CharacterCodes2[CharacterCodes2[\"J\"] = 74] = \"J\";\n  CharacterCodes2[CharacterCodes2[\"K\"] = 75] = \"K\";\n  CharacterCodes2[CharacterCodes2[\"L\"] = 76] = \"L\";\n  CharacterCodes2[CharacterCodes2[\"M\"] = 77] = \"M\";\n  CharacterCodes2[CharacterCodes2[\"N\"] = 78] = \"N\";\n  CharacterCodes2[CharacterCodes2[\"O\"] = 79] = \"O\";\n  CharacterCodes2[CharacterCodes2[\"P\"] = 80] = \"P\";\n  CharacterCodes2[CharacterCodes2[\"Q\"] = 81] = \"Q\";\n  CharacterCodes2[CharacterCodes2[\"R\"] = 82] = \"R\";\n  CharacterCodes2[CharacterCodes2[\"S\"] = 83] = \"S\";\n  CharacterCodes2[CharacterCodes2[\"T\"] = 84] = \"T\";\n  CharacterCodes2[CharacterCodes2[\"U\"] = 85] = \"U\";\n  CharacterCodes2[CharacterCodes2[\"V\"] = 86] = \"V\";\n  CharacterCodes2[CharacterCodes2[\"W\"] = 87] = \"W\";\n  CharacterCodes2[CharacterCodes2[\"X\"] = 88] = \"X\";\n  CharacterCodes2[CharacterCodes2[\"Y\"] = 89] = \"Y\";\n  CharacterCodes2[CharacterCodes2[\"Z\"] = 90] = \"Z\";\n  CharacterCodes2[CharacterCodes2[\"asterisk\"] = 42] = \"asterisk\";\n  CharacterCodes2[CharacterCodes2[\"backslash\"] = 92] = \"backslash\";\n  CharacterCodes2[CharacterCodes2[\"closeBrace\"] = 125] = \"closeBrace\";\n  CharacterCodes2[CharacterCodes2[\"closeBracket\"] = 93] = \"closeBracket\";\n  CharacterCodes2[CharacterCodes2[\"colon\"] = 58] = \"colon\";\n  CharacterCodes2[CharacterCodes2[\"comma\"] = 44] = \"comma\";\n  CharacterCodes2[CharacterCodes2[\"dot\"] = 46] = \"dot\";\n  CharacterCodes2[CharacterCodes2[\"doubleQuote\"] = 34] = \"doubleQuote\";\n  CharacterCodes2[CharacterCodes2[\"minus\"] = 45] = \"minus\";\n  CharacterCodes2[CharacterCodes2[\"openBrace\"] = 123] = \"openBrace\";\n  CharacterCodes2[CharacterCodes2[\"openBracket\"] = 91] = \"openBracket\";\n  CharacterCodes2[CharacterCodes2[\"plus\"] = 43] = \"plus\";\n  CharacterCodes2[CharacterCodes2[\"slash\"] = 47] = \"slash\";\n  CharacterCodes2[CharacterCodes2[\"formFeed\"] = 12] = \"formFeed\";\n  CharacterCodes2[CharacterCodes2[\"tab\"] = 9] = \"tab\";\n})(CharacterCodes || (CharacterCodes = {}));\n\n// node_modules/jsonc-parser/lib/esm/impl/string-intern.js\nvar cachedSpaces = new Array(20).fill(0).map((_, index) => {\n  return \" \".repeat(index);\n});\nvar maxCachedValues = 200;\nvar 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};\nvar supportedEols = [\"\\n\", \"\\r\", \"\\r\\n\"];\n\n// node_modules/jsonc-parser/lib/esm/impl/format.js\nfunction format(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)) {\n      formatTextStart--;\n    }\n    let endOffset = rangeEnd;\n    while (endOffset < documentText.length && !isEOL(documentText, endOffset)) {\n      endOffset++;\n    }\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) {\n    indentValue = cachedSpaces[options.tabSize || 4] ?? repeat(cachedSpaces[1], options.tabSize || 4);\n  } else {\n    indentValue = \"	\";\n  }\n  const indentType = indentValue === \"	\" ? \"	\" : \" \";\n  let scanner = createScanner(formatText, false);\n  let hasError = false;\n  function newLinesAndIndent() {\n    if (numberLineBreaks > 1) {\n      return repeat(eol, numberLineBreaks) + repeat(indentValue, initialIndentLevel + indentLevel);\n    }\n    const amountOfSpaces = indentValue.length * (initialIndentLevel + indentLevel);\n    if (!eolFastPathSupported || amountOfSpaces > cachedBreakLinesWithSpaces[indentType][eol].length) {\n      return eol + repeat(indentValue, initialIndentLevel + indentLevel);\n    }\n    if (amountOfSpaces <= 0) {\n      return eol;\n    }\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) {\n        numberLineBreaks += 1;\n      } else if (token === 14) {\n        numberLineBreaks = 1;\n      }\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) {\n      editOperations.push({ offset: startOffset, length: endOffset - startOffset, content: text });\n    }\n  }\n  let firstToken = scanNext();\n  if (options.keepLines && numberLineBreaks > 0) {\n    addEdit(repeat(eol, numberLineBreaks), 0, 0);\n  }\n  if (firstToken !== 17) {\n    let firstTokenStart = scanner.getTokenOffset() + formatTextStart;\n    let initialIndent = indentValue.length * initialIndentLevel < 20 && options.insertSpaces ? cachedSpaces[indentValue.length * initialIndentLevel] : repeat(indentValue, initialIndentLevel);\n    addEdit(initialIndent, 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) {\n        indentLevel--;\n      }\n      ;\n      if (options.keepLines && numberLineBreaks > 0 || !options.keepLines && firstToken !== 1) {\n        replaceContent = newLinesAndIndent();\n      } else if (options.keepLines) {\n        replaceContent = cachedSpaces[1];\n      }\n    } else if (secondToken === 4) {\n      if (firstToken !== 3) {\n        indentLevel--;\n      }\n      ;\n      if (options.keepLines && numberLineBreaks > 0 || !options.keepLines && firstToken !== 3) {\n        replaceContent = newLinesAndIndent();\n      } else if (options.keepLines) {\n        replaceContent = cachedSpaces[1];\n      }\n    } else {\n      switch (firstToken) {\n        case 3:\n        case 1:\n          indentLevel++;\n          if (options.keepLines && numberLineBreaks > 0 || !options.keepLines) {\n            replaceContent = newLinesAndIndent();\n          } else {\n            replaceContent = cachedSpaces[1];\n          }\n          break;\n        case 5:\n          if (options.keepLines && numberLineBreaks > 0 || !options.keepLines) {\n            replaceContent = newLinesAndIndent();\n          } else {\n            replaceContent = cachedSpaces[1];\n          }\n          break;\n        case 12:\n          replaceContent = newLinesAndIndent();\n          break;\n        case 13:\n          if (numberLineBreaks > 0) {\n            replaceContent = newLinesAndIndent();\n          } else if (!needsLineBreak) {\n            replaceContent = cachedSpaces[1];\n          }\n          break;\n        case 6:\n          if (options.keepLines && numberLineBreaks > 0) {\n            replaceContent = newLinesAndIndent();\n          } else if (!needsLineBreak) {\n            replaceContent = cachedSpaces[1];\n          }\n          break;\n        case 10:\n          if (options.keepLines && numberLineBreaks > 0) {\n            replaceContent = newLinesAndIndent();\n          } else if (secondToken === 6 && !needsLineBreak) {\n            replaceContent = \"\";\n          }\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) {\n            replaceContent = newLinesAndIndent();\n          } else {\n            if ((secondToken === 12 || secondToken === 13) && !needsLineBreak) {\n              replaceContent = cachedSpaces[1];\n            } else if (secondToken !== 5 && secondToken !== 17) {\n              hasError = true;\n            }\n          }\n          break;\n        case 16:\n          hasError = true;\n          break;\n      }\n      if (numberLineBreaks > 0 && (secondToken === 12 || secondToken === 13)) {\n        replaceContent = newLinesAndIndent();\n      }\n    }\n    if (secondToken === 17) {\n      if (options.keepLines && numberLineBreaks > 0) {\n        replaceContent = newLinesAndIndent();\n      } else {\n        replaceContent = options.insertFinalNewline ? eol : \"\";\n      }\n    }\n    const secondTokenStart = scanner.getTokenOffset() + formatTextStart;\n    addEdit(replaceContent, firstTokenEnd, secondTokenStart);\n    firstToken = secondToken;\n  }\n  return editOperations;\n}\nfunction repeat(s, count) {\n  let result = \"\";\n  for (let i = 0; i < count; i++) {\n    result += s;\n  }\n  return result;\n}\nfunction 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]) {\n      nChars++;\n    } else if (ch === \"	\") {\n      nChars += tabSize;\n    } else {\n      break;\n    }\n    i++;\n  }\n  return Math.floor(nChars / tabSize);\n}\nfunction 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\") {\n        return \"\\r\\n\";\n      }\n      return \"\\r\";\n    } else if (ch === \"\\n\") {\n      return \"\\n\";\n    }\n  }\n  return options && options.eol || \"\\n\";\n}\nfunction isEOL(text, offset) {\n  return \"\\r\\n\".indexOf(text.charAt(offset)) !== -1;\n}\n\n// node_modules/jsonc-parser/lib/esm/impl/parser.js\nvar ParseOptions;\n(function(ParseOptions2) {\n  ParseOptions2.DEFAULT = {\n    allowTrailingComma: false\n  };\n})(ParseOptions || (ParseOptions = {}));\nfunction parse(text, errors = [], options = ParseOptions.DEFAULT) {\n  let currentProperty = null;\n  let currentParent = [];\n  const previousParents = [];\n  function onValue(value) {\n    if (Array.isArray(currentParent)) {\n      currentParent.push(value);\n    } else if (currentProperty !== null) {\n      currentParent[currentProperty] = value;\n    }\n  }\n  const visitor = {\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({ error, offset, length });\n    }\n  };\n  visit(text, visitor, options);\n  return currentParent[0];\n}\nfunction getNodePath(node) {\n  if (!node.parent || !node.parent.children) {\n    return [];\n  }\n  const path = getNodePath(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) {\n      path.push(index);\n    }\n  }\n  return path;\n}\nfunction getNodeValue(node) {\n  switch (node.type) {\n    case \"array\":\n      return node.children.map(getNodeValue);\n    case \"object\":\n      const obj = /* @__PURE__ */ Object.create(null);\n      for (let prop of node.children) {\n        const valueNode = prop.children[1];\n        if (valueNode) {\n          obj[prop.children[0].value] = getNodeValue(valueNode);\n        }\n      }\n      return obj;\n    case \"null\":\n    case \"string\":\n    case \"number\":\n    case \"boolean\":\n      return node.value;\n    default:\n      return void 0;\n  }\n}\nfunction contains(node, offset, includeRightBound = false) {\n  return offset >= node.offset && offset < node.offset + node.length || includeRightBound && offset === node.offset + node.length;\n}\nfunction findNodeAtOffset(node, offset, includeRightBound = false) {\n  if (contains(node, offset, includeRightBound)) {\n    const children = node.children;\n    if (Array.isArray(children)) {\n      for (let i = 0; i < children.length && children[i].offset <= offset; i++) {\n        const item = findNodeAtOffset(children[i], offset, includeRightBound);\n        if (item) {\n          return item;\n        }\n      }\n    }\n    return node;\n  }\n  return void 0;\n}\nfunction visit(text, visitor, options = ParseOptions.DEFAULT) {\n  const _scanner = createScanner(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(\n            14\n            /* ParseErrorCode.InvalidUnicode */\n          );\n          break;\n        case 5:\n          handleError(\n            15\n            /* ParseErrorCode.InvalidEscapeCharacter */\n          );\n          break;\n        case 3:\n          handleError(\n            13\n            /* ParseErrorCode.UnexpectedEndOfNumber */\n          );\n          break;\n        case 1:\n          if (!disallowComments) {\n            handleError(\n              11\n              /* ParseErrorCode.UnexpectedEndOfComment */\n            );\n          }\n          break;\n        case 2:\n          handleError(\n            12\n            /* ParseErrorCode.UnexpectedEndOfString */\n          );\n          break;\n        case 6:\n          handleError(\n            16\n            /* ParseErrorCode.InvalidCharacter */\n          );\n          break;\n      }\n      switch (token) {\n        case 12:\n        case 13:\n          if (disallowComments) {\n            handleError(\n              10\n              /* ParseErrorCode.InvalidCommentToken */\n            );\n          } else {\n            onComment();\n          }\n          break;\n        case 16:\n          handleError(\n            1\n            /* ParseErrorCode.InvalidSymbol */\n          );\n          break;\n        case 15:\n        case 14:\n          break;\n        default:\n          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) {\n          break;\n        }\n        token = scanNext();\n      }\n    }\n  }\n  function parseString(isValue) {\n    const value = _scanner.getTokenValue();\n    if (isValue) {\n      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(\n            2\n            /* ParseErrorCode.InvalidNumberFormat */\n          );\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:\n        return false;\n    }\n    scanNext();\n    return true;\n  }\n  function parseProperty() {\n    if (_scanner.getToken() !== 10) {\n      handleError(3, [], [\n        2,\n        5\n        /* SyntaxKind.CommaToken */\n      ]);\n      return false;\n    }\n    parseString(false);\n    if (_scanner.getToken() === 6) {\n      onSeparator(\":\");\n      scanNext();\n      if (!parseValue()) {\n        handleError(4, [], [\n          2,\n          5\n          /* SyntaxKind.CommaToken */\n        ]);\n      }\n    } else {\n      handleError(5, [], [\n        2,\n        5\n        /* SyntaxKind.CommaToken */\n      ]);\n    }\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) {\n          handleError(4, [], []);\n        }\n        onSeparator(\",\");\n        scanNext();\n        if (_scanner.getToken() === 2 && allowTrailingComma) {\n          break;\n        }\n      } else if (needsComma) {\n        handleError(6, [], []);\n      }\n      if (!parseProperty()) {\n        handleError(4, [], [\n          2,\n          5\n          /* SyntaxKind.CommaToken */\n        ]);\n      }\n      needsComma = true;\n    }\n    onObjectEnd();\n    if (_scanner.getToken() !== 2) {\n      handleError(7, [\n        2\n        /* SyntaxKind.CloseBraceToken */\n      ], []);\n    } else {\n      scanNext();\n    }\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) {\n          handleError(4, [], []);\n        }\n        onSeparator(\",\");\n        scanNext();\n        if (_scanner.getToken() === 4 && allowTrailingComma) {\n          break;\n        }\n      } else if (needsComma) {\n        handleError(6, [], []);\n      }\n      if (isFirstElement) {\n        _jsonPath.push(0);\n        isFirstElement = false;\n      } else {\n        _jsonPath[_jsonPath.length - 1]++;\n      }\n      if (!parseValue()) {\n        handleError(4, [], [\n          4,\n          5\n          /* SyntaxKind.CommaToken */\n        ]);\n      }\n      needsComma = true;\n    }\n    onArrayEnd();\n    if (!isFirstElement) {\n      _jsonPath.pop();\n    }\n    if (_scanner.getToken() !== 4) {\n      handleError(8, [\n        4\n        /* SyntaxKind.CloseBracketToken */\n      ], []);\n    } else {\n      scanNext();\n    }\n    return true;\n  }\n  function parseValue() {\n    switch (_scanner.getToken()) {\n      case 3:\n        return parseArray();\n      case 1:\n        return parseObject();\n      case 10:\n        return parseString(true);\n      default:\n        return parseLiteral();\n    }\n  }\n  scanNext();\n  if (_scanner.getToken() === 17) {\n    if (options.allowEmptyContent) {\n      return true;\n    }\n    handleError(4, [], []);\n    return false;\n  }\n  if (!parseValue()) {\n    handleError(4, [], []);\n    return false;\n  }\n  if (_scanner.getToken() !== 17) {\n    handleError(9, [], []);\n  }\n  return true;\n}\n\n// node_modules/jsonc-parser/lib/esm/main.js\nvar createScanner2 = createScanner;\nvar ScanError;\n(function(ScanError2) {\n  ScanError2[ScanError2[\"None\"] = 0] = \"None\";\n  ScanError2[ScanError2[\"UnexpectedEndOfComment\"] = 1] = \"UnexpectedEndOfComment\";\n  ScanError2[ScanError2[\"UnexpectedEndOfString\"] = 2] = \"UnexpectedEndOfString\";\n  ScanError2[ScanError2[\"UnexpectedEndOfNumber\"] = 3] = \"UnexpectedEndOfNumber\";\n  ScanError2[ScanError2[\"InvalidUnicode\"] = 4] = \"InvalidUnicode\";\n  ScanError2[ScanError2[\"InvalidEscapeCharacter\"] = 5] = \"InvalidEscapeCharacter\";\n  ScanError2[ScanError2[\"InvalidCharacter\"] = 6] = \"InvalidCharacter\";\n})(ScanError || (ScanError = {}));\nvar SyntaxKind;\n(function(SyntaxKind2) {\n  SyntaxKind2[SyntaxKind2[\"OpenBraceToken\"] = 1] = \"OpenBraceToken\";\n  SyntaxKind2[SyntaxKind2[\"CloseBraceToken\"] = 2] = \"CloseBraceToken\";\n  SyntaxKind2[SyntaxKind2[\"OpenBracketToken\"] = 3] = \"OpenBracketToken\";\n  SyntaxKind2[SyntaxKind2[\"CloseBracketToken\"] = 4] = \"CloseBracketToken\";\n  SyntaxKind2[SyntaxKind2[\"CommaToken\"] = 5] = \"CommaToken\";\n  SyntaxKind2[SyntaxKind2[\"ColonToken\"] = 6] = \"ColonToken\";\n  SyntaxKind2[SyntaxKind2[\"NullKeyword\"] = 7] = \"NullKeyword\";\n  SyntaxKind2[SyntaxKind2[\"TrueKeyword\"] = 8] = \"TrueKeyword\";\n  SyntaxKind2[SyntaxKind2[\"FalseKeyword\"] = 9] = \"FalseKeyword\";\n  SyntaxKind2[SyntaxKind2[\"StringLiteral\"] = 10] = \"StringLiteral\";\n  SyntaxKind2[SyntaxKind2[\"NumericLiteral\"] = 11] = \"NumericLiteral\";\n  SyntaxKind2[SyntaxKind2[\"LineCommentTrivia\"] = 12] = \"LineCommentTrivia\";\n  SyntaxKind2[SyntaxKind2[\"BlockCommentTrivia\"] = 13] = \"BlockCommentTrivia\";\n  SyntaxKind2[SyntaxKind2[\"LineBreakTrivia\"] = 14] = \"LineBreakTrivia\";\n  SyntaxKind2[SyntaxKind2[\"Trivia\"] = 15] = \"Trivia\";\n  SyntaxKind2[SyntaxKind2[\"Unknown\"] = 16] = \"Unknown\";\n  SyntaxKind2[SyntaxKind2[\"EOF\"] = 17] = \"EOF\";\n})(SyntaxKind || (SyntaxKind = {}));\nvar parse2 = parse;\nvar findNodeAtOffset2 = findNodeAtOffset;\nvar getNodePath2 = getNodePath;\nvar getNodeValue2 = getNodeValue;\nvar ParseErrorCode;\n(function(ParseErrorCode2) {\n  ParseErrorCode2[ParseErrorCode2[\"InvalidSymbol\"] = 1] = \"InvalidSymbol\";\n  ParseErrorCode2[ParseErrorCode2[\"InvalidNumberFormat\"] = 2] = \"InvalidNumberFormat\";\n  ParseErrorCode2[ParseErrorCode2[\"PropertyNameExpected\"] = 3] = \"PropertyNameExpected\";\n  ParseErrorCode2[ParseErrorCode2[\"ValueExpected\"] = 4] = \"ValueExpected\";\n  ParseErrorCode2[ParseErrorCode2[\"ColonExpected\"] = 5] = \"ColonExpected\";\n  ParseErrorCode2[ParseErrorCode2[\"CommaExpected\"] = 6] = \"CommaExpected\";\n  ParseErrorCode2[ParseErrorCode2[\"CloseBraceExpected\"] = 7] = \"CloseBraceExpected\";\n  ParseErrorCode2[ParseErrorCode2[\"CloseBracketExpected\"] = 8] = \"CloseBracketExpected\";\n  ParseErrorCode2[ParseErrorCode2[\"EndOfFileExpected\"] = 9] = \"EndOfFileExpected\";\n  ParseErrorCode2[ParseErrorCode2[\"InvalidCommentToken\"] = 10] = \"InvalidCommentToken\";\n  ParseErrorCode2[ParseErrorCode2[\"UnexpectedEndOfComment\"] = 11] = \"UnexpectedEndOfComment\";\n  ParseErrorCode2[ParseErrorCode2[\"UnexpectedEndOfString\"] = 12] = \"UnexpectedEndOfString\";\n  ParseErrorCode2[ParseErrorCode2[\"UnexpectedEndOfNumber\"] = 13] = \"UnexpectedEndOfNumber\";\n  ParseErrorCode2[ParseErrorCode2[\"InvalidUnicode\"] = 14] = \"InvalidUnicode\";\n  ParseErrorCode2[ParseErrorCode2[\"InvalidEscapeCharacter\"] = 15] = \"InvalidEscapeCharacter\";\n  ParseErrorCode2[ParseErrorCode2[\"InvalidCharacter\"] = 16] = \"InvalidCharacter\";\n})(ParseErrorCode || (ParseErrorCode = {}));\nfunction format2(documentText, range, options) {\n  return format(documentText, range, options);\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/utils/objects.js\nfunction equals(one, other) {\n  if (one === other) {\n    return true;\n  }\n  if (one === null || one === void 0 || other === null || other === void 0) {\n    return false;\n  }\n  if (typeof one !== typeof other) {\n    return false;\n  }\n  if (typeof one !== \"object\") {\n    return false;\n  }\n  if (Array.isArray(one) !== Array.isArray(other)) {\n    return false;\n  }\n  let i, key;\n  if (Array.isArray(one)) {\n    if (one.length !== other.length) {\n      return false;\n    }\n    for (i = 0; i < one.length; i++) {\n      if (!equals(one[i], other[i])) {\n        return false;\n      }\n    }\n  } else {\n    const oneKeys = [];\n    for (key in one) {\n      oneKeys.push(key);\n    }\n    oneKeys.sort();\n    const otherKeys = [];\n    for (key in other) {\n      otherKeys.push(key);\n    }\n    otherKeys.sort();\n    if (!equals(oneKeys, otherKeys)) {\n      return false;\n    }\n    for (i = 0; i < oneKeys.length; i++) {\n      if (!equals(one[oneKeys[i]], other[oneKeys[i]])) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\nfunction isNumber(val) {\n  return typeof val === \"number\";\n}\nfunction isDefined(val) {\n  return typeof val !== \"undefined\";\n}\nfunction isBoolean(val) {\n  return typeof val === \"boolean\";\n}\nfunction isString(val) {\n  return typeof val === \"string\";\n}\nfunction isObject(val) {\n  return typeof val === \"object\" && val !== null && !Array.isArray(val);\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/utils/strings.js\nfunction startsWith(haystack, needle) {\n  if (haystack.length < needle.length) {\n    return false;\n  }\n  for (let i = 0; i < needle.length; i++) {\n    if (haystack[i] !== needle[i]) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction endsWith(haystack, needle) {\n  const diff = haystack.length - needle.length;\n  if (diff > 0) {\n    return haystack.lastIndexOf(needle) === diff;\n  } else if (diff === 0) {\n    return haystack === needle;\n  } else {\n    return false;\n  }\n}\nfunction 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 (e2) {\n      return void 0;\n    }\n  }\n}\nfunction 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) {\n      i++;\n    }\n  }\n  return count;\n}\n\n// node_modules/vscode-languageserver-types/lib/esm/main.js\nvar DocumentUri;\n(function(DocumentUri2) {\n  function is(value) {\n    return typeof value === \"string\";\n  }\n  DocumentUri2.is = is;\n})(DocumentUri || (DocumentUri = {}));\nvar URI;\n(function(URI3) {\n  function is(value) {\n    return typeof value === \"string\";\n  }\n  URI3.is = is;\n})(URI || (URI = {}));\nvar integer;\n(function(integer2) {\n  integer2.MIN_VALUE = -2147483648;\n  integer2.MAX_VALUE = 2147483647;\n  function is(value) {\n    return typeof value === \"number\" && integer2.MIN_VALUE <= value && value <= integer2.MAX_VALUE;\n  }\n  integer2.is = is;\n})(integer || (integer = {}));\nvar uinteger;\n(function(uinteger2) {\n  uinteger2.MIN_VALUE = 0;\n  uinteger2.MAX_VALUE = 2147483647;\n  function is(value) {\n    return typeof value === \"number\" && uinteger2.MIN_VALUE <= value && value <= uinteger2.MAX_VALUE;\n  }\n  uinteger2.is = is;\n})(uinteger || (uinteger = {}));\nvar Position;\n(function(Position2) {\n  function create(line, character) {\n    if (line === Number.MAX_VALUE) {\n      line = uinteger.MAX_VALUE;\n    }\n    if (character === Number.MAX_VALUE) {\n      character = uinteger.MAX_VALUE;\n    }\n    return { line, character };\n  }\n  Position2.create = create;\n  function is(value) {\n    let candidate = value;\n    return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character);\n  }\n  Position2.is = is;\n})(Position || (Position = {}));\nvar Range;\n(function(Range2) {\n  function create(one, two, three, four) {\n    if (Is.uinteger(one) && Is.uinteger(two) && Is.uinteger(three) && Is.uinteger(four)) {\n      return { start: Position.create(one, two), end: Position.create(three, four) };\n    } else if (Position.is(one) && Position.is(two)) {\n      return { start: one, end: two };\n    } else {\n      throw new Error(`Range#create called with invalid arguments[${one}, ${two}, ${three}, ${four}]`);\n    }\n  }\n  Range2.create = create;\n  function is(value) {\n    let candidate = value;\n    return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);\n  }\n  Range2.is = is;\n})(Range || (Range = {}));\nvar Location;\n(function(Location2) {\n  function create(uri, range) {\n    return { uri, range };\n  }\n  Location2.create = create;\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  Location2.is = is;\n})(Location || (Location = {}));\nvar LocationLink;\n(function(LocationLink2) {\n  function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {\n    return { targetUri, targetRange, targetSelectionRange, originSelectionRange };\n  }\n  LocationLink2.create = create;\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  LocationLink2.is = is;\n})(LocationLink || (LocationLink = {}));\nvar Color;\n(function(Color2) {\n  function create(red, green, blue, alpha) {\n    return {\n      red,\n      green,\n      blue,\n      alpha\n    };\n  }\n  Color2.create = create;\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  Color2.is = is;\n})(Color || (Color = {}));\nvar ColorInformation;\n(function(ColorInformation2) {\n  function create(range, color) {\n    return {\n      range,\n      color\n    };\n  }\n  ColorInformation2.create = create;\n  function is(value) {\n    const candidate = value;\n    return Is.objectLiteral(candidate) && Range.is(candidate.range) && Color.is(candidate.color);\n  }\n  ColorInformation2.is = is;\n})(ColorInformation || (ColorInformation = {}));\nvar ColorPresentation;\n(function(ColorPresentation2) {\n  function create(label, textEdit, additionalTextEdits) {\n    return {\n      label,\n      textEdit,\n      additionalTextEdits\n    };\n  }\n  ColorPresentation2.create = create;\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  ColorPresentation2.is = is;\n})(ColorPresentation || (ColorPresentation = {}));\nvar FoldingRangeKind;\n(function(FoldingRangeKind2) {\n  FoldingRangeKind2.Comment = \"comment\";\n  FoldingRangeKind2.Imports = \"imports\";\n  FoldingRangeKind2.Region = \"region\";\n})(FoldingRangeKind || (FoldingRangeKind = {}));\nvar FoldingRange;\n(function(FoldingRange2) {\n  function create(startLine, endLine, startCharacter, endCharacter, kind, collapsedText) {\n    const result = {\n      startLine,\n      endLine\n    };\n    if (Is.defined(startCharacter)) {\n      result.startCharacter = startCharacter;\n    }\n    if (Is.defined(endCharacter)) {\n      result.endCharacter = endCharacter;\n    }\n    if (Is.defined(kind)) {\n      result.kind = kind;\n    }\n    if (Is.defined(collapsedText)) {\n      result.collapsedText = collapsedText;\n    }\n    return result;\n  }\n  FoldingRange2.create = create;\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  FoldingRange2.is = is;\n})(FoldingRange || (FoldingRange = {}));\nvar DiagnosticRelatedInformation;\n(function(DiagnosticRelatedInformation2) {\n  function create(location, message) {\n    return {\n      location,\n      message\n    };\n  }\n  DiagnosticRelatedInformation2.create = create;\n  function is(value) {\n    let candidate = value;\n    return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);\n  }\n  DiagnosticRelatedInformation2.is = is;\n})(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));\nvar DiagnosticSeverity;\n(function(DiagnosticSeverity2) {\n  DiagnosticSeverity2.Error = 1;\n  DiagnosticSeverity2.Warning = 2;\n  DiagnosticSeverity2.Information = 3;\n  DiagnosticSeverity2.Hint = 4;\n})(DiagnosticSeverity || (DiagnosticSeverity = {}));\nvar DiagnosticTag;\n(function(DiagnosticTag2) {\n  DiagnosticTag2.Unnecessary = 1;\n  DiagnosticTag2.Deprecated = 2;\n})(DiagnosticTag || (DiagnosticTag = {}));\nvar CodeDescription;\n(function(CodeDescription2) {\n  function is(value) {\n    const candidate = value;\n    return Is.objectLiteral(candidate) && Is.string(candidate.href);\n  }\n  CodeDescription2.is = is;\n})(CodeDescription || (CodeDescription = {}));\nvar Diagnostic;\n(function(Diagnostic2) {\n  function create(range, message, severity, code, source, relatedInformation) {\n    let result = { range, message };\n    if (Is.defined(severity)) {\n      result.severity = severity;\n    }\n    if (Is.defined(code)) {\n      result.code = code;\n    }\n    if (Is.defined(source)) {\n      result.source = source;\n    }\n    if (Is.defined(relatedInformation)) {\n      result.relatedInformation = relatedInformation;\n    }\n    return result;\n  }\n  Diagnostic2.create = create;\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  Diagnostic2.is = is;\n})(Diagnostic || (Diagnostic = {}));\nvar Command;\n(function(Command2) {\n  function create(title, command, ...args) {\n    let result = { title, command };\n    if (Is.defined(args) && args.length > 0) {\n      result.arguments = args;\n    }\n    return result;\n  }\n  Command2.create = create;\n  function is(value) {\n    let candidate = value;\n    return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);\n  }\n  Command2.is = is;\n})(Command || (Command = {}));\nvar TextEdit;\n(function(TextEdit2) {\n  function replace(range, newText) {\n    return { range, newText };\n  }\n  TextEdit2.replace = replace;\n  function insert(position, newText) {\n    return { range: { start: position, end: position }, newText };\n  }\n  TextEdit2.insert = insert;\n  function del(range) {\n    return { range, newText: \"\" };\n  }\n  TextEdit2.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  TextEdit2.is = is;\n})(TextEdit || (TextEdit = {}));\nvar ChangeAnnotation;\n(function(ChangeAnnotation2) {\n  function create(label, needsConfirmation, description) {\n    const result = { label };\n    if (needsConfirmation !== void 0) {\n      result.needsConfirmation = needsConfirmation;\n    }\n    if (description !== void 0) {\n      result.description = description;\n    }\n    return result;\n  }\n  ChangeAnnotation2.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  ChangeAnnotation2.is = is;\n})(ChangeAnnotation || (ChangeAnnotation = {}));\nvar ChangeAnnotationIdentifier;\n(function(ChangeAnnotationIdentifier2) {\n  function is(value) {\n    const candidate = value;\n    return Is.string(candidate);\n  }\n  ChangeAnnotationIdentifier2.is = is;\n})(ChangeAnnotationIdentifier || (ChangeAnnotationIdentifier = {}));\nvar AnnotatedTextEdit;\n(function(AnnotatedTextEdit2) {\n  function replace(range, newText, annotation) {\n    return { range, newText, annotationId: annotation };\n  }\n  AnnotatedTextEdit2.replace = replace;\n  function insert(position, newText, annotation) {\n    return { range: { start: position, end: position }, newText, annotationId: annotation };\n  }\n  AnnotatedTextEdit2.insert = insert;\n  function del(range, annotation) {\n    return { range, newText: \"\", annotationId: annotation };\n  }\n  AnnotatedTextEdit2.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  AnnotatedTextEdit2.is = is;\n})(AnnotatedTextEdit || (AnnotatedTextEdit = {}));\nvar TextDocumentEdit;\n(function(TextDocumentEdit2) {\n  function create(textDocument, edits) {\n    return { textDocument, edits };\n  }\n  TextDocumentEdit2.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  TextDocumentEdit2.is = is;\n})(TextDocumentEdit || (TextDocumentEdit = {}));\nvar CreateFile;\n(function(CreateFile2) {\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)) {\n      result.options = options;\n    }\n    if (annotation !== void 0) {\n      result.annotationId = annotation;\n    }\n    return result;\n  }\n  CreateFile2.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  CreateFile2.is = is;\n})(CreateFile || (CreateFile = {}));\nvar RenameFile;\n(function(RenameFile2) {\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)) {\n      result.options = options;\n    }\n    if (annotation !== void 0) {\n      result.annotationId = annotation;\n    }\n    return result;\n  }\n  RenameFile2.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  RenameFile2.is = is;\n})(RenameFile || (RenameFile = {}));\nvar DeleteFile;\n(function(DeleteFile2) {\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)) {\n      result.options = options;\n    }\n    if (annotation !== void 0) {\n      result.annotationId = annotation;\n    }\n    return result;\n  }\n  DeleteFile2.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  DeleteFile2.is = is;\n})(DeleteFile || (DeleteFile = {}));\nvar WorkspaceEdit;\n(function(WorkspaceEdit2) {\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)) {\n        return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);\n      } else {\n        return TextDocumentEdit.is(change);\n      }\n    }));\n  }\n  WorkspaceEdit2.is = is;\n})(WorkspaceEdit || (WorkspaceEdit = {}));\nvar TextDocumentIdentifier;\n(function(TextDocumentIdentifier2) {\n  function create(uri) {\n    return { uri };\n  }\n  TextDocumentIdentifier2.create = create;\n  function is(value) {\n    let candidate = value;\n    return Is.defined(candidate) && Is.string(candidate.uri);\n  }\n  TextDocumentIdentifier2.is = is;\n})(TextDocumentIdentifier || (TextDocumentIdentifier = {}));\nvar VersionedTextDocumentIdentifier;\n(function(VersionedTextDocumentIdentifier2) {\n  function create(uri, version) {\n    return { uri, version };\n  }\n  VersionedTextDocumentIdentifier2.create = create;\n  function is(value) {\n    let candidate = value;\n    return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version);\n  }\n  VersionedTextDocumentIdentifier2.is = is;\n})(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));\nvar OptionalVersionedTextDocumentIdentifier;\n(function(OptionalVersionedTextDocumentIdentifier2) {\n  function create(uri, version) {\n    return { uri, version };\n  }\n  OptionalVersionedTextDocumentIdentifier2.create = create;\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  OptionalVersionedTextDocumentIdentifier2.is = is;\n})(OptionalVersionedTextDocumentIdentifier || (OptionalVersionedTextDocumentIdentifier = {}));\nvar TextDocumentItem;\n(function(TextDocumentItem2) {\n  function create(uri, languageId, version, text) {\n    return { uri, languageId, version, text };\n  }\n  TextDocumentItem2.create = create;\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  TextDocumentItem2.is = is;\n})(TextDocumentItem || (TextDocumentItem = {}));\nvar MarkupKind;\n(function(MarkupKind2) {\n  MarkupKind2.PlainText = \"plaintext\";\n  MarkupKind2.Markdown = \"markdown\";\n  function is(value) {\n    const candidate = value;\n    return candidate === MarkupKind2.PlainText || candidate === MarkupKind2.Markdown;\n  }\n  MarkupKind2.is = is;\n})(MarkupKind || (MarkupKind = {}));\nvar MarkupContent;\n(function(MarkupContent2) {\n  function is(value) {\n    const candidate = value;\n    return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);\n  }\n  MarkupContent2.is = is;\n})(MarkupContent || (MarkupContent = {}));\nvar CompletionItemKind;\n(function(CompletionItemKind2) {\n  CompletionItemKind2.Text = 1;\n  CompletionItemKind2.Method = 2;\n  CompletionItemKind2.Function = 3;\n  CompletionItemKind2.Constructor = 4;\n  CompletionItemKind2.Field = 5;\n  CompletionItemKind2.Variable = 6;\n  CompletionItemKind2.Class = 7;\n  CompletionItemKind2.Interface = 8;\n  CompletionItemKind2.Module = 9;\n  CompletionItemKind2.Property = 10;\n  CompletionItemKind2.Unit = 11;\n  CompletionItemKind2.Value = 12;\n  CompletionItemKind2.Enum = 13;\n  CompletionItemKind2.Keyword = 14;\n  CompletionItemKind2.Snippet = 15;\n  CompletionItemKind2.Color = 16;\n  CompletionItemKind2.File = 17;\n  CompletionItemKind2.Reference = 18;\n  CompletionItemKind2.Folder = 19;\n  CompletionItemKind2.EnumMember = 20;\n  CompletionItemKind2.Constant = 21;\n  CompletionItemKind2.Struct = 22;\n  CompletionItemKind2.Event = 23;\n  CompletionItemKind2.Operator = 24;\n  CompletionItemKind2.TypeParameter = 25;\n})(CompletionItemKind || (CompletionItemKind = {}));\nvar InsertTextFormat;\n(function(InsertTextFormat2) {\n  InsertTextFormat2.PlainText = 1;\n  InsertTextFormat2.Snippet = 2;\n})(InsertTextFormat || (InsertTextFormat = {}));\nvar CompletionItemTag;\n(function(CompletionItemTag2) {\n  CompletionItemTag2.Deprecated = 1;\n})(CompletionItemTag || (CompletionItemTag = {}));\nvar InsertReplaceEdit;\n(function(InsertReplaceEdit2) {\n  function create(newText, insert, replace) {\n    return { newText, insert, replace };\n  }\n  InsertReplaceEdit2.create = create;\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  InsertReplaceEdit2.is = is;\n})(InsertReplaceEdit || (InsertReplaceEdit = {}));\nvar InsertTextMode;\n(function(InsertTextMode2) {\n  InsertTextMode2.asIs = 1;\n  InsertTextMode2.adjustIndentation = 2;\n})(InsertTextMode || (InsertTextMode = {}));\nvar CompletionItemLabelDetails;\n(function(CompletionItemLabelDetails2) {\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  CompletionItemLabelDetails2.is = is;\n})(CompletionItemLabelDetails || (CompletionItemLabelDetails = {}));\nvar CompletionItem;\n(function(CompletionItem2) {\n  function create(label) {\n    return { label };\n  }\n  CompletionItem2.create = create;\n})(CompletionItem || (CompletionItem = {}));\nvar CompletionList;\n(function(CompletionList2) {\n  function create(items, isIncomplete) {\n    return { items: items ? items : [], isIncomplete: !!isIncomplete };\n  }\n  CompletionList2.create = create;\n})(CompletionList || (CompletionList = {}));\nvar MarkedString;\n(function(MarkedString2) {\n  function fromPlainText(plainText) {\n    return plainText.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g, \"\\\\$&\");\n  }\n  MarkedString2.fromPlainText = fromPlainText;\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  MarkedString2.is = is;\n})(MarkedString || (MarkedString = {}));\nvar Hover;\n(function(Hover2) {\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  Hover2.is = is;\n})(Hover || (Hover = {}));\nvar ParameterInformation;\n(function(ParameterInformation2) {\n  function create(label, documentation) {\n    return documentation ? { label, documentation } : { label };\n  }\n  ParameterInformation2.create = create;\n})(ParameterInformation || (ParameterInformation = {}));\nvar SignatureInformation;\n(function(SignatureInformation2) {\n  function create(label, documentation, ...parameters) {\n    let result = { label };\n    if (Is.defined(documentation)) {\n      result.documentation = documentation;\n    }\n    if (Is.defined(parameters)) {\n      result.parameters = parameters;\n    } else {\n      result.parameters = [];\n    }\n    return result;\n  }\n  SignatureInformation2.create = create;\n})(SignatureInformation || (SignatureInformation = {}));\nvar DocumentHighlightKind;\n(function(DocumentHighlightKind2) {\n  DocumentHighlightKind2.Text = 1;\n  DocumentHighlightKind2.Read = 2;\n  DocumentHighlightKind2.Write = 3;\n})(DocumentHighlightKind || (DocumentHighlightKind = {}));\nvar DocumentHighlight;\n(function(DocumentHighlight2) {\n  function create(range, kind) {\n    let result = { range };\n    if (Is.number(kind)) {\n      result.kind = kind;\n    }\n    return result;\n  }\n  DocumentHighlight2.create = create;\n})(DocumentHighlight || (DocumentHighlight = {}));\nvar SymbolKind;\n(function(SymbolKind2) {\n  SymbolKind2.File = 1;\n  SymbolKind2.Module = 2;\n  SymbolKind2.Namespace = 3;\n  SymbolKind2.Package = 4;\n  SymbolKind2.Class = 5;\n  SymbolKind2.Method = 6;\n  SymbolKind2.Property = 7;\n  SymbolKind2.Field = 8;\n  SymbolKind2.Constructor = 9;\n  SymbolKind2.Enum = 10;\n  SymbolKind2.Interface = 11;\n  SymbolKind2.Function = 12;\n  SymbolKind2.Variable = 13;\n  SymbolKind2.Constant = 14;\n  SymbolKind2.String = 15;\n  SymbolKind2.Number = 16;\n  SymbolKind2.Boolean = 17;\n  SymbolKind2.Array = 18;\n  SymbolKind2.Object = 19;\n  SymbolKind2.Key = 20;\n  SymbolKind2.Null = 21;\n  SymbolKind2.EnumMember = 22;\n  SymbolKind2.Struct = 23;\n  SymbolKind2.Event = 24;\n  SymbolKind2.Operator = 25;\n  SymbolKind2.TypeParameter = 26;\n})(SymbolKind || (SymbolKind = {}));\nvar SymbolTag;\n(function(SymbolTag2) {\n  SymbolTag2.Deprecated = 1;\n})(SymbolTag || (SymbolTag = {}));\nvar SymbolInformation;\n(function(SymbolInformation2) {\n  function create(name, kind, range, uri, containerName) {\n    let result = {\n      name,\n      kind,\n      location: { uri, range }\n    };\n    if (containerName) {\n      result.containerName = containerName;\n    }\n    return result;\n  }\n  SymbolInformation2.create = create;\n})(SymbolInformation || (SymbolInformation = {}));\nvar WorkspaceSymbol;\n(function(WorkspaceSymbol2) {\n  function create(name, kind, uri, range) {\n    return range !== void 0 ? { name, kind, location: { uri, range } } : { name, kind, location: { uri } };\n  }\n  WorkspaceSymbol2.create = create;\n})(WorkspaceSymbol || (WorkspaceSymbol = {}));\nvar DocumentSymbol;\n(function(DocumentSymbol2) {\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) {\n      result.children = children;\n    }\n    return result;\n  }\n  DocumentSymbol2.create = create;\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  DocumentSymbol2.is = is;\n})(DocumentSymbol || (DocumentSymbol = {}));\nvar CodeActionKind;\n(function(CodeActionKind2) {\n  CodeActionKind2.Empty = \"\";\n  CodeActionKind2.QuickFix = \"quickfix\";\n  CodeActionKind2.Refactor = \"refactor\";\n  CodeActionKind2.RefactorExtract = \"refactor.extract\";\n  CodeActionKind2.RefactorInline = \"refactor.inline\";\n  CodeActionKind2.RefactorRewrite = \"refactor.rewrite\";\n  CodeActionKind2.Source = \"source\";\n  CodeActionKind2.SourceOrganizeImports = \"source.organizeImports\";\n  CodeActionKind2.SourceFixAll = \"source.fixAll\";\n})(CodeActionKind || (CodeActionKind = {}));\nvar CodeActionTriggerKind;\n(function(CodeActionTriggerKind2) {\n  CodeActionTriggerKind2.Invoked = 1;\n  CodeActionTriggerKind2.Automatic = 2;\n})(CodeActionTriggerKind || (CodeActionTriggerKind = {}));\nvar CodeActionContext;\n(function(CodeActionContext2) {\n  function create(diagnostics, only, triggerKind) {\n    let result = { diagnostics };\n    if (only !== void 0 && only !== null) {\n      result.only = only;\n    }\n    if (triggerKind !== void 0 && triggerKind !== null) {\n      result.triggerKind = triggerKind;\n    }\n    return result;\n  }\n  CodeActionContext2.create = create;\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  CodeActionContext2.is = is;\n})(CodeActionContext || (CodeActionContext = {}));\nvar CodeAction;\n(function(CodeAction2) {\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)) {\n      result.command = kindOrCommandOrEdit;\n    } else {\n      result.edit = kindOrCommandOrEdit;\n    }\n    if (checkKind && kind !== void 0) {\n      result.kind = kind;\n    }\n    return result;\n  }\n  CodeAction2.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  CodeAction2.is = is;\n})(CodeAction || (CodeAction = {}));\nvar CodeLens;\n(function(CodeLens2) {\n  function create(range, data) {\n    let result = { range };\n    if (Is.defined(data)) {\n      result.data = data;\n    }\n    return result;\n  }\n  CodeLens2.create = create;\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  CodeLens2.is = is;\n})(CodeLens || (CodeLens = {}));\nvar FormattingOptions;\n(function(FormattingOptions2) {\n  function create(tabSize, insertSpaces) {\n    return { tabSize, insertSpaces };\n  }\n  FormattingOptions2.create = create;\n  function is(value) {\n    let candidate = value;\n    return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces);\n  }\n  FormattingOptions2.is = is;\n})(FormattingOptions || (FormattingOptions = {}));\nvar DocumentLink;\n(function(DocumentLink2) {\n  function create(range, target, data) {\n    return { range, target, data };\n  }\n  DocumentLink2.create = create;\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  DocumentLink2.is = is;\n})(DocumentLink || (DocumentLink = {}));\nvar SelectionRange;\n(function(SelectionRange2) {\n  function create(range, parent) {\n    return { range, parent };\n  }\n  SelectionRange2.create = create;\n  function is(value) {\n    let candidate = value;\n    return Is.objectLiteral(candidate) && Range.is(candidate.range) && (candidate.parent === void 0 || SelectionRange2.is(candidate.parent));\n  }\n  SelectionRange2.is = is;\n})(SelectionRange || (SelectionRange = {}));\nvar SemanticTokenTypes;\n(function(SemanticTokenTypes2) {\n  SemanticTokenTypes2[\"namespace\"] = \"namespace\";\n  SemanticTokenTypes2[\"type\"] = \"type\";\n  SemanticTokenTypes2[\"class\"] = \"class\";\n  SemanticTokenTypes2[\"enum\"] = \"enum\";\n  SemanticTokenTypes2[\"interface\"] = \"interface\";\n  SemanticTokenTypes2[\"struct\"] = \"struct\";\n  SemanticTokenTypes2[\"typeParameter\"] = \"typeParameter\";\n  SemanticTokenTypes2[\"parameter\"] = \"parameter\";\n  SemanticTokenTypes2[\"variable\"] = \"variable\";\n  SemanticTokenTypes2[\"property\"] = \"property\";\n  SemanticTokenTypes2[\"enumMember\"] = \"enumMember\";\n  SemanticTokenTypes2[\"event\"] = \"event\";\n  SemanticTokenTypes2[\"function\"] = \"function\";\n  SemanticTokenTypes2[\"method\"] = \"method\";\n  SemanticTokenTypes2[\"macro\"] = \"macro\";\n  SemanticTokenTypes2[\"keyword\"] = \"keyword\";\n  SemanticTokenTypes2[\"modifier\"] = \"modifier\";\n  SemanticTokenTypes2[\"comment\"] = \"comment\";\n  SemanticTokenTypes2[\"string\"] = \"string\";\n  SemanticTokenTypes2[\"number\"] = \"number\";\n  SemanticTokenTypes2[\"regexp\"] = \"regexp\";\n  SemanticTokenTypes2[\"operator\"] = \"operator\";\n  SemanticTokenTypes2[\"decorator\"] = \"decorator\";\n})(SemanticTokenTypes || (SemanticTokenTypes = {}));\nvar SemanticTokenModifiers;\n(function(SemanticTokenModifiers2) {\n  SemanticTokenModifiers2[\"declaration\"] = \"declaration\";\n  SemanticTokenModifiers2[\"definition\"] = \"definition\";\n  SemanticTokenModifiers2[\"readonly\"] = \"readonly\";\n  SemanticTokenModifiers2[\"static\"] = \"static\";\n  SemanticTokenModifiers2[\"deprecated\"] = \"deprecated\";\n  SemanticTokenModifiers2[\"abstract\"] = \"abstract\";\n  SemanticTokenModifiers2[\"async\"] = \"async\";\n  SemanticTokenModifiers2[\"modification\"] = \"modification\";\n  SemanticTokenModifiers2[\"documentation\"] = \"documentation\";\n  SemanticTokenModifiers2[\"defaultLibrary\"] = \"defaultLibrary\";\n})(SemanticTokenModifiers || (SemanticTokenModifiers = {}));\nvar SemanticTokens;\n(function(SemanticTokens2) {\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  SemanticTokens2.is = is;\n})(SemanticTokens || (SemanticTokens = {}));\nvar InlineValueText;\n(function(InlineValueText2) {\n  function create(range, text) {\n    return { range, text };\n  }\n  InlineValueText2.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  InlineValueText2.is = is;\n})(InlineValueText || (InlineValueText = {}));\nvar InlineValueVariableLookup;\n(function(InlineValueVariableLookup2) {\n  function create(range, variableName, caseSensitiveLookup) {\n    return { range, variableName, caseSensitiveLookup };\n  }\n  InlineValueVariableLookup2.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  InlineValueVariableLookup2.is = is;\n})(InlineValueVariableLookup || (InlineValueVariableLookup = {}));\nvar InlineValueEvaluatableExpression;\n(function(InlineValueEvaluatableExpression2) {\n  function create(range, expression) {\n    return { range, expression };\n  }\n  InlineValueEvaluatableExpression2.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  InlineValueEvaluatableExpression2.is = is;\n})(InlineValueEvaluatableExpression || (InlineValueEvaluatableExpression = {}));\nvar InlineValueContext;\n(function(InlineValueContext2) {\n  function create(frameId, stoppedLocation) {\n    return { frameId, stoppedLocation };\n  }\n  InlineValueContext2.create = create;\n  function is(value) {\n    const candidate = value;\n    return Is.defined(candidate) && Range.is(value.stoppedLocation);\n  }\n  InlineValueContext2.is = is;\n})(InlineValueContext || (InlineValueContext = {}));\nvar InlayHintKind;\n(function(InlayHintKind2) {\n  InlayHintKind2.Type = 1;\n  InlayHintKind2.Parameter = 2;\n  function is(value) {\n    return value === 1 || value === 2;\n  }\n  InlayHintKind2.is = is;\n})(InlayHintKind || (InlayHintKind = {}));\nvar InlayHintLabelPart;\n(function(InlayHintLabelPart2) {\n  function create(value) {\n    return { value };\n  }\n  InlayHintLabelPart2.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  InlayHintLabelPart2.is = is;\n})(InlayHintLabelPart || (InlayHintLabelPart = {}));\nvar InlayHint;\n(function(InlayHint2) {\n  function create(position, label, kind) {\n    const result = { position, label };\n    if (kind !== void 0) {\n      result.kind = kind;\n    }\n    return result;\n  }\n  InlayHint2.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  InlayHint2.is = is;\n})(InlayHint || (InlayHint = {}));\nvar StringValue;\n(function(StringValue2) {\n  function createSnippet(value) {\n    return { kind: \"snippet\", value };\n  }\n  StringValue2.createSnippet = createSnippet;\n})(StringValue || (StringValue = {}));\nvar InlineCompletionItem;\n(function(InlineCompletionItem2) {\n  function create(insertText, filterText, range, command) {\n    return { insertText, filterText, range, command };\n  }\n  InlineCompletionItem2.create = create;\n})(InlineCompletionItem || (InlineCompletionItem = {}));\nvar InlineCompletionList;\n(function(InlineCompletionList2) {\n  function create(items) {\n    return { items };\n  }\n  InlineCompletionList2.create = create;\n})(InlineCompletionList || (InlineCompletionList = {}));\nvar InlineCompletionTriggerKind;\n(function(InlineCompletionTriggerKind2) {\n  InlineCompletionTriggerKind2.Invoked = 0;\n  InlineCompletionTriggerKind2.Automatic = 1;\n})(InlineCompletionTriggerKind || (InlineCompletionTriggerKind = {}));\nvar SelectedCompletionInfo;\n(function(SelectedCompletionInfo2) {\n  function create(range, text) {\n    return { range, text };\n  }\n  SelectedCompletionInfo2.create = create;\n})(SelectedCompletionInfo || (SelectedCompletionInfo = {}));\nvar InlineCompletionContext;\n(function(InlineCompletionContext2) {\n  function create(triggerKind, selectedCompletionInfo) {\n    return { triggerKind, selectedCompletionInfo };\n  }\n  InlineCompletionContext2.create = create;\n})(InlineCompletionContext || (InlineCompletionContext = {}));\nvar WorkspaceFolder;\n(function(WorkspaceFolder2) {\n  function is(value) {\n    const candidate = value;\n    return Is.objectLiteral(candidate) && URI.is(candidate.uri) && Is.string(candidate.name);\n  }\n  WorkspaceFolder2.is = is;\n})(WorkspaceFolder || (WorkspaceFolder = {}));\nvar TextDocument;\n(function(TextDocument3) {\n  function create(uri, languageId, version, content) {\n    return new FullTextDocument(uri, languageId, version, content);\n  }\n  TextDocument3.create = create;\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  TextDocument3.is = is;\n  function applyEdits(document, edits) {\n    let text = document.getText();\n    let sortedEdits = mergeSort2(edits, (a2, b) => {\n      let diff = a2.range.start.line - b.range.start.line;\n      if (diff === 0) {\n        return a2.range.start.character - b.range.start.character;\n      }\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) {\n        text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);\n      } else {\n        throw new Error(\"Overlapping edit\");\n      }\n      lastModifiedOffset = startOffset;\n    }\n    return text;\n  }\n  TextDocument3.applyEdits = applyEdits;\n  function mergeSort2(data, compare) {\n    if (data.length <= 1) {\n      return data;\n    }\n    const p = data.length / 2 | 0;\n    const left = data.slice(0, p);\n    const right = data.slice(p);\n    mergeSort2(left, compare);\n    mergeSort2(right, compare);\n    let leftIdx = 0;\n    let rightIdx = 0;\n    let i = 0;\n    while (leftIdx < left.length && rightIdx < right.length) {\n      let ret = compare(left[leftIdx], right[rightIdx]);\n      if (ret <= 0) {\n        data[i++] = left[leftIdx++];\n      } else {\n        data[i++] = right[rightIdx++];\n      }\n    }\n    while (leftIdx < left.length) {\n      data[i++] = left[leftIdx++];\n    }\n    while (rightIdx < right.length) {\n      data[i++] = right[rightIdx++];\n    }\n    return data;\n  }\n})(TextDocument || (TextDocument = {}));\nvar FullTextDocument = 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\") {\n          i++;\n        }\n      }\n      if (isLineStart && text.length > 0) {\n        lineOffsets.push(text.length);\n      }\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) {\n      return Position.create(0, offset);\n    }\n    while (low < high) {\n      let mid = Math.floor((low + high) / 2);\n      if (lineOffsets[mid] > offset) {\n        high = mid;\n      } else {\n        low = mid + 1;\n      }\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) {\n      return this._content.length;\n    } else if (position.line < 0) {\n      return 0;\n    }\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};\nvar Is;\n(function(Is2) {\n  const toString = Object.prototype.toString;\n  function defined(value) {\n    return typeof value !== \"undefined\";\n  }\n  Is2.defined = defined;\n  function undefined2(value) {\n    return typeof value === \"undefined\";\n  }\n  Is2.undefined = undefined2;\n  function boolean(value) {\n    return value === true || value === false;\n  }\n  Is2.boolean = boolean;\n  function string(value) {\n    return toString.call(value) === \"[object String]\";\n  }\n  Is2.string = string;\n  function number(value) {\n    return toString.call(value) === \"[object Number]\";\n  }\n  Is2.number = number;\n  function numberRange(value, min, max) {\n    return toString.call(value) === \"[object Number]\" && min <= value && value <= max;\n  }\n  Is2.numberRange = numberRange;\n  function integer2(value) {\n    return toString.call(value) === \"[object Number]\" && -2147483648 <= value && value <= 2147483647;\n  }\n  Is2.integer = integer2;\n  function uinteger2(value) {\n    return toString.call(value) === \"[object Number]\" && 0 <= value && value <= 2147483647;\n  }\n  Is2.uinteger = uinteger2;\n  function func(value) {\n    return toString.call(value) === \"[object Function]\";\n  }\n  Is2.func = func;\n  function objectLiteral(value) {\n    return value !== null && typeof value === \"object\";\n  }\n  Is2.objectLiteral = objectLiteral;\n  function typedArray(value, check) {\n    return Array.isArray(value) && value.every(check);\n  }\n  Is2.typedArray = typedArray;\n})(Is || (Is = {}));\n\n// node_modules/vscode-languageserver-textdocument/lib/esm/main.js\nvar FullTextDocument2 = 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) {\n      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) {\n          for (let i = 0, len = addedLineOffsets.length; i < len; i++) {\n            lineOffsets[i + startLine + 1] = addedLineOffsets[i];\n          }\n        } else {\n          if (addedLineOffsets.length < 1e4) {\n            lineOffsets.splice(startLine + 1, endLine - startLine, ...addedLineOffsets);\n          } else {\n            this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1));\n          }\n        }\n        const diff = change.text.length - (endOffset - startOffset);\n        if (diff !== 0) {\n          for (let i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i < len; i++) {\n            lineOffsets[i] = lineOffsets[i] + diff;\n          }\n        }\n      } else if (_FullTextDocument.isFull(change)) {\n        this._content = change.text;\n        this._lineOffsets = void 0;\n      } else {\n        throw new Error(\"Unknown change event received\");\n      }\n    }\n    this._version = version;\n  }\n  getLineOffsets() {\n    if (this._lineOffsets === void 0) {\n      this._lineOffsets = computeLineOffsets(this._content, true);\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) {\n      return { line: 0, character: offset };\n    }\n    while (low < high) {\n      let mid = Math.floor((low + high) / 2);\n      if (lineOffsets[mid] > offset) {\n        high = mid;\n      } else {\n        low = mid + 1;\n      }\n    }\n    let line = low - 1;\n    return { line, character: offset - lineOffsets[line] };\n  }\n  offsetAt(position) {\n    let lineOffsets = this.getLineOffsets();\n    if (position.line >= lineOffsets.length) {\n      return this._content.length;\n    } else if (position.line < 0) {\n      return 0;\n    }\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};\nvar TextDocument2;\n(function(TextDocument3) {\n  function create(uri, languageId, version, content) {\n    return new FullTextDocument2(uri, languageId, version, content);\n  }\n  TextDocument3.create = create;\n  function update(document, changes, version) {\n    if (document instanceof FullTextDocument2) {\n      document.update(changes, version);\n      return document;\n    } else {\n      throw new Error(\"TextDocument.update: document must be created by TextDocument.create\");\n    }\n  }\n  TextDocument3.update = update;\n  function applyEdits(document, edits) {\n    let text = document.getText();\n    let sortedEdits = mergeSort(edits.map(getWellformedEdit), (a2, b) => {\n      let diff = a2.range.start.line - b.range.start.line;\n      if (diff === 0) {\n        return a2.range.start.character - b.range.start.character;\n      }\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) {\n        throw new Error(\"Overlapping edit\");\n      } else if (startOffset > lastModifiedOffset) {\n        spans.push(text.substring(lastModifiedOffset, startOffset));\n      }\n      if (e.newText.length) {\n        spans.push(e.newText);\n      }\n      lastModifiedOffset = document.offsetAt(e.range.end);\n    }\n    spans.push(text.substr(lastModifiedOffset));\n    return spans.join(\"\");\n  }\n  TextDocument3.applyEdits = applyEdits;\n})(TextDocument2 || (TextDocument2 = {}));\nfunction mergeSort(data, compare) {\n  if (data.length <= 1) {\n    return data;\n  }\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) {\n    let ret = compare(left[leftIdx], right[rightIdx]);\n    if (ret <= 0) {\n      data[i++] = left[leftIdx++];\n    } else {\n      data[i++] = right[rightIdx++];\n    }\n  }\n  while (leftIdx < left.length) {\n    data[i++] = left[leftIdx++];\n  }\n  while (rightIdx < right.length) {\n    data[i++] = right[rightIdx++];\n  }\n  return data;\n}\nfunction 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) {\n        i++;\n      }\n      result.push(textOffset + i + 1);\n    }\n  }\n  return result;\n}\nfunction 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) {\n    return { start: end, end: start };\n  }\n  return range;\n}\nfunction getWellformedEdit(textEdit) {\n  const range = getWellformedRange(textEdit.range);\n  if (range !== textEdit.range) {\n    return { newText: textEdit.newText, range };\n  }\n  return textEdit;\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/jsonLanguageTypes.js\nvar ErrorCode;\n(function(ErrorCode2) {\n  ErrorCode2[ErrorCode2[\"Undefined\"] = 0] = \"Undefined\";\n  ErrorCode2[ErrorCode2[\"EnumValueMismatch\"] = 1] = \"EnumValueMismatch\";\n  ErrorCode2[ErrorCode2[\"Deprecated\"] = 2] = \"Deprecated\";\n  ErrorCode2[ErrorCode2[\"UnexpectedEndOfComment\"] = 257] = \"UnexpectedEndOfComment\";\n  ErrorCode2[ErrorCode2[\"UnexpectedEndOfString\"] = 258] = \"UnexpectedEndOfString\";\n  ErrorCode2[ErrorCode2[\"UnexpectedEndOfNumber\"] = 259] = \"UnexpectedEndOfNumber\";\n  ErrorCode2[ErrorCode2[\"InvalidUnicode\"] = 260] = \"InvalidUnicode\";\n  ErrorCode2[ErrorCode2[\"InvalidEscapeCharacter\"] = 261] = \"InvalidEscapeCharacter\";\n  ErrorCode2[ErrorCode2[\"InvalidCharacter\"] = 262] = \"InvalidCharacter\";\n  ErrorCode2[ErrorCode2[\"PropertyExpected\"] = 513] = \"PropertyExpected\";\n  ErrorCode2[ErrorCode2[\"CommaExpected\"] = 514] = \"CommaExpected\";\n  ErrorCode2[ErrorCode2[\"ColonExpected\"] = 515] = \"ColonExpected\";\n  ErrorCode2[ErrorCode2[\"ValueExpected\"] = 516] = \"ValueExpected\";\n  ErrorCode2[ErrorCode2[\"CommaOrCloseBacketExpected\"] = 517] = \"CommaOrCloseBacketExpected\";\n  ErrorCode2[ErrorCode2[\"CommaOrCloseBraceExpected\"] = 518] = \"CommaOrCloseBraceExpected\";\n  ErrorCode2[ErrorCode2[\"TrailingComma\"] = 519] = \"TrailingComma\";\n  ErrorCode2[ErrorCode2[\"DuplicateKey\"] = 520] = \"DuplicateKey\";\n  ErrorCode2[ErrorCode2[\"CommentNotPermitted\"] = 521] = \"CommentNotPermitted\";\n  ErrorCode2[ErrorCode2[\"PropertyKeysMustBeDoublequoted\"] = 528] = \"PropertyKeysMustBeDoublequoted\";\n  ErrorCode2[ErrorCode2[\"SchemaResolveError\"] = 768] = \"SchemaResolveError\";\n  ErrorCode2[ErrorCode2[\"SchemaUnsupportedFeature\"] = 769] = \"SchemaUnsupportedFeature\";\n})(ErrorCode || (ErrorCode = {}));\nvar SchemaDraft;\n(function(SchemaDraft2) {\n  SchemaDraft2[SchemaDraft2[\"v3\"] = 3] = \"v3\";\n  SchemaDraft2[SchemaDraft2[\"v4\"] = 4] = \"v4\";\n  SchemaDraft2[SchemaDraft2[\"v6\"] = 6] = \"v6\";\n  SchemaDraft2[SchemaDraft2[\"v7\"] = 7] = \"v7\";\n  SchemaDraft2[SchemaDraft2[\"v2019_09\"] = 19] = \"v2019_09\";\n  SchemaDraft2[SchemaDraft2[\"v2020_12\"] = 20] = \"v2020_12\";\n})(SchemaDraft || (SchemaDraft = {}));\nvar ClientCapabilities;\n(function(ClientCapabilities2) {\n  ClientCapabilities2.LATEST = {\n    textDocument: {\n      completion: {\n        completionItem: {\n          documentationFormat: [MarkupKind.Markdown, MarkupKind.PlainText],\n          commitCharactersSupport: true,\n          labelDetailsSupport: true\n        }\n      }\n    }\n  };\n})(ClientCapabilities || (ClientCapabilities = {}));\n\n// node_modules/@vscode/l10n/dist/browser.js\nvar bundle;\nfunction 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) {\n      throw new Error(\"expected a string as the first argument to l10n.t\");\n    }\n    let str = firstArg[0];\n    for (let i = 1; i < firstArg.length; i++) {\n      str += `{${i - 1}}` + firstArg[i];\n    }\n    return t(str, ...replacements);\n  } else {\n    message = firstArg.message;\n    key = message;\n    if (firstArg.comment && firstArg.comment.length > 0) {\n      key += `/${Array.isArray(firstArg.comment) ? firstArg.comment.join(\"\") : firstArg.comment}`;\n    }\n    formatArgs = firstArg.args ?? {};\n  }\n  const messageFromBundle = bundle?.[key];\n  if (!messageFromBundle) {\n    return format3(message, formatArgs);\n  }\n  if (typeof messageFromBundle === \"string\") {\n    return format3(messageFromBundle, formatArgs);\n  }\n  if (messageFromBundle.comment) {\n    return format3(messageFromBundle.message, formatArgs);\n  }\n  return format3(message, formatArgs);\n}\nvar _format2Regexp = /{([^}]+)}/g;\nfunction format3(template, values) {\n  if (Object.keys(values).length === 0) {\n    return template;\n  }\n  return template.replace(_format2Regexp, (match, group) => values[group] ?? match);\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/parser/jsonParser.js\nvar formats = {\n  \"color-hex\": { errorMessage: t(\"Invalid color format. Use #RGB, #RGBA, #RRGGBB or #RRGGBBAA.\"), pattern: /^#([0-9A-Fa-f]{3,4}|([0-9A-Fa-f]{2}){3,4})$/ },\n  \"date-time\": { errorMessage: t(\"String is not a RFC3339 date-time.\"), 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  \"date\": { errorMessage: t(\"String is not a RFC3339 date.\"), pattern: /^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/i },\n  \"time\": { errorMessage: t(\"String is not a RFC3339 time.\"), 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  \"email\": { errorMessage: t(\"String is not an e-mail address.\"), 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  \"hostname\": { errorMessage: t(\"String is not a hostname.\"), 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  \"ipv4\": { errorMessage: t(\"String is not an IPv4 address.\"), 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  \"ipv6\": { errorMessage: t(\"String is not an IPv6 address.\"), 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};\nvar 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};\nvar NullASTNodeImpl = class extends ASTNodeImpl {\n  constructor(parent, offset) {\n    super(parent, offset);\n    this.type = \"null\";\n    this.value = null;\n  }\n};\nvar BooleanASTNodeImpl = class extends ASTNodeImpl {\n  constructor(parent, boolValue, offset) {\n    super(parent, offset);\n    this.type = \"boolean\";\n    this.value = boolValue;\n  }\n};\nvar 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};\nvar NumberASTNodeImpl = class extends ASTNodeImpl {\n  constructor(parent, offset) {\n    super(parent, offset);\n    this.type = \"number\";\n    this.isInteger = true;\n    this.value = Number.NaN;\n  }\n};\nvar StringASTNodeImpl = class extends ASTNodeImpl {\n  constructor(parent, offset, length) {\n    super(parent, offset, length);\n    this.type = \"string\";\n    this.value = \"\";\n  }\n};\nvar 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};\nvar 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};\nfunction asSchema(schema) {\n  if (isBoolean(schema)) {\n    return schema ? {} : { \"not\": {} };\n  }\n  return schema;\n}\nvar EnumMatch;\n(function(EnumMatch2) {\n  EnumMatch2[EnumMatch2[\"Key\"] = 0] = \"Key\";\n  EnumMatch2[EnumMatch2[\"Enum\"] = 1] = \"Enum\";\n})(EnumMatch || (EnumMatch = {}));\nvar 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};\nvar EvaluationContext = class {\n  constructor(schemaDraft) {\n    this.schemaDraft = schemaDraft;\n  }\n};\nvar 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 || contains2(node, this.focusOffset)) && node !== this.exclude;\n  }\n  newSub() {\n    return new _SchemaCollector(-1, this.exclude);\n  }\n};\nvar NoOpSchemaCollector = class {\n  constructor() {\n  }\n  get schemas() {\n    return [];\n  }\n  add(_schema) {\n  }\n  merge(_other) {\n  }\n  include(_node) {\n    return true;\n  }\n  newSub() {\n    return this;\n  }\n};\nNoOpSchemaCollector.instance = new NoOpSchemaCollector();\nvar 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) {\n        if (error.code === ErrorCode.EnumValueMismatch) {\n          error.message = t(\"Value is not accepted. Valid values: {0}.\", this.enumValues.map((v) => JSON.stringify(v)).join(\", \"));\n        }\n      }\n    }\n  }\n  mergePropertyMatch(propertyValidationResult) {\n    this.problems = this.problems.concat(propertyValidationResult.problems);\n    this.propertiesMatches++;\n    if (propertyValidationResult.enumValueMatch || !propertyValidationResult.hasProblems() && propertyValidationResult.propertiesMatches) {\n      this.propertiesValueMatches++;\n    }\n    if (propertyValidationResult.enumValueMatch && propertyValidationResult.enumValues && propertyValidationResult.enumValues.length === 1) {\n      this.primaryValueMatches++;\n    }\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()) {\n      return hasProblems ? -1 : 1;\n    }\n    if (this.enumValueMatch !== other.enumValueMatch) {\n      return other.enumValueMatch ? -1 : 1;\n    }\n    if (this.primaryValueMatches !== other.primaryValueMatches) {\n      return this.primaryValueMatches - other.primaryValueMatches;\n    }\n    if (this.propertiesValueMatches !== other.propertiesValueMatches) {\n      return this.propertiesValueMatches - other.propertiesValueMatches;\n    }\n    return this.propertiesMatches - other.propertiesMatches;\n  }\n};\nfunction newJSONDocument(root, diagnostics = []) {\n  return new JSONDocument(root, diagnostics, []);\n}\nfunction getNodeValue3(node) {\n  return getNodeValue2(node);\n}\nfunction getNodePath3(node) {\n  return getNodePath2(node);\n}\nfunction contains2(node, offset, includeRightBound = false) {\n  return offset >= node.offset && offset < node.offset + node.length || includeRightBound && offset === node.offset + node.length;\n}\nvar 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) {\n      return findNodeAtOffset2(this.root, offset, includeRightBound);\n    }\n    return void 0;\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)) {\n          for (let i = 0; i < children.length && ctn; i++) {\n            ctn = doVisit(children[i]);\n          }\n        }\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    return void 0;\n  }\n  getMatchingSchemas(schema, focusOffset = -1, exclude) {\n    if (this.root && schema) {\n      const matchingSchemas = new SchemaCollector(focusOffset, exclude);\n      const schemaDraft = getSchemaDraft(schema);\n      const context = new EvaluationContext(schemaDraft);\n      validate(this.root, schema, new ValidationResult(), matchingSchemas, context);\n      return matchingSchemas.schemas;\n    }\n    return [];\n  }\n};\nfunction getSchemaDraft(schema, fallBack = SchemaDraft.v2020_12) {\n  let schemaId = schema.$schema;\n  if (schemaId) {\n    return schemaDraftFromId[schemaId] ?? fallBack;\n  }\n  return fallBack;\n}\nfunction validate(n, schema, validationResult, matchingSchemas, context) {\n  if (!n || !matchingSchemas.include(n)) {\n    return;\n  }\n  if (n.type === \"property\") {\n    return validate(n.valueNode, schema, validationResult, matchingSchemas, context);\n  }\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({ node, schema });\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)) {\n        validationResult.problems.push({\n          location: { offset: node.offset, length: node.length },\n          message: schema.errorMessage || t(\"Incorrect type. Expected one of {0}.\", schema.type.join(\", \"))\n        });\n      }\n    } else if (schema.type) {\n      if (!matchesType(schema.type)) {\n        validationResult.problems.push({\n          location: { offset: node.offset, length: node.length },\n          message: schema.errorMessage || t('Incorrect type. Expected \"{0}\".', schema.type)\n        });\n      }\n    }\n    if (Array.isArray(schema.allOf)) {\n      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    }\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()) {\n        validationResult.problems.push({\n          location: { offset: node.offset, length: node.length },\n          message: schema.errorMessage || t(\"Matches a schema that is not allowed.\")\n        });\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()) {\n          matches.push(subSchema);\n        }\n        if (!bestMatch) {\n          bestMatch = { schema: subSchema, validationResult: subValidationResult, matchingSchemas: subMatchingSchemas };\n        } else {\n          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) {\n              bestMatch = { schema: subSchema, validationResult: subValidationResult, matchingSchemas: subMatchingSchemas };\n            } else if (compareResult === 0) {\n              bestMatch.matchingSchemas.merge(subMatchingSchemas);\n              bestMatch.validationResult.mergeEnumValues(subValidationResult);\n            }\n          }\n        }\n      }\n      if (matches.length > 1 && maxOneMatch) {\n        validationResult.problems.push({\n          location: { offset: node.offset, length: 1 },\n          message: t(\"Matches multiple schemas when only one must validate.\")\n        });\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)) {\n      testAlternatives(schema.anyOf, false);\n    }\n    if (Array.isArray(schema.oneOf)) {\n      testAlternatives(schema.oneOf, true);\n    }\n    const testBranch = (schema2) => {\n      const subValidationResult = new ValidationResult();\n      const subMatchingSchemas = matchingSchemas.newSub();\n      validate(node, asSchema(schema2), subValidationResult, subMatchingSchemas, context);\n      validationResult.merge(subValidationResult);\n      matchingSchemas.merge(subMatchingSchemas);\n    };\n    const testCondition = (ifSchema2, thenSchema, elseSchema) => {\n      const subSchema = asSchema(ifSchema2);\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) {\n          testBranch(thenSchema);\n        }\n      } else if (elseSchema) {\n        testBranch(elseSchema);\n      }\n    };\n    const ifSchema = asSchema(schema.if);\n    if (ifSchema) {\n      testCondition(ifSchema, asSchema(schema.then), asSchema(schema.else));\n    }\n    if (Array.isArray(schema.enum)) {\n      const val = getNodeValue3(node);\n      let enumValueMatch = false;\n      for (const e of schema.enum) {\n        if (equals(val, e)) {\n          enumValueMatch = true;\n          break;\n        }\n      }\n      validationResult.enumValues = schema.enum;\n      validationResult.enumValueMatch = enumValueMatch;\n      if (!enumValueMatch) {\n        validationResult.problems.push({\n          location: { offset: node.offset, length: node.length },\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    }\n    if (isDefined(schema.const)) {\n      const val = getNodeValue3(node);\n      if (!equals(val, schema.const)) {\n        validationResult.problems.push({\n          location: { offset: node.offset, length: node.length },\n          code: ErrorCode.EnumValueMismatch,\n          message: schema.errorMessage || t(\"Value must be {0}.\", JSON.stringify(schema.const))\n        });\n        validationResult.enumValueMatch = false;\n      } else {\n        validationResult.enumValueMatch = true;\n      }\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: { offset: targetNode.offset, length: targetNode.length },\n        severity: DiagnosticSeverity.Warning,\n        message: deprecationMessage,\n        code: ErrorCode.Deprecated\n      });\n    }\n  }\n  function _validateNumberNode(node2) {\n    const val = node2.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    ;\n    if (isNumber(schema.multipleOf)) {\n      let remainder = -1;\n      if (Number.isInteger(schema.multipleOf)) {\n        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) {\n            normValue.value *= multiplier;\n          } else {\n            normMultipleOf.value *= multiplier;\n          }\n          remainder = normValue.value % normMultipleOf.value;\n        }\n      }\n      if (remainder !== 0) {\n        validationResult.problems.push({\n          location: { offset: node2.offset, length: node2.length },\n          message: t(\"Value is not divisible by {0}.\", schema.multipleOf)\n        });\n      }\n    }\n    function getExclusiveLimit(limit, exclusive) {\n      if (isNumber(exclusive)) {\n        return exclusive;\n      }\n      if (isBoolean(exclusive) && exclusive) {\n        return limit;\n      }\n      return void 0;\n    }\n    function getLimit(limit, exclusive) {\n      if (!isBoolean(exclusive) || !exclusive) {\n        return limit;\n      }\n      return void 0;\n    }\n    const exclusiveMinimum = getExclusiveLimit(schema.minimum, schema.exclusiveMinimum);\n    if (isNumber(exclusiveMinimum) && val <= exclusiveMinimum) {\n      validationResult.problems.push({\n        location: { offset: node2.offset, length: node2.length },\n        message: t(\"Value is below the exclusive minimum of {0}.\", exclusiveMinimum)\n      });\n    }\n    const exclusiveMaximum = getExclusiveLimit(schema.maximum, schema.exclusiveMaximum);\n    if (isNumber(exclusiveMaximum) && val >= exclusiveMaximum) {\n      validationResult.problems.push({\n        location: { offset: node2.offset, length: node2.length },\n        message: t(\"Value is above the exclusive maximum of {0}.\", exclusiveMaximum)\n      });\n    }\n    const minimum = getLimit(schema.minimum, schema.exclusiveMinimum);\n    if (isNumber(minimum) && val < minimum) {\n      validationResult.problems.push({\n        location: { offset: node2.offset, length: node2.length },\n        message: t(\"Value is below the minimum of {0}.\", minimum)\n      });\n    }\n    const maximum = getLimit(schema.maximum, schema.exclusiveMaximum);\n    if (isNumber(maximum) && val > maximum) {\n      validationResult.problems.push({\n        location: { offset: node2.offset, length: node2.length },\n        message: t(\"Value is above the maximum of {0}.\", maximum)\n      });\n    }\n  }\n  function _validateStringNode(node2) {\n    if (isNumber(schema.minLength) && stringLength(node2.value) < schema.minLength) {\n      validationResult.problems.push({\n        location: { offset: node2.offset, length: node2.length },\n        message: t(\"String is shorter than the minimum length of {0}.\", schema.minLength)\n      });\n    }\n    if (isNumber(schema.maxLength) && stringLength(node2.value) > schema.maxLength) {\n      validationResult.problems.push({\n        location: { offset: node2.offset, length: node2.length },\n        message: t(\"String is longer than the maximum length of {0}.\", schema.maxLength)\n      });\n    }\n    if (isString(schema.pattern)) {\n      const regex = extendedRegExp(schema.pattern);\n      if (!regex?.test(node2.value)) {\n        validationResult.problems.push({\n          location: { offset: node2.offset, length: node2.length },\n          message: schema.patternErrorMessage || schema.errorMessage || t('String does not match the pattern of \"{0}\".', schema.pattern)\n        });\n      }\n    }\n    if (schema.format) {\n      switch (schema.format) {\n        case \"uri\":\n        case \"uri-reference\":\n          {\n            let errorMessage;\n            if (!node2.value) {\n              errorMessage = t(\"URI expected.\");\n            } else {\n              const match = /^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/.exec(node2.value);\n              if (!match) {\n                errorMessage = t(\"URI is expected.\");\n              } else if (!match[2] && schema.format === \"uri\") {\n                errorMessage = t(\"URI with a scheme is expected.\");\n              }\n            }\n            if (errorMessage) {\n              validationResult.problems.push({\n                location: { offset: node2.offset, length: node2.length },\n                message: schema.patternErrorMessage || schema.errorMessage || t(\"String is not a URI: {0}\", errorMessage)\n              });\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 format5 = formats[schema.format];\n          if (!node2.value || !format5.pattern.exec(node2.value)) {\n            validationResult.problems.push({\n              location: { offset: node2.offset, length: node2.length },\n              message: schema.patternErrorMessage || schema.errorMessage || format5.errorMessage\n            });\n          }\n        default:\n      }\n    }\n  }\n  function _validateArrayNode(node2) {\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, node2.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 = node2.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 < node2.items.length) {\n      if (typeof additionalItemSchema === \"boolean\") {\n        if (additionalItemSchema === false) {\n          validationResult.problems.push({\n            location: { offset: node2.offset, length: node2.length },\n            message: t(\"Array has too many items according to schema. Expected {0} or fewer.\", index)\n          });\n        }\n        for (; index < node2.items.length; index++) {\n          validationResult.processedProperties.add(String(index));\n          validationResult.propertiesValueMatches++;\n        }\n      } else {\n        for (; index < node2.items.length; index++) {\n          const itemValidationResult = new ValidationResult();\n          validate(node2.items[index], additionalItemSchema, itemValidationResult, matchingSchemas, context);\n          validationResult.mergePropertyMatch(itemValidationResult);\n          validationResult.processedProperties.add(String(index));\n        }\n      }\n    }\n    const containsSchema = asSchema(schema.contains);\n    if (containsSchema) {\n      let containsCount = 0;\n      for (let index2 = 0; index2 < node2.items.length; index2++) {\n        const item = node2.items[index2];\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) {\n            validationResult.processedProperties.add(String(index2));\n          }\n        }\n      }\n      if (containsCount === 0 && !isNumber(schema.minContains)) {\n        validationResult.problems.push({\n          location: { offset: node2.offset, length: node2.length },\n          message: schema.errorMessage || t(\"Array does not contain required item.\")\n        });\n      }\n      if (isNumber(schema.minContains) && containsCount < schema.minContains) {\n        validationResult.problems.push({\n          location: { offset: node2.offset, length: node2.length },\n          message: schema.errorMessage || t(\"Array has too few items that match the contains contraint. Expected {0} or more.\", schema.minContains)\n        });\n      }\n      if (isNumber(schema.maxContains) && containsCount > schema.maxContains) {\n        validationResult.problems.push({\n          location: { offset: node2.offset, length: node2.length },\n          message: schema.errorMessage || t(\"Array has too many items that match the contains contraint. Expected {0} or less.\", schema.maxContains)\n        });\n      }\n    }\n    const unevaluatedItems = schema.unevaluatedItems;\n    if (unevaluatedItems !== void 0) {\n      for (let i = 0; i < node2.items.length; i++) {\n        if (!validationResult.processedProperties.has(String(i))) {\n          if (unevaluatedItems === false) {\n            validationResult.problems.push({\n              location: { offset: node2.offset, length: node2.length },\n              message: t(\"Item does not match any validation rule from the array.\")\n            });\n          } else {\n            const itemValidationResult = new ValidationResult();\n            validate(node2.items[i], schema.unevaluatedItems, itemValidationResult, matchingSchemas, context);\n            validationResult.mergePropertyMatch(itemValidationResult);\n          }\n        }\n        validationResult.processedProperties.add(String(i));\n        validationResult.propertiesValueMatches++;\n      }\n    }\n    if (isNumber(schema.minItems) && node2.items.length < schema.minItems) {\n      validationResult.problems.push({\n        location: { offset: node2.offset, length: node2.length },\n        message: t(\"Array has too few items. Expected {0} or more.\", schema.minItems)\n      });\n    }\n    if (isNumber(schema.maxItems) && node2.items.length > schema.maxItems) {\n      validationResult.problems.push({\n        location: { offset: node2.offset, length: node2.length },\n        message: t(\"Array has too many items. Expected {0} or fewer.\", schema.maxItems)\n      });\n    }\n    if (schema.uniqueItems === true) {\n      let hasDuplicates = function() {\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++) {\n            if (equals(value, values[j])) {\n              return true;\n            }\n          }\n        }\n        return false;\n      };\n      const values = getNodeValue3(node2);\n      if (hasDuplicates()) {\n        validationResult.problems.push({\n          location: { offset: node2.offset, length: node2.length },\n          message: t(\"Array has duplicate items.\")\n        });\n      }\n    }\n  }\n  function _validateObjectNode(node2) {\n    const seenKeys = /* @__PURE__ */ Object.create(null);\n    const unprocessedProperties = /* @__PURE__ */ new Set();\n    for (const propertyNode of node2.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) {\n        if (!seenKeys[propertyName]) {\n          const keyNode = node2.parent && node2.parent.type === \"property\" && node2.parent.keyNode;\n          const location = keyNode ? { offset: keyNode.offset, length: keyNode.length } : { offset: node2.offset, length: 1 };\n          validationResult.problems.push({\n            location,\n            message: t('Missing property \"{0}\".', propertyName)\n          });\n        }\n      }\n    }\n    const propertyProcessed = (prop) => {\n      unprocessedProperties.delete(prop);\n      validationResult.processedProperties.add(prop);\n    };\n    if (schema.properties) {\n      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) {\n          if (isBoolean(propertySchema)) {\n            if (!propertySchema) {\n              const propertyNode = child.parent;\n              validationResult.problems.push({\n                location: { offset: propertyNode.keyNode.offset, length: propertyNode.keyNode.length },\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    }\n    if (schema.patternProperties) {\n      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) {\n            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)) {\n                  if (!propertySchema) {\n                    const propertyNode = child.parent;\n                    validationResult.problems.push({\n                      location: { offset: propertyNode.keyNode.offset, length: propertyNode.keyNode.length },\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          }\n          processed.forEach(propertyProcessed);\n        }\n      }\n    }\n    const additionalProperties = schema.additionalProperties;\n    if (additionalProperties !== void 0) {\n      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: { offset: propertyNode.keyNode.offset, length: propertyNode.keyNode.length },\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    }\n    const unevaluatedProperties = schema.unevaluatedProperties;\n    if (unevaluatedProperties !== void 0) {\n      const processed = [];\n      for (const propertyName of unprocessedProperties) {\n        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: { offset: propertyNode.keyNode.offset, length: propertyNode.keyNode.length },\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      }\n      processed.forEach(propertyProcessed);\n    }\n    if (isNumber(schema.maxProperties)) {\n      if (node2.properties.length > schema.maxProperties) {\n        validationResult.problems.push({\n          location: { offset: node2.offset, length: node2.length },\n          message: t(\"Object has more properties than limit of {0}.\", schema.maxProperties)\n        });\n      }\n    }\n    if (isNumber(schema.minProperties)) {\n      if (node2.properties.length < schema.minProperties) {\n        validationResult.problems.push({\n          location: { offset: node2.offset, length: node2.length },\n          message: t(\"Object has fewer properties than the required number of {0}\", schema.minProperties)\n        });\n      }\n    }\n    if (schema.dependentRequired) {\n      for (const key in schema.dependentRequired) {\n        const prop = seenKeys[key];\n        const propertyDeps = schema.dependentRequired[key];\n        if (prop && Array.isArray(propertyDeps)) {\n          _validatePropertyDependencies(key, propertyDeps);\n        }\n      }\n    }\n    if (schema.dependentSchemas) {\n      for (const key in schema.dependentSchemas) {\n        const prop = seenKeys[key];\n        const propertyDeps = schema.dependentSchemas[key];\n        if (prop && isObject(propertyDeps)) {\n          _validatePropertyDependencies(key, propertyDeps);\n        }\n      }\n    }\n    if (schema.dependencies) {\n      for (const key in schema.dependencies) {\n        const prop = seenKeys[key];\n        if (prop) {\n          _validatePropertyDependencies(key, schema.dependencies[key]);\n        }\n      }\n    }\n    const propertyNames = asSchema(schema.propertyNames);\n    if (propertyNames) {\n      for (const f2 of node2.properties) {\n        const key = f2.keyNode;\n        if (key) {\n          validate(key, propertyNames, validationResult, NoOpSchemaCollector.instance, context);\n        }\n      }\n    }\n    function _validatePropertyDependencies(key, propertyDep) {\n      if (Array.isArray(propertyDep)) {\n        for (const requiredProp of propertyDep) {\n          if (!seenKeys[requiredProp]) {\n            validationResult.problems.push({\n              location: { offset: node2.offset, length: node2.length },\n              message: t(\"Object is missing property {0} required by property {1}.\", requiredProp, key)\n            });\n          } else {\n            validationResult.propertiesValueMatches++;\n          }\n        }\n      } else {\n        const propertySchema = asSchema(propertyDep);\n        if (propertySchema) {\n          const propertyValidationResult = new ValidationResult();\n          validate(node2, propertySchema, propertyValidationResult, matchingSchemas, context);\n          validationResult.mergePropertyMatch(propertyValidationResult);\n        }\n      }\n    }\n  }\n}\nfunction parse3(textDocument, config) {\n  const problems = [];\n  let lastProblemOffset = -1;\n  const text = textDocument.getText();\n  const scanner = createScanner2(text, false);\n  const commentRanges = config && config.collectComments ? [] : void 0;\n  function _scanNext() {\n    while (true) {\n      const token2 = scanner.scan();\n      _checkScanError();\n      switch (token2) {\n        case 12:\n        case 13:\n          if (Array.isArray(commentRanges)) {\n            commentRanges.push(Range.create(textDocument.positionAt(scanner.getTokenOffset()), textDocument.positionAt(scanner.getTokenOffset() + scanner.getTokenLength())));\n          }\n          break;\n        case 15:\n        case 14:\n          break;\n        default:\n          return token2;\n      }\n    }\n  }\n  function _accept(token2) {\n    if (scanner.getToken() === token2) {\n      _scanNext();\n      return true;\n    }\n    return false;\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))) {\n        start--;\n      }\n      end = start + 1;\n    }\n    _errorAtRange(message, code, start, end);\n    if (node) {\n      _finalize(node, false);\n    }\n    if (skipUntilAfter.length + skipUntil.length > 0) {\n      let token2 = scanner.getToken();\n      while (token2 !== 17) {\n        if (skipUntilAfter.indexOf(token2) !== -1) {\n          _scanNext();\n          break;\n        } else if (skipUntil.indexOf(token2) !== -1) {\n          break;\n        }\n        token2 = _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) {\n      _scanNext();\n    }\n    return node;\n  }\n  function _parseArray(parent) {\n    if (scanner.getToken() !== 3) {\n      return void 0;\n    }\n    const node = new ArrayASTNodeImpl(parent, scanner.getTokenOffset());\n    _scanNext();\n    const count = 0;\n    let needsComma = false;\n    while (scanner.getToken() !== 4 && scanner.getToken() !== 17) {\n      if (scanner.getToken() === 5) {\n        if (!needsComma) {\n          _error(t(\"Value expected\"), ErrorCode.ValueExpected);\n        }\n        const commaOffset = scanner.getTokenOffset();\n        _scanNext();\n        if (scanner.getToken() === 4) {\n          if (needsComma) {\n            _errorAtRange(t(\"Trailing comma\"), ErrorCode.TrailingComma, commaOffset, commaOffset + 1);\n          }\n          continue;\n        }\n      } else if (needsComma) {\n        _error(t(\"Expected comma\"), ErrorCode.CommaExpected);\n      }\n      const item = _parseValue(node);\n      if (!item) {\n        _error(t(\"Value expected\"), ErrorCode.ValueExpected, void 0, [], [\n          4,\n          5\n          /* Json.SyntaxKind.CommaToken */\n        ]);\n      } else {\n        node.items.push(item);\n      }\n      needsComma = true;\n    }\n    if (scanner.getToken() !== 4) {\n      return _error(t(\"Expected comma or closing bracket\"), ErrorCode.CommaOrCloseBacketExpected, node);\n    }\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) {\n      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 {\n        return void 0;\n      }\n    }\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)) {\n          _errorAtRange(t(\"Duplicate object key\"), ErrorCode.DuplicateKey, seen.keyNode.offset, seen.keyNode.offset + seen.keyNode.length, DiagnosticSeverity.Warning);\n        }\n        keysSeen[key.value] = true;\n      } else {\n        keysSeen[key.value] = node;\n      }\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) {\n      return _error(t(\"Value expected\"), ErrorCode.ValueExpected, node, [], [\n        2,\n        5\n        /* Json.SyntaxKind.CommaToken */\n      ]);\n    }\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) {\n      return void 0;\n    }\n    const node = new ObjectASTNodeImpl(parent, scanner.getTokenOffset());\n    const keysSeen = /* @__PURE__ */ 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) {\n          _error(t(\"Property expected\"), ErrorCode.PropertyExpected);\n        }\n        const commaOffset = scanner.getTokenOffset();\n        _scanNext();\n        if (scanner.getToken() === 2) {\n          if (needsComma) {\n            _errorAtRange(t(\"Trailing comma\"), ErrorCode.TrailingComma, commaOffset, commaOffset + 1);\n          }\n          continue;\n        }\n      } else if (needsComma) {\n        _error(t(\"Expected comma\"), ErrorCode.CommaExpected);\n      }\n      const property = _parseProperty(node, keysSeen);\n      if (!property) {\n        _error(t(\"Property expected\"), ErrorCode.PropertyExpected, void 0, [], [\n          2,\n          5\n          /* Json.SyntaxKind.CommaToken */\n        ]);\n      } else {\n        node.properties.push(property);\n      }\n      needsComma = true;\n    }\n    if (scanner.getToken() !== 2) {\n      return _error(t(\"Expected comma or closing brace\"), ErrorCode.CommaOrCloseBraceExpected, node);\n    }\n    return _finalize(node, true);\n  }\n  function _parseString(parent) {\n    if (scanner.getToken() !== 10) {\n      return void 0;\n    }\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) {\n      return void 0;\n    }\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)) {\n          return _error(t(\"Invalid number format.\"), ErrorCode.Undefined, node);\n        }\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    let node;\n    switch (scanner.getToken()) {\n      case 7:\n        return _finalize(new NullASTNodeImpl(parent, scanner.getTokenOffset()), true);\n      case 8:\n        return _finalize(new BooleanASTNodeImpl(parent, true, scanner.getTokenOffset()), true);\n      case 9:\n        return _finalize(new BooleanASTNodeImpl(parent, false, scanner.getTokenOffset()), true);\n      default:\n        return void 0;\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  const token = _scanNext();\n  if (token !== 17) {\n    _root = _parseValue(_root);\n    if (!_root) {\n      _error(t(\"Expected a JSON object, array or literal.\"), ErrorCode.Undefined);\n    } else if (scanner.getToken() !== 17) {\n      _error(t(\"End of file expected.\"), ErrorCode.Undefined);\n    }\n  }\n  return new JSONDocument(_root, problems, commentRanges);\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/utils/json.js\nfunction 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) {\n        return \"[]\";\n      }\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) {\n          result += \",\";\n        }\n        result += \"\\n\";\n      }\n      result += indent + \"]\";\n      return result;\n    } else {\n      const keys = Object.keys(obj);\n      if (keys.length === 0) {\n        return \"{}\";\n      }\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) {\n          result += \",\";\n        }\n        result += \"\\n\";\n      }\n      result += indent + \"}\";\n      return result;\n    }\n  }\n  return stringifyLiteral(obj);\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/services/jsonCompletion.js\nvar valueCommitCharacters = [\",\", \"}\", \"]\"];\nvar propertyCommitCharacters = [\":\"];\nvar 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) {\n          return resolver;\n        }\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)) {\n      return Promise.resolve(result);\n    }\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 === \"]\") {\n        node = node.parent;\n      }\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\")) {\n      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] === '\"') {\n        overwriteStart--;\n      }\n      overwriteRange = Range.create(document.positionAt(overwriteStart), position);\n    }\n    const supportsCommitCharacters = false;\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, \"\\u21B5\");\n          if (label.length > 60) {\n            const shortendedLabel = label.substr(0, 57).trim() + \"...\";\n            if (!proposed.has(shortendedLabel)) {\n              label = shortendedLabel;\n            }\n          }\n          suggestion.textEdit = TextEdit.replace(overwriteRange, suggestion.insertText);\n          if (supportsCommitCharacters) {\n            suggestion.commitCharacters = suggestion.kind === CompletionItemKind.Property ? propertyCommitCharacters : valueCommitCharacters;\n          }\n          suggestion.label = label;\n          proposed.set(label, suggestion);\n          result.items.push(suggestion);\n        } else {\n          if (!existing.documentation) {\n            existing.documentation = suggestion.documentation;\n          }\n          if (!existing.detail) {\n            existing.detail = suggestion.detail;\n          }\n          if (!existing.labelDetails) {\n            existing.labelDetails = suggestion.labelDetails;\n          }\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) {\n              node = parent.parent;\n            }\n          }\n        }\n      }\n      if (node && node.type === \"object\") {\n        if (node.offset === offset) {\n          return result;\n        }\n        const properties = node.properties;\n        properties.forEach((p) => {\n          if (!currentProperty || currentProperty !== p) {\n            proposed.set(p.keyNode.value, CompletionItem.create(\"__\"));\n          }\n        });\n        let separatorAfter = \"\";\n        if (addValue) {\n          separatorAfter = this.evaluateSeparatorAfter(document, document.offsetAt(overwriteRange.end));\n        }\n        if (schema) {\n          this.getPropertyCompletions(schema, doc, node, addValue, separatorAfter, collector);\n        } else {\n          this.getSchemaLessPropertyCompletions(doc, node, currentKey, collector);\n        }\n        const location = getNodePath3(node);\n        this.contributions.forEach((contribution) => {\n          const collectPromise = contribution.collectPropertyCompletions(document.uri, location, currentWord, addValue, separatorAfter === \"\", collector);\n          if (collectPromise) {\n            collectionPromises.push(collectPromise);\n          }\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) {\n        this.getValueCompletions(schema, doc, node, offset, document, collector, types);\n      } else {\n        this.getSchemaLessValueCompletions(doc, node, offset, document, collector);\n      }\n      if (this.contributions.length > 0) {\n        this.getContributedValueCompletions(doc, node, offset, document, collector, collectionPromises);\n      }\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\")) {\n            offsetForSeparator = node.offset + node.length;\n          }\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    const matchingSchemas = doc.getMatchingSchemas(schema.schema, node.offset);\n    matchingSchemas.forEach((s) => {\n      if (s.node === node && !s.inverted) {\n        const schemaProperties = s.schema.properties;\n        if (schemaProperties) {\n          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) {\n                proposal.sortText = propertySchema.suggestSortText;\n              }\n              if (proposal.insertText && endsWith(proposal.insertText, `$1${separatorAfter}`)) {\n                proposal.command = {\n                  title: \"Suggest\",\n                  command: \"editor.action.triggerSuggest\"\n                };\n              }\n              collector.add(proposal);\n            }\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) {\n              proposal.sortText = schemaPropertyNames.suggestSortText;\n            }\n            if (proposal.insertText && endsWith(proposal.insertText, `$1${separatorAfter}`)) {\n              proposal.command = {\n                title: \"Suggest\",\n                command: \"editor.action.triggerSuggest\"\n              };\n            }\n            collector.add(proposal);\n          };\n          if (schemaPropertyNames.enum) {\n            for (let i = 0; i < schemaPropertyNames.enum.length; i++) {\n              let enumDescription = void 0;\n              if (schemaPropertyNames.markdownEnumDescriptions && i < schemaPropertyNames.markdownEnumDescriptions.length) {\n                enumDescription = this.fromMarkup(schemaPropertyNames.markdownEnumDescriptions[i]);\n              } else if (schemaPropertyNames.enumDescriptions && i < schemaPropertyNames.enumDescriptions.length) {\n                enumDescription = schemaPropertyNames.enumDescriptions[i];\n              }\n              propertyNameCompletionItem(schemaPropertyNames.enum[i], enumDescription);\n            }\n          }\n          if (schemaPropertyNames.const) {\n            propertyNameCompletionItem(schemaPropertyNames.const);\n          }\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\") {\n            collectCompletionsForSimilarObject(n.valueNode);\n          }\n          return true;\n        });\n      } else if (node.parent.type === \"array\") {\n        node.parent.items.forEach((n) => {\n          if (n.type === \"object\" && n !== node) {\n            collectCompletionsForSimilarObject(n);\n          }\n        });\n      }\n    } else if (node.type === \"object\") {\n      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  }\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 && !contains2(value.parent, offset, true)) {\n        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      }\n      if (value.type === \"boolean\") {\n        this.addBooleanValueCompletion(!value.value, separatorAfter, collector);\n      }\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\")) {\n          return;\n        }\n        const parentKey = node.keyNode.value;\n        doc.visit((n) => {\n          if (n.type === \"property\" && n.keyNode.value === parentKey && n.valueNode) {\n            collectSuggestionsForValues(n.valueNode);\n          }\n          return true;\n        });\n        if (parentKey === \"$schema\" && node.parent && !node.parent.parent) {\n          this.addDollarSchemaCompletions(separatorAfter, collector);\n        }\n      }\n    }\n    if (node.type === \"array\") {\n      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            n.valueNode.items.forEach(collectSuggestionsForValues);\n          }\n          return true;\n        });\n      } else {\n        node.items.forEach(collectSuggestionsForValues);\n      }\n    }\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 valueNode2 = node.valueNode;\n      if (valueNode2 && offset > valueNode2.offset + valueNode2.length) {\n        return;\n      }\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) {\n        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\") {\n                  existingValues.add(this.getLabelForValue(getNodeValue3(n)));\n                }\n              });\n              c = {\n                ...collector,\n                add(suggestion) {\n                  if (!existingValues.has(suggestion.label)) {\n                    collector.add(suggestion);\n                  }\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) {\n                this.addSchemaValueCompletions(s.schema.items[index], separatorAfter, c, types);\n              }\n            } else {\n              this.addSchemaValueCompletions(s.schema.items, separatorAfter, c, types);\n            }\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)) {\n                const regex = extendedRegExp(pattern);\n                if (regex?.test(parentKey)) {\n                  propertyMatched = true;\n                  const propertySchema = s.schema.patternProperties[pattern];\n                  this.addSchemaValueCompletions(propertySchema, separatorAfter, collector, types);\n                }\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      }\n      if (parentKey === \"$schema\" && !node.parent) {\n        this.addDollarSchemaCompletions(separatorAfter, collector);\n      }\n      if (types[\"boolean\"]) {\n        this.addBooleanValueCompletion(true, separatorAfter, collector);\n        this.addBooleanValueCompletion(false, separatorAfter, collector);\n      }\n      if (types[\"null\"]) {\n        this.addNullValueCompletion(separatorAfter, collector);\n      }\n    }\n  }\n  getContributedValueCompletions(doc, node, offset, document, collector, collectionPromises) {\n    if (!node) {\n      this.contributions.forEach((contribution) => {\n        const collectPromise = contribution.collectDefaultCompletions(document.uri, collector);\n        if (collectPromise) {\n          collectionPromises.push(collectPromise);\n        }\n      });\n    } else {\n      if (node.type === \"string\" || node.type === \"number\" || node.type === \"boolean\" || node.type === \"null\") {\n        node = node.parent;\n      }\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 = getNodePath3(node.parent);\n          this.contributions.forEach((contribution) => {\n            const collectPromise = contribution.collectValueCompletions(document.uri, location, parentKey, collector);\n            if (collectPromise) {\n              collectionPromises.push(collectPromise);\n            }\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)) {\n        schema.allOf.forEach((s) => this.addSchemaValueCompletions(s, separatorAfter, collector, types));\n      }\n      if (Array.isArray(schema.anyOf)) {\n        schema.anyOf.forEach((s) => this.addSchemaValueCompletions(s, separatorAfter, collector, types));\n      }\n      if (Array.isArray(schema.oneOf)) {\n        schema.oneOf.forEach((s) => this.addSchemaValueCompletions(s, separatorAfter, collector, types));\n      }\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()) {\n        completionItem.labelDetails = { description: t(\"Default value\") };\n      } else {\n        completionItem.detail = t(\"Default value\");\n      }\n      collector.add(completionItem);\n      hasProposals = true;\n    }\n    if (Array.isArray(schema.examples)) {\n      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    }\n    if (Array.isArray(schema.defaultSnippets)) {\n      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          let type2 = schema.type;\n          for (let i = arrayDepth; i > 0; i--) {\n            value = [value];\n            type2 = \"array\";\n          }\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 {\n          return;\n        }\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    }\n    if (!hasProposals && typeof schema.items === \"object\" && !Array.isArray(schema.items) && arrayDepth < 5) {\n      this.addDefaultValueCompletions(schema.items, separatorAfter, collector, arrayDepth + 1);\n    }\n  }\n  addEnumValueCompletions(schema, separatorAfter, collector) {\n    if (isDefined(schema.const)) {\n      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    }\n    if (Array.isArray(schema.enum)) {\n      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()) {\n          documentation = this.fromMarkup(schema.markdownEnumDescriptions[i]);\n        } else if (schema.enumDescriptions && i < schema.enumDescriptions.length) {\n          documentation = schema.enumDescriptions[i];\n        }\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  }\n  collectTypes(schema, types) {\n    if (Array.isArray(schema.enum) || isDefined(schema.const)) {\n      return;\n    }\n    const type = schema.type;\n    if (Array.isArray(type)) {\n      type.forEach((t2) => types[t2] = true);\n    } else if (type) {\n      types[type] = true;\n    }\n  }\n  addFillerValueCompletions(types, separatorAfter, collector) {\n    if (types[\"object\"]) {\n      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    }\n    if (types[\"array\"]) {\n      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  }\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    const schemaIds = this.schemaService.getRegisteredSchemaIds((schema) => schema === \"http\" || schema === \"https\");\n    schemaIds.forEach((schemaId) => {\n      if (schemaId.startsWith(\"http://json-schema.org/draft-\")) {\n        schemaId = schemaId + \"#\";\n      }\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    const label = JSON.stringify(value);\n    return label.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 === \"{}\") {\n      return \"{$1}\" + separatorAfter;\n    } else if (text === \"[]\") {\n      return \"[$1]\" + separatorAfter;\n    }\n    return this.getInsertTextForPlainText(text + separatorAfter);\n  }\n  getInsertTextForSnippetValue(value, separatorAfter) {\n    const replacer = (value2) => {\n      if (typeof value2 === \"string\") {\n        if (value2[0] === \"^\") {\n          return value2.substr(1);\n        }\n      }\n      return JSON.stringify(value2);\n    };\n    return stringifyObject(value, \"\", replacer) + separatorAfter;\n  }\n  getInsertTextForGuessedValue(value, separatorAfter) {\n    switch (typeof value) {\n      case \"object\":\n        if (value === null) {\n          return \"${1:null}\" + separatorAfter;\n        }\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\":\n        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) {\n      return CompletionItemKind.Value;\n    }\n    switch (type) {\n      case \"string\":\n        return CompletionItemKind.Value;\n      case \"object\":\n        return CompletionItemKind.Module;\n      case \"property\":\n        return CompletionItemKind.Property;\n      default:\n        return CompletionItemKind.Value;\n    }\n  }\n  getLabelTextForMatchingNode(node, document) {\n    switch (node.type) {\n      case \"array\":\n        return \"[]\";\n      case \"object\":\n        return \"{}\";\n      default:\n        const content = document.getText().substr(node.offset, node.length);\n        return content;\n    }\n  }\n  getInsertTextForMatchingNode(node, document, separatorAfter) {\n    switch (node.type) {\n      case \"array\":\n        return this.getInsertTextForValue([], separatorAfter);\n      case \"object\":\n        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) {\n      return propertyText;\n    }\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)) {\n            value = this.getInsertTextForSnippetValue(body, \"\");\n          }\n        }\n        nValueProposals += propertySchema.defaultSnippets.length;\n      }\n      if (propertySchema.enum) {\n        if (!value && propertySchema.enum.length === 1) {\n          value = this.getInsertTextForGuessedValue(propertySchema.enum[0], \"\");\n        }\n        nValueProposals += propertySchema.enum.length;\n      }\n      if (isDefined(propertySchema.const)) {\n        if (!value) {\n          value = this.getInsertTextForGuessedValue(propertySchema.const, \"\");\n        }\n        nValueProposals++;\n      }\n      if (isDefined(propertySchema.default)) {\n        if (!value) {\n          value = this.getInsertTextForGuessedValue(propertySchema.default, \"\");\n        }\n        nValueProposals++;\n      }\n      if (Array.isArray(propertySchema.examples) && propertySchema.examples.length) {\n        if (!value) {\n          value = this.getInsertTextForGuessedValue(propertySchema.examples[0], \"\");\n        }\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) {\n            type = \"object\";\n          } else if (propertySchema.items) {\n            type = \"array\";\n          }\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:\n            return propertyText;\n        }\n      }\n    }\n    if (!value || nValueProposals > 1) {\n      value = \"$1\";\n    }\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) {\n      i--;\n    }\n    return text.substring(i + 1, offset);\n  }\n  evaluateSeparatorAfter(document, offset) {\n    const scanner = createScanner2(document.getText(), true);\n    scanner.setPosition(offset);\n    const token = scanner.scan();\n    switch (token) {\n      case 5:\n      case 2:\n      case 4:\n      case 17:\n        return \"\";\n      default:\n        return \",\";\n    }\n  }\n  findItemAtOffset(node, document, offset) {\n    const scanner = createScanner2(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        const token = scanner.scan();\n        if (token === 5 && offset >= scanner.getTokenOffset() + scanner.getTokenLength()) {\n          return i + 1;\n        }\n        return i;\n      } else if (offset >= child.offset) {\n        return i;\n      }\n    }\n    return 0;\n  }\n  isInComment(document, start, offset) {\n    const scanner = createScanner2(document.getText(), false);\n    scanner.setPosition(start);\n    let token = scanner.scan();\n    while (token !== 17 && scanner.getTokenOffset() + scanner.getTokenLength() < offset) {\n      token = scanner.scan();\n    }\n    return (token === 12 || token === 13) && scanner.getTokenOffset() <= offset;\n  }\n  fromMarkup(markupString) {\n    if (markupString && this.doesSupportMarkdown()) {\n      return {\n        kind: MarkupKind.Markdown,\n        value: markupString\n      };\n    }\n    return void 0;\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)) {\n      this.labelDetailsSupport = this.clientCapabilities.textDocument?.completion?.completionItem?.commitCharactersSupport;\n    }\n    return this.supportsCommitCharacters;\n  }\n  doesSupportsLabelDetails() {\n    if (!isDefined(this.labelDetailsSupport)) {\n      this.labelDetailsSupport = this.clientCapabilities.textDocument?.completion?.completionItem?.labelDetailsSupport;\n    }\n    return this.labelDetailsSupport;\n  }\n};\n\n// node_modules/vscode-json-languageservice/lib/esm/services/jsonHover.js\nvar 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) {\n      return this.promise.resolve(null);\n    }\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) {\n          return this.promise.resolve(null);\n        }\n      }\n    }\n    const hoverRange = Range.create(document.positionAt(hoverRangeNode.offset), document.positionAt(hoverRangeNode.offset + hoverRangeNode.length));\n    const createHover = (contents) => {\n      const result = {\n        contents,\n        range: hoverRange\n      };\n      return result;\n    };\n    const location = getNodePath3(node);\n    for (let i = this.contributions.length - 1; i >= 0; i--) {\n      const contribution = this.contributions[i];\n      const promise = contribution.getInfoContribution(document.uri, location);\n      if (promise) {\n        return promise.then((htmlContent) => createHover(htmlContent));\n      }\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(getNodeValue3(node));\n              if (s.schema.markdownEnumDescriptions) {\n                markdownEnumValueDescription = s.schema.markdownEnumDescriptions[idx];\n              } else if (s.schema.enumDescriptions) {\n                markdownEnumValueDescription = toMarkdown(s.schema.enumDescriptions[idx]);\n              }\n              if (markdownEnumValueDescription) {\n                enumValue = s.schema.enum[idx];\n                if (typeof enumValue !== \"string\") {\n                  enumValue = JSON.stringify(enumValue);\n                }\n              }\n            }\n          }\n          return true;\n        });\n        let result = \"\";\n        if (title) {\n          result = toMarkdown(title);\n        }\n        if (markdownDescription) {\n          if (result.length > 0) {\n            result += \"\\n\\n\";\n          }\n          result += markdownDescription;\n        }\n        if (markdownEnumValueDescription) {\n          if (result.length > 0) {\n            result += \"\\n\\n\";\n          }\n          result += `\\`${toMarkdownCodeBlock(enumValue)}\\`: ${markdownEnumValueDescription}`;\n        }\n        return createHover([result]);\n      }\n      return null;\n    });\n  }\n};\nfunction toMarkdown(plain) {\n  if (plain) {\n    const res = plain.replace(/([^\\n\\r])(\\r?\\n)([^\\n\\r])/gm, \"$1\\n\\n$3\");\n    return res.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g, \"\\\\$&\");\n  }\n  return void 0;\n}\nfunction toMarkdownCodeBlock(content) {\n  if (content.indexOf(\"`\") !== -1) {\n    return \"`` \" + content + \" ``\";\n  }\n  return content;\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/services/jsonValidation.js\nvar 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) {\n      return this.promise.resolve([]);\n    }\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 = (schema2) => {\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 (schema2) {\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 (schema2.errors.length) {\n          addSchemaProblem(schema2.errors[0], ErrorCode.SchemaResolveError);\n        } else if (schemaValidation) {\n          for (const warning of schema2.warnings) {\n            addSchemaProblem(warning, ErrorCode.SchemaUnsupportedFeature);\n          }\n          const semanticErrors = jsonDocument.validate(textDocument, schema2.schema, schemaValidation, documentSettings?.schemaDraft);\n          if (semanticErrors) {\n            semanticErrors.forEach(addProblem);\n          }\n        }\n        if (schemaAllowsComments(schema2.schema)) {\n          commentSeverity = void 0;\n        }\n        if (schemaAllowsTrailingCommas(schema2.schema)) {\n          trailingCommaSeverity = void 0;\n        }\n      }\n      for (const p of jsonDocument.syntaxErrors) {\n        if (p.code === ErrorCode.TrailingComma) {\n          if (typeof trailingCommaSeverity !== \"number\") {\n            continue;\n          }\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++;\n      const handle = this.jsonSchemaService.registerExternalSchema({ uri, schema });\n      return handle.getResolvedSchema().then((resolvedSchema) => {\n        return getDiagnostics(resolvedSchema);\n      });\n    }\n    return this.jsonSchemaService.getSchemaForResource(textDocument.uri, jsonDocument).then((schema2) => {\n      return getDiagnostics(schema2);\n    });\n  }\n  getLanguageStatus(textDocument, jsonDocument) {\n    return { schemas: this.jsonSchemaService.getSchemaURIsForResource(textDocument.uri, jsonDocument) };\n  }\n};\nvar idCounter = 0;\nfunction schemaAllowsComments(schemaRef) {\n  if (schemaRef && typeof schemaRef === \"object\") {\n    if (isBoolean(schemaRef.allowComments)) {\n      return schemaRef.allowComments;\n    }\n    if (schemaRef.allOf) {\n      for (const schema of schemaRef.allOf) {\n        const allow = schemaAllowsComments(schema);\n        if (isBoolean(allow)) {\n          return allow;\n        }\n      }\n    }\n  }\n  return void 0;\n}\nfunction schemaAllowsTrailingCommas(schemaRef) {\n  if (schemaRef && typeof schemaRef === \"object\") {\n    if (isBoolean(schemaRef.allowTrailingCommas)) {\n      return schemaRef.allowTrailingCommas;\n    }\n    const deprSchemaRef = schemaRef;\n    if (isBoolean(deprSchemaRef[\"allowsTrailingCommas\"])) {\n      return deprSchemaRef[\"allowsTrailingCommas\"];\n    }\n    if (schemaRef.allOf) {\n      for (const schema of schemaRef.allOf) {\n        const allow = schemaAllowsTrailingCommas(schema);\n        if (isBoolean(allow)) {\n          return allow;\n        }\n      }\n    }\n  }\n  return void 0;\n}\nfunction toDiagnosticSeverity(severityLevel) {\n  switch (severityLevel) {\n    case \"error\":\n      return DiagnosticSeverity.Error;\n    case \"warning\":\n      return DiagnosticSeverity.Warning;\n    case \"ignore\":\n      return void 0;\n  }\n  return void 0;\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/utils/colors.js\nvar Digit0 = 48;\nvar Digit9 = 57;\nvar A = 65;\nvar a = 97;\nvar f = 102;\nfunction hexDigit(charCode) {\n  if (charCode < Digit0) {\n    return 0;\n  }\n  if (charCode <= Digit9) {\n    return charCode - Digit0;\n  }\n  if (charCode < a) {\n    charCode += a - A;\n  }\n  if (charCode >= a && charCode <= f) {\n    return charCode - a + 10;\n  }\n  return 0;\n}\nfunction colorFromHex(text) {\n  if (text[0] !== \"#\") {\n    return void 0;\n  }\n  switch (text.length) {\n    case 4:\n      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:\n      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:\n      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:\n      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  return void 0;\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/services/jsonDocumentSymbols.js\nvar 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) {\n      return [];\n    }\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 result2 = [];\n        for (const item of root.items) {\n          if (item.type === \"object\") {\n            for (const property of item.properties) {\n              if (property.keyNode.value === \"key\" && property.valueNode) {\n                const location = Location.create(document.uri, getRange(document, item));\n                result2.push({ name: getName(property.valueNode), kind: SymbolKind.Function, location });\n                limit--;\n                if (limit <= 0) {\n                  if (context && context.onResultLimitExceeded) {\n                    context.onResultLimitExceeded(resourceString);\n                  }\n                  return result2;\n                }\n              }\n            }\n          }\n        }\n        return result2;\n      }\n    }\n    const toVisit = [\n      { node: root, containerName: \"\" }\n    ];\n    let nextToVisit = 0;\n    let limitExceeded = false;\n    const result = [];\n    const collectOutlineEntries = (node, containerName) => {\n      if (node.type === \"array\") {\n        node.items.forEach((node2) => {\n          if (node2) {\n            toVisit.push({ node: node2, containerName });\n          }\n        });\n      } else if (node.type === \"object\") {\n        node.properties.forEach((property) => {\n          const valueNode = property.valueNode;\n          if (valueNode) {\n            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({ name: this.getKeyLabel(property), kind: this.getSymbolKind(valueNode.type), location, containerName });\n              toVisit.push({ node: valueNode, containerName: childContainerName });\n            } else {\n              limitExceeded = true;\n            }\n          }\n        });\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) {\n      context.onResultLimitExceeded(resourceString);\n    }\n    return result;\n  }\n  findDocumentSymbols2(document, doc, context = { resultLimit: Number.MAX_VALUE }) {\n    const root = doc.root;\n    if (!root) {\n      return [];\n    }\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 result2 = [];\n        for (const item of root.items) {\n          if (item.type === \"object\") {\n            for (const property of item.properties) {\n              if (property.keyNode.value === \"key\" && property.valueNode) {\n                const range = getRange(document, item);\n                const selectionRange = getRange(document, property.keyNode);\n                result2.push({ name: getName(property.valueNode), kind: SymbolKind.Function, range, selectionRange });\n                limit--;\n                if (limit <= 0) {\n                  if (context && context.onResultLimitExceeded) {\n                    context.onResultLimitExceeded(resourceString);\n                  }\n                  return result2;\n                }\n              }\n            }\n          }\n        }\n        return result2;\n      }\n    }\n    const result = [];\n    const toVisit = [\n      { node: root, result }\n    ];\n    let nextToVisit = 0;\n    let limitExceeded = false;\n    const collectOutlineEntries = (node, result2) => {\n      if (node.type === \"array\") {\n        node.items.forEach((node2, index) => {\n          if (node2) {\n            if (limit > 0) {\n              limit--;\n              const range = getRange(document, node2);\n              const selectionRange = range;\n              const name = String(index);\n              const symbol = { name, kind: this.getSymbolKind(node2.type), range, selectionRange, children: [] };\n              result2.push(symbol);\n              toVisit.push({ result: symbol.children, node: node2 });\n            } else {\n              limitExceeded = true;\n            }\n          }\n        });\n      } else if (node.type === \"object\") {\n        node.properties.forEach((property) => {\n          const valueNode = property.valueNode;\n          if (valueNode) {\n            if (limit > 0) {\n              limit--;\n              const range = getRange(document, property);\n              const selectionRange = getRange(document, property.keyNode);\n              const children = [];\n              const symbol = { name: this.getKeyLabel(property), kind: this.getSymbolKind(valueNode.type), range, selectionRange, children, detail: this.getDetail(valueNode) };\n              result2.push(symbol);\n              toVisit.push({ result: children, node: valueNode });\n            } else {\n              limitExceeded = true;\n            }\n          }\n        });\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) {\n      context.onResultLimitExceeded(resourceString);\n    }\n    return result;\n  }\n  getSymbolKind(nodeType) {\n    switch (nodeType) {\n      case \"object\":\n        return SymbolKind.Module;\n      case \"string\":\n        return SymbolKind.String;\n      case \"number\":\n        return SymbolKind.Number;\n      case \"array\":\n        return SymbolKind.Array;\n      case \"boolean\":\n        return SymbolKind.Boolean;\n      default:\n        return SymbolKind.Variable;\n    }\n  }\n  getKeyLabel(property) {\n    let name = property.keyNode.value;\n    if (name) {\n      name = name.replace(/[\\n]/g, \"\\u21B5\");\n    }\n    if (name && name.trim()) {\n      return name;\n    }\n    return `\"${name}\"`;\n  }\n  getDetail(node) {\n    if (!node) {\n      return void 0;\n    }\n    if (node.type === \"boolean\" || node.type === \"number\" || node.type === \"null\" || node.type === \"string\") {\n      return String(node.value);\n    } else {\n      if (node.type === \"array\") {\n        return node.children.length ? void 0 : \"[]\";\n      } else if (node.type === \"object\") {\n        return node.children.length ? void 0 : \"{}\";\n      }\n    }\n    return 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) {\n          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(getNodeValue3(s.node));\n              if (color) {\n                const range = getRange(document, s.node);\n                result.push({ color, range });\n              }\n              visitedNode[nodeId] = true;\n              limit--;\n              if (limit <= 0) {\n                if (context && context.onResultLimitExceeded) {\n                  context.onResultLimitExceeded(document.uri);\n                }\n                return result;\n              }\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) {\n      label = `#${toTwoDigitHex(red256)}${toTwoDigitHex(green256)}${toTwoDigitHex(blue256)}`;\n    } else {\n      label = `#${toTwoDigitHex(red256)}${toTwoDigitHex(green256)}${toTwoDigitHex(blue256)}${toTwoDigitHex(Math.round(color.alpha * 255))}`;\n    }\n    result.push({ label, textEdit: TextEdit.replace(range, JSON.stringify(label)) });\n    return result;\n  }\n};\nfunction getRange(document, node) {\n  return Range.create(document.positionAt(node.offset), document.positionAt(node.offset + node.length));\n}\nfunction getName(node) {\n  return getNodeValue3(node) || t(\"<empty>\");\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/services/configuration.js\nvar schemaContributions = {\n  schemaAssociations: [],\n  schemas: {\n    // bundle the schema-schema to include (localized) descriptions\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\": {\n            \"$ref\": \"#\"\n          }\n        },\n        \"positiveInteger\": {\n          \"type\": \"integer\",\n          \"minimum\": 0\n        },\n        \"positiveIntegerDefault0\": {\n          \"allOf\": [\n            {\n              \"$ref\": \"#/definitions/positiveInteger\"\n            },\n            {\n              \"default\": 0\n            }\n          ]\n        },\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\": {\n            \"type\": \"string\"\n          },\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\": {\n          \"type\": \"string\"\n        },\n        \"description\": {\n          \"type\": \"string\"\n        },\n        \"default\": {},\n        \"multipleOf\": {\n          \"type\": \"number\",\n          \"minimum\": 0,\n          \"exclusiveMinimum\": true\n        },\n        \"maximum\": {\n          \"type\": \"number\"\n        },\n        \"exclusiveMaximum\": {\n          \"type\": \"boolean\",\n          \"default\": false\n        },\n        \"minimum\": {\n          \"type\": \"number\"\n        },\n        \"exclusiveMinimum\": {\n          \"type\": \"boolean\",\n          \"default\": false\n        },\n        \"maxLength\": {\n          \"allOf\": [\n            {\n              \"$ref\": \"#/definitions/positiveInteger\"\n            }\n          ]\n        },\n        \"minLength\": {\n          \"allOf\": [\n            {\n              \"$ref\": \"#/definitions/positiveIntegerDefault0\"\n            }\n          ]\n        },\n        \"pattern\": {\n          \"type\": \"string\",\n          \"format\": \"regex\"\n        },\n        \"additionalItems\": {\n          \"anyOf\": [\n            {\n              \"type\": \"boolean\"\n            },\n            {\n              \"$ref\": \"#\"\n            }\n          ],\n          \"default\": {}\n        },\n        \"items\": {\n          \"anyOf\": [\n            {\n              \"$ref\": \"#\"\n            },\n            {\n              \"$ref\": \"#/definitions/schemaArray\"\n            }\n          ],\n          \"default\": {}\n        },\n        \"maxItems\": {\n          \"allOf\": [\n            {\n              \"$ref\": \"#/definitions/positiveInteger\"\n            }\n          ]\n        },\n        \"minItems\": {\n          \"allOf\": [\n            {\n              \"$ref\": \"#/definitions/positiveIntegerDefault0\"\n            }\n          ]\n        },\n        \"uniqueItems\": {\n          \"type\": \"boolean\",\n          \"default\": false\n        },\n        \"maxProperties\": {\n          \"allOf\": [\n            {\n              \"$ref\": \"#/definitions/positiveInteger\"\n            }\n          ]\n        },\n        \"minProperties\": {\n          \"allOf\": [\n            {\n              \"$ref\": \"#/definitions/positiveIntegerDefault0\"\n            }\n          ]\n        },\n        \"required\": {\n          \"allOf\": [\n            {\n              \"$ref\": \"#/definitions/stringArray\"\n            }\n          ]\n        },\n        \"additionalProperties\": {\n          \"anyOf\": [\n            {\n              \"type\": \"boolean\"\n            },\n            {\n              \"$ref\": \"#\"\n            }\n          ],\n          \"default\": {}\n        },\n        \"definitions\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"$ref\": \"#\"\n          },\n          \"default\": {}\n        },\n        \"properties\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"$ref\": \"#\"\n          },\n          \"default\": {}\n        },\n        \"patternProperties\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"$ref\": \"#\"\n          },\n          \"default\": {}\n        },\n        \"dependencies\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"anyOf\": [\n              {\n                \"$ref\": \"#\"\n              },\n              {\n                \"$ref\": \"#/definitions/stringArray\"\n              }\n            ]\n          }\n        },\n        \"enum\": {\n          \"type\": \"array\",\n          \"minItems\": 1,\n          \"uniqueItems\": true\n        },\n        \"type\": {\n          \"anyOf\": [\n            {\n              \"$ref\": \"#/definitions/simpleTypes\"\n            },\n            {\n              \"type\": \"array\",\n              \"items\": {\n                \"$ref\": \"#/definitions/simpleTypes\"\n              },\n              \"minItems\": 1,\n              \"uniqueItems\": true\n            }\n          ]\n        },\n        \"format\": {\n          \"anyOf\": [\n            {\n              \"type\": \"string\",\n              \"enum\": [\n                \"date-time\",\n                \"uri\",\n                \"email\",\n                \"hostname\",\n                \"ipv4\",\n                \"ipv6\",\n                \"regex\"\n              ]\n            },\n            {\n              \"type\": \"string\"\n            }\n          ]\n        },\n        \"allOf\": {\n          \"allOf\": [\n            {\n              \"$ref\": \"#/definitions/schemaArray\"\n            }\n          ]\n        },\n        \"anyOf\": {\n          \"allOf\": [\n            {\n              \"$ref\": \"#/definitions/schemaArray\"\n            }\n          ]\n        },\n        \"oneOf\": {\n          \"allOf\": [\n            {\n              \"$ref\": \"#/definitions/schemaArray\"\n            }\n          ]\n        },\n        \"not\": {\n          \"allOf\": [\n            {\n              \"$ref\": \"#\"\n            }\n          ]\n        }\n      },\n      \"dependencies\": {\n        \"exclusiveMaximum\": [\n          \"maximum\"\n        ],\n        \"exclusiveMinimum\": [\n          \"minimum\"\n        ]\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\": {\n          \"allOf\": [\n            { \"$ref\": \"#/definitions/nonNegativeInteger\" },\n            { \"default\": 0 }\n          ]\n        },\n        \"simpleTypes\": {\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          \"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\": {\n          \"type\": \"string\"\n        },\n        \"title\": {\n          \"type\": \"string\"\n        },\n        \"description\": {\n          \"type\": \"string\"\n        },\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\": {\n          \"type\": \"number\"\n        },\n        \"exclusiveMaximum\": {\n          \"type\": \"number\"\n        },\n        \"minimum\": {\n          \"type\": \"number\"\n        },\n        \"exclusiveMinimum\": {\n          \"type\": \"number\"\n        },\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\": [\n            { \"$ref\": \"#\" },\n            { \"$ref\": \"#/definitions/schemaArray\" }\n          ],\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\": {\n            \"anyOf\": [\n              { \"$ref\": \"#\" },\n              { \"$ref\": \"#/definitions/stringArray\" }\n            ]\n          }\n        },\n        \"propertyNames\": { \"$ref\": \"#\" },\n        \"const\": true,\n        \"enum\": {\n          \"type\": \"array\",\n          \"items\": true,\n          \"minItems\": 1,\n          \"uniqueItems\": true\n        },\n        \"type\": {\n          \"anyOf\": [\n            { \"$ref\": \"#/definitions/simpleTypes\" },\n            {\n              \"type\": \"array\",\n              \"items\": { \"$ref\": \"#/definitions/simpleTypes\" },\n              \"minItems\": 1,\n              \"uniqueItems\": true\n            }\n          ]\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};\nvar 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};\nfor (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\") {\n      propertyObject = schema.properties[property] = {};\n    }\n    const description = descriptions[property];\n    if (description) {\n      propertyObject[\"description\"] = description;\n    }\n  }\n}\n\n// node_modules/vscode-uri/lib/esm/index.mjs\nvar LIB;\n(() => {\n  \"use strict\";\n  var t2 = { 470: (t3) => {\n    function e2(t4) {\n      if (\"string\" != typeof t4)\n        throw new TypeError(\"Path must be a string. Received \" + JSON.stringify(t4));\n    }\n    function r2(t4, e3) {\n      for (var r3, n3 = \"\", i = 0, o = -1, s = 0, h = 0; h <= t4.length; ++h) {\n        if (h < t4.length)\n          r3 = t4.charCodeAt(h);\n        else {\n          if (47 === r3)\n            break;\n          r3 = 47;\n        }\n        if (47 === r3) {\n          if (o === h - 1 || 1 === s)\n            ;\n          else if (o !== h - 1 && 2 === s) {\n            if (n3.length < 2 || 2 !== i || 46 !== n3.charCodeAt(n3.length - 1) || 46 !== n3.charCodeAt(n3.length - 2)) {\n              if (n3.length > 2) {\n                var a2 = n3.lastIndexOf(\"/\");\n                if (a2 !== n3.length - 1) {\n                  -1 === a2 ? (n3 = \"\", i = 0) : i = (n3 = n3.slice(0, a2)).length - 1 - n3.lastIndexOf(\"/\"), o = h, s = 0;\n                  continue;\n                }\n              } else if (2 === n3.length || 1 === n3.length) {\n                n3 = \"\", i = 0, o = h, s = 0;\n                continue;\n              }\n            }\n            e3 && (n3.length > 0 ? n3 += \"/..\" : n3 = \"..\", i = 2);\n          } else\n            n3.length > 0 ? n3 += \"/\" + t4.slice(o + 1, h) : n3 = t4.slice(o + 1, h), i = h - o - 1;\n          o = h, s = 0;\n        } else\n          46 === r3 && -1 !== s ? ++s : s = -1;\n      }\n      return n3;\n    }\n    var n2 = { resolve: function() {\n      for (var t4, n3 = \"\", i = false, o = arguments.length - 1; o >= -1 && !i; o--) {\n        var s;\n        o >= 0 ? s = arguments[o] : (void 0 === t4 && (t4 = process.cwd()), s = t4), e2(s), 0 !== s.length && (n3 = s + \"/\" + n3, i = 47 === s.charCodeAt(0));\n      }\n      return n3 = r2(n3, !i), i ? n3.length > 0 ? \"/\" + n3 : \"/\" : n3.length > 0 ? n3 : \".\";\n    }, normalize: function(t4) {\n      if (e2(t4), 0 === t4.length)\n        return \".\";\n      var n3 = 47 === t4.charCodeAt(0), i = 47 === t4.charCodeAt(t4.length - 1);\n      return 0 !== (t4 = r2(t4, !n3)).length || n3 || (t4 = \".\"), t4.length > 0 && i && (t4 += \"/\"), n3 ? \"/\" + t4 : t4;\n    }, isAbsolute: function(t4) {\n      return e2(t4), t4.length > 0 && 47 === t4.charCodeAt(0);\n    }, join: function() {\n      if (0 === arguments.length)\n        return \".\";\n      for (var t4, r3 = 0; r3 < arguments.length; ++r3) {\n        var i = arguments[r3];\n        e2(i), i.length > 0 && (void 0 === t4 ? t4 = i : t4 += \"/\" + i);\n      }\n      return void 0 === t4 ? \".\" : n2.normalize(t4);\n    }, relative: function(t4, r3) {\n      if (e2(t4), e2(r3), t4 === r3)\n        return \"\";\n      if ((t4 = n2.resolve(t4)) === (r3 = n2.resolve(r3)))\n        return \"\";\n      for (var i = 1; i < t4.length && 47 === t4.charCodeAt(i); ++i)\n        ;\n      for (var o = t4.length, s = o - i, h = 1; h < r3.length && 47 === r3.charCodeAt(h); ++h)\n        ;\n      for (var a2 = r3.length - h, c = s < a2 ? s : a2, f2 = -1, u = 0; u <= c; ++u) {\n        if (u === c) {\n          if (a2 > c) {\n            if (47 === r3.charCodeAt(h + u))\n              return r3.slice(h + u + 1);\n            if (0 === u)\n              return r3.slice(h + u);\n          } else\n            s > c && (47 === t4.charCodeAt(i + u) ? f2 = u : 0 === u && (f2 = 0));\n          break;\n        }\n        var l = t4.charCodeAt(i + u);\n        if (l !== r3.charCodeAt(h + u))\n          break;\n        47 === l && (f2 = u);\n      }\n      var g = \"\";\n      for (u = i + f2 + 1; u <= o; ++u)\n        u !== o && 47 !== t4.charCodeAt(u) || (0 === g.length ? g += \"..\" : g += \"/..\");\n      return g.length > 0 ? g + r3.slice(h + f2) : (h += f2, 47 === r3.charCodeAt(h) && ++h, r3.slice(h));\n    }, _makeLong: function(t4) {\n      return t4;\n    }, dirname: function(t4) {\n      if (e2(t4), 0 === t4.length)\n        return \".\";\n      for (var r3 = t4.charCodeAt(0), n3 = 47 === r3, i = -1, o = true, s = t4.length - 1; s >= 1; --s)\n        if (47 === (r3 = t4.charCodeAt(s))) {\n          if (!o) {\n            i = s;\n            break;\n          }\n        } else\n          o = false;\n      return -1 === i ? n3 ? \"/\" : \".\" : n3 && 1 === i ? \"//\" : t4.slice(0, i);\n    }, basename: function(t4, r3) {\n      if (void 0 !== r3 && \"string\" != typeof r3)\n        throw new TypeError('\"ext\" argument must be a string');\n      e2(t4);\n      var n3, i = 0, o = -1, s = true;\n      if (void 0 !== r3 && r3.length > 0 && r3.length <= t4.length) {\n        if (r3.length === t4.length && r3 === t4)\n          return \"\";\n        var h = r3.length - 1, a2 = -1;\n        for (n3 = t4.length - 1; n3 >= 0; --n3) {\n          var c = t4.charCodeAt(n3);\n          if (47 === c) {\n            if (!s) {\n              i = n3 + 1;\n              break;\n            }\n          } else\n            -1 === a2 && (s = false, a2 = n3 + 1), h >= 0 && (c === r3.charCodeAt(h) ? -1 == --h && (o = n3) : (h = -1, o = a2));\n        }\n        return i === o ? o = a2 : -1 === o && (o = t4.length), t4.slice(i, o);\n      }\n      for (n3 = t4.length - 1; n3 >= 0; --n3)\n        if (47 === t4.charCodeAt(n3)) {\n          if (!s) {\n            i = n3 + 1;\n            break;\n          }\n        } else\n          -1 === o && (s = false, o = n3 + 1);\n      return -1 === o ? \"\" : t4.slice(i, o);\n    }, extname: function(t4) {\n      e2(t4);\n      for (var r3 = -1, n3 = 0, i = -1, o = true, s = 0, h = t4.length - 1; h >= 0; --h) {\n        var a2 = t4.charCodeAt(h);\n        if (47 !== a2)\n          -1 === i && (o = false, i = h + 1), 46 === a2 ? -1 === r3 ? r3 = h : 1 !== s && (s = 1) : -1 !== r3 && (s = -1);\n        else if (!o) {\n          n3 = h + 1;\n          break;\n        }\n      }\n      return -1 === r3 || -1 === i || 0 === s || 1 === s && r3 === i - 1 && r3 === n3 + 1 ? \"\" : t4.slice(r3, i);\n    }, format: function(t4) {\n      if (null === t4 || \"object\" != typeof t4)\n        throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof t4);\n      return function(t5, e3) {\n        var r3 = e3.dir || e3.root, n3 = e3.base || (e3.name || \"\") + (e3.ext || \"\");\n        return r3 ? r3 === e3.root ? r3 + n3 : r3 + \"/\" + n3 : n3;\n      }(0, t4);\n    }, parse: function(t4) {\n      e2(t4);\n      var r3 = { root: \"\", dir: \"\", base: \"\", ext: \"\", name: \"\" };\n      if (0 === t4.length)\n        return r3;\n      var n3, i = t4.charCodeAt(0), o = 47 === i;\n      o ? (r3.root = \"/\", n3 = 1) : n3 = 0;\n      for (var s = -1, h = 0, a2 = -1, c = true, f2 = t4.length - 1, u = 0; f2 >= n3; --f2)\n        if (47 !== (i = t4.charCodeAt(f2)))\n          -1 === a2 && (c = false, a2 = f2 + 1), 46 === i ? -1 === s ? s = f2 : 1 !== u && (u = 1) : -1 !== s && (u = -1);\n        else if (!c) {\n          h = f2 + 1;\n          break;\n        }\n      return -1 === s || -1 === a2 || 0 === u || 1 === u && s === a2 - 1 && s === h + 1 ? -1 !== a2 && (r3.base = r3.name = 0 === h && o ? t4.slice(1, a2) : t4.slice(h, a2)) : (0 === h && o ? (r3.name = t4.slice(1, s), r3.base = t4.slice(1, a2)) : (r3.name = t4.slice(h, s), r3.base = t4.slice(h, a2)), r3.ext = t4.slice(s, a2)), h > 0 ? r3.dir = t4.slice(0, h - 1) : o && (r3.dir = \"/\"), r3;\n    }, sep: \"/\", delimiter: \":\", win32: null, posix: null };\n    n2.posix = n2, t3.exports = n2;\n  } }, e = {};\n  function r(n2) {\n    var i = e[n2];\n    if (void 0 !== i)\n      return i.exports;\n    var o = e[n2] = { exports: {} };\n    return t2[n2](o, o.exports, r), o.exports;\n  }\n  r.d = (t3, e2) => {\n    for (var n2 in e2)\n      r.o(e2, n2) && !r.o(t3, n2) && Object.defineProperty(t3, n2, { enumerable: true, get: e2[n2] });\n  }, r.o = (t3, e2) => Object.prototype.hasOwnProperty.call(t3, e2), r.r = (t3) => {\n    \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t3, Symbol.toStringTag, { value: \"Module\" }), Object.defineProperty(t3, \"__esModule\", { value: true });\n  };\n  var n = {};\n  (() => {\n    let t3;\n    if (r.r(n), r.d(n, { URI: () => f2, Utils: () => P }), \"object\" == typeof process)\n      t3 = \"win32\" === process.platform;\n    else if (\"object\" == typeof navigator) {\n      let e3 = navigator.userAgent;\n      t3 = e3.indexOf(\"Windows\") >= 0;\n    }\n    const e2 = /^\\w[\\w\\d+.-]*$/, i = /^\\//, o = /^\\/\\//;\n    function s(t4, r2) {\n      if (!t4.scheme && r2)\n        throw new Error(`[UriError]: Scheme is missing: {scheme: \"\", authority: \"${t4.authority}\", path: \"${t4.path}\", query: \"${t4.query}\", fragment: \"${t4.fragment}\"}`);\n      if (t4.scheme && !e2.test(t4.scheme))\n        throw new Error(\"[UriError]: Scheme contains illegal characters.\");\n      if (t4.path) {\n        if (t4.authority) {\n          if (!i.test(t4.path))\n            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(t4.path))\n          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 = \"\", a2 = \"/\", c = /^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;\n    class f2 {\n      static isUri(t4) {\n        return t4 instanceof f2 || !!t4 && \"string\" == typeof t4.authority && \"string\" == typeof t4.fragment && \"string\" == typeof t4.path && \"string\" == typeof t4.query && \"string\" == typeof t4.scheme && \"string\" == typeof t4.fsPath && \"function\" == typeof t4.with && \"function\" == typeof t4.toString;\n      }\n      scheme;\n      authority;\n      path;\n      query;\n      fragment;\n      constructor(t4, e3, r2, n2, i2, o2 = false) {\n        \"object\" == typeof t4 ? (this.scheme = t4.scheme || h, this.authority = t4.authority || h, this.path = t4.path || h, this.query = t4.query || h, this.fragment = t4.fragment || h) : (this.scheme = /* @__PURE__ */ function(t5, e4) {\n          return t5 || e4 ? t5 : \"file\";\n        }(t4, o2), this.authority = e3 || h, this.path = function(t5, e4) {\n          switch (t5) {\n            case \"https\":\n            case \"http\":\n            case \"file\":\n              e4 ? e4[0] !== a2 && (e4 = a2 + e4) : e4 = a2;\n          }\n          return e4;\n        }(this.scheme, r2 || h), this.query = n2 || h, this.fragment = i2 || h, s(this, o2));\n      }\n      get fsPath() {\n        return m(this, false);\n      }\n      with(t4) {\n        if (!t4)\n          return this;\n        let { scheme: e3, authority: r2, path: n2, query: i2, fragment: o2 } = t4;\n        return void 0 === e3 ? e3 = this.scheme : null === e3 && (e3 = h), void 0 === r2 ? r2 = this.authority : null === r2 && (r2 = h), void 0 === n2 ? n2 = this.path : null === n2 && (n2 = h), void 0 === i2 ? i2 = this.query : null === i2 && (i2 = h), void 0 === o2 ? o2 = this.fragment : null === o2 && (o2 = h), e3 === this.scheme && r2 === this.authority && n2 === this.path && i2 === this.query && o2 === this.fragment ? this : new l(e3, r2, n2, i2, o2);\n      }\n      static parse(t4, e3 = false) {\n        const r2 = c.exec(t4);\n        return r2 ? new l(r2[2] || h, C(r2[4] || h), C(r2[5] || h), C(r2[7] || h), C(r2[9] || h), e3) : new l(h, h, h, h, h);\n      }\n      static file(e3) {\n        let r2 = h;\n        if (t3 && (e3 = e3.replace(/\\\\/g, a2)), e3[0] === a2 && e3[1] === a2) {\n          const t4 = e3.indexOf(a2, 2);\n          -1 === t4 ? (r2 = e3.substring(2), e3 = a2) : (r2 = e3.substring(2, t4), e3 = e3.substring(t4) || a2);\n        }\n        return new l(\"file\", r2, e3, h, h);\n      }\n      static from(t4) {\n        const e3 = new l(t4.scheme, t4.authority, t4.path, t4.query, t4.fragment);\n        return s(e3, true), e3;\n      }\n      toString(t4 = false) {\n        return y(this, t4);\n      }\n      toJSON() {\n        return this;\n      }\n      static revive(t4) {\n        if (t4) {\n          if (t4 instanceof f2)\n            return t4;\n          {\n            const e3 = new l(t4);\n            return e3._formatted = t4.external, e3._fsPath = t4._sep === u ? t4.fsPath : null, e3;\n          }\n        }\n        return t4;\n      }\n    }\n    const u = t3 ? 1 : void 0;\n    class l extends f2 {\n      _formatted = null;\n      _fsPath = null;\n      get fsPath() {\n        return this._fsPath || (this._fsPath = m(this, false)), this._fsPath;\n      }\n      toString(t4 = false) {\n        return t4 ? y(this, true) : (this._formatted || (this._formatted = y(this, false)), this._formatted);\n      }\n      toJSON() {\n        const t4 = { $mid: 1 };\n        return this._fsPath && (t4.fsPath = this._fsPath, t4._sep = u), this._formatted && (t4.external = this._formatted), this.path && (t4.path = this.path), this.scheme && (t4.scheme = this.scheme), this.authority && (t4.authority = this.authority), this.query && (t4.query = this.query), this.fragment && (t4.fragment = this.fragment), t4;\n      }\n    }\n    const g = { 58: \"%3A\", 47: \"%2F\", 63: \"%3F\", 35: \"%23\", 91: \"%5B\", 93: \"%5D\", 64: \"%40\", 33: \"%21\", 36: \"%24\", 38: \"%26\", 39: \"%27\", 40: \"%28\", 41: \"%29\", 42: \"%2A\", 43: \"%2B\", 44: \"%2C\", 59: \"%3B\", 61: \"%3D\", 32: \"%20\" };\n    function d(t4, e3, r2) {\n      let n2, i2 = -1;\n      for (let o2 = 0; o2 < t4.length; o2++) {\n        const s2 = t4.charCodeAt(o2);\n        if (s2 >= 97 && s2 <= 122 || s2 >= 65 && s2 <= 90 || s2 >= 48 && s2 <= 57 || 45 === s2 || 46 === s2 || 95 === s2 || 126 === s2 || e3 && 47 === s2 || r2 && 91 === s2 || r2 && 93 === s2 || r2 && 58 === s2)\n          -1 !== i2 && (n2 += encodeURIComponent(t4.substring(i2, o2)), i2 = -1), void 0 !== n2 && (n2 += t4.charAt(o2));\n        else {\n          void 0 === n2 && (n2 = t4.substr(0, o2));\n          const e4 = g[s2];\n          void 0 !== e4 ? (-1 !== i2 && (n2 += encodeURIComponent(t4.substring(i2, o2)), i2 = -1), n2 += e4) : -1 === i2 && (i2 = o2);\n        }\n      }\n      return -1 !== i2 && (n2 += encodeURIComponent(t4.substring(i2))), void 0 !== n2 ? n2 : t4;\n    }\n    function p(t4) {\n      let e3;\n      for (let r2 = 0; r2 < t4.length; r2++) {\n        const n2 = t4.charCodeAt(r2);\n        35 === n2 || 63 === n2 ? (void 0 === e3 && (e3 = t4.substr(0, r2)), e3 += g[n2]) : void 0 !== e3 && (e3 += t4[r2]);\n      }\n      return void 0 !== e3 ? e3 : t4;\n    }\n    function m(e3, r2) {\n      let n2;\n      return n2 = e3.authority && e3.path.length > 1 && \"file\" === e3.scheme ? `//${e3.authority}${e3.path}` : 47 === e3.path.charCodeAt(0) && (e3.path.charCodeAt(1) >= 65 && e3.path.charCodeAt(1) <= 90 || e3.path.charCodeAt(1) >= 97 && e3.path.charCodeAt(1) <= 122) && 58 === e3.path.charCodeAt(2) ? r2 ? e3.path.substr(1) : e3.path[1].toLowerCase() + e3.path.substr(2) : e3.path, t3 && (n2 = n2.replace(/\\//g, \"\\\\\")), n2;\n    }\n    function y(t4, e3) {\n      const r2 = e3 ? p : d;\n      let n2 = \"\", { scheme: i2, authority: o2, path: s2, query: h2, fragment: c2 } = t4;\n      if (i2 && (n2 += i2, n2 += \":\"), (o2 || \"file\" === i2) && (n2 += a2, n2 += a2), o2) {\n        let t5 = o2.indexOf(\"@\");\n        if (-1 !== t5) {\n          const e4 = o2.substr(0, t5);\n          o2 = o2.substr(t5 + 1), t5 = e4.lastIndexOf(\":\"), -1 === t5 ? n2 += r2(e4, false, false) : (n2 += r2(e4.substr(0, t5), false, false), n2 += \":\", n2 += r2(e4.substr(t5 + 1), false, true)), n2 += \"@\";\n        }\n        o2 = o2.toLowerCase(), t5 = o2.lastIndexOf(\":\"), -1 === t5 ? n2 += r2(o2, false, true) : (n2 += r2(o2.substr(0, t5), false, true), n2 += o2.substr(t5));\n      }\n      if (s2) {\n        if (s2.length >= 3 && 47 === s2.charCodeAt(0) && 58 === s2.charCodeAt(2)) {\n          const t5 = s2.charCodeAt(1);\n          t5 >= 65 && t5 <= 90 && (s2 = `/${String.fromCharCode(t5 + 32)}:${s2.substr(3)}`);\n        } else if (s2.length >= 2 && 58 === s2.charCodeAt(1)) {\n          const t5 = s2.charCodeAt(0);\n          t5 >= 65 && t5 <= 90 && (s2 = `${String.fromCharCode(t5 + 32)}:${s2.substr(2)}`);\n        }\n        n2 += r2(s2, true, false);\n      }\n      return h2 && (n2 += \"?\", n2 += r2(h2, false, false)), c2 && (n2 += \"#\", n2 += e3 ? c2 : d(c2, false, false)), n2;\n    }\n    function v(t4) {\n      try {\n        return decodeURIComponent(t4);\n      } catch {\n        return t4.length > 3 ? t4.substr(0, 3) + v(t4.substr(3)) : t4;\n      }\n    }\n    const b = /(%[0-9A-Za-z][0-9A-Za-z])+/g;\n    function C(t4) {\n      return t4.match(b) ? t4.replace(b, (t5) => v(t5)) : t4;\n    }\n    var A2 = r(470);\n    const w = A2.posix || A2, x = \"/\";\n    var P;\n    !function(t4) {\n      t4.joinPath = function(t5, ...e3) {\n        return t5.with({ path: w.join(t5.path, ...e3) });\n      }, t4.resolvePath = function(t5, ...e3) {\n        let r2 = t5.path, n2 = false;\n        r2[0] !== x && (r2 = x + r2, n2 = true);\n        let i2 = w.resolve(r2, ...e3);\n        return n2 && i2[0] === x && !t5.authority && (i2 = i2.substring(1)), t5.with({ path: i2 });\n      }, t4.dirname = function(t5) {\n        if (0 === t5.path.length || t5.path === x)\n          return t5;\n        let e3 = w.dirname(t5.path);\n        return 1 === e3.length && 46 === e3.charCodeAt(0) && (e3 = \"\"), t5.with({ path: e3 });\n      }, t4.basename = function(t5) {\n        return w.basename(t5.path);\n      }, t4.extname = function(t5) {\n        return w.extname(t5.path);\n      };\n    }(P || (P = {}));\n  })(), LIB = n;\n})();\nvar { URI: URI2, Utils } = LIB;\n\n// node_modules/vscode-json-languageservice/lib/esm/utils/glob.js\nfunction createRegex(glob, opts) {\n  if (typeof glob !== \"string\") {\n    throw new TypeError(\"Expected a string\");\n  }\n  const str = String(glob);\n  let reStr = \"\";\n  const extended = opts ? !!opts.extended : false;\n  const globstar = opts ? !!opts.globstar : 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 \"?\":\n        if (extended) {\n          reStr += \".\";\n          break;\n        }\n      case \"[\":\n      case \"]\":\n        if (extended) {\n          reStr += c;\n          break;\n        }\n      case \"{\":\n        if (extended) {\n          inGroup = true;\n          reStr += \"(\";\n          break;\n        }\n      case \"}\":\n        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) {\n          reStr += \".*\";\n        } else {\n          const isGlobstar = starCount > 1 && (prevChar === \"/\" || prevChar === void 0 || prevChar === \"{\" || prevChar === \",\") && (nextChar === \"/\" || nextChar === void 0 || nextChar === \",\" || nextChar === \"}\");\n          if (isGlobstar) {\n            if (nextChar === \"/\") {\n              i++;\n            } else if (prevChar === \"/\" && reStr.endsWith(\"\\\\/\")) {\n              reStr = reStr.substr(0, reStr.length - 2);\n            }\n            reStr += \"((?:[^/]*(?:/|$))*)\";\n          } else {\n            reStr += \"([^/]*)\";\n          }\n        }\n        break;\n      default:\n        reStr += c;\n    }\n  }\n  if (!flags || !~flags.indexOf(\"g\")) {\n    reStr = \"^\" + reStr + \"$\";\n  }\n  return new RegExp(reStr, flags);\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/services/jsonSchemaService.js\nvar BANG = \"!\";\nvar PATH_SEP = \"/\";\nvar 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) {\n          patternString = patternString.substring(1);\n        }\n        if (patternString.length > 0) {\n          if (patternString[0] === PATH_SEP) {\n            patternString = patternString.substring(1);\n          }\n          this.globWrappers.push({\n            regexp: createRegex(\"**/\" + patternString, { extended: true, globstar: true }),\n            include\n          });\n        }\n      }\n      ;\n      if (folderUri) {\n        folderUri = normalizeResourceForMatching(folderUri);\n        if (!folderUri.endsWith(\"/\")) {\n          folderUri = folderUri + \"/\";\n        }\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)) {\n      return false;\n    }\n    let match = false;\n    for (const { regexp, include } of this.globWrappers) {\n      if (regexp.test(fileName)) {\n        match = include;\n      }\n    }\n    return match;\n  }\n  getURIs() {\n    return this.uris;\n  }\n};\nvar 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) {\n      this.unresolvedSchema = this.service.promise.resolve(new UnresolvedSchema(unresolvedSchemaContent));\n    }\n  }\n  getUnresolvedSchema() {\n    if (!this.unresolvedSchema) {\n      this.unresolvedSchema = this.service.loadSchema(this.uri);\n    }\n    return this.unresolvedSchema;\n  }\n  getResolvedSchema() {\n    if (!this.resolvedSchema) {\n      this.resolvedSchema = this.getUnresolvedSchema().then((unresolved) => {\n        return this.service.resolveSchemaContent(unresolved, this);\n      });\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};\nvar UnresolvedSchema = class {\n  constructor(schema, errors = []) {\n    this.schema = schema;\n    this.errors = errors;\n  }\n};\nvar 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) {\n      return asSchema(schemaRef);\n    }\n    return void 0;\n  }\n  getSectionRecursive(path, schema) {\n    if (!schema || typeof schema === \"boolean\" || path.length === 0) {\n      return schema;\n    }\n    const next = path.shift();\n    if (schema.properties && typeof schema.properties[next]) {\n      return this.getSectionRecursive(path, schema.properties[next]);\n    } else if (schema.patternProperties) {\n      for (const pattern of Object.keys(schema.patternProperties)) {\n        const regex = extendedRegExp(pattern);\n        if (regex?.test(next)) {\n          return this.getSectionRecursive(path, schema.patternProperties[pattern]);\n        }\n      }\n    } else if (typeof schema.additionalProperties === \"object\") {\n      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]) {\n          return this.getSectionRecursive(path, schema.items[index]);\n        }\n      } else if (schema.items) {\n        return this.getSectionRecursive(path, schema.items);\n      }\n    }\n    return void 0;\n  }\n};\nvar 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 = URI2.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) {\n      this.callOnDispose.pop()();\n    }\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) {\n            toWalk.push(handle.uri);\n          }\n          if (handle.clearSchema()) {\n            hasChanges = true;\n          }\n          all[i] = void 0;\n        }\n      }\n    }\n    return hasChanges;\n  }\n  setSchemaContributions(schemaContributions2) {\n    if (schemaContributions2.schemas) {\n      const schemas = schemaContributions2.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(schemaContributions2.schemaAssociations)) {\n      const schemaAssociations = schemaContributions2.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) {\n      this.addFilePatternAssociation(config.fileMatch, config.folderUri, [id]);\n    }\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) {\n      this.filePatternAssociations.push(contributionAssociation);\n    }\n  }\n  getResolvedSchema(schemaId) {\n    const id = normalizeId(schemaId);\n    const schemaHandle = this.schemasById[id];\n    if (schemaHandle) {\n      return schemaHandle.getResolvedSchema();\n    }\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/\")) {\n      url = \"https\" + url.substring(4);\n    }\n    return this.requestService(url).then((content) => {\n      if (!content) {\n        const errorMessage = t(\"Unable to load schema from '{0}': No content.\", toDisplayString(url));\n        return new UnresolvedSchema({}, [errorMessage]);\n      }\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 = parse2(content, jsonErrors);\n      if (jsonErrors.length) {\n        errors.push(t(\"Unable to parse content from '{0}': Parse error at offset {1}.\", toDisplayString(url), jsonErrors[0].offset));\n      }\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) {\n        errorMessage = errorSplit[1];\n      }\n      if (endsWith(errorMessage, \".\")) {\n        errorMessage = errorMessage.substr(0, errorMessage.length - 1);\n      }\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\") {\n      return this.promise.resolve(new ResolvedSchema({}, [t(\"Draft-03 schemas are not supported.\")], [], schemaDraft));\n    }\n    let usesUnsupportedFeatures = /* @__PURE__ */ new Set();\n    const contextService = this.contextService;\n    const findSectionByJSONPointer = (schema2, path) => {\n      path = decodeURIComponent(path);\n      let current = schema2;\n      if (path[0] === \"/\") {\n        path = path.substring(1);\n      }\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 = (schema2, handle2, id) => {\n      if (!handle2.anchors) {\n        handle2.anchors = collectAnchors(schema2);\n      }\n      return handle2.anchors.get(id);\n    };\n    const merge = (target, section) => {\n      for (const key in section) {\n        if (section.hasOwnProperty(key) && key !== \"id\" && key !== \"$id\") {\n          target[key] = section[key];\n        }\n      }\n    };\n    const mergeRef = (target, sourceRoot, sourceHandle, refSegment) => {\n      let section;\n      if (refSegment === void 0 || refSegment.length === 0) {\n        section = sourceRoot;\n      } else if (refSegment.charAt(0) === \"/\") {\n        section = findSectionByJSONPointer(sourceRoot, refSegment);\n      } else {\n        section = findSchemaById(sourceRoot, sourceHandle, refSegment);\n      }\n      if (section) {\n        merge(target, section);\n      } else {\n        resolveErrors.push(t(\"$ref '{0}' in '{1}' can not be resolved.\", refSegment || \"\", sourceHandle.uri));\n      }\n    };\n    const resolveExternalLink = (node, uri, refSegment, parentHandle) => {\n      if (contextService && !/^[A-Za-z][A-Za-z0-9+\\-.+]*:\\/\\/.*/.test(uri)) {\n        uri = contextService.resolveRelativePath(uri, parentHandle.uri);\n      }\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 {\n            if (!seenRefs.has(ref)) {\n              const id = segments[1];\n              mergeRef(next, parentSchema, parentHandle, id);\n              seenRefs.add(ref);\n            }\n          }\n        }\n        if (next.$recursiveRef) {\n          usesUnsupportedFeatures.add(\"$recursiveRef\");\n        }\n        if (next.$dynamicRef) {\n          usesUnsupportedFeatures.add(\"$dynamicRef\");\n        }\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) {\n          if (result.has(anchor)) {\n            resolveErrors.push(t(\"Duplicate anchor declaration: '{0}'\", anchor));\n          } else {\n            result.set(anchor, next);\n          }\n        }\n        if (next.$recursiveAnchor) {\n          usesUnsupportedFeatures.add(\"$recursiveAnchor\");\n        }\n        if (next.$dynamicAnchor) {\n          usesUnsupportedFeatures.add(\"$dynamicAnchor\");\n        }\n      });\n      return result;\n    };\n    return resolveRefs(schema, schema, handle).then((_) => {\n      let resolveWarnings = [];\n      if (usesUnsupportedFeatures.size) {\n        resolveWarnings.push(t(\"The schema uses meta-schema features ({0}) that are not yet supported by the validator.\", Array.from(usesUnsupportedFeatures.keys()).join(\", \")));\n      }\n      return new ResolvedSchema(schema, resolveErrors, resolveWarnings, schemaDraft);\n    });\n  }\n  traverseNodes(root, handle) {\n    if (!root || typeof root !== \"object\") {\n      return Promise.resolve(null);\n    }\n    const seen = /* @__PURE__ */ new Set();\n    const collectEntries = (...entries) => {\n      for (const entry of entries) {\n        if (isObject(entry)) {\n          toWalk.push(entry);\n        }\n      }\n    };\n    const collectMapEntries = (...maps) => {\n      for (const map of maps) {\n        if (isObject(map)) {\n          for (const k in map) {\n            const key = k;\n            const entry = map[key];\n            if (isObject(entry)) {\n              toWalk.push(entry);\n            }\n          }\n        }\n      }\n    };\n    const collectArrayEntries = (...arrays) => {\n      for (const array of arrays) {\n        if (Array.isArray(array)) {\n          for (const entry of array) {\n            if (isObject(entry)) {\n              toWalk.push(entry);\n            }\n          }\n        }\n      }\n    };\n    const collectEntryOrArrayEntries = (items) => {\n      if (Array.isArray(items)) {\n        for (const entry of items) {\n          if (isObject(entry)) {\n            toWalk.push(entry);\n          }\n        }\n      } else if (isObject(items)) {\n        toWalk.push(items);\n      }\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) {\n        if (p.keyNode.value === \"$schema\" && p.valueNode?.type === \"string\") {\n          let schemaId = p.valueNode.value;\n          if (this.contextService && !/^\\w[\\w\\d+.-]*:/.test(schemaId)) {\n            schemaId = this.contextService.resolveRelativePath(schemaId, resource);\n          }\n          return schemaId;\n        }\n      }\n    }\n    return void 0;\n  }\n  getAssociatedSchemas(resource) {\n    const seen = /* @__PURE__ */ Object.create(null);\n    const schemas = [];\n    const normalizedResource = normalizeResourceForMatching(resource);\n    for (const entry of this.filePatternAssociations) {\n      if (entry.matchesPattern(normalizedResource)) {\n        for (const schemaId of entry.getURIs()) {\n          if (!seen[schemaId]) {\n            schemas.push(schemaId);\n            seen[schemaId] = true;\n          }\n        }\n      }\n    }\n    return schemas;\n  }\n  getSchemaURIsForResource(resource, document) {\n    let schemeId = document && this.getSchemaFromProperty(resource, document);\n    if (schemeId) {\n      return [schemeId];\n    }\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) {\n      return this.cachedSchemaForResource.resolvedSchema;\n    }\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 = { resource, resolvedSchema };\n    return resolvedSchema;\n  }\n  createCombinedSchema(resource, schemaIds) {\n    if (schemaIds.length === 1) {\n      return this.getOrAddSchemaHandle(schemaIds[0]);\n    } else {\n      const combinedSchemaId = \"schemaservice://combinedSchema/\" + encodeURIComponent(resource);\n      const combinedSchema = {\n        allOf: schemaIds.map((schemaId) => ({ $ref: schemaId }))\n      };\n      return this.addSchemaHandle(combinedSchemaId, combinedSchema);\n    }\n  }\n  getMatchingSchemas(document, jsonDocument, schema) {\n    if (schema) {\n      const id = schema.id || \"schemaservice://untitled/matchingSchemas/\" + idCounter2++;\n      const handle = this.addSchemaHandle(id, schema);\n      return handle.getResolvedSchema().then((resolvedSchema) => {\n        return jsonDocument.getMatchingSchemas(resolvedSchema.schema).filter((s) => !s.inverted);\n      });\n    }\n    return this.getSchemaForResource(document.uri, jsonDocument).then((schema2) => {\n      if (schema2) {\n        return jsonDocument.getMatchingSchemas(schema2.schema).filter((s) => !s.inverted);\n      }\n      return [];\n    });\n  }\n};\nvar idCounter2 = 0;\nfunction normalizeId(id) {\n  try {\n    return URI2.parse(id).toString(true);\n  } catch (e) {\n    return id;\n  }\n}\nfunction normalizeResourceForMatching(resource) {\n  try {\n    return URI2.parse(resource).with({ fragment: null, query: null }).toString(true);\n  } catch (e) {\n    return resource;\n  }\n}\nfunction toDisplayString(url) {\n  try {\n    const uri = URI2.parse(url);\n    if (uri.scheme === \"file\") {\n      return uri.fsPath;\n    }\n  } catch (e) {\n  }\n  return url;\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/services/jsonFolding.js\nfunction getFoldingRanges(document, context) {\n  const ranges = [];\n  const nestingLevels = [];\n  const stack = [];\n  let prevStart = -1;\n  const scanner = createScanner2(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 = { startLine, endLine: startLine, kind: token === 1 ? \"object\" : \"array\" };\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) {\n          scanner.setPosition(document.offsetAt(Position.create(startLine + 1, 0)));\n        } else {\n          if (startLine < endLine) {\n            addRange({ startLine, endLine, kind: FoldingRangeKind.Comment });\n            prevStart = startLine;\n          }\n        }\n        break;\n      }\n      case 12: {\n        const text = document.getText().substr(scanner.getTokenOffset(), scanner.getTokenLength());\n        const m = text.match(/^\\/\\/\\s*#(region\\b)|(endregion\\b)/);\n        if (m) {\n          const line = document.positionAt(scanner.getTokenOffset()).line;\n          if (m[1]) {\n            const range = { startLine: line, endLine: line, kind: FoldingRangeKind.Region };\n            stack.push(range);\n          } else {\n            let i = stack.length - 1;\n            while (i >= 0 && stack[i].kind !== FoldingRangeKind.Region) {\n              i--;\n            }\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) {\n    return ranges;\n  }\n  if (context && context.onRangeLimitExceeded) {\n    context.onRangeLimitExceeded(document.uri);\n  }\n  const counts = [];\n  for (let level of nestingLevels) {\n    if (level < 30) {\n      counts[level] = (counts[level] || 0) + 1;\n    }\n  }\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) {\n        result.push(ranges[i]);\n      }\n    }\n  }\n  return result;\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/services/jsonSelectionRanges.js\nfunction 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) {\n            result.push(newRange(cStart, cEnd));\n          }\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(\n          node.offset + node.length,\n          5\n          /* SyntaxKind.CommaToken */\n        );\n        if (afterCommaOffset !== -1) {\n          result.push(newRange(node.offset, afterCommaOffset));\n        }\n      }\n      node = node.parent;\n    }\n    let current = void 0;\n    for (let index = result.length - 1; index >= 0; index--) {\n      current = SelectionRange.create(result[index], current);\n    }\n    if (!current) {\n      current = SelectionRange.create(Range.create(position, position));\n    }\n    return current;\n  }\n  function newRange(start, end) {\n    return Range.create(document.positionAt(start), document.positionAt(end));\n  }\n  const scanner = createScanner2(document.getText(), true);\n  function getOffsetAfterNextToken(offset, expectedToken) {\n    scanner.setPosition(offset);\n    let token = scanner.scan();\n    if (token === expectedToken) {\n      return scanner.getTokenOffset() + scanner.getTokenLength();\n    }\n    return -1;\n  }\n  return positions.map(getSelectionRange);\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/utils/format.js\nfunction format4(documentToFormat, formattingOptions, formattingRange) {\n  let range = void 0;\n  if (formattingRange) {\n    const offset = documentToFormat.offsetAt(formattingRange.start);\n    const length = documentToFormat.offsetAt(formattingRange.end) - offset;\n    range = { offset, length };\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 format2(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\n// node_modules/vscode-json-languageservice/lib/esm/utils/propertyTree.js\nvar Container;\n(function(Container2) {\n  Container2[Container2[\"Object\"] = 0] = \"Object\";\n  Container2[Container2[\"Array\"] = 1] = \"Array\";\n})(Container || (Container = {}));\nvar 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) {\n        insertionIndex = this.childrenProperties.length;\n      } else {\n        insertionIndex = binarySearchOnPropertyArray(this.childrenProperties, childProperty, compareProperties);\n      }\n      if (insertionIndex < 0) {\n        insertionIndex = insertionIndex * -1 - 1;\n      }\n      this.childrenProperties.splice(insertionIndex, 0, childProperty);\n    } else {\n      this.childrenProperties.push(childProperty);\n    }\n    return childProperty;\n  }\n};\nfunction compareProperties(propertyTree1, propertyTree2) {\n  const propertyName1 = propertyTree1.propertyName.toLowerCase();\n  const propertyName2 = propertyTree2.propertyName.toLowerCase();\n  if (propertyName1 < propertyName2) {\n    return -1;\n  } else if (propertyName1 > propertyName2) {\n    return 1;\n  }\n  return 0;\n}\nfunction 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) {\n    return 0;\n  }\n  if (propertyName > lastPropertyInArrayName) {\n    return propertyTreeArray.length;\n  }\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) {\n      m = k + 1;\n    } else if (cmp < 0) {\n      n = k - 1;\n    } else {\n      return k;\n    }\n  }\n  return -m - 1;\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/utils/sort.js\nfunction sort(documentToSort, formattingOptions) {\n  const options = {\n    ...formattingOptions,\n    keepLines: false\n    // keepLines must be false so that the properties are on separate lines for the sorting\n  };\n  const formattedJsonString = TextDocument2.applyEdits(documentToSort, format4(documentToSort, options, void 0));\n  const formattedJsonDocument = TextDocument2.create(\"test://test.json\", \"json\", 0, formattedJsonString);\n  const jsonPropertyTree = findJsoncPropertyTree(formattedJsonDocument);\n  const sortedJsonDocument = sortJsoncDocument(formattedJsonDocument, jsonPropertyTree);\n  const edits = format4(sortedJsonDocument, options, void 0);\n  const sortedAndFormattedJsonDocument = TextDocument2.applyEdits(sortedJsonDocument, edits);\n  return [TextEdit.replace(Range.create(Position.create(0, 0), documentToSort.positionAt(documentToSort.getText().length)), sortedAndFormattedJsonDocument)];\n}\nfunction findJsoncPropertyTree(formattedDocument) {\n  const formattedString = formattedDocument.getText();\n  const scanner = createScanner2(formattedString, 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 endLineNumber2 = scanner.getTokenStartLine();\n      if (secondToLastNonTriviaNonCommentToken === 2 || secondToLastNonTriviaNonCommentToken === 4) {\n        lastProperty.endLineNumber = endLineNumber2 - 1;\n      } else {\n        currentProperty.endLineNumber = endLineNumber2 - 1;\n      }\n      beginningLineNumber = endLineNumber2;\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      }\n      case 3: {\n        if (rootTree.beginningLineNumber === void 0) {\n          rootTree.beginningLineNumber = scanner.getTokenStartLine();\n        }\n        if (currentContainerStack[currentContainerStack.length - 1] === Container.Object) {\n          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      }\n      case 1: {\n        if (rootTree.beginningLineNumber === void 0) {\n          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      }\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      }\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      }\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      }\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()) {\n          updateBeginningLineNumber = true;\n        }\n        break;\n      }\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}\nfunction sortJsoncDocument(jsonDocument, propertyTree) {\n  if (propertyTree.childrenProperties.length === 0) {\n    return jsonDocument;\n  }\n  const sortedJsonDocument = TextDocument2.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 propertyTree2 = propertyTreeArray[i];\n      const range = Range.create(Position.create(propertyTree2.beginningLineNumber, 0), Position.create(propertyTree2.endLineNumber + 1, 0));\n      const jsonContentToReplace = jsonDocument.getText(range);\n      const jsonDocumentToReplace = TextDocument2.create(\"test://test.json\", \"json\", 0, jsonContentToReplace);\n      if (propertyTree2.lastProperty === true && i !== propertyTreeArray.length - 1) {\n        const lineWhereToAddComma = propertyTree2.lineWhereToAddComma - propertyTree2.beginningLineNumber;\n        const indexWhereToAddComma = propertyTree2.indexWhereToAddComa;\n        const edit2 = {\n          range: Range.create(Position.create(lineWhereToAddComma, indexWhereToAddComma), Position.create(lineWhereToAddComma, indexWhereToAddComma)),\n          text: \",\"\n        };\n        TextDocument2.update(jsonDocumentToReplace, [edit2], 1);\n      } else if (propertyTree2.lastProperty === false && i === propertyTreeArray.length - 1) {\n        const commaIndex = propertyTree2.commaIndex;\n        const commaLine = propertyTree2.commaLine;\n        const lineWhereToRemoveComma = commaLine - propertyTree2.beginningLineNumber;\n        const edit2 = {\n          range: Range.create(Position.create(lineWhereToRemoveComma, commaIndex), Position.create(lineWhereToRemoveComma, commaIndex + 1)),\n          text: \"\"\n        };\n        TextDocument2.update(jsonDocumentToReplace, [edit2], 1);\n      }\n      const length = propertyTree2.endLineNumber - propertyTree2.beginningLineNumber + 1;\n      const edit = {\n        range: Range.create(Position.create(beginningLineNumber, 0), Position.create(beginningLineNumber + length, 0)),\n        text: jsonDocumentToReplace.getText()\n      };\n      TextDocument2.update(sortedJsonDocument, [edit], 1);\n      updateSortingQueue(queueToSort, propertyTree2, beginningLineNumber);\n      beginningLineNumber = beginningLineNumber + length;\n    }\n  }\n  return sortedJsonDocument;\n}\nfunction updateSortingQueue(queue, propertyTree, beginningLineNumber) {\n  if (propertyTree.childrenProperties.length === 0) {\n    return;\n  }\n  if (propertyTree.type === Container.Object) {\n    let minimumBeginningLineNumber = Infinity;\n    for (const childProperty of propertyTree.childrenProperties) {\n      if (childProperty.beginningLineNumber < minimumBeginningLineNumber) {\n        minimumBeginningLineNumber = childProperty.beginningLineNumber;\n      }\n    }\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) {\n    updateSortingQueueForArrayProperties(queue, propertyTree, beginningLineNumber);\n  }\n}\nfunction 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) {\n        if (childProperty.beginningLineNumber < minimumBeginningLineNumber) {\n          minimumBeginningLineNumber = childProperty.beginningLineNumber;\n        }\n      }\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) {\n      updateSortingQueueForArrayProperties(queue, subObject, beginningLineNumber + subObject.beginningLineNumber - propertyTree.beginningLineNumber);\n    }\n  }\n}\nvar SortingRange = class {\n  constructor(beginningLineNumber, propertyTreeArray) {\n    this.beginningLineNumber = beginningLineNumber;\n    this.propertyTreeArray = propertyTreeArray;\n  }\n};\n\n// node_modules/vscode-json-languageservice/lib/esm/services/jsonLinks.js\nfunction 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}\nfunction createRange(document, node) {\n  return Range.create(document.positionAt(node.offset + 1), document.positionAt(node.offset + node.length - 1));\n}\nfunction findTargetNode(doc, path) {\n  const tokens = parseJSONPointer(path);\n  if (!tokens) {\n    return null;\n  }\n  return findNode(tokens, doc.root);\n}\nfunction findNode(pointer, node) {\n  if (!node) {\n    return null;\n  }\n  if (pointer.length === 0) {\n    return node;\n  }\n  const token = pointer.shift();\n  if (node && node.type === \"object\") {\n    const propertyNode = node.properties.find((propertyNode2) => propertyNode2.keyNode.value === token);\n    if (!propertyNode) {\n      return null;\n    }\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) {\n        return null;\n      }\n      return findNode(pointer, arrayItem);\n    }\n  }\n  return null;\n}\nfunction parseJSONPointer(path) {\n  if (path === \"#\") {\n    return [];\n  }\n  if (path[0] !== \"#\" || path[1] !== \"/\") {\n    return null;\n  }\n  return path.substring(2).split(/\\//).map(unescape);\n}\nfunction unescape(str) {\n  return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n}\n\n// node_modules/vscode-json-languageservice/lib/esm/jsonLanguageService.js\nfunction 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) => parse3(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) => format4(document, options, range),\n    sort: (document, options) => sort(document, options)\n  };\n}\n\n// src/language/json/jsonWorker.ts\nvar defaultSchemaRequestService;\nif (typeof fetch !== \"undefined\") {\n  defaultSchemaRequestService = function(url) {\n    return fetch(url).then((response) => response.text());\n  };\n}\nvar 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: {\n        resolveRelativePath: (relativePath, resource) => {\n          const base = resource.substr(0, resource.lastIndexOf(\"/\") + 1);\n          return resolvePath(base, relativePath);\n        }\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) {\n      return null;\n    }\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) {\n      return null;\n    }\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) {\n      return [];\n    }\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) {\n      return [];\n    }\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) {\n      return [];\n    }\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) {\n      return [];\n    }\n    let jsonDocument = this._languageService.parseJSONDocument(document);\n    let colorPresentations = this._languageService.getColorPresentations(\n      document,\n      jsonDocument,\n      color,\n      range\n    );\n    return Promise.resolve(colorPresentations);\n  }\n  async getFoldingRanges(uri, context) {\n    let document = this._getTextDocument(uri);\n    if (!document) {\n      return [];\n    }\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) {\n      return [];\n    }\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) {\n      return null;\n    }\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) {\n      return [];\n    }\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) {\n      if (model.uri.toString() === uri) {\n        return TextDocument2.create(\n          uri,\n          this._languageId,\n          model.version,\n          model.getValue()\n        );\n      }\n    }\n    return null;\n  }\n};\nvar Slash = \"/\".charCodeAt(0);\nvar Dot = \".\".charCodeAt(0);\nfunction isAbsolutePath(path) {\n  return path.charCodeAt(0) === Slash;\n}\nfunction resolvePath(uriString, path) {\n  if (isAbsolutePath(path)) {\n    const uri = URI2.parse(uriString);\n    const parts = path.split(\"/\");\n    return uri.with({ path: normalizePath(parts) }).toString();\n  }\n  return joinPath(uriString, path);\n}\nfunction normalizePath(parts) {\n  const newParts = [];\n  for (const part of parts) {\n    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) {\n      newParts.pop();\n    } else {\n      newParts.push(part);\n    }\n  }\n  if (parts.length > 1 && parts[parts.length - 1].length === 0) {\n    newParts.push(\"\");\n  }\n  let res = newParts.join(\"/\");\n  if (parts[0].length === 0) {\n    res = \"/\" + res;\n  }\n  return res;\n}\nfunction joinPath(uriString, ...paths) {\n  const uri = URI2.parse(uriString);\n  const parts = uri.path.split(\"/\");\n  for (let path of paths) {\n    parts.push(...path.split(\"/\"));\n  }\n  return uri.with({ path: normalizePath(parts) }).toString();\n}\n\n// src/language/json/json.worker.ts\nself.onmessage = () => {\n  worker.initialize((ctx, createData) => {\n    return new JSONWorker(ctx, createData);\n  });\n};\n";
const graphqlWorker = "import { initialize } from 'monaco-editor/esm/vs/editor/editor.worker';\nimport { GraphQLWorker } from './GraphQLWorker';\nglobalThis.onmessage = () => {\n    initialize((ctx, createData) => new GraphQLWorker(ctx, createData));\n};\n//# sourceMappingURL=graphql.worker.js.map";

//#endregion
export { css, editorWorkerService, favicon, graphqlWorker, js, jsonWorker };