codeTheme

修改editor样式

Du musst eine Erweiterung wie Tampermonkey, Greasemonkey oder Violentmonkey installieren, um dieses Skript zu installieren.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

Sie müssten eine Skript Manager Erweiterung installieren damit sie dieses Skript installieren können

(Ich habe schon ein Skript Manager, Lass mich es installieren!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         codeTheme
// @namespace    Baozoulolw
// @version      0.1.7
// @author       Baozoulolw
// @description  修改editor样式
// @license      MIT
// @icon         https://baozoulolw.oss-cn-chengdu.aliyuncs.com/codeSet/theme.svg
// @match        *://*/*
// @grant        GM_addStyle
// @grant        unsafeWindow
// ==/UserScript==

(n=>{if(typeof GM_addStyle=="function"){GM_addStyle(n);return}const e=document.createElement("style");e.textContent=n,document.head.append(e)})(` #self_dialog{
  font-size: 18px;
  margin-right: 10px;
}
.head-right{
  display: flex;
  align-items: center;
}
.custom-tree-node[data-v-545643b4] {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: 14px;
  padding-right: 8px;
}
.el-input[data-v-93c5e0b4] .el-input__inner {
  text-align: left;
} `);

(async function () {
  'use strict';

  var __defProp = Object.defineProperty;
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  var __publicField = (obj, key, value) => {
    __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
    return value;
  };
  var _a, _b, _c, _d, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n2, _o, _p, _q, _r;
  function waitForElementByClass(className, callback) {
    const observer = new MutationObserver((mutations) => {
      mutations.forEach((mutation) => {
        Array.from(mutation.addedNodes).forEach((addedNode) => {
          let classNames = addedNode.className;
          if (!classNames || typeof classNames !== "string")
            return;
          if (classNames.includes(className)) {
            callback(addedNode);
            observer.disconnect();
          }
        });
      });
    });
    observer.observe(document.body, { childList: true, subtree: true });
  }
  var _unsafeWindow = /* @__PURE__ */ (() => typeof unsafeWindow != "undefined" ? unsafeWindow : void 0)();
  const monacoEditorInnerLanguages = [
    "css",
    "vue",
    "html",
    "javascript",
    "less",
    "pug",
    "scss",
    "typescript",
    "coffee"
  ];
  const scopeNameMap = {
    html: "text.html.basic",
    vue: "text.html.basic",
    pug: "text.pug",
    css: "source.css",
    less: "source.css.less",
    scss: "source.css.scss",
    sass: "source.sassdoc",
    typescript: "source.ts",
    javascript: "source.js",
    javascriptreact: "source.js.jsx",
    coffeescript: "source.coffee",
    json: "source.json"
  };
  const tmGrammarJsonMap = {
    "text.html.basic": "html.tmLanguage.json",
    "text.pug": "pug.tmLanguage.json",
    "source.css": "css.tmLanguage.json",
    "source.css.less": "less.tmLanguage.json",
    "source.less": "less.tmLanguage.json",
    "source.css.scss": "scss.tmLanguage.json",
    "source.sass": "scss.tmLanguage.json",
    "source.sassdoc": "sassdoc.tmLanguage.json",
    "source.stylus": "css.tmLanguage.json",
    "source.ts": "TypeScript.tmLanguage.json",
    "source.js": "JavaScript.tmLanguage.json",
    "source.js.jsx": "JavaScriptReact.tmLanguage.json",
    "source.coffee": "coffeescript.tmLanguage.json",
    "source.js.regexp": {
      format: "plist",
      path: "Regular Expressions (JavaScript).tmLanguage"
    },
    "source.json": "JSON.tmLanguage.json"
  };
  const completionItemKinds = [
    { name: "Text", value: 1, description: "\u666E\u901A\u6587\u672C" },
    { name: "Method", value: 2, description: "\u65B9\u6CD5\u6216\u51FD\u6570" },
    { name: "Function", value: 3, description: "\u51FD\u6570\uFF08\u975E\u65B9\u6CD5\uFF09" },
    { name: "Constructor", value: 4, description: "\u6784\u9020\u51FD\u6570" },
    { name: "Field", value: 5, description: "\u7C7B\u7684\u5B57\u6BB5\u6216\u5C5E\u6027" },
    { name: "Variable", value: 6, description: "\u53D8\u91CF" },
    { name: "Class", value: 7, description: "\u7C7B" },
    { name: "Interface", value: 8, description: "\u63A5\u53E3" },
    { name: "Module", value: 9, description: "\u6A21\u5757" },
    { name: "Property", value: 10, description: "\u5BF9\u8C61\u7684\u5C5E\u6027" },
    { name: "Unit", value: 11, description: "\u5355\u4F4D\uFF0C\u5982\u50CF\u7D20\u3001\u79D2\u7B49" },
    { name: "Value", value: 12, description: "\u5E38\u91CF\u6216\u679A\u4E3E\u6210\u5458" },
    { name: "Enum", value: 13, description: "\u679A\u4E3E\u7C7B\u578B" },
    { name: "Keyword", value: 14, description: "\u5173\u952E\u5B57\uFF0C\u5982\u8BED\u8A00\u4FDD\u7559\u5B57" },
    { name: "Snippet", value: 15, description: "\u4EE3\u7801\u7247\u6BB5" },
    { name: "Color", value: 16, description: "\u989C\u8272" },
    { name: "File", value: 17, description: "\u6587\u4EF6" },
    { name: "Reference", value: 18, description: "\u5F15\u7528\uFF0C\u901A\u5E38\u6307\u5411\u53E6\u4E00\u4E2A\u8865\u5168\u9879" },
    { name: "Folder", value: 19, description: "\u6587\u4EF6\u5939" },
    { name: "EnumMember", value: 20, description: "\u679A\u4E3E\u7684\u6210\u5458" },
    { name: "Constant", value: 21, description: "\u5E38\u91CF" },
    { name: "Struct", value: 22, description: "\u7ED3\u6784\u4F53" },
    { name: "Event", value: 23, description: "\u4E8B\u4EF6" },
    { name: "Operator", value: 24, description: "\u8FD0\u7B97\u7B26" },
    { name: "TypeParameter", value: 25, description: "\u6CDB\u578B\u6216\u7C7B\u578B\u53C2\u6570" }
  ];
  const insertTextRules = [
    { name: "None", value: 1, description: "\u6CA1\u6709\u7279\u6B8A\u89C4\u5219\uFF0C\u63D2\u5165\u6587\u672C\u5C06\u66FF\u6362\u6574\u4E2A\u8303\u56F4" },
    { name: "InsertAsSnippet", value: 2, description: "\u63D2\u5165\u6587\u672C\u5E94\u88AB\u89C6\u4E3A\u4EE3\u7801\u7247\u6BB5\uFF0C\u5141\u8BB8\u4F7F\u7528\u5360\u4F4D\u7B26" },
    { name: "KeepWhitespace", value: 4, description: "\u4FDD\u7559\u524D\u5BFC\u548C\u5C3E\u968F\u7A7A\u767D\u5B57\u7B26\uFF0C\u5373\u4F7F\u5B83\u4EEC\u5728\u63D2\u5165\u6587\u672C\u4E4B\u5916" },
    { name: "AdjustIndentation", value: 8, description: "\u8C03\u6574\u7F29\u8FDB\uFF0C\u4EE5\u5339\u914D\u63D2\u5165\u4F4D\u7F6E\u7684\u7F29\u8FDB\u7EA7\u522B" },
    { name: "ReplaceAllEnclosing", value: 16, description: "\u66FF\u6362\u6574\u4E2A\u8303\u56F4\uFF0C\u5305\u62EC\u5305\u56F4\u7684\u62EC\u53F7\u3001\u5F15\u53F7\u7B49" },
    { name: "InsertAfter", value: 32, description: "\u5728\u8303\u56F4\u4E4B\u540E\u63D2\u5165\u6587\u672C\uFF0C\u4FDD\u7559\u8303\u56F4\u5185\u7684\u6587\u672C" },
    { name: "InsertBefore", value: 64, description: "\u5728\u8303\u56F4\u4E4B\u524D\u63D2\u5165\u6587\u672C\uFF0C\u4FDD\u7559\u8303\u56F4\u5185\u7684\u6587\u672C" },
    { name: "InsertAfterComment", value: 128, description: "\u5728\u6CE8\u91CA\u7ED3\u675F\u6807\u8BB0\u540E\u63D2\u5165\u6587\u672C" }
  ];
  const tips = [
    {
      id: "1",
      label: "log",
      insertText: "console.log(${1:})",
      kind: 2,
      documentation: "Logs a message to the console.",
      detail: "Shortcut for console.log()",
      insertTextRules: [2],
      sortText: "001",
      supportLanguage: "javascript"
    },
    {
      id: "3",
      label: "watchEffectOnce",
      insertText: "const ${1:} = await zzUtil.watchEffectOnce(() => this.\\$page('${2:}'))",
      kind: 1,
      documentation: "watchEffectOnce",
      detail: "watchEffectOnce",
      insertTextRules: [2],
      sortText: "001",
      supportLanguage: "javascript"
    },
    {
      id: "2",
      label: "<xtypeRender",
      insertText: 'xtypeRender v-bind="\\$attrs" v-model="value"></xtypeRender>',
      kind: 1,
      documentation: "xtypeRender",
      detail: "xtypeRender",
      insertTextRules: [2],
      sortText: "001",
      supportLanguage: "html"
    }
  ];
  var render$2 = function() {
    var _vm = this;
    var _h2 = _vm.$createElement;
    var _c2 = _vm._self._c || _h2;
    return _c2("div", [_c2("el-tree", {
      attrs: {
        "data": _vm.languages,
        "props": _vm.defaultProps
      },
      scopedSlots: _vm._u([{
        key: "default",
        fn: function(_ref) {
          var node = _ref.node;
          _ref.data;
          return _c2("span", {
            staticClass: "custom-tree-node"
          }, [_c2("span", [_vm._v(_vm._s(node.label))])]);
        }
      }])
    }), _c2("el-dialog", {
      attrs: {
        "append-to-body": "",
        "title": "\u65B0\u589E\u4EE3\u7801\u7247\u6BB5",
        "visible": _vm.formShow,
        "before-close": _vm.dialogClose
      }
    }, [_c2("el-form", {
      ref: "form",
      attrs: {
        "rules": _vm.rules,
        "label-width": "120px",
        "model": _vm.editTips
      }
    }, [_c2("el-form-item", {
      attrs: {
        "label": "label"
      }
    }, [_c2("el-input", {
      attrs: {
        "autosize": {
          minRows: 3
        },
        "type": "textarea"
      },
      model: {
        value: _vm.editTips.label,
        callback: function($$v) {
          _vm.$set(_vm.editTips, "label", $$v);
        },
        expression: "editTips.label"
      }
    })], 1), _c2("el-form-item", {
      attrs: {
        "label": "insertText"
      }
    }, [_c2("el-input", {
      attrs: {
        "autosize": {
          minRows: 4
        },
        "type": "textarea"
      },
      model: {
        value: _vm.editTips.insertText,
        callback: function($$v) {
          _vm.$set(_vm.editTips, "insertText", $$v);
        },
        expression: "editTips.insertText"
      }
    })], 1), _c2("el-form-item", {
      attrs: {
        "label": "kind"
      }
    }, [_c2("el-select", {
      staticClass: "tw-w-full",
      model: {
        value: _vm.editTips.kind,
        callback: function($$v) {
          _vm.$set(_vm.editTips, "kind", $$v);
        },
        expression: "editTips.kind"
      }
    }, _vm._l(_vm.completionItemKinds, function(item) {
      return _c2("el-option", {
        key: item.value,
        attrs: {
          "label": item.name,
          "value": item.value
        }
      });
    }), 1)], 1), _c2("el-form-item", {
      attrs: {
        "label": "documentation"
      }
    }, [_c2("el-input", {
      model: {
        value: _vm.editTips.documentation,
        callback: function($$v) {
          _vm.$set(_vm.editTips, "documentation", $$v);
        },
        expression: "editTips.documentation"
      }
    })], 1), _c2("el-form-item", {
      attrs: {
        "label": "detail"
      }
    }, [_c2("el-input", {
      model: {
        value: _vm.editTips.detail,
        callback: function($$v) {
          _vm.$set(_vm.editTips, "detail", $$v);
        },
        expression: "editTips.detail"
      }
    })], 1), _c2("el-form-item", {
      attrs: {
        "label": "insertTextRules"
      }
    }, [_c2("el-select", {
      staticClass: "tw-w-full",
      attrs: {
        "multiple": ""
      },
      model: {
        value: _vm.editTips.insertTextRules,
        callback: function($$v) {
          _vm.$set(_vm.editTips, "insertTextRules", $$v);
        },
        expression: "editTips.insertTextRules"
      }
    }, _vm._l(_vm.insertTextRules, function(item) {
      return _c2("el-option", {
        key: item.value,
        attrs: {
          "label": item.name,
          "value": item.value
        }
      });
    }), 1), _c2("div", _vm._l(_vm.showTags, function(item) {
      return _c2("el-tag", {
        key: item.value
      }, [_vm._v(_vm._s(item.name))]);
    }), 1)], 1), _c2("el-form-item", {
      attrs: {
        "label": "sortText"
      }
    }, [_c2("el-input", {
      model: {
        value: _vm.editTips.sortText,
        callback: function($$v) {
          _vm.$set(_vm.editTips, "sortText", $$v);
        },
        expression: "editTips.sortText"
      }
    })], 1)], 1), _c2("span", {
      staticClass: "dialog-footer",
      attrs: {
        "slot": "footer"
      },
      slot: "footer"
    }, [_c2("el-button", {
      on: {
        "click": _vm.cancel
      }
    }, [_vm._v("\u53D6 \u6D88")]), _c2("el-button", {
      attrs: {
        "type": "primary"
      },
      on: {
        "click": _vm.confirm
      }
    }, [_vm._v("\u786E \u5B9A")])], 1)], 1)], 1);
  };
  var staticRenderFns$1 = [];
  function normalizeComponent(scriptExports, render2, staticRenderFns2, functionalTemplate, injectStyles, scopeId, moduleIdentifier, shadowMode) {
    var options = typeof scriptExports === "function" ? scriptExports.options : scriptExports;
    if (render2) {
      options.render = render2;
      options.staticRenderFns = staticRenderFns2;
      options._compiled = true;
    }
    if (functionalTemplate) {
      options.functional = true;
    }
    if (scopeId) {
      options._scopeId = "data-v-" + scopeId;
    }
    var hook;
    if (moduleIdentifier) {
      hook = function(context) {
        context = context || this.$vnode && this.$vnode.ssrContext || this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext;
        if (!context && typeof __VUE_SSR_CONTEXT__ !== "undefined") {
          context = __VUE_SSR_CONTEXT__;
        }
        if (injectStyles) {
          injectStyles.call(this, context);
        }
        if (context && context._registeredComponents) {
          context._registeredComponents.add(moduleIdentifier);
        }
      };
      options._ssrRegister = hook;
    } else if (injectStyles) {
      hook = shadowMode ? function() {
        injectStyles.call(
          this,
          (options.functional ? this.parent : this).$root.$options.shadowRoot
        );
      } : injectStyles;
    }
    if (hook) {
      if (options.functional) {
        options._injectStyles = hook;
        var originalRender = options.render;
        options.render = function renderWithStyleInjection(h, context) {
          hook.call(context);
          return originalRender(h, context);
        };
      } else {
        var existing = options.beforeCreate;
        options.beforeCreate = existing ? [].concat(existing, hook) : [hook];
      }
    }
    return {
      exports: scriptExports,
      options
    };
  }
  const _$3 = _unsafeWindow._;
  const __vue2_script$1 = {
    name: "",
    data: () => ({
      languages: [
        {
          name: "javascript",
          children: []
        },
        {
          name: "css",
          children: []
        },
        {
          name: "html",
          children: []
        },
        {
          name: "json",
          children: []
        }
      ],
      activeNames: "",
      colSpans: {},
      formShow: false,
      defaultProps: {
        children: "children",
        label: "name"
      },
      editTips: {},
      completionItemKinds: [],
      insertTextRules: [],
      rules: {
        label: [{ required: true, message: "\u8BF7\u8F93\u5165label", trigger: "blur" }],
        insertText: [
          { required: true, message: "\u8BF7\u8F93\u5165insertText", trigger: "blur" }
        ],
        kind: [{ required: true, message: "\u8BF7\u9009\u62E9kind", trigger: "change" }],
        detail: [{ required: true, message: "\u8BF7\u8F93\u5165detail", trigger: "blur" }],
        documentation: [
          { required: true, message: "\u8BF7\u8F93\u5165documentation", trigger: "blur" }
        ]
      }
    }),
    computed: {
      colKeys() {
        return Object.keys(this.colSpans);
      },
      showTags() {
        const { insertTextRules: rules = [] } = this.editTips;
        return insertTextRules.filter((i) => rules.includes(i.value));
      }
    },
    methods: {
      handleChange() {
      },
      editSnippet() {
      },
      getLabel(node) {
        console.log(node);
      },
      append(node, data) {
        this.formShow = true;
      },
      edit(node, data) {
        console.log(data);
        this.editTips = data.data;
        this.formShow = true;
      },
      dialogClose() {
        this.editTips = {};
        this.formShow = false;
      },
      cancel() {
        this.dialogClose();
      },
      async confirm() {
        const check = await this.$refs.form.validate();
        if (!check)
          return;
      },
      initData() {
        let codeSnippets = _unsafeWindow.editorTips;
        let obj = _$3.groupBy(codeSnippets, "supportLanguage");
        this.languages.forEach((language) => {
          var _a2;
          let arr = (_a2 = obj[language.name]) != null ? _a2 : [];
          language.children = arr.map((i) => ({
            name: `${i.label}(${i.detail})`,
            data: i
          }));
        });
      }
    },
    async mounted() {
      this.completionItemKinds = completionItemKinds;
      this.insertTextRules = insertTextRules;
      this.initData();
    }
  };
  const __cssModules$1 = {};
  var __component__$1 = /* @__PURE__ */ normalizeComponent(
    __vue2_script$1,
    render$2,
    staticRenderFns$1,
    false,
    __vue2_injectStyles$1,
    "545643b4",
    null,
    null
  );
  function __vue2_injectStyles$1(context) {
    for (let o in __cssModules$1) {
      this[o] = __cssModules$1[o];
    }
  }
  var Tips = /* @__PURE__ */ function() {
    return __component__$1.exports;
  }();
  const codeThemeList = [
    { name: "vs", value: "vs", out: true, group: "\u9ED8\u8BA4" },
    { name: "vs-dark", value: "vs-dark", out: true, group: "\u9ED8\u8BA4" },
    { name: "hc-black", value: "hc-black", out: true, group: "\u9ED8\u8BA4" },
    {
      "group": "Winter is Coming",
      "name": "Winter Is Coming1",
      "themeName": "WinterIsComing1",
      "path": "WinterIsComing-dark-blue-color-no-italics-theme.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "Winter is Coming",
      "name": "Winter is Coming5",
      "themeName": "WinterisComing5",
      "path": "WinterIsComing-light-color-no-italics-theme.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "Winter is Coming",
      "name": "Winter is Coming6",
      "themeName": "WinterisComing6",
      "path": "WinterIsComing-light-color-theme.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "Winter is Coming",
      "name": "Winter Is Coming3",
      "themeName": "WinterIsComing3",
      "path": "WinterIsComing-dark-color-no-italics-theme.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "Winter is Coming",
      "name": "Winter Is Coming4",
      "themeName": "WinterIsComing4",
      "path": "WinterIsComing-dark-color-theme.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "Winter is Coming",
      "name": "Winter Is Coming2",
      "themeName": "WinterIsComing2",
      "path": "WinterIsComing-dark-blue-color-theme.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "Catppuccin",
      "name": "Catppuccin Macchiato",
      "themeName": "CatppuccinMacchiato",
      "path": "macchiato.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "Catppuccin",
      "name": "Catppuccin Mocha",
      "themeName": "CatppuccinMocha",
      "path": "mocha.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "Catppuccin",
      "name": "Catppuccin Frapp\xE9",
      "themeName": "CatppuccinFrapp\xE9",
      "path": "frappe.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "Catppuccin",
      "name": "Catppuccin Latte",
      "themeName": "CatppuccinLatte",
      "path": "latte.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "Atom One Dark Theme",
      "name": "OneDark",
      "themeName": "OneDark",
      "path": "OneDark.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "One Dark Pro",
      "name": "One Dark Pro1",
      "themeName": "OneDarkPro1",
      "path": "OneDark-Pro-darker.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "One Dark Pro",
      "name": "One Dark Pro2",
      "themeName": "OneDarkPro2",
      "path": "OneDark-Pro-flat.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "One Dark Pro",
      "name": "One Dark Pro3",
      "themeName": "OneDarkPro3",
      "path": "OneDark-Pro-mix.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "One Dark Pro",
      "name": "One Dark Pro4",
      "themeName": "OneDarkPro4",
      "path": "OneDark-Pro.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "GitHub's",
      "name": "GitHub Dark High Contrast",
      "themeName": "GitHubDarkHighContrast",
      "path": "dark-high-contrast.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "GitHub's",
      "name": "GitHub Dark Colorblind",
      "themeName": "GitHubDarkColorblind",
      "path": "dark-colorblind.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "GitHub's",
      "name": "GitHub Light Colorblind",
      "themeName": "GitHubLightColorblind",
      "path": "light-colorblind.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "GitHub's",
      "name": "GitHub Light",
      "themeName": "GitHubLight",
      "path": "light.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "GitHub's",
      "name": "GitHub Light Default",
      "themeName": "GitHubLightDefault",
      "path": "light-default.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "GitHub's",
      "name": "GitHub Light High Contrast",
      "themeName": "GitHubLightHighContrast",
      "path": "light-high-contrast.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "GitHub's",
      "name": "GitHub Dark",
      "themeName": "GitHubDark",
      "path": "dark.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "GitHub's",
      "name": "GitHub Dark Default",
      "themeName": "GitHubDarkDefault",
      "path": "dark-default.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "GitHub's",
      "name": "GitHub Dark Dimmed",
      "themeName": "GitHubDarkDimmed",
      "path": "dark-dimmed.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "Monokai Pro",
      "name": "Monokai Classic",
      "themeName": "MonokaiClassic",
      "path": "Monokai Classic.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "Monokai Pro",
      "name": "Monokai Pro (Filter Ristretto)",
      "themeName": "MonokaiProFilterRistretto",
      "path": "Monokai Pro (Filter Ristretto).json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "Monokai Pro",
      "name": "Monokai Pro",
      "themeName": "MonokaiPro",
      "path": "Monokai Pro.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "Monokai Pro",
      "name": "Monokai Pro (Filter Machine)",
      "themeName": "MonokaiProFilterMachine",
      "path": "Monokai Pro (Filter Machine).json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "Monokai Pro",
      "name": "Monokai Pro (Filter Octagon)",
      "themeName": "MonokaiProFilterOctagon",
      "path": "Monokai Pro (Filter Octagon).json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "Monokai Pro",
      "name": "Monokai Pro (Filter Spectrum)",
      "themeName": "MonokaiProFilterSpectrum",
      "path": "Monokai Pro (Filter Spectrum).json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "Bluloco Dark",
      "name": "Bluloco Dark Italic",
      "themeName": "BlulocoDarkItalic",
      "path": "bluloco-dark-italic-color-theme.json",
      "loaded": false,
      "cache": ""
    },
    {
      "group": "Bluloco Dark",
      "name": "Bluloco Dark",
      "themeName": "BlulocoDark",
      "path": "bluloco-dark-color-theme.json",
      "loaded": false,
      "cache": ""
    }
  ];
  const fontFamilys = [
    { label: "Fira Code", value: "Fira Code, Monoid, Consolas, monospace" },
    { label: "Menlo", value: "Menlo, Monaco, Courier New, monospace" }
  ];
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
  function getAugmentedNamespace(n) {
    if (n.__esModule)
      return n;
    var a = Object.defineProperty({}, "__esModule", { value: true });
    Object.keys(n).forEach(function(k) {
      var d2 = Object.getOwnPropertyDescriptor(n, k);
      Object.defineProperty(a, k, d2.get ? d2 : {
        enumerable: true,
        get: function() {
          return n[k];
        }
      });
    });
    return a;
  }
  var main$1 = {};
  var registry = {};
  var grammar = {};
  var utils = {};
  Object.defineProperty(utils, "__esModule", { value: true });
  function clone(something) {
    return doClone(something);
  }
  utils.clone = clone;
  function doClone(something) {
    if (Array.isArray(something)) {
      return cloneArray(something);
    }
    if (typeof something === "object") {
      return cloneObj(something);
    }
    return something;
  }
  function cloneArray(arr) {
    var r = [];
    for (var i = 0, len = arr.length; i < len; i++) {
      r[i] = doClone(arr[i]);
    }
    return r;
  }
  function cloneObj(obj) {
    var r = {};
    for (var key in obj) {
      r[key] = doClone(obj[key]);
    }
    return r;
  }
  function mergeObjects(target) {
    var sources = [];
    for (var _i2 = 1; _i2 < arguments.length; _i2++) {
      sources[_i2 - 1] = arguments[_i2];
    }
    sources.forEach(function(source) {
      for (var key in source) {
        target[key] = source[key];
      }
    });
    return target;
  }
  utils.mergeObjects = mergeObjects;
  var CAPTURING_REGEX_SOURCE = /\$(\d+)|\${(\d+):\/(downcase|upcase)}/;
  var RegexSource = function() {
    function RegexSource2() {
    }
    RegexSource2.hasCaptures = function(regexSource) {
      return CAPTURING_REGEX_SOURCE.test(regexSource);
    };
    RegexSource2.replaceCaptures = function(regexSource, captureSource, captureIndices) {
      return regexSource.replace(CAPTURING_REGEX_SOURCE, function(match, index, commandIndex, command) {
        var capture = captureIndices[parseInt(index || commandIndex, 10)];
        if (capture) {
          var result = captureSource.substring(capture.start, capture.end);
          while (result[0] === ".") {
            result = result.substring(1);
          }
          switch (command) {
            case "downcase":
              return result.toLowerCase();
            case "upcase":
              return result.toUpperCase();
            default:
              return result;
          }
        } else {
          return match;
        }
      });
    };
    return RegexSource2;
  }();
  utils.RegexSource = RegexSource;
  var rule = {};
  var __viteBrowserExternal = {};
  var __viteBrowserExternal$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
    __proto__: null,
    "default": __viteBrowserExternal
  }, Symbol.toStringTag, { value: "Module" }));
  var require$$0 = /* @__PURE__ */ getAugmentedNamespace(__viteBrowserExternal$1);
  var lib = {};
  var onigasmH = {};
  var onigasm = { exports: {} };
  (function(module, exports) {
    var Onigasm = function() {
      typeof document !== "undefined" && document.currentScript ? document.currentScript.src : void 0;
      return function(Onigasm2) {
        Onigasm2 = Onigasm2 || {};
        var Module = typeof Onigasm2 !== "undefined" ? Onigasm2 : {};
        var moduleOverrides = {};
        var key;
        for (key in Module) {
          if (Module.hasOwnProperty(key)) {
            moduleOverrides[key] = Module[key];
          }
        }
        var ENVIRONMENT_IS_WORKER = false;
        var scriptDirectory = "";
        function locateFile(path2) {
          if (Module["locateFile"]) {
            return Module["locateFile"](path2, scriptDirectory);
          }
          return scriptDirectory + path2;
        }
        var readBinary;
        {
          readBinary = function readBinary2(f2) {
            var data;
            if (typeof readbuffer === "function") {
              return new Uint8Array(readbuffer(f2));
            }
            data = read(f2, "binary");
            assert(typeof data === "object");
            return data;
          };
          if (typeof scriptArgs != "undefined") {
            scriptArgs;
          }
          if (typeof print !== "undefined") {
            if (typeof console === "undefined")
              console = {};
//             console.log = print;
//             console.warn = console.error = typeof printErr !== "undefined" ? printErr : print;
          }
        }
        var out = Module["print"] || console.log.bind(console);
        var err = Module["printErr"] || console.warn.bind(console);
        for (key in moduleOverrides) {
          if (moduleOverrides.hasOwnProperty(key)) {
            Module[key] = moduleOverrides[key];
          }
        }
        moduleOverrides = null;
        if (Module["arguments"])
          Module["arguments"];
        if (Module["thisProgram"])
          Module["thisProgram"];
        if (Module["quit"])
          Module["quit"];
        var wasmBinary;
        if (Module["wasmBinary"])
          wasmBinary = Module["wasmBinary"];
        if (Module["noExitRuntime"])
          Module["noExitRuntime"];
        if (typeof WebAssembly !== "object") {
          err("no native wasm support detected");
        }
        var wasmMemory;
        var wasmTable = new WebAssembly.Table({ "initial": 244, "maximum": 244 + 0, "element": "anyfunc" });
        var ABORT = false;
        function assert(condition, text) {
          if (!condition) {
            abort("Assertion failed: " + text);
          }
        }
        function getCFunc(ident) {
          var func = Module["_" + ident];
          assert(func, "Cannot call unknown function " + ident + ", make sure it is exported");
          return func;
        }
        function ccall(ident, returnType, argTypes, args, opts) {
          var toC = { "string": function(str) {
            var ret2 = 0;
            if (str !== null && str !== void 0 && str !== 0) {
              var len = (str.length << 2) + 1;
              ret2 = stackAlloc(len);
              stringToUTF8(str, ret2, len);
            }
            return ret2;
          }, "array": function(arr) {
            var ret2 = stackAlloc(arr.length);
            writeArrayToMemory(arr, ret2);
            return ret2;
          } };
          function convertReturnValue(ret2) {
            if (returnType === "string")
              return UTF8ToString(ret2);
            if (returnType === "boolean")
              return Boolean(ret2);
            return ret2;
          }
          var func = getCFunc(ident);
          var cArgs = [];
          var stack = 0;
          if (args) {
            for (var i = 0; i < args.length; i++) {
              var converter = toC[argTypes[i]];
              if (converter) {
                if (stack === 0)
                  stack = stackSave();
                cArgs[i] = converter(args[i]);
              } else {
                cArgs[i] = args[i];
              }
            }
          }
          var ret = func.apply(null, cArgs);
          ret = convertReturnValue(ret);
          if (stack !== 0)
            stackRestore(stack);
          return ret;
        }
        var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : void 0;
        function UTF8ArrayToString(u8Array, idx, maxBytesToRead) {
          var endIdx = idx + maxBytesToRead;
          var endPtr = idx;
          while (u8Array[endPtr] && !(endPtr >= endIdx))
            ++endPtr;
          if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {
            return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));
          } else {
            var str = "";
            while (idx < endPtr) {
              var u0 = u8Array[idx++];
              if (!(u0 & 128)) {
                str += String.fromCharCode(u0);
                continue;
              }
              var u1 = u8Array[idx++] & 63;
              if ((u0 & 224) == 192) {
                str += String.fromCharCode((u0 & 31) << 6 | u1);
                continue;
              }
              var u2 = u8Array[idx++] & 63;
              if ((u0 & 240) == 224) {
                u0 = (u0 & 15) << 12 | u1 << 6 | u2;
              } else {
                u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | u8Array[idx++] & 63;
              }
              if (u0 < 65536) {
                str += String.fromCharCode(u0);
              } else {
                var ch = u0 - 65536;
                str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);
              }
            }
          }
          return str;
        }
        function UTF8ToString(ptr, maxBytesToRead) {
          return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "";
        }
        function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {
          if (!(maxBytesToWrite > 0))
            return 0;
          var startIdx = outIdx;
          var endIdx = outIdx + maxBytesToWrite - 1;
          for (var i = 0; i < str.length; ++i) {
            var u = str.charCodeAt(i);
            if (u >= 55296 && u <= 57343) {
              var u1 = str.charCodeAt(++i);
              u = 65536 + ((u & 1023) << 10) | u1 & 1023;
            }
            if (u <= 127) {
              if (outIdx >= endIdx)
                break;
              outU8Array[outIdx++] = u;
            } else if (u <= 2047) {
              if (outIdx + 1 >= endIdx)
                break;
              outU8Array[outIdx++] = 192 | u >> 6;
              outU8Array[outIdx++] = 128 | u & 63;
            } else if (u <= 65535) {
              if (outIdx + 2 >= endIdx)
                break;
              outU8Array[outIdx++] = 224 | u >> 12;
              outU8Array[outIdx++] = 128 | u >> 6 & 63;
              outU8Array[outIdx++] = 128 | u & 63;
            } else {
              if (outIdx + 3 >= endIdx)
                break;
              outU8Array[outIdx++] = 240 | u >> 18;
              outU8Array[outIdx++] = 128 | u >> 12 & 63;
              outU8Array[outIdx++] = 128 | u >> 6 & 63;
              outU8Array[outIdx++] = 128 | u & 63;
            }
          }
          outU8Array[outIdx] = 0;
          return outIdx - startIdx;
        }
        function stringToUTF8(str, outPtr, maxBytesToWrite) {
          return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);
        }
        typeof TextDecoder !== "undefined" ? new TextDecoder("utf-16le") : void 0;
        function writeArrayToMemory(array, buffer2) {
          HEAP8.set(array, buffer2);
        }
        var WASM_PAGE_SIZE = 65536;
        function alignUp(x2, multiple) {
          if (x2 % multiple > 0) {
            x2 += multiple - x2 % multiple;
          }
          return x2;
        }
        var buffer, HEAP8, HEAPU8, HEAP32;
        function updateGlobalBufferAndViews(buf) {
          buffer = buf;
          Module["HEAP8"] = HEAP8 = new Int8Array(buf);
          Module["HEAP16"] = new Int16Array(buf);
          Module["HEAP32"] = HEAP32 = new Int32Array(buf);
          Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf);
          Module["HEAPU16"] = new Uint16Array(buf);
          Module["HEAPU32"] = new Uint32Array(buf);
          Module["HEAPF32"] = new Float32Array(buf);
          Module["HEAPF64"] = new Float64Array(buf);
        }
        var DYNAMIC_BASE = 5507664, DYNAMICTOP_PTR = 264624;
        var INITIAL_TOTAL_MEMORY = Module["TOTAL_MEMORY"] || 157286400;
        if (Module["wasmMemory"]) {
          wasmMemory = Module["wasmMemory"];
        } else {
          wasmMemory = new WebAssembly.Memory({ "initial": INITIAL_TOTAL_MEMORY / WASM_PAGE_SIZE });
        }
        if (wasmMemory) {
          buffer = wasmMemory.buffer;
        }
        INITIAL_TOTAL_MEMORY = buffer.byteLength;
        updateGlobalBufferAndViews(buffer);
        HEAP32[DYNAMICTOP_PTR >> 2] = DYNAMIC_BASE;
        function callRuntimeCallbacks(callbacks) {
          while (callbacks.length > 0) {
            var callback = callbacks.shift();
            if (typeof callback == "function") {
              callback();
              continue;
            }
            var func = callback.func;
            if (typeof func === "number") {
              if (callback.arg === void 0) {
                Module["dynCall_v"](func);
              } else {
                Module["dynCall_vi"](func, callback.arg);
              }
            } else {
              func(callback.arg === void 0 ? null : callback.arg);
            }
          }
        }
        var __ATPRERUN__ = [];
        var __ATINIT__ = [];
        var __ATMAIN__ = [];
        var __ATPOSTRUN__ = [];
        function preRun() {
          if (Module["preRun"]) {
            if (typeof Module["preRun"] == "function")
              Module["preRun"] = [Module["preRun"]];
            while (Module["preRun"].length) {
              addOnPreRun(Module["preRun"].shift());
            }
          }
          callRuntimeCallbacks(__ATPRERUN__);
        }
        function initRuntime() {
          callRuntimeCallbacks(__ATINIT__);
        }
        function preMain() {
          callRuntimeCallbacks(__ATMAIN__);
        }
        function postRun() {
          if (Module["postRun"]) {
            if (typeof Module["postRun"] == "function")
              Module["postRun"] = [Module["postRun"]];
            while (Module["postRun"].length) {
              addOnPostRun(Module["postRun"].shift());
            }
          }
          callRuntimeCallbacks(__ATPOSTRUN__);
        }
        function addOnPreRun(cb) {
          __ATPRERUN__.unshift(cb);
        }
        function addOnPostRun(cb) {
          __ATPOSTRUN__.unshift(cb);
        }
        var runDependencies = 0;
        var dependenciesFulfilled = null;
        function addRunDependency(id) {
          runDependencies++;
          if (Module["monitorRunDependencies"]) {
            Module["monitorRunDependencies"](runDependencies);
          }
        }
        function removeRunDependency(id) {
          runDependencies--;
          if (Module["monitorRunDependencies"]) {
            Module["monitorRunDependencies"](runDependencies);
          }
          if (runDependencies == 0) {
            if (dependenciesFulfilled) {
              var callback = dependenciesFulfilled;
              dependenciesFulfilled = null;
              callback();
            }
          }
        }
        Module["preloadedImages"] = {};
        Module["preloadedAudios"] = {};
        function abort(what) {
          if (Module["onAbort"]) {
            Module["onAbort"](what);
          }
          what += "";
          out(what);
          err(what);
          ABORT = true;
          what = "abort(" + what + "). Build with -s ASSERTIONS=1 for more info.";
          throw new WebAssembly.RuntimeError(what);
        }
        var dataURIPrefix = "data:application/octet-stream;base64,";
        function isDataURI(filename) {
          return String.prototype.startsWith ? filename.startsWith(dataURIPrefix) : filename.indexOf(dataURIPrefix) === 0;
        }
        var wasmBinaryFile = "onigasm.wasm";
        if (!isDataURI(wasmBinaryFile)) {
          wasmBinaryFile = locateFile(wasmBinaryFile);
        }
        function getBinary() {
          try {
            if (wasmBinary) {
              return new Uint8Array(wasmBinary);
            }
            if (readBinary) {
              return readBinary(wasmBinaryFile);
            } else {
              throw "both async and sync fetching of the wasm failed";
            }
          } catch (err2) {
            abort(err2);
          }
        }
        function getBinaryPromise() {
          if (!wasmBinary && ENVIRONMENT_IS_WORKER && typeof fetch === "function") {
            return fetch(wasmBinaryFile, { credentials: "same-origin" }).then(function(response) {
              if (!response["ok"]) {
                throw "failed to load wasm binary file at '" + wasmBinaryFile + "'";
              }
              return response["arrayBuffer"]();
            }).catch(function() {
              return getBinary();
            });
          }
          return new Promise(function(resolve, reject) {
            resolve(getBinary());
          });
        }
        function createWasm() {
          var info = { "env": asmLibraryArg, "wasi_unstable": asmLibraryArg };
          function receiveInstance(instance, module2) {
            var exports3 = instance.exports;
            Module["asm"] = exports3;
            removeRunDependency();
          }
          addRunDependency();
          function receiveInstantiatedSource(output) {
            receiveInstance(output["instance"]);
          }
          function instantiateArrayBuffer(receiver) {
            return getBinaryPromise().then(function(binary) {
              return WebAssembly.instantiate(binary, info);
            }).then(receiver, function(reason) {
              err("failed to asynchronously prepare wasm: " + reason);
              abort(reason);
            });
          }
          function instantiateAsync() {
            if (!wasmBinary && typeof WebAssembly.instantiateStreaming === "function" && !isDataURI(wasmBinaryFile) && typeof fetch === "function") {
              fetch(wasmBinaryFile, { credentials: "same-origin" }).then(function(response) {
                var result = WebAssembly.instantiateStreaming(response, info);
                return result.then(receiveInstantiatedSource, function(reason) {
                  err("wasm streaming compile failed: " + reason);
                  err("falling back to ArrayBuffer instantiation");
                  instantiateArrayBuffer(receiveInstantiatedSource);
                });
              });
            } else {
              return instantiateArrayBuffer(receiveInstantiatedSource);
            }
          }
          if (Module["instantiateWasm"]) {
            try {
              var exports2 = Module["instantiateWasm"](info, receiveInstance);
              return exports2;
            } catch (e4) {
              err("Module.instantiateWasm callback failed with error: " + e4);
              return false;
            }
          }
          instantiateAsync();
          return {};
        }
        __ATINIT__.push({ func: function() {
          ___wasm_call_ctors();
        } });
        function _abort() {
          abort();
        }
        function _emscripten_get_heap_size() {
          return HEAP8.length;
        }
        function _emscripten_get_sbrk_ptr() {
          return 264624;
        }
        function _emscripten_memcpy_big(dest, src, num) {
          HEAPU8.set(HEAPU8.subarray(src, src + num), dest);
        }
        function emscripten_realloc_buffer(size) {
          try {
            wasmMemory.grow(size - buffer.byteLength + 65535 >> 16);
            updateGlobalBufferAndViews(wasmMemory.buffer);
            return 1;
          } catch (e4) {
          }
        }
        function _emscripten_resize_heap(requestedSize) {
          var oldSize = _emscripten_get_heap_size();
          var PAGE_MULTIPLE = 65536;
          var LIMIT = 2147483648 - PAGE_MULTIPLE;
          if (requestedSize > LIMIT) {
            return false;
          }
          var MIN_TOTAL_MEMORY = 16777216;
          var newSize = Math.max(oldSize, MIN_TOTAL_MEMORY);
          while (newSize < requestedSize) {
            if (newSize <= 536870912) {
              newSize = alignUp(2 * newSize, PAGE_MULTIPLE);
            } else {
              newSize = Math.min(alignUp((3 * newSize + 2147483648) / 4, PAGE_MULTIPLE), LIMIT);
            }
          }
          var replacement = emscripten_realloc_buffer(newSize);
          if (!replacement) {
            return false;
          }
          return true;
        }
        var SYSCALLS = { buffers: [null, [], []], printChar: function(stream, curr) {
          var buffer2 = SYSCALLS.buffers[stream];
          if (curr === 0 || curr === 10) {
            (stream === 1 ? out : err)(UTF8ArrayToString(buffer2, 0));
            buffer2.length = 0;
          } else {
            buffer2.push(curr);
          }
        }, varargs: 0, get: function(varargs) {
          SYSCALLS.varargs += 4;
          var ret = HEAP32[SYSCALLS.varargs - 4 >> 2];
          return ret;
        }, getStr: function() {
          var ret = UTF8ToString(SYSCALLS.get());
          return ret;
        }, get64: function() {
          var low = SYSCALLS.get();
          SYSCALLS.get();
          return low;
        }, getZero: function() {
          SYSCALLS.get();
        } };
        function _fd_close(fd) {
          try {
            return 0;
          } catch (e4) {
            if (typeof FS === "undefined" || !(e4 instanceof FS.ErrnoError))
              abort(e4);
            return e4.errno;
          }
        }
        function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
          try {
            return 0;
          } catch (e4) {
            if (typeof FS === "undefined" || !(e4 instanceof FS.ErrnoError))
              abort(e4);
            return e4.errno;
          }
        }
        function _fd_write(fd, iov, iovcnt, pnum) {
          try {
            var num = 0;
            for (var i = 0; i < iovcnt; i++) {
              var ptr = HEAP32[iov + i * 8 >> 2];
              var len = HEAP32[iov + (i * 8 + 4) >> 2];
              for (var j2 = 0; j2 < len; j2++) {
                SYSCALLS.printChar(fd, HEAPU8[ptr + j2]);
              }
              num += len;
            }
            HEAP32[pnum >> 2] = num;
            return 0;
          } catch (e4) {
            if (typeof FS === "undefined" || !(e4 instanceof FS.ErrnoError))
              abort(e4);
            return e4.errno;
          }
        }
        function _setTempRet0($i) {
        }
        var asmLibraryArg = { "abort": _abort, "emscripten_get_sbrk_ptr": _emscripten_get_sbrk_ptr, "emscripten_memcpy_big": _emscripten_memcpy_big, "emscripten_resize_heap": _emscripten_resize_heap, "fd_close": _fd_close, "fd_seek": _fd_seek, "fd_write": _fd_write, "memory": wasmMemory, "setTempRet0": _setTempRet0, "table": wasmTable };
        var asm = createWasm();
        Module["asm"] = asm;
        var ___wasm_call_ctors = Module["___wasm_call_ctors"] = function() {
          return Module["asm"]["__wasm_call_ctors"].apply(null, arguments);
        };
        Module["_malloc"] = function() {
          return Module["asm"]["malloc"].apply(null, arguments);
        };
        Module["_free"] = function() {
          return Module["asm"]["free"].apply(null, arguments);
        };
        Module["_getLastError"] = function() {
          return Module["asm"]["getLastError"].apply(null, arguments);
        };
        Module["_compilePattern"] = function() {
          return Module["asm"]["compilePattern"].apply(null, arguments);
        };
        Module["_disposeCompiledPatterns"] = function() {
          return Module["asm"]["disposeCompiledPatterns"].apply(null, arguments);
        };
        Module["_findBestMatch"] = function() {
          return Module["asm"]["findBestMatch"].apply(null, arguments);
        };
        Module["___cxa_demangle"] = function() {
          return Module["asm"]["__cxa_demangle"].apply(null, arguments);
        };
        Module["_setThrew"] = function() {
          return Module["asm"]["setThrew"].apply(null, arguments);
        };
        var stackSave = Module["stackSave"] = function() {
          return Module["asm"]["stackSave"].apply(null, arguments);
        };
        var stackAlloc = Module["stackAlloc"] = function() {
          return Module["asm"]["stackAlloc"].apply(null, arguments);
        };
        var stackRestore = Module["stackRestore"] = function() {
          return Module["asm"]["stackRestore"].apply(null, arguments);
        };
        Module["__growWasmMemory"] = function() {
          return Module["asm"]["__growWasmMemory"].apply(null, arguments);
        };
        Module["dynCall_vi"] = function() {
          return Module["asm"]["dynCall_vi"].apply(null, arguments);
        };
        Module["dynCall_iiii"] = function() {
          return Module["asm"]["dynCall_iiii"].apply(null, arguments);
        };
        Module["dynCall_iiiii"] = function() {
          return Module["asm"]["dynCall_iiiii"].apply(null, arguments);
        };
        Module["dynCall_iii"] = function() {
          return Module["asm"]["dynCall_iii"].apply(null, arguments);
        };
        Module["dynCall_iidiiii"] = function() {
          return Module["asm"]["dynCall_iidiiii"].apply(null, arguments);
        };
        Module["dynCall_vii"] = function() {
          return Module["asm"]["dynCall_vii"].apply(null, arguments);
        };
        Module["dynCall_ii"] = function() {
          return Module["asm"]["dynCall_ii"].apply(null, arguments);
        };
        Module["dynCall_i"] = function() {
          return Module["asm"]["dynCall_i"].apply(null, arguments);
        };
        Module["dynCall_v"] = function() {
          return Module["asm"]["dynCall_v"].apply(null, arguments);
        };
        Module["dynCall_viiiiii"] = function() {
          return Module["asm"]["dynCall_viiiiii"].apply(null, arguments);
        };
        Module["dynCall_viiiii"] = function() {
          return Module["asm"]["dynCall_viiiii"].apply(null, arguments);
        };
        Module["dynCall_viiii"] = function() {
          return Module["asm"]["dynCall_viiii"].apply(null, arguments);
        };
        Module["dynCall_jiji"] = function() {
          return Module["asm"]["dynCall_jiji"].apply(null, arguments);
        };
        Module["asm"] = asm;
        Module["ccall"] = ccall;
        var calledRun;
        Module["then"] = function(func) {
          if (calledRun) {
            func(Module);
          } else {
            var old = Module["onRuntimeInitialized"];
            Module["onRuntimeInitialized"] = function() {
              if (old)
                old();
              func(Module);
            };
          }
          return Module;
        };
        dependenciesFulfilled = function runCaller() {
          if (!calledRun)
            run();
          if (!calledRun)
            dependenciesFulfilled = runCaller;
        };
        function run(args) {
          if (runDependencies > 0) {
            return;
          }
          preRun();
          if (runDependencies > 0)
            return;
          function doRun() {
            if (calledRun)
              return;
            calledRun = true;
            if (ABORT)
              return;
            initRuntime();
            preMain();
            if (Module["onRuntimeInitialized"])
              Module["onRuntimeInitialized"]();
            postRun();
          }
          if (Module["setStatus"]) {
            Module["setStatus"]("Running...");
            setTimeout(function() {
              setTimeout(function() {
                Module["setStatus"]("");
              }, 1);
              doRun();
            }, 1);
          } else {
            doRun();
          }
        }
        Module["run"] = run;
        if (Module["preInit"]) {
          if (typeof Module["preInit"] == "function")
            Module["preInit"] = [Module["preInit"]];
          while (Module["preInit"].length > 0) {
            Module["preInit"].pop()();
          }
        }
        run();
        return Onigasm2;
      };
    }();
    module.exports = Onigasm;
  })(onigasm);
  Object.defineProperty(onigasmH, "__esModule", { value: true });
  const OnigasmModuleFactory = onigasm.exports;
  async function initModule(bytes) {
    return new Promise((resolve, reject) => {
      OnigasmModuleFactory({
        instantiateWasm(imports, successCallback) {
          WebAssembly.instantiate(bytes, imports).then((output) => {
            successCallback(output.instance);
          }).catch((e4) => {
            throw e4;
          });
          return {};
        }
      }).then((moduleH) => {
        onigasmH.onigasmH = moduleH;
        resolve();
      });
    });
  }
  let isInitialized = false;
  async function loadWASM$1(data) {
    if (isInitialized) {
      throw new Error(`Onigasm#init has been called and was succesful, subsequent calls are not allowed once initialized`);
    }
    if (typeof data === "string") {
      const arrayBuffer = await (await fetch(data)).arrayBuffer();
      await initModule(arrayBuffer);
    } else if (data instanceof ArrayBuffer) {
      await initModule(data);
    } else {
      throw new TypeError(`Expected a string (URL of .wasm file) or ArrayBuffer (.wasm file itself) as first parameter`);
    }
    isInitialized = true;
  }
  onigasmH.loadWASM = loadWASM$1;
  var OnigRegExp$1 = {};
  var OnigScanner$1 = {};
  var yallist = Yallist$1;
  Yallist$1.Node = Node;
  Yallist$1.create = Yallist$1;
  function Yallist$1(list) {
    var self2 = this;
    if (!(self2 instanceof Yallist$1)) {
      self2 = new Yallist$1();
    }
    self2.tail = null;
    self2.head = null;
    self2.length = 0;
    if (list && typeof list.forEach === "function") {
      list.forEach(function(item) {
        self2.push(item);
      });
    } else if (arguments.length > 0) {
      for (var i = 0, l = arguments.length; i < l; i++) {
        self2.push(arguments[i]);
      }
    }
    return self2;
  }
  Yallist$1.prototype.removeNode = function(node) {
    if (node.list !== this) {
      throw new Error("removing node which does not belong to this list");
    }
    var next = node.next;
    var prev = node.prev;
    if (next) {
      next.prev = prev;
    }
    if (prev) {
      prev.next = next;
    }
    if (node === this.head) {
      this.head = next;
    }
    if (node === this.tail) {
      this.tail = prev;
    }
    node.list.length--;
    node.next = null;
    node.prev = null;
    node.list = null;
    return next;
  };
  Yallist$1.prototype.unshiftNode = function(node) {
    if (node === this.head) {
      return;
    }
    if (node.list) {
      node.list.removeNode(node);
    }
    var head = this.head;
    node.list = this;
    node.next = head;
    if (head) {
      head.prev = node;
    }
    this.head = node;
    if (!this.tail) {
      this.tail = node;
    }
    this.length++;
  };
  Yallist$1.prototype.pushNode = function(node) {
    if (node === this.tail) {
      return;
    }
    if (node.list) {
      node.list.removeNode(node);
    }
    var tail = this.tail;
    node.list = this;
    node.prev = tail;
    if (tail) {
      tail.next = node;
    }
    this.tail = node;
    if (!this.head) {
      this.head = node;
    }
    this.length++;
  };
  Yallist$1.prototype.push = function() {
    for (var i = 0, l = arguments.length; i < l; i++) {
      push(this, arguments[i]);
    }
    return this.length;
  };
  Yallist$1.prototype.unshift = function() {
    for (var i = 0, l = arguments.length; i < l; i++) {
      unshift(this, arguments[i]);
    }
    return this.length;
  };
  Yallist$1.prototype.pop = function() {
    if (!this.tail) {
      return void 0;
    }
    var res = this.tail.value;
    this.tail = this.tail.prev;
    if (this.tail) {
      this.tail.next = null;
    } else {
      this.head = null;
    }
    this.length--;
    return res;
  };
  Yallist$1.prototype.shift = function() {
    if (!this.head) {
      return void 0;
    }
    var res = this.head.value;
    this.head = this.head.next;
    if (this.head) {
      this.head.prev = null;
    } else {
      this.tail = null;
    }
    this.length--;
    return res;
  };
  Yallist$1.prototype.forEach = function(fn2, thisp) {
    thisp = thisp || this;
    for (var walker = this.head, i = 0; walker !== null; i++) {
      fn2.call(thisp, walker.value, i, this);
      walker = walker.next;
    }
  };
  Yallist$1.prototype.forEachReverse = function(fn2, thisp) {
    thisp = thisp || this;
    for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
      fn2.call(thisp, walker.value, i, this);
      walker = walker.prev;
    }
  };
  Yallist$1.prototype.get = function(n) {
    for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
      walker = walker.next;
    }
    if (i === n && walker !== null) {
      return walker.value;
    }
  };
  Yallist$1.prototype.getReverse = function(n) {
    for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
      walker = walker.prev;
    }
    if (i === n && walker !== null) {
      return walker.value;
    }
  };
  Yallist$1.prototype.map = function(fn2, thisp) {
    thisp = thisp || this;
    var res = new Yallist$1();
    for (var walker = this.head; walker !== null; ) {
      res.push(fn2.call(thisp, walker.value, this));
      walker = walker.next;
    }
    return res;
  };
  Yallist$1.prototype.mapReverse = function(fn2, thisp) {
    thisp = thisp || this;
    var res = new Yallist$1();
    for (var walker = this.tail; walker !== null; ) {
      res.push(fn2.call(thisp, walker.value, this));
      walker = walker.prev;
    }
    return res;
  };
  Yallist$1.prototype.reduce = function(fn2, initial) {
    var acc;
    var walker = this.head;
    if (arguments.length > 1) {
      acc = initial;
    } else if (this.head) {
      walker = this.head.next;
      acc = this.head.value;
    } else {
      throw new TypeError("Reduce of empty list with no initial value");
    }
    for (var i = 0; walker !== null; i++) {
      acc = fn2(acc, walker.value, i);
      walker = walker.next;
    }
    return acc;
  };
  Yallist$1.prototype.reduceReverse = function(fn2, initial) {
    var acc;
    var walker = this.tail;
    if (arguments.length > 1) {
      acc = initial;
    } else if (this.tail) {
      walker = this.tail.prev;
      acc = this.tail.value;
    } else {
      throw new TypeError("Reduce of empty list with no initial value");
    }
    for (var i = this.length - 1; walker !== null; i--) {
      acc = fn2(acc, walker.value, i);
      walker = walker.prev;
    }
    return acc;
  };
  Yallist$1.prototype.toArray = function() {
    var arr = new Array(this.length);
    for (var i = 0, walker = this.head; walker !== null; i++) {
      arr[i] = walker.value;
      walker = walker.next;
    }
    return arr;
  };
  Yallist$1.prototype.toArrayReverse = function() {
    var arr = new Array(this.length);
    for (var i = 0, walker = this.tail; walker !== null; i++) {
      arr[i] = walker.value;
      walker = walker.prev;
    }
    return arr;
  };
  Yallist$1.prototype.slice = function(from, to) {
    to = to || this.length;
    if (to < 0) {
      to += this.length;
    }
    from = from || 0;
    if (from < 0) {
      from += this.length;
    }
    var ret = new Yallist$1();
    if (to < from || to < 0) {
      return ret;
    }
    if (from < 0) {
      from = 0;
    }
    if (to > this.length) {
      to = this.length;
    }
    for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
      walker = walker.next;
    }
    for (; walker !== null && i < to; i++, walker = walker.next) {
      ret.push(walker.value);
    }
    return ret;
  };
  Yallist$1.prototype.sliceReverse = function(from, to) {
    to = to || this.length;
    if (to < 0) {
      to += this.length;
    }
    from = from || 0;
    if (from < 0) {
      from += this.length;
    }
    var ret = new Yallist$1();
    if (to < from || to < 0) {
      return ret;
    }
    if (from < 0) {
      from = 0;
    }
    if (to > this.length) {
      to = this.length;
    }
    for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
      walker = walker.prev;
    }
    for (; walker !== null && i > from; i--, walker = walker.prev) {
      ret.push(walker.value);
    }
    return ret;
  };
  Yallist$1.prototype.splice = function(start, deleteCount) {
    if (start > this.length) {
      start = this.length - 1;
    }
    if (start < 0) {
      start = this.length + start;
    }
    for (var i = 0, walker = this.head; walker !== null && i < start; i++) {
      walker = walker.next;
    }
    var ret = [];
    for (var i = 0; walker && i < deleteCount; i++) {
      ret.push(walker.value);
      walker = this.removeNode(walker);
    }
    if (walker === null) {
      walker = this.tail;
    }
    if (walker !== this.head && walker !== this.tail) {
      walker = walker.prev;
    }
    for (var i = 2; i < arguments.length; i++) {
      walker = insert(this, walker, arguments[i]);
    }
    return ret;
  };
  Yallist$1.prototype.reverse = function() {
    var head = this.head;
    var tail = this.tail;
    for (var walker = head; walker !== null; walker = walker.prev) {
      var p = walker.prev;
      walker.prev = walker.next;
      walker.next = p;
    }
    this.head = tail;
    this.tail = head;
    return this;
  };
  function insert(self2, node, value) {
    var inserted = node === self2.head ? new Node(value, null, node, self2) : new Node(value, node, node.next, self2);
    if (inserted.next === null) {
      self2.tail = inserted;
    }
    if (inserted.prev === null) {
      self2.head = inserted;
    }
    self2.length++;
    return inserted;
  }
  function push(self2, item) {
    self2.tail = new Node(item, self2.tail, null, self2);
    if (!self2.head) {
      self2.head = self2.tail;
    }
    self2.length++;
  }
  function unshift(self2, item) {
    self2.head = new Node(item, null, self2.head, self2);
    if (!self2.tail) {
      self2.tail = self2.head;
    }
    self2.length++;
  }
  function Node(value, prev, next, list) {
    if (!(this instanceof Node)) {
      return new Node(value, prev, next, list);
    }
    this.list = list;
    this.value = value;
    if (prev) {
      prev.next = this;
      this.prev = prev;
    } else {
      this.prev = null;
    }
    if (next) {
      next.prev = this;
      this.next = next;
    } else {
      this.next = null;
    }
  }
  try {
    require("./iterator.js")(Yallist$1);
  } catch (er2) {
  }
  const Yallist = yallist;
  const MAX = Symbol("max");
  const LENGTH = Symbol("length");
  const LENGTH_CALCULATOR = Symbol("lengthCalculator");
  const ALLOW_STALE = Symbol("allowStale");
  const MAX_AGE = Symbol("maxAge");
  const DISPOSE = Symbol("dispose");
  const NO_DISPOSE_ON_SET = Symbol("noDisposeOnSet");
  const LRU_LIST = Symbol("lruList");
  const CACHE = Symbol("cache");
  const UPDATE_AGE_ON_GET = Symbol("updateAgeOnGet");
  const naiveLength = () => 1;
  class LRUCache$1 {
    constructor(options) {
      if (typeof options === "number")
        options = { max: options };
      if (!options)
        options = {};
      if (options.max && (typeof options.max !== "number" || options.max < 0))
        throw new TypeError("max must be a non-negative number");
      this[MAX] = options.max || Infinity;
      const lc = options.length || naiveLength;
      this[LENGTH_CALCULATOR] = typeof lc !== "function" ? naiveLength : lc;
      this[ALLOW_STALE] = options.stale || false;
      if (options.maxAge && typeof options.maxAge !== "number")
        throw new TypeError("maxAge must be a number");
      this[MAX_AGE] = options.maxAge || 0;
      this[DISPOSE] = options.dispose;
      this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false;
      this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false;
      this.reset();
    }
    set max(mL) {
      if (typeof mL !== "number" || mL < 0)
        throw new TypeError("max must be a non-negative number");
      this[MAX] = mL || Infinity;
      trim(this);
    }
    get max() {
      return this[MAX];
    }
    set allowStale(allowStale) {
      this[ALLOW_STALE] = !!allowStale;
    }
    get allowStale() {
      return this[ALLOW_STALE];
    }
    set maxAge(mA) {
      if (typeof mA !== "number")
        throw new TypeError("maxAge must be a non-negative number");
      this[MAX_AGE] = mA;
      trim(this);
    }
    get maxAge() {
      return this[MAX_AGE];
    }
    set lengthCalculator(lC) {
      if (typeof lC !== "function")
        lC = naiveLength;
      if (lC !== this[LENGTH_CALCULATOR]) {
        this[LENGTH_CALCULATOR] = lC;
        this[LENGTH] = 0;
        this[LRU_LIST].forEach((hit) => {
          hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key);
          this[LENGTH] += hit.length;
        });
      }
      trim(this);
    }
    get lengthCalculator() {
      return this[LENGTH_CALCULATOR];
    }
    get length() {
      return this[LENGTH];
    }
    get itemCount() {
      return this[LRU_LIST].length;
    }
    rforEach(fn2, thisp) {
      thisp = thisp || this;
      for (let walker = this[LRU_LIST].tail; walker !== null; ) {
        const prev = walker.prev;
        forEachStep(this, fn2, walker, thisp);
        walker = prev;
      }
    }
    forEach(fn2, thisp) {
      thisp = thisp || this;
      for (let walker = this[LRU_LIST].head; walker !== null; ) {
        const next = walker.next;
        forEachStep(this, fn2, walker, thisp);
        walker = next;
      }
    }
    keys() {
      return this[LRU_LIST].toArray().map((k) => k.key);
    }
    values() {
      return this[LRU_LIST].toArray().map((k) => k.value);
    }
    reset() {
      if (this[DISPOSE] && this[LRU_LIST] && this[LRU_LIST].length) {
        this[LRU_LIST].forEach((hit) => this[DISPOSE](hit.key, hit.value));
      }
      this[CACHE] = /* @__PURE__ */ new Map();
      this[LRU_LIST] = new Yallist();
      this[LENGTH] = 0;
    }
    dump() {
      return this[LRU_LIST].map((hit) => isStale(this, hit) ? false : {
        k: hit.key,
        v: hit.value,
        e: hit.now + (hit.maxAge || 0)
      }).toArray().filter((h) => h);
    }
    dumpLru() {
      return this[LRU_LIST];
    }
    set(key, value, maxAge) {
      maxAge = maxAge || this[MAX_AGE];
      if (maxAge && typeof maxAge !== "number")
        throw new TypeError("maxAge must be a number");
      const now = maxAge ? Date.now() : 0;
      const len = this[LENGTH_CALCULATOR](value, key);
      if (this[CACHE].has(key)) {
        if (len > this[MAX]) {
          del(this, this[CACHE].get(key));
          return false;
        }
        const node = this[CACHE].get(key);
        const item = node.value;
        if (this[DISPOSE]) {
          if (!this[NO_DISPOSE_ON_SET])
            this[DISPOSE](key, item.value);
        }
        item.now = now;
        item.maxAge = maxAge;
        item.value = value;
        this[LENGTH] += len - item.length;
        item.length = len;
        this.get(key);
        trim(this);
        return true;
      }
      const hit = new Entry(key, value, len, now, maxAge);
      if (hit.length > this[MAX]) {
        if (this[DISPOSE])
          this[DISPOSE](key, value);
        return false;
      }
      this[LENGTH] += hit.length;
      this[LRU_LIST].unshift(hit);
      this[CACHE].set(key, this[LRU_LIST].head);
      trim(this);
      return true;
    }
    has(key) {
      if (!this[CACHE].has(key))
        return false;
      const hit = this[CACHE].get(key).value;
      return !isStale(this, hit);
    }
    get(key) {
      return get(this, key, true);
    }
    peek(key) {
      return get(this, key, false);
    }
    pop() {
      const node = this[LRU_LIST].tail;
      if (!node)
        return null;
      del(this, node);
      return node.value;
    }
    del(key) {
      del(this, this[CACHE].get(key));
    }
    load(arr) {
      this.reset();
      const now = Date.now();
      for (let l = arr.length - 1; l >= 0; l--) {
        const hit = arr[l];
        const expiresAt = hit.e || 0;
        if (expiresAt === 0)
          this.set(hit.k, hit.v);
        else {
          const maxAge = expiresAt - now;
          if (maxAge > 0) {
            this.set(hit.k, hit.v, maxAge);
          }
        }
      }
    }
    prune() {
      this[CACHE].forEach((value, key) => get(this, key, false));
    }
  }
  const get = (self2, key, doUse) => {
    const node = self2[CACHE].get(key);
    if (node) {
      const hit = node.value;
      if (isStale(self2, hit)) {
        del(self2, node);
        if (!self2[ALLOW_STALE])
          return void 0;
      } else {
        if (doUse) {
          if (self2[UPDATE_AGE_ON_GET])
            node.value.now = Date.now();
          self2[LRU_LIST].unshiftNode(node);
        }
      }
      return hit.value;
    }
  };
  const isStale = (self2, hit) => {
    if (!hit || !hit.maxAge && !self2[MAX_AGE])
      return false;
    const diff = Date.now() - hit.now;
    return hit.maxAge ? diff > hit.maxAge : self2[MAX_AGE] && diff > self2[MAX_AGE];
  };
  const trim = (self2) => {
    if (self2[LENGTH] > self2[MAX]) {
      for (let walker = self2[LRU_LIST].tail; self2[LENGTH] > self2[MAX] && walker !== null; ) {
        const prev = walker.prev;
        del(self2, walker);
        walker = prev;
      }
    }
  };
  const del = (self2, node) => {
    if (node) {
      const hit = node.value;
      if (self2[DISPOSE])
        self2[DISPOSE](hit.key, hit.value);
      self2[LENGTH] -= hit.length;
      self2[CACHE].delete(hit.key);
      self2[LRU_LIST].removeNode(node);
    }
  };
  class Entry {
    constructor(key, value, length, now, maxAge) {
      this.key = key;
      this.value = value;
      this.length = length;
      this.now = now;
      this.maxAge = maxAge || 0;
    }
  }
  const forEachStep = (self2, fn2, node, thisp) => {
    let hit = node.value;
    if (isStale(self2, hit)) {
      del(self2, node);
      if (!self2[ALLOW_STALE])
        hit = void 0;
    }
    if (hit)
      fn2.call(thisp, hit.value, hit.key, self2);
  };
  var lruCache = LRUCache$1;
  var OnigString$1 = {};
  Object.defineProperty(OnigString$1, "__esModule", { value: true });
  class OnigString {
    constructor(content) {
      this.substring = (start, end) => {
        return this.source.substring(start, end);
      };
      this.toString = (start, end) => {
        return this.source;
      };
      if (typeof content !== "string") {
        throw new TypeError("Argument must be a string");
      }
      this.source = content;
      this._utf8Bytes = null;
      this._utf8Indexes = null;
    }
    get utf8Bytes() {
      if (!this._utf8Bytes) {
        this.encode();
      }
      return this._utf8Bytes;
    }
    get utf8Indexes() {
      if (!this._utf8Bytes) {
        this.encode();
      }
      return this._utf8Indexes;
    }
    get content() {
      return this.source;
    }
    get length() {
      return this.source.length;
    }
    get hasMultiByteCharacters() {
      return this.utf8Indexes !== null;
    }
    convertUtf8OffsetToUtf16(utf8Offset) {
      if (utf8Offset < 0) {
        return 0;
      }
      const utf8Array = this._utf8Bytes;
      if (utf8Offset >= utf8Array.length - 1) {
        return this.source.length;
      }
      const utf8OffsetMap = this.utf8Indexes;
      if (utf8OffsetMap && utf8Offset >= this._mappingTableStartOffset) {
        return findFirstInSorted(utf8OffsetMap, utf8Offset - this._mappingTableStartOffset) + this._mappingTableStartOffset;
      }
      return utf8Offset;
    }
    convertUtf16OffsetToUtf8(utf16Offset) {
      if (utf16Offset < 0) {
        return 0;
      }
      const utf8Array = this._utf8Bytes;
      if (utf16Offset >= this.source.length) {
        return utf8Array.length - 1;
      }
      const utf8OffsetMap = this.utf8Indexes;
      if (utf8OffsetMap && utf16Offset >= this._mappingTableStartOffset) {
        return utf8OffsetMap[utf16Offset - this._mappingTableStartOffset] + this._mappingTableStartOffset;
      }
      return utf16Offset;
    }
    encode() {
      const str = this.source;
      const n = str.length;
      let utf16OffsetToUtf8;
      let utf8Offset = 0;
      let mappingTableStartOffset = 0;
      function createOffsetTable(startOffset) {
        const maxUtf8Len = (n - startOffset) * 3;
        if (maxUtf8Len <= 255) {
          utf16OffsetToUtf8 = new Uint8Array(n - startOffset);
        } else if (maxUtf8Len <= 65535) {
          utf16OffsetToUtf8 = new Uint16Array(n - startOffset);
        } else {
          utf16OffsetToUtf8 = new Uint32Array(n - startOffset);
        }
        mappingTableStartOffset = startOffset;
        utf16OffsetToUtf8[utf8Offset++] = 0;
      }
      const u8view = new Uint8Array(n * 3 + 1);
      let ptrHead = 0;
      let i = 0;
      while (i < str.length) {
        let codepoint;
        const c = str.charCodeAt(i);
        if (utf16OffsetToUtf8) {
          utf16OffsetToUtf8[utf8Offset++] = ptrHead - mappingTableStartOffset;
        }
        if (c < 55296 || c > 57343) {
          codepoint = c;
        } else if (c >= 56320) {
          codepoint = 65533;
        } else {
          if (i === n - 1) {
            codepoint = 65533;
          } else {
            const d2 = str.charCodeAt(i + 1);
            if (56320 <= d2 && d2 <= 57343) {
              if (!utf16OffsetToUtf8) {
                createOffsetTable(i);
              }
              const a = c & 1023;
              const b = d2 & 1023;
              codepoint = 65536 + (a << 10) + b;
              i += 1;
              utf16OffsetToUtf8[utf8Offset++] = ptrHead - mappingTableStartOffset;
            } else {
              codepoint = 65533;
            }
          }
        }
        let bytesRequiredToEncode;
        let offset;
        if (codepoint <= 127) {
          bytesRequiredToEncode = 1;
          offset = 0;
        } else if (codepoint <= 2047) {
          bytesRequiredToEncode = 2;
          offset = 192;
        } else if (codepoint <= 65535) {
          bytesRequiredToEncode = 3;
          offset = 224;
        } else {
          bytesRequiredToEncode = 4;
          offset = 240;
        }
        if (bytesRequiredToEncode === 1) {
          u8view[ptrHead++] = codepoint;
        } else {
          if (!utf16OffsetToUtf8) {
            createOffsetTable(ptrHead);
          }
          u8view[ptrHead++] = (codepoint >> 6 * --bytesRequiredToEncode) + offset;
          while (bytesRequiredToEncode > 0) {
            const temp = codepoint >> 6 * (bytesRequiredToEncode - 1);
            u8view[ptrHead++] = 128 | temp & 63;
            bytesRequiredToEncode -= 1;
          }
        }
        i += 1;
      }
      const utf8 = u8view.slice(0, ptrHead + 1);
      utf8[ptrHead] = 0;
      this._utf8Bytes = utf8;
      if (utf16OffsetToUtf8) {
        this._utf8Indexes = utf16OffsetToUtf8;
        this._mappingTableStartOffset = mappingTableStartOffset;
      }
    }
  }
  function findFirstInSorted(array, i) {
    let low = 0;
    let high = array.length;
    if (high === 0) {
      return 0;
    }
    while (low < high) {
      const mid = Math.floor((low + high) / 2);
      if (array[mid] >= i) {
        high = mid;
      } else {
        low = mid + 1;
      }
    }
    while (low > 0 && (low >= array.length || array[low] > i)) {
      low--;
    }
    if (low > 0 && array[low] === array[low - 1]) {
      low--;
    }
    return low;
  }
  OnigString$1.default = OnigString;
  Object.defineProperty(OnigScanner$1, "__esModule", { value: true });
  const LRUCache = lruCache;
  const onigasmH_1$1 = onigasmH;
  const OnigString_1$1 = OnigString$1;
  function mallocAndWriteString(str) {
    const ptr = onigasmH_1$1.onigasmH._malloc(str.utf8Bytes.length);
    onigasmH_1$1.onigasmH.HEAPU8.set(str.utf8Bytes, ptr);
    return ptr;
  }
  function convertUTF8BytesFromPtrToString(ptr) {
    const chars = [];
    let i = 0;
    while (onigasmH_1$1.onigasmH.HEAPU8[ptr] !== 0) {
      chars[i++] = onigasmH_1$1.onigasmH.HEAPU8[ptr++];
    }
    return chars.join();
  }
  const cache = new LRUCache({
    dispose: (scanner, info) => {
      const regexTPtrsPtr = onigasmH_1$1.onigasmH._malloc(info.regexTPtrs.length);
      onigasmH_1$1.onigasmH.HEAPU8.set(info.regexTPtrs, regexTPtrsPtr);
      const status = onigasmH_1$1.onigasmH._disposeCompiledPatterns(regexTPtrsPtr, scanner.patterns.length);
      if (status !== 0) {
        const errMessage = convertUTF8BytesFromPtrToString(onigasmH_1$1.onigasmH._getLastError());
        throw new Error(errMessage);
      }
      onigasmH_1$1.onigasmH._free(regexTPtrsPtr);
    },
    max: 1e3
  });
  class OnigScanner {
    constructor(patterns) {
      if (onigasmH_1$1.onigasmH === null) {
        throw new Error(`Onigasm has not been initialized, call loadWASM from 'onigasm' exports before using any other API`);
      }
      for (let i = 0; i < patterns.length; i++) {
        const pattern = patterns[i];
        if (typeof pattern !== "string") {
          throw new TypeError(`First parameter to OnigScanner constructor must be array of (pattern) strings`);
        }
      }
      this.sources = patterns.slice();
    }
    get patterns() {
      return this.sources.slice();
    }
    findNextMatch(string, startPosition, callback) {
      if (startPosition == null) {
        startPosition = 0;
      }
      if (typeof startPosition === "function") {
        callback = startPosition;
        startPosition = 0;
      }
      try {
        const match = this.findNextMatchSync(string, startPosition);
        callback(null, match);
      } catch (error) {
        callback(error);
      }
    }
    findNextMatchSync(string, startPosition) {
      if (startPosition == null) {
        startPosition = 0;
      }
      startPosition = this.convertToNumber(startPosition);
      let onigNativeInfo = cache.get(this);
      let status = 0;
      if (!onigNativeInfo) {
        const regexTAddrRecieverPtr = onigasmH_1$1.onigasmH._malloc(4);
        const regexTPtrs = [];
        for (let i = 0; i < this.sources.length; i++) {
          const pattern = this.sources[i];
          const patternStrPtr = mallocAndWriteString(new OnigString_1$1.default(pattern));
          status = onigasmH_1$1.onigasmH._compilePattern(patternStrPtr, regexTAddrRecieverPtr);
          if (status !== 0) {
            const errMessage = convertUTF8BytesFromPtrToString(onigasmH_1$1.onigasmH._getLastError());
            throw new Error(errMessage);
          }
          const regexTAddress = onigasmH_1$1.onigasmH.HEAP32[regexTAddrRecieverPtr / 4];
          regexTPtrs.push(regexTAddress);
          onigasmH_1$1.onigasmH._free(patternStrPtr);
        }
        onigNativeInfo = {
          regexTPtrs: new Uint8Array(Uint32Array.from(regexTPtrs).buffer)
        };
        onigasmH_1$1.onigasmH._free(regexTAddrRecieverPtr);
        cache.set(this, onigNativeInfo);
      }
      const onigString = string instanceof OnigString_1$1.default ? string : new OnigString_1$1.default(this.convertToString(string));
      const strPtr = mallocAndWriteString(onigString);
      const resultInfoReceiverPtr = onigasmH_1$1.onigasmH._malloc(8);
      const regexTPtrsPtr = onigasmH_1$1.onigasmH._malloc(onigNativeInfo.regexTPtrs.length);
      onigasmH_1$1.onigasmH.HEAPU8.set(onigNativeInfo.regexTPtrs, regexTPtrsPtr);
      status = onigasmH_1$1.onigasmH._findBestMatch(
        regexTPtrsPtr,
        this.sources.length,
        strPtr,
        onigString.utf8Bytes.length - 1,
        onigString.convertUtf16OffsetToUtf8(startPosition),
        resultInfoReceiverPtr
      );
      if (status !== 0) {
        const errMessage = convertUTF8BytesFromPtrToString(onigasmH_1$1.onigasmH._getLastError());
        throw new Error(errMessage);
      }
      const [
        bestPatternIdx,
        encodedResultBeginAddress,
        encodedResultLength
      ] = new Uint32Array(onigasmH_1$1.onigasmH.HEAPU32.buffer, resultInfoReceiverPtr, 3);
      onigasmH_1$1.onigasmH._free(strPtr);
      onigasmH_1$1.onigasmH._free(resultInfoReceiverPtr);
      onigasmH_1$1.onigasmH._free(regexTPtrsPtr);
      if (encodedResultLength > 0) {
        const encodedResult = new Uint32Array(onigasmH_1$1.onigasmH.HEAPU32.buffer, encodedResultBeginAddress, encodedResultLength);
        const captureIndices = [];
        let i = 0;
        let captureIdx = 0;
        while (i < encodedResultLength) {
          const index = captureIdx++;
          let start = encodedResult[i++];
          let end = encodedResult[i++];
          if (onigString.hasMultiByteCharacters) {
            start = onigString.convertUtf8OffsetToUtf16(start);
            end = onigString.convertUtf8OffsetToUtf16(end);
          }
          captureIndices.push({
            end,
            index,
            length: end - start,
            start
          });
        }
        onigasmH_1$1.onigasmH._free(encodedResultBeginAddress);
        return {
          captureIndices,
          index: bestPatternIdx,
          scanner: this
        };
      }
      return null;
    }
    convertToString(value) {
      if (value === void 0) {
        return "undefined";
      }
      if (value === null) {
        return "null";
      }
      if (value instanceof OnigString_1$1.default) {
        return value.content;
      }
      return value.toString();
    }
    convertToNumber(value) {
      value = parseInt(value, 10);
      if (!isFinite(value)) {
        value = 0;
      }
      value = Math.max(value, 0);
      return value;
    }
  }
  OnigScanner$1.OnigScanner = OnigScanner;
  OnigScanner$1.default = OnigScanner;
  Object.defineProperty(OnigRegExp$1, "__esModule", { value: true });
  const OnigScanner_1$1 = OnigScanner$1;
  class OnigRegExp {
    constructor(source) {
      this.source = source;
      try {
        this.scanner = new OnigScanner_1$1.default([this.source]);
      } catch (error) {
      }
    }
    searchSync(string, startPosition) {
      let match;
      if (startPosition == null) {
        startPosition = 0;
      }
      match = this.scanner.findNextMatchSync(string, startPosition);
      return this.captureIndicesForMatch(string, match);
    }
    search(string, startPosition, callback) {
      if (startPosition == null) {
        startPosition = 0;
      }
      if (typeof startPosition === "function") {
        callback = startPosition;
        startPosition = 0;
      }
      try {
        const ret = this.searchSync(string, startPosition);
        callback(null, ret);
      } catch (error) {
        callback(error);
      }
    }
    testSync(string) {
      if (typeof this.source === "boolean" || typeof string === "boolean") {
        return this.source === string;
      }
      return this.searchSync(string) != null;
    }
    test(string, callback) {
      if (typeof callback !== "function") {
        callback = () => {
        };
      }
      try {
        callback(null, this.testSync(string));
      } catch (error) {
        callback(error);
      }
    }
    captureIndicesForMatch(string, match) {
      if (match != null) {
        const { captureIndices } = match;
        let capture;
        string = this.scanner.convertToString(string);
        for (let i = 0; i < captureIndices.length; i++) {
          capture = captureIndices[i];
          capture.match = string.slice(capture.start, capture.end);
        }
        return captureIndices;
      } else {
        return null;
      }
    }
  }
  OnigRegExp$1.default = OnigRegExp;
  Object.defineProperty(lib, "__esModule", { value: true });
  const onigasmH_1 = onigasmH;
  var loadWASM = lib.loadWASM = onigasmH_1.loadWASM;
  const OnigRegExp_1 = OnigRegExp$1;
  lib.OnigRegExp = OnigRegExp_1.default;
  const OnigScanner_1 = OnigScanner$1;
  lib.OnigScanner = OnigScanner_1.default;
  const OnigString_1 = OnigString$1;
  lib.OnigString = OnigString_1.default;
  var __extends = commonjsGlobal && commonjsGlobal.__extends || function() {
    var extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b) {
      d2.__proto__ = b;
    } || function(d2, b) {
      for (var p in b)
        if (b.hasOwnProperty(p))
          d2[p] = b[p];
    };
    return function(d2, b) {
      extendStatics(d2, b);
      function __() {
        this.constructor = d2;
      }
      d2.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
  }();
  Object.defineProperty(rule, "__esModule", { value: true });
  var path = require$$0;
  var utils_1$1 = utils;
  var onigasm_1 = lib;
  var HAS_BACK_REFERENCES = /\\(\d+)/;
  var BACK_REFERENCING_END = /\\(\d+)/g;
  var Rule = function() {
    function Rule2($location, id, name, contentName) {
      this.$location = $location;
      this.id = id;
      this._name = name || null;
      this._nameIsCapturing = utils_1$1.RegexSource.hasCaptures(this._name);
      this._contentName = contentName || null;
      this._contentNameIsCapturing = utils_1$1.RegexSource.hasCaptures(this._contentName);
    }
    Object.defineProperty(Rule2.prototype, "debugName", {
      get: function() {
        return this.constructor.name + "#" + this.id + " @ " + path.basename(this.$location.filename) + ":" + this.$location.line;
      },
      enumerable: true,
      configurable: true
    });
    Rule2.prototype.getName = function(lineText, captureIndices) {
      if (!this._nameIsCapturing) {
        return this._name;
      }
      return utils_1$1.RegexSource.replaceCaptures(this._name, lineText, captureIndices);
    };
    Rule2.prototype.getContentName = function(lineText, captureIndices) {
      if (!this._contentNameIsCapturing) {
        return this._contentName;
      }
      return utils_1$1.RegexSource.replaceCaptures(this._contentName, lineText, captureIndices);
    };
    Rule2.prototype.collectPatternsRecursive = function(grammar2, out, isFirst) {
      throw new Error("Implement me!");
    };
    Rule2.prototype.compile = function(grammar2, endRegexSource, allowA, allowG) {
      throw new Error("Implement me!");
    };
    return Rule2;
  }();
  rule.Rule = Rule;
  var CaptureRule = function(_super) {
    __extends(CaptureRule2, _super);
    function CaptureRule2($location, id, name, contentName, retokenizeCapturedWithRuleId) {
      var _this = _super.call(this, $location, id, name, contentName) || this;
      _this.retokenizeCapturedWithRuleId = retokenizeCapturedWithRuleId;
      return _this;
    }
    return CaptureRule2;
  }(Rule);
  rule.CaptureRule = CaptureRule;
  var RegExpSource = function() {
    function RegExpSource2(regExpSource, ruleId, handleAnchors) {
      if (handleAnchors === void 0) {
        handleAnchors = true;
      }
      if (handleAnchors) {
        this._handleAnchors(regExpSource);
      } else {
        this.source = regExpSource;
        this.hasAnchor = false;
      }
      if (this.hasAnchor) {
        this._anchorCache = this._buildAnchorCache();
      }
      this.ruleId = ruleId;
      this.hasBackReferences = HAS_BACK_REFERENCES.test(this.source);
    }
    RegExpSource2.prototype.clone = function() {
      return new RegExpSource2(this.source, this.ruleId, true);
    };
    RegExpSource2.prototype.setSource = function(newSource) {
      if (this.source === newSource) {
        return;
      }
      this.source = newSource;
      if (this.hasAnchor) {
        this._anchorCache = this._buildAnchorCache();
      }
    };
    RegExpSource2.prototype._handleAnchors = function(regExpSource) {
      if (regExpSource) {
        var pos = void 0, len = void 0, ch = void 0, nextCh = void 0, lastPushedPos = 0, output = [];
        var hasAnchor = false;
        for (pos = 0, len = regExpSource.length; pos < len; pos++) {
          ch = regExpSource.charAt(pos);
          if (ch === "\\") {
            if (pos + 1 < len) {
              nextCh = regExpSource.charAt(pos + 1);
              if (nextCh === "z") {
                output.push(regExpSource.substring(lastPushedPos, pos));
                output.push("$(?!\\n)(?<!\\n)");
                lastPushedPos = pos + 2;
              } else if (nextCh === "A" || nextCh === "G") {
                hasAnchor = true;
              }
              pos++;
            }
          }
        }
        this.hasAnchor = hasAnchor;
        if (lastPushedPos === 0) {
          this.source = regExpSource;
        } else {
          output.push(regExpSource.substring(lastPushedPos, len));
          this.source = output.join("");
        }
      } else {
        this.hasAnchor = false;
        this.source = regExpSource;
      }
    };
    RegExpSource2.prototype.resolveBackReferences = function(lineText, captureIndices) {
      var capturedValues = captureIndices.map(function(capture) {
        return lineText.substring(capture.start, capture.end);
      });
      BACK_REFERENCING_END.lastIndex = 0;
      return this.source.replace(BACK_REFERENCING_END, function(match, g1) {
        return escapeRegExpCharacters(capturedValues[parseInt(g1, 10)] || "");
      });
    };
    RegExpSource2.prototype._buildAnchorCache = function() {
      var A0_G0_result = [];
      var A0_G1_result = [];
      var A1_G0_result = [];
      var A1_G1_result = [];
      var pos, len, ch, nextCh;
      for (pos = 0, len = this.source.length; pos < len; pos++) {
        ch = this.source.charAt(pos);
        A0_G0_result[pos] = ch;
        A0_G1_result[pos] = ch;
        A1_G0_result[pos] = ch;
        A1_G1_result[pos] = ch;
        if (ch === "\\") {
          if (pos + 1 < len) {
            nextCh = this.source.charAt(pos + 1);
            if (nextCh === "A") {
              A0_G0_result[pos + 1] = "\uFFFF";
              A0_G1_result[pos + 1] = "\uFFFF";
              A1_G0_result[pos + 1] = "A";
              A1_G1_result[pos + 1] = "A";
            } else if (nextCh === "G") {
              A0_G0_result[pos + 1] = "\uFFFF";
              A0_G1_result[pos + 1] = "G";
              A1_G0_result[pos + 1] = "\uFFFF";
              A1_G1_result[pos + 1] = "G";
            } else {
              A0_G0_result[pos + 1] = nextCh;
              A0_G1_result[pos + 1] = nextCh;
              A1_G0_result[pos + 1] = nextCh;
              A1_G1_result[pos + 1] = nextCh;
            }
            pos++;
          }
        }
      }
      return {
        A0_G0: A0_G0_result.join(""),
        A0_G1: A0_G1_result.join(""),
        A1_G0: A1_G0_result.join(""),
        A1_G1: A1_G1_result.join("")
      };
    };
    RegExpSource2.prototype.resolveAnchors = function(allowA, allowG) {
      if (!this.hasAnchor) {
        return this.source;
      }
      if (allowA) {
        if (allowG) {
          return this._anchorCache.A1_G1;
        } else {
          return this._anchorCache.A1_G0;
        }
      } else {
        if (allowG) {
          return this._anchorCache.A0_G1;
        } else {
          return this._anchorCache.A0_G0;
        }
      }
    };
    return RegExpSource2;
  }();
  rule.RegExpSource = RegExpSource;
  function createOnigScanner(sources) {
    return new onigasm_1.OnigScanner(sources);
  }
  function createOnigString(sources) {
    var r = new onigasm_1.OnigString(sources);
    r.$str = sources;
    return r;
  }
  rule.createOnigString = createOnigString;
  function getString(str) {
    return str.$str;
  }
  rule.getString = getString;
  var RegExpSourceList = function() {
    function RegExpSourceList2() {
      this._items = [];
      this._hasAnchors = false;
      this._cached = null;
      this._cachedSources = null;
      this._anchorCache = {
        A0_G0: null,
        A0_G1: null,
        A1_G0: null,
        A1_G1: null
      };
    }
    RegExpSourceList2.prototype.push = function(item) {
      this._items.push(item);
      this._hasAnchors = this._hasAnchors || item.hasAnchor;
    };
    RegExpSourceList2.prototype.unshift = function(item) {
      this._items.unshift(item);
      this._hasAnchors = this._hasAnchors || item.hasAnchor;
    };
    RegExpSourceList2.prototype.length = function() {
      return this._items.length;
    };
    RegExpSourceList2.prototype.setSource = function(index, newSource) {
      if (this._items[index].source !== newSource) {
        this._cached = null;
        this._anchorCache.A0_G0 = null;
        this._anchorCache.A0_G1 = null;
        this._anchorCache.A1_G0 = null;
        this._anchorCache.A1_G1 = null;
        this._items[index].setSource(newSource);
      }
    };
    RegExpSourceList2.prototype.compile = function(grammar2, allowA, allowG) {
      if (!this._hasAnchors) {
        if (!this._cached) {
          var regExps = this._items.map(function(e4) {
            return e4.source;
          });
          this._cached = {
            scanner: createOnigScanner(regExps),
            rules: this._items.map(function(e4) {
              return e4.ruleId;
            }),
            debugRegExps: regExps
          };
        }
        return this._cached;
      } else {
        this._anchorCache = {
          A0_G0: this._anchorCache.A0_G0 || (allowA === false && allowG === false ? this._resolveAnchors(allowA, allowG) : null),
          A0_G1: this._anchorCache.A0_G1 || (allowA === false && allowG === true ? this._resolveAnchors(allowA, allowG) : null),
          A1_G0: this._anchorCache.A1_G0 || (allowA === true && allowG === false ? this._resolveAnchors(allowA, allowG) : null),
          A1_G1: this._anchorCache.A1_G1 || (allowA === true && allowG === true ? this._resolveAnchors(allowA, allowG) : null)
        };
        if (allowA) {
          if (allowG) {
            return this._anchorCache.A1_G1;
          } else {
            return this._anchorCache.A1_G0;
          }
        } else {
          if (allowG) {
            return this._anchorCache.A0_G1;
          } else {
            return this._anchorCache.A0_G0;
          }
        }
      }
    };
    RegExpSourceList2.prototype._resolveAnchors = function(allowA, allowG) {
      var regExps = this._items.map(function(e4) {
        return e4.resolveAnchors(allowA, allowG);
      });
      return {
        scanner: createOnigScanner(regExps),
        rules: this._items.map(function(e4) {
          return e4.ruleId;
        }),
        debugRegExps: regExps
      };
    };
    return RegExpSourceList2;
  }();
  rule.RegExpSourceList = RegExpSourceList;
  var MatchRule = function(_super) {
    __extends(MatchRule2, _super);
    function MatchRule2($location, id, name, match, captures) {
      var _this = _super.call(this, $location, id, name, null) || this;
      _this._match = new RegExpSource(match, _this.id);
      _this.captures = captures;
      _this._cachedCompiledPatterns = null;
      return _this;
    }
    Object.defineProperty(MatchRule2.prototype, "debugMatchRegExp", {
      get: function() {
        return "" + this._match.source;
      },
      enumerable: true,
      configurable: true
    });
    MatchRule2.prototype.collectPatternsRecursive = function(grammar2, out, isFirst) {
      out.push(this._match);
    };
    MatchRule2.prototype.compile = function(grammar2, endRegexSource, allowA, allowG) {
      if (!this._cachedCompiledPatterns) {
        this._cachedCompiledPatterns = new RegExpSourceList();
        this.collectPatternsRecursive(grammar2, this._cachedCompiledPatterns, true);
      }
      return this._cachedCompiledPatterns.compile(grammar2, allowA, allowG);
    };
    return MatchRule2;
  }(Rule);
  rule.MatchRule = MatchRule;
  var IncludeOnlyRule = function(_super) {
    __extends(IncludeOnlyRule2, _super);
    function IncludeOnlyRule2($location, id, name, contentName, patterns) {
      var _this = _super.call(this, $location, id, name, contentName) || this;
      _this.patterns = patterns.patterns;
      _this.hasMissingPatterns = patterns.hasMissingPatterns;
      _this._cachedCompiledPatterns = null;
      return _this;
    }
    IncludeOnlyRule2.prototype.collectPatternsRecursive = function(grammar2, out, isFirst) {
      var i, len, rule2;
      for (i = 0, len = this.patterns.length; i < len; i++) {
        rule2 = grammar2.getRule(this.patterns[i]);
        rule2.collectPatternsRecursive(grammar2, out, false);
      }
    };
    IncludeOnlyRule2.prototype.compile = function(grammar2, endRegexSource, allowA, allowG) {
      if (!this._cachedCompiledPatterns) {
        this._cachedCompiledPatterns = new RegExpSourceList();
        this.collectPatternsRecursive(grammar2, this._cachedCompiledPatterns, true);
      }
      return this._cachedCompiledPatterns.compile(grammar2, allowA, allowG);
    };
    return IncludeOnlyRule2;
  }(Rule);
  rule.IncludeOnlyRule = IncludeOnlyRule;
  function escapeRegExpCharacters(value) {
    return value.replace(/[\-\\\{\}\*\+\?\|\^\$\.\,\[\]\(\)\#\s]/g, "\\$&");
  }
  var BeginEndRule = function(_super) {
    __extends(BeginEndRule2, _super);
    function BeginEndRule2($location, id, name, contentName, begin, beginCaptures, end, endCaptures, applyEndPatternLast, patterns) {
      var _this = _super.call(this, $location, id, name, contentName) || this;
      _this._begin = new RegExpSource(begin, _this.id);
      _this.beginCaptures = beginCaptures;
      _this._end = new RegExpSource(end, -1);
      _this.endHasBackReferences = _this._end.hasBackReferences;
      _this.endCaptures = endCaptures;
      _this.applyEndPatternLast = applyEndPatternLast || false;
      _this.patterns = patterns.patterns;
      _this.hasMissingPatterns = patterns.hasMissingPatterns;
      _this._cachedCompiledPatterns = null;
      return _this;
    }
    Object.defineProperty(BeginEndRule2.prototype, "debugBeginRegExp", {
      get: function() {
        return "" + this._begin.source;
      },
      enumerable: true,
      configurable: true
    });
    Object.defineProperty(BeginEndRule2.prototype, "debugEndRegExp", {
      get: function() {
        return "" + this._end.source;
      },
      enumerable: true,
      configurable: true
    });
    BeginEndRule2.prototype.getEndWithResolvedBackReferences = function(lineText, captureIndices) {
      return this._end.resolveBackReferences(lineText, captureIndices);
    };
    BeginEndRule2.prototype.collectPatternsRecursive = function(grammar2, out, isFirst) {
      if (isFirst) {
        var i = void 0, len = void 0, rule2 = void 0;
        for (i = 0, len = this.patterns.length; i < len; i++) {
          rule2 = grammar2.getRule(this.patterns[i]);
          rule2.collectPatternsRecursive(grammar2, out, false);
        }
      } else {
        out.push(this._begin);
      }
    };
    BeginEndRule2.prototype.compile = function(grammar2, endRegexSource, allowA, allowG) {
      var precompiled = this._precompile(grammar2);
      if (this._end.hasBackReferences) {
        if (this.applyEndPatternLast) {
          precompiled.setSource(precompiled.length() - 1, endRegexSource);
        } else {
          precompiled.setSource(0, endRegexSource);
        }
      }
      return this._cachedCompiledPatterns.compile(grammar2, allowA, allowG);
    };
    BeginEndRule2.prototype._precompile = function(grammar2) {
      if (!this._cachedCompiledPatterns) {
        this._cachedCompiledPatterns = new RegExpSourceList();
        this.collectPatternsRecursive(grammar2, this._cachedCompiledPatterns, true);
        if (this.applyEndPatternLast) {
          this._cachedCompiledPatterns.push(this._end.hasBackReferences ? this._end.clone() : this._end);
        } else {
          this._cachedCompiledPatterns.unshift(this._end.hasBackReferences ? this._end.clone() : this._end);
        }
      }
      return this._cachedCompiledPatterns;
    };
    return BeginEndRule2;
  }(Rule);
  rule.BeginEndRule = BeginEndRule;
  var BeginWhileRule = function(_super) {
    __extends(BeginWhileRule2, _super);
    function BeginWhileRule2($location, id, name, contentName, begin, beginCaptures, _while, whileCaptures, patterns) {
      var _this = _super.call(this, $location, id, name, contentName) || this;
      _this._begin = new RegExpSource(begin, _this.id);
      _this.beginCaptures = beginCaptures;
      _this.whileCaptures = whileCaptures;
      _this._while = new RegExpSource(_while, -2);
      _this.whileHasBackReferences = _this._while.hasBackReferences;
      _this.patterns = patterns.patterns;
      _this.hasMissingPatterns = patterns.hasMissingPatterns;
      _this._cachedCompiledPatterns = null;
      _this._cachedCompiledWhilePatterns = null;
      return _this;
    }
    BeginWhileRule2.prototype.getWhileWithResolvedBackReferences = function(lineText, captureIndices) {
      return this._while.resolveBackReferences(lineText, captureIndices);
    };
    BeginWhileRule2.prototype.collectPatternsRecursive = function(grammar2, out, isFirst) {
      if (isFirst) {
        var i = void 0, len = void 0, rule2 = void 0;
        for (i = 0, len = this.patterns.length; i < len; i++) {
          rule2 = grammar2.getRule(this.patterns[i]);
          rule2.collectPatternsRecursive(grammar2, out, false);
        }
      } else {
        out.push(this._begin);
      }
    };
    BeginWhileRule2.prototype.compile = function(grammar2, endRegexSource, allowA, allowG) {
      this._precompile(grammar2);
      return this._cachedCompiledPatterns.compile(grammar2, allowA, allowG);
    };
    BeginWhileRule2.prototype._precompile = function(grammar2) {
      if (!this._cachedCompiledPatterns) {
        this._cachedCompiledPatterns = new RegExpSourceList();
        this.collectPatternsRecursive(grammar2, this._cachedCompiledPatterns, true);
      }
    };
    BeginWhileRule2.prototype.compileWhile = function(grammar2, endRegexSource, allowA, allowG) {
      this._precompileWhile(grammar2);
      if (this._while.hasBackReferences) {
        this._cachedCompiledWhilePatterns.setSource(0, endRegexSource);
      }
      return this._cachedCompiledWhilePatterns.compile(grammar2, allowA, allowG);
    };
    BeginWhileRule2.prototype._precompileWhile = function(grammar2) {
      if (!this._cachedCompiledWhilePatterns) {
        this._cachedCompiledWhilePatterns = new RegExpSourceList();
        this._cachedCompiledWhilePatterns.push(this._while.hasBackReferences ? this._while.clone() : this._while);
      }
    };
    return BeginWhileRule2;
  }(Rule);
  rule.BeginWhileRule = BeginWhileRule;
  var RuleFactory = function() {
    function RuleFactory2() {
    }
    RuleFactory2.createCaptureRule = function(helper, $location, name, contentName, retokenizeCapturedWithRuleId) {
      return helper.registerRule(function(id) {
        return new CaptureRule($location, id, name, contentName, retokenizeCapturedWithRuleId);
      });
    };
    RuleFactory2.getCompiledRuleId = function(desc, helper, repository) {
      if (!desc.id) {
        helper.registerRule(function(id) {
          desc.id = id;
          if (desc.match) {
            return new MatchRule(desc.$vscodeTextmateLocation, desc.id, desc.name, desc.match, RuleFactory2._compileCaptures(desc.captures, helper, repository));
          }
          if (!desc.begin) {
            if (desc.repository) {
              repository = utils_1$1.mergeObjects({}, repository, desc.repository);
            }
            return new IncludeOnlyRule(desc.$vscodeTextmateLocation, desc.id, desc.name, desc.contentName, RuleFactory2._compilePatterns(desc.patterns, helper, repository));
          }
          if (desc.while) {
            return new BeginWhileRule(desc.$vscodeTextmateLocation, desc.id, desc.name, desc.contentName, desc.begin, RuleFactory2._compileCaptures(desc.beginCaptures || desc.captures, helper, repository), desc.while, RuleFactory2._compileCaptures(desc.whileCaptures || desc.captures, helper, repository), RuleFactory2._compilePatterns(desc.patterns, helper, repository));
          }
          return new BeginEndRule(desc.$vscodeTextmateLocation, desc.id, desc.name, desc.contentName, desc.begin, RuleFactory2._compileCaptures(desc.beginCaptures || desc.captures, helper, repository), desc.end, RuleFactory2._compileCaptures(desc.endCaptures || desc.captures, helper, repository), desc.applyEndPatternLast, RuleFactory2._compilePatterns(desc.patterns, helper, repository));
        });
      }
      return desc.id;
    };
    RuleFactory2._compileCaptures = function(captures, helper, repository) {
      var r = [], numericCaptureId, maximumCaptureId, i, captureId;
      if (captures) {
        maximumCaptureId = 0;
        for (captureId in captures) {
          if (captureId === "$vscodeTextmateLocation") {
            continue;
          }
          numericCaptureId = parseInt(captureId, 10);
          if (numericCaptureId > maximumCaptureId) {
            maximumCaptureId = numericCaptureId;
          }
        }
        for (i = 0; i <= maximumCaptureId; i++) {
          r[i] = null;
        }
        for (captureId in captures) {
          if (captureId === "$vscodeTextmateLocation") {
            continue;
          }
          numericCaptureId = parseInt(captureId, 10);
          var retokenizeCapturedWithRuleId = 0;
          if (captures[captureId].patterns) {
            retokenizeCapturedWithRuleId = RuleFactory2.getCompiledRuleId(captures[captureId], helper, repository);
          }
          r[numericCaptureId] = RuleFactory2.createCaptureRule(helper, captures[captureId].$vscodeTextmateLocation, captures[captureId].name, captures[captureId].contentName, retokenizeCapturedWithRuleId);
        }
      }
      return r;
    };
    RuleFactory2._compilePatterns = function(patterns, helper, repository) {
      var r = [], pattern, i, len, patternId, externalGrammar, rule2, skipRule;
      if (patterns) {
        for (i = 0, len = patterns.length; i < len; i++) {
          pattern = patterns[i];
          patternId = -1;
          if (pattern.include) {
            if (pattern.include.charAt(0) === "#") {
              var localIncludedRule = repository[pattern.include.substr(1)];
              if (localIncludedRule) {
                patternId = RuleFactory2.getCompiledRuleId(localIncludedRule, helper, repository);
              }
            } else if (pattern.include === "$base" || pattern.include === "$self") {
              patternId = RuleFactory2.getCompiledRuleId(repository[pattern.include], helper, repository);
            } else {
              var externalGrammarName = null, externalGrammarInclude = null, sharpIndex = pattern.include.indexOf("#");
              if (sharpIndex >= 0) {
                externalGrammarName = pattern.include.substring(0, sharpIndex);
                externalGrammarInclude = pattern.include.substring(sharpIndex + 1);
              } else {
                externalGrammarName = pattern.include;
              }
              externalGrammar = helper.getExternalGrammar(externalGrammarName, repository);
              if (externalGrammar) {
                if (externalGrammarInclude) {
                  var externalIncludedRule = externalGrammar.repository[externalGrammarInclude];
                  if (externalIncludedRule) {
                    patternId = RuleFactory2.getCompiledRuleId(externalIncludedRule, helper, externalGrammar.repository);
                  }
                } else {
                  patternId = RuleFactory2.getCompiledRuleId(externalGrammar.repository.$self, helper, externalGrammar.repository);
                }
              }
            }
          } else {
            patternId = RuleFactory2.getCompiledRuleId(pattern, helper, repository);
          }
          if (patternId !== -1) {
            rule2 = helper.getRule(patternId);
            skipRule = false;
            if (rule2 instanceof IncludeOnlyRule || rule2 instanceof BeginEndRule || rule2 instanceof BeginWhileRule) {
              if (rule2.hasMissingPatterns && rule2.patterns.length === 0) {
                skipRule = true;
              }
            }
            if (skipRule) {
              continue;
            }
            r.push(patternId);
          }
        }
      }
      return {
        patterns: r,
        hasMissingPatterns: (patterns ? patterns.length : 0) !== r.length
      };
    };
    return RuleFactory2;
  }();
  rule.RuleFactory = RuleFactory;
  var matcher = {};
  Object.defineProperty(matcher, "__esModule", { value: true });
  function createMatchers(selector, matchesName) {
    var results = [];
    var tokenizer = newTokenizer(selector);
    var token = tokenizer.next();
    while (token !== null) {
      var priority = 0;
      if (token.length === 2 && token.charAt(1) === ":") {
        switch (token.charAt(0)) {
          case "R":
            priority = 1;
            break;
          case "L":
            priority = -1;
            break;
          default:
            console.log("Unknown priority " + token + " in scope selector");
        }
        token = tokenizer.next();
      }
      var matcher2 = parseConjunction();
      if (matcher2) {
        results.push({ matcher: matcher2, priority });
      }
      if (token !== ",") {
        break;
      }
      token = tokenizer.next();
    }
    return results;
    function parseOperand() {
      if (token === "-") {
        token = tokenizer.next();
        var expressionToNegate = parseOperand();
        return function(matcherInput) {
          return expressionToNegate && !expressionToNegate(matcherInput);
        };
      }
      if (token === "(") {
        token = tokenizer.next();
        var expressionInParents = parseInnerExpression();
        if (token === ")") {
          token = tokenizer.next();
        }
        return expressionInParents;
      }
      if (isIdentifier(token)) {
        var identifiers = [];
        do {
          identifiers.push(token);
          token = tokenizer.next();
        } while (isIdentifier(token));
        return function(matcherInput) {
          return matchesName(identifiers, matcherInput);
        };
      }
      return null;
    }
    function parseConjunction() {
      var matchers = [];
      var matcher3 = parseOperand();
      while (matcher3) {
        matchers.push(matcher3);
        matcher3 = parseOperand();
      }
      return function(matcherInput) {
        return matchers.every(function(matcher4) {
          return matcher4(matcherInput);
        });
      };
    }
    function parseInnerExpression() {
      var matchers = [];
      var matcher3 = parseConjunction();
      while (matcher3) {
        matchers.push(matcher3);
        if (token === "|" || token === ",") {
          do {
            token = tokenizer.next();
          } while (token === "|" || token === ",");
        } else {
          break;
        }
        matcher3 = parseConjunction();
      }
      return function(matcherInput) {
        return matchers.some(function(matcher4) {
          return matcher4(matcherInput);
        });
      };
    }
  }
  matcher.createMatchers = createMatchers;
  function isIdentifier(token) {
    return token && token.match(/[\w\.:]+/);
  }
  function newTokenizer(input) {
    var regex = /([LR]:|[\w\.:][\w\.:\-]*|[\,\|\-\(\)])/g;
    var match = regex.exec(input);
    return {
      next: function() {
        if (!match) {
          return null;
        }
        var res = match[0];
        match = regex.exec(input);
        return res;
      }
    };
  }
  var debug = {};
  Object.defineProperty(debug, "__esModule", { value: true });
  debug.CAPTURE_METADATA = typeof process === "undefined" ? false : !!process.env["VSCODE_TEXTMATE_DEBUG"];
  debug.IN_DEBUG_MODE = typeof process === "undefined" ? false : !!process.env["VSCODE_TEXTMATE_DEBUG"];
  Object.defineProperty(grammar, "__esModule", { value: true });
  var utils_1 = utils;
  var rule_1 = rule;
  var matcher_1 = matcher;
  var debug_1$1 = debug;
  function createGrammar(grammar2, initialLanguage, embeddedLanguages, tokenTypes, grammarRepository) {
    return new Grammar(grammar2, initialLanguage, embeddedLanguages, tokenTypes, grammarRepository);
  }
  grammar.createGrammar = createGrammar;
  function _extractIncludedScopesInPatterns(result, patterns) {
    for (var i = 0, len = patterns.length; i < len; i++) {
      if (Array.isArray(patterns[i].patterns)) {
        _extractIncludedScopesInPatterns(result, patterns[i].patterns);
      }
      var include = patterns[i].include;
      if (!include) {
        continue;
      }
      if (include === "$base" || include === "$self") {
        continue;
      }
      if (include.charAt(0) === "#") {
        continue;
      }
      var sharpIndex = include.indexOf("#");
      if (sharpIndex >= 0) {
        result[include.substring(0, sharpIndex)] = true;
      } else {
        result[include] = true;
      }
    }
  }
  function _extractIncludedScopesInRepository(result, repository) {
    for (var name in repository) {
      var rule2 = repository[name];
      if (rule2.patterns && Array.isArray(rule2.patterns)) {
        _extractIncludedScopesInPatterns(result, rule2.patterns);
      }
      if (rule2.repository) {
        _extractIncludedScopesInRepository(result, rule2.repository);
      }
    }
  }
  function collectIncludedScopes(result, grammar2) {
    if (grammar2.patterns && Array.isArray(grammar2.patterns)) {
      _extractIncludedScopesInPatterns(result, grammar2.patterns);
    }
    if (grammar2.repository) {
      _extractIncludedScopesInRepository(result, grammar2.repository);
    }
    delete result[grammar2.scopeName];
  }
  grammar.collectIncludedScopes = collectIncludedScopes;
  function scopesAreMatching(thisScopeName, scopeName) {
    if (!thisScopeName) {
      return false;
    }
    if (thisScopeName === scopeName) {
      return true;
    }
    var len = scopeName.length;
    return thisScopeName.length > len && thisScopeName.substr(0, len) === scopeName && thisScopeName[len] === ".";
  }
  function nameMatcher(identifers, scopes) {
    if (scopes.length < identifers.length) {
      return false;
    }
    var lastIndex = 0;
    return identifers.every(function(identifier) {
      for (var i = lastIndex; i < scopes.length; i++) {
        if (scopesAreMatching(scopes[i], identifier)) {
          lastIndex = i + 1;
          return true;
        }
      }
      return false;
    });
  }
  function collectInjections(result, selector, rule2, ruleFactoryHelper, grammar2) {
    var matchers = matcher_1.createMatchers(selector, nameMatcher);
    var ruleId = rule_1.RuleFactory.getCompiledRuleId(rule2, ruleFactoryHelper, grammar2.repository);
    for (var _i2 = 0, matchers_1 = matchers; _i2 < matchers_1.length; _i2++) {
      var matcher2 = matchers_1[_i2];
      result.push({
        matcher: matcher2.matcher,
        ruleId,
        grammar: grammar2,
        priority: matcher2.priority
      });
    }
  }
  var ScopeMetadata = function() {
    function ScopeMetadata2(scopeName, languageId, tokenType, themeData) {
      this.scopeName = scopeName;
      this.languageId = languageId;
      this.tokenType = tokenType;
      this.themeData = themeData;
    }
    return ScopeMetadata2;
  }();
  grammar.ScopeMetadata = ScopeMetadata;
  var ScopeMetadataProvider = function() {
    function ScopeMetadataProvider2(initialLanguage, themeProvider, embeddedLanguages) {
      this._initialLanguage = initialLanguage;
      this._themeProvider = themeProvider;
      this.onDidChangeTheme();
      this._embeddedLanguages = /* @__PURE__ */ Object.create(null);
      if (embeddedLanguages) {
        var scopes = Object.keys(embeddedLanguages);
        for (var i = 0, len = scopes.length; i < len; i++) {
          var scope = scopes[i];
          var language = embeddedLanguages[scope];
          if (typeof language !== "number" || language === 0) {
            console.warn("Invalid embedded language found at scope " + scope + ": <<" + language + ">>");
            continue;
          }
          this._embeddedLanguages[scope] = language;
        }
      }
      var escapedScopes = Object.keys(this._embeddedLanguages).map(function(scopeName) {
        return ScopeMetadataProvider2._escapeRegExpCharacters(scopeName);
      });
      if (escapedScopes.length === 0) {
        this._embeddedLanguagesRegex = null;
      } else {
        escapedScopes.sort();
        escapedScopes.reverse();
        this._embeddedLanguagesRegex = new RegExp("^((" + escapedScopes.join(")|(") + "))($|\\.)", "");
      }
    }
    ScopeMetadataProvider2.prototype.onDidChangeTheme = function() {
      this._cache = /* @__PURE__ */ Object.create(null);
      this._defaultMetaData = new ScopeMetadata("", this._initialLanguage, 0, [this._themeProvider.getDefaults()]);
    };
    ScopeMetadataProvider2.prototype.getDefaultMetadata = function() {
      return this._defaultMetaData;
    };
    ScopeMetadataProvider2._escapeRegExpCharacters = function(value) {
      return value.replace(/[\-\\\{\}\*\+\?\|\^\$\.\,\[\]\(\)\#\s]/g, "\\$&");
    };
    ScopeMetadataProvider2.prototype.getMetadataForScope = function(scopeName) {
      if (scopeName === null) {
        return ScopeMetadataProvider2._NULL_SCOPE_METADATA;
      }
      var value = this._cache[scopeName];
      if (value) {
        return value;
      }
      value = this._doGetMetadataForScope(scopeName);
      this._cache[scopeName] = value;
      return value;
    };
    ScopeMetadataProvider2.prototype._doGetMetadataForScope = function(scopeName) {
      var languageId = this._scopeToLanguage(scopeName);
      var standardTokenType = this._toStandardTokenType(scopeName);
      var themeData = this._themeProvider.themeMatch(scopeName);
      return new ScopeMetadata(scopeName, languageId, standardTokenType, themeData);
    };
    ScopeMetadataProvider2.prototype._scopeToLanguage = function(scope) {
      if (!scope) {
        return 0;
      }
      if (!this._embeddedLanguagesRegex) {
        return 0;
      }
      var m = scope.match(this._embeddedLanguagesRegex);
      if (!m) {
        return 0;
      }
      var language = this._embeddedLanguages[m[1]] || 0;
      if (!language) {
        return 0;
      }
      return language;
    };
    ScopeMetadataProvider2.prototype._toStandardTokenType = function(tokenType) {
      var m = tokenType.match(ScopeMetadataProvider2.STANDARD_TOKEN_TYPE_REGEXP);
      if (!m) {
        return 0;
      }
      switch (m[1]) {
        case "comment":
          return 1;
        case "string":
          return 2;
        case "regex":
          return 4;
        case "meta.embedded":
          return 8;
      }
      throw new Error("Unexpected match for standard token type!");
    };
    ScopeMetadataProvider2._NULL_SCOPE_METADATA = new ScopeMetadata("", 0, 0, null);
    ScopeMetadataProvider2.STANDARD_TOKEN_TYPE_REGEXP = /\b(comment|string|regex|meta\.embedded)\b/;
    return ScopeMetadataProvider2;
  }();
  var Grammar = function() {
    function Grammar2(grammar2, initialLanguage, embeddedLanguages, tokenTypes, grammarRepository) {
      this._scopeMetadataProvider = new ScopeMetadataProvider(initialLanguage, grammarRepository, embeddedLanguages);
      this._rootId = -1;
      this._lastRuleId = 0;
      this._ruleId2desc = [];
      this._includedGrammars = {};
      this._grammarRepository = grammarRepository;
      this._grammar = initGrammar(grammar2, null);
      this._tokenTypeMatchers = [];
      if (tokenTypes) {
        for (var _i2 = 0, _a2 = Object.keys(tokenTypes); _i2 < _a2.length; _i2++) {
          var selector = _a2[_i2];
          var matchers = matcher_1.createMatchers(selector, nameMatcher);
          for (var _b2 = 0, matchers_2 = matchers; _b2 < matchers_2.length; _b2++) {
            var matcher2 = matchers_2[_b2];
            this._tokenTypeMatchers.push({
              matcher: matcher2.matcher,
              type: tokenTypes[selector]
            });
          }
        }
      }
    }
    Grammar2.prototype.onDidChangeTheme = function() {
      this._scopeMetadataProvider.onDidChangeTheme();
    };
    Grammar2.prototype.getMetadataForScope = function(scope) {
      return this._scopeMetadataProvider.getMetadataForScope(scope);
    };
    Grammar2.prototype.getInjections = function() {
      var _this = this;
      if (!this._injections) {
        this._injections = [];
        var rawInjections = this._grammar.injections;
        if (rawInjections) {
          for (var expression in rawInjections) {
            collectInjections(this._injections, expression, rawInjections[expression], this, this._grammar);
          }
        }
        if (this._grammarRepository) {
          var injectionScopeNames = this._grammarRepository.injections(this._grammar.scopeName);
          if (injectionScopeNames) {
            injectionScopeNames.forEach(function(injectionScopeName) {
              var injectionGrammar = _this.getExternalGrammar(injectionScopeName);
              if (injectionGrammar) {
                var selector = injectionGrammar.injectionSelector;
                if (selector) {
                  collectInjections(_this._injections, selector, injectionGrammar, _this, injectionGrammar);
                }
              }
            });
          }
        }
        this._injections.sort(function(i1, i2) {
          return i1.priority - i2.priority;
        });
      }
      if (this._injections.length === 0) {
        return this._injections;
      }
      return this._injections;
    };
    Grammar2.prototype.registerRule = function(factory) {
      var id = ++this._lastRuleId;
      var result = factory(id);
      this._ruleId2desc[id] = result;
      return result;
    };
    Grammar2.prototype.getRule = function(patternId) {
      return this._ruleId2desc[patternId];
    };
    Grammar2.prototype.getExternalGrammar = function(scopeName, repository) {
      if (this._includedGrammars[scopeName]) {
        return this._includedGrammars[scopeName];
      } else if (this._grammarRepository) {
        var rawIncludedGrammar = this._grammarRepository.lookup(scopeName);
        if (rawIncludedGrammar) {
          this._includedGrammars[scopeName] = initGrammar(rawIncludedGrammar, repository && repository.$base);
          return this._includedGrammars[scopeName];
        }
      }
    };
    Grammar2.prototype.tokenizeLine = function(lineText, prevState) {
      var r = this._tokenize(lineText, prevState, false);
      return {
        tokens: r.lineTokens.getResult(r.ruleStack, r.lineLength),
        ruleStack: r.ruleStack
      };
    };
    Grammar2.prototype.tokenizeLine2 = function(lineText, prevState) {
      var r = this._tokenize(lineText, prevState, true);
      return {
        tokens: r.lineTokens.getBinaryResult(r.ruleStack, r.lineLength),
        ruleStack: r.ruleStack
      };
    };
    Grammar2.prototype._tokenize = function(lineText, prevState, emitBinaryTokens) {
      if (this._rootId === -1) {
        this._rootId = rule_1.RuleFactory.getCompiledRuleId(this._grammar.repository.$self, this, this._grammar.repository);
      }
      var isFirstLine;
      if (!prevState || prevState === StackElement.NULL) {
        isFirstLine = true;
        var rawDefaultMetadata = this._scopeMetadataProvider.getDefaultMetadata();
        var defaultTheme = rawDefaultMetadata.themeData[0];
        var defaultMetadata = StackElementMetadata.set(0, rawDefaultMetadata.languageId, rawDefaultMetadata.tokenType, defaultTheme.fontStyle, defaultTheme.foreground, defaultTheme.background);
        var rootScopeName = this.getRule(this._rootId).getName(null, null);
        var rawRootMetadata = this._scopeMetadataProvider.getMetadataForScope(rootScopeName);
        var rootMetadata = ScopeListElement.mergeMetadata(defaultMetadata, null, rawRootMetadata);
        var scopeList = new ScopeListElement(null, rootScopeName, rootMetadata);
        prevState = new StackElement(null, this._rootId, -1, null, scopeList, scopeList);
      } else {
        isFirstLine = false;
        prevState.reset();
      }
      lineText = lineText + "\n";
      var onigLineText = rule_1.createOnigString(lineText);
      var lineLength = rule_1.getString(onigLineText).length;
      var lineTokens = new LineTokens(emitBinaryTokens, lineText, this._tokenTypeMatchers);
      var nextState = _tokenizeString(this, onigLineText, isFirstLine, 0, prevState, lineTokens);
      return {
        lineLength,
        lineTokens,
        ruleStack: nextState
      };
    };
    return Grammar2;
  }();
  grammar.Grammar = Grammar;
  function initGrammar(grammar2, base) {
    grammar2 = utils_1.clone(grammar2);
    grammar2.repository = grammar2.repository || {};
    grammar2.repository.$self = {
      $vscodeTextmateLocation: grammar2.$vscodeTextmateLocation,
      patterns: grammar2.patterns,
      name: grammar2.scopeName
    };
    grammar2.repository.$base = base || grammar2.repository.$self;
    return grammar2;
  }
  function handleCaptures(grammar2, lineText, isFirstLine, stack, lineTokens, captures, captureIndices) {
    if (captures.length === 0) {
      return;
    }
    var len = Math.min(captures.length, captureIndices.length);
    var localStack = [];
    var maxEnd = captureIndices[0].end;
    for (var i = 0; i < len; i++) {
      var captureRule = captures[i];
      if (captureRule === null) {
        continue;
      }
      var captureIndex = captureIndices[i];
      if (captureIndex.length === 0) {
        continue;
      }
      if (captureIndex.start > maxEnd) {
        break;
      }
      while (localStack.length > 0 && localStack[localStack.length - 1].endPos <= captureIndex.start) {
        lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, localStack[localStack.length - 1].endPos);
        localStack.pop();
      }
      if (localStack.length > 0) {
        lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, captureIndex.start);
      } else {
        lineTokens.produce(stack, captureIndex.start);
      }
      if (captureRule.retokenizeCapturedWithRuleId) {
        var scopeName = captureRule.getName(rule_1.getString(lineText), captureIndices);
        var nameScopesList = stack.contentNameScopesList.push(grammar2, scopeName);
        var contentName = captureRule.getContentName(rule_1.getString(lineText), captureIndices);
        var contentNameScopesList = nameScopesList.push(grammar2, contentName);
        var stackClone = stack.push(captureRule.retokenizeCapturedWithRuleId, captureIndex.start, null, nameScopesList, contentNameScopesList);
        _tokenizeString(grammar2, rule_1.createOnigString(rule_1.getString(lineText).substring(0, captureIndex.end)), isFirstLine && captureIndex.start === 0, captureIndex.start, stackClone, lineTokens);
        continue;
      }
      var captureRuleScopeName = captureRule.getName(rule_1.getString(lineText), captureIndices);
      if (captureRuleScopeName !== null) {
        var base = localStack.length > 0 ? localStack[localStack.length - 1].scopes : stack.contentNameScopesList;
        var captureRuleScopesList = base.push(grammar2, captureRuleScopeName);
        localStack.push(new LocalStackElement(captureRuleScopesList, captureIndex.end));
      }
    }
    while (localStack.length > 0) {
      lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, localStack[localStack.length - 1].endPos);
      localStack.pop();
    }
  }
  function debugCompiledRuleToString(ruleScanner) {
    var r = [];
    for (var i = 0, len = ruleScanner.rules.length; i < len; i++) {
      r.push("   - " + ruleScanner.rules[i] + ": " + ruleScanner.debugRegExps[i]);
    }
    return r.join("\n");
  }
  function matchInjections(injections, grammar2, lineText, isFirstLine, linePos, stack, anchorPosition) {
    var bestMatchRating = Number.MAX_VALUE;
    var bestMatchCaptureIndices = null;
    var bestMatchRuleId;
    var bestMatchResultPriority = 0;
    var scopes = stack.contentNameScopesList.generateScopes();
    for (var i = 0, len = injections.length; i < len; i++) {
      var injection = injections[i];
      if (!injection.matcher(scopes)) {
        continue;
      }
      var ruleScanner = grammar2.getRule(injection.ruleId).compile(grammar2, null, isFirstLine, linePos === anchorPosition);
      var matchResult = ruleScanner.scanner.findNextMatchSync(lineText, linePos);
      if (debug_1$1.IN_DEBUG_MODE) {
        console.log("  scanning for injections");
        console.log(debugCompiledRuleToString(ruleScanner));
      }
      if (!matchResult) {
        continue;
      }
      var matchRating = matchResult.captureIndices[0].start;
      if (matchRating >= bestMatchRating) {
        continue;
      }
      bestMatchRating = matchRating;
      bestMatchCaptureIndices = matchResult.captureIndices;
      bestMatchRuleId = ruleScanner.rules[matchResult.index];
      bestMatchResultPriority = injection.priority;
      if (bestMatchRating === linePos) {
        break;
      }
    }
    if (bestMatchCaptureIndices) {
      return {
        priorityMatch: bestMatchResultPriority === -1,
        captureIndices: bestMatchCaptureIndices,
        matchedRuleId: bestMatchRuleId
      };
    }
    return null;
  }
  function matchRule(grammar2, lineText, isFirstLine, linePos, stack, anchorPosition) {
    var rule2 = stack.getRule(grammar2);
    var ruleScanner = rule2.compile(grammar2, stack.endRule, isFirstLine, linePos === anchorPosition);
    var r = ruleScanner.scanner.findNextMatchSync(lineText, linePos);
    if (debug_1$1.IN_DEBUG_MODE) {
      console.log("  scanning for");
      console.log(debugCompiledRuleToString(ruleScanner));
    }
    if (r) {
      return {
        captureIndices: r.captureIndices,
        matchedRuleId: ruleScanner.rules[r.index]
      };
    }
    return null;
  }
  function matchRuleOrInjections(grammar2, lineText, isFirstLine, linePos, stack, anchorPosition) {
    var matchResult = matchRule(grammar2, lineText, isFirstLine, linePos, stack, anchorPosition);
    var injections = grammar2.getInjections();
    if (injections.length === 0) {
      return matchResult;
    }
    var injectionResult = matchInjections(injections, grammar2, lineText, isFirstLine, linePos, stack, anchorPosition);
    if (!injectionResult) {
      return matchResult;
    }
    if (!matchResult) {
      return injectionResult;
    }
    var matchResultScore = matchResult.captureIndices[0].start;
    var injectionResultScore = injectionResult.captureIndices[0].start;
    if (injectionResultScore < matchResultScore || injectionResult.priorityMatch && injectionResultScore === matchResultScore) {
      return injectionResult;
    }
    return matchResult;
  }
  function _checkWhileConditions(grammar2, lineText, isFirstLine, linePos, stack, lineTokens) {
    var anchorPosition = -1;
    var whileRules = [];
    for (var node = stack; node; node = node.pop()) {
      var nodeRule = node.getRule(grammar2);
      if (nodeRule instanceof rule_1.BeginWhileRule) {
        whileRules.push({
          rule: nodeRule,
          stack: node
        });
      }
    }
    for (var whileRule = whileRules.pop(); whileRule; whileRule = whileRules.pop()) {
      var ruleScanner = whileRule.rule.compileWhile(grammar2, whileRule.stack.endRule, isFirstLine, anchorPosition === linePos);
      var r = ruleScanner.scanner.findNextMatchSync(lineText, linePos);
      if (debug_1$1.IN_DEBUG_MODE) {
        console.log("  scanning for while rule");
        console.log(debugCompiledRuleToString(ruleScanner));
      }
      if (r) {
        var matchedRuleId = ruleScanner.rules[r.index];
        if (matchedRuleId !== -2) {
          stack = whileRule.stack.pop();
          break;
        }
        if (r.captureIndices && r.captureIndices.length) {
          lineTokens.produce(whileRule.stack, r.captureIndices[0].start);
          handleCaptures(grammar2, lineText, isFirstLine, whileRule.stack, lineTokens, whileRule.rule.whileCaptures, r.captureIndices);
          lineTokens.produce(whileRule.stack, r.captureIndices[0].end);
          anchorPosition = r.captureIndices[0].end;
          if (r.captureIndices[0].end > linePos) {
            linePos = r.captureIndices[0].end;
            isFirstLine = false;
          }
        }
      } else {
        stack = whileRule.stack.pop();
        break;
      }
    }
    return { stack, linePos, anchorPosition, isFirstLine };
  }
  function _tokenizeString(grammar2, lineText, isFirstLine, linePos, stack, lineTokens) {
    var lineLength = rule_1.getString(lineText).length;
    var STOP = false;
    var whileCheckResult = _checkWhileConditions(grammar2, lineText, isFirstLine, linePos, stack, lineTokens);
    stack = whileCheckResult.stack;
    linePos = whileCheckResult.linePos;
    isFirstLine = whileCheckResult.isFirstLine;
    var anchorPosition = whileCheckResult.anchorPosition;
    while (!STOP) {
      scanNext();
    }
    function scanNext() {
      if (debug_1$1.IN_DEBUG_MODE) {
        console.log("");
        console.log("@@scanNext: |" + rule_1.getString(lineText).replace(/\n$/, "\\n").substr(linePos) + "|");
      }
      var r = matchRuleOrInjections(grammar2, lineText, isFirstLine, linePos, stack, anchorPosition);
      if (!r) {
        if (debug_1$1.IN_DEBUG_MODE) {
          console.log("  no more matches.");
        }
        lineTokens.produce(stack, lineLength);
        STOP = true;
        return;
      }
      var captureIndices = r.captureIndices;
      var matchedRuleId = r.matchedRuleId;
      var hasAdvanced = captureIndices && captureIndices.length > 0 ? captureIndices[0].end > linePos : false;
      if (matchedRuleId === -1) {
        var poppedRule = stack.getRule(grammar2);
        if (debug_1$1.IN_DEBUG_MODE) {
          console.log("  popping " + poppedRule.debugName + " - " + poppedRule.debugEndRegExp);
        }
        lineTokens.produce(stack, captureIndices[0].start);
        stack = stack.setContentNameScopesList(stack.nameScopesList);
        handleCaptures(grammar2, lineText, isFirstLine, stack, lineTokens, poppedRule.endCaptures, captureIndices);
        lineTokens.produce(stack, captureIndices[0].end);
        var popped = stack;
        stack = stack.pop();
        if (!hasAdvanced && popped.getEnterPos() === linePos) {
          console.error("[1] - Grammar is in an endless loop - Grammar pushed & popped a rule without advancing");
          stack = popped;
          lineTokens.produce(stack, lineLength);
          STOP = true;
          return;
        }
      } else {
        var _rule = grammar2.getRule(matchedRuleId);
        lineTokens.produce(stack, captureIndices[0].start);
        var beforePush = stack;
        var scopeName = _rule.getName(rule_1.getString(lineText), captureIndices);
        var nameScopesList = stack.contentNameScopesList.push(grammar2, scopeName);
        stack = stack.push(matchedRuleId, linePos, null, nameScopesList, nameScopesList);
        if (_rule instanceof rule_1.BeginEndRule) {
          var pushedRule = _rule;
          if (debug_1$1.IN_DEBUG_MODE) {
            console.log("  pushing " + pushedRule.debugName + " - " + pushedRule.debugBeginRegExp);
          }
          handleCaptures(grammar2, lineText, isFirstLine, stack, lineTokens, pushedRule.beginCaptures, captureIndices);
          lineTokens.produce(stack, captureIndices[0].end);
          anchorPosition = captureIndices[0].end;
          var contentName = pushedRule.getContentName(rule_1.getString(lineText), captureIndices);
          var contentNameScopesList = nameScopesList.push(grammar2, contentName);
          stack = stack.setContentNameScopesList(contentNameScopesList);
          if (pushedRule.endHasBackReferences) {
            stack = stack.setEndRule(pushedRule.getEndWithResolvedBackReferences(rule_1.getString(lineText), captureIndices));
          }
          if (!hasAdvanced && beforePush.hasSameRuleAs(stack)) {
            console.error("[2] - Grammar is in an endless loop - Grammar pushed the same rule without advancing");
            stack = stack.pop();
            lineTokens.produce(stack, lineLength);
            STOP = true;
            return;
          }
        } else if (_rule instanceof rule_1.BeginWhileRule) {
          var pushedRule = _rule;
          if (debug_1$1.IN_DEBUG_MODE) {
            console.log("  pushing " + pushedRule.debugName);
          }
          handleCaptures(grammar2, lineText, isFirstLine, stack, lineTokens, pushedRule.beginCaptures, captureIndices);
          lineTokens.produce(stack, captureIndices[0].end);
          anchorPosition = captureIndices[0].end;
          var contentName = pushedRule.getContentName(rule_1.getString(lineText), captureIndices);
          var contentNameScopesList = nameScopesList.push(grammar2, contentName);
          stack = stack.setContentNameScopesList(contentNameScopesList);
          if (pushedRule.whileHasBackReferences) {
            stack = stack.setEndRule(pushedRule.getWhileWithResolvedBackReferences(rule_1.getString(lineText), captureIndices));
          }
          if (!hasAdvanced && beforePush.hasSameRuleAs(stack)) {
            console.error("[3] - Grammar is in an endless loop - Grammar pushed the same rule without advancing");
            stack = stack.pop();
            lineTokens.produce(stack, lineLength);
            STOP = true;
            return;
          }
        } else {
          var matchingRule = _rule;
          if (debug_1$1.IN_DEBUG_MODE) {
            console.log("  matched " + matchingRule.debugName + " - " + matchingRule.debugMatchRegExp);
          }
          handleCaptures(grammar2, lineText, isFirstLine, stack, lineTokens, matchingRule.captures, captureIndices);
          lineTokens.produce(stack, captureIndices[0].end);
          stack = stack.pop();
          if (!hasAdvanced) {
            console.error("[4] - Grammar is in an endless loop - Grammar is not advancing, nor is it pushing/popping");
            stack = stack.safePop();
            lineTokens.produce(stack, lineLength);
            STOP = true;
            return;
          }
        }
      }
      if (captureIndices[0].end > linePos) {
        linePos = captureIndices[0].end;
        isFirstLine = false;
      }
    }
    return stack;
  }
  var StackElementMetadata = function() {
    function StackElementMetadata2() {
    }
    StackElementMetadata2.toBinaryStr = function(metadata) {
      var r = metadata.toString(2);
      while (r.length < 32) {
        r = "0" + r;
      }
      return r;
    };
    StackElementMetadata2.printMetadata = function(metadata) {
      var languageId = StackElementMetadata2.getLanguageId(metadata);
      var tokenType = StackElementMetadata2.getTokenType(metadata);
      var fontStyle = StackElementMetadata2.getFontStyle(metadata);
      var foreground = StackElementMetadata2.getForeground(metadata);
      var background = StackElementMetadata2.getBackground(metadata);
      console.log({
        languageId,
        tokenType,
        fontStyle,
        foreground,
        background
      });
    };
    StackElementMetadata2.getLanguageId = function(metadata) {
      return (metadata & 255) >>> 0;
    };
    StackElementMetadata2.getTokenType = function(metadata) {
      return (metadata & 1792) >>> 8;
    };
    StackElementMetadata2.getFontStyle = function(metadata) {
      return (metadata & 14336) >>> 11;
    };
    StackElementMetadata2.getForeground = function(metadata) {
      return (metadata & 8372224) >>> 14;
    };
    StackElementMetadata2.getBackground = function(metadata) {
      return (metadata & 4286578688) >>> 23;
    };
    StackElementMetadata2.set = function(metadata, languageId, tokenType, fontStyle, foreground, background) {
      var _languageId = StackElementMetadata2.getLanguageId(metadata);
      var _tokenType = StackElementMetadata2.getTokenType(metadata);
      var _fontStyle = StackElementMetadata2.getFontStyle(metadata);
      var _foreground = StackElementMetadata2.getForeground(metadata);
      var _background = StackElementMetadata2.getBackground(metadata);
      if (languageId !== 0) {
        _languageId = languageId;
      }
      if (tokenType !== 0) {
        _tokenType = tokenType === 8 ? 0 : tokenType;
      }
      if (fontStyle !== -1) {
        _fontStyle = fontStyle;
      }
      if (foreground !== 0) {
        _foreground = foreground;
      }
      if (background !== 0) {
        _background = background;
      }
      return (_languageId << 0 | _tokenType << 8 | _fontStyle << 11 | _foreground << 14 | _background << 23) >>> 0;
    };
    return StackElementMetadata2;
  }();
  grammar.StackElementMetadata = StackElementMetadata;
  var ScopeListElement = function() {
    function ScopeListElement2(parent, scope, metadata) {
      this.parent = parent;
      this.scope = scope;
      this.metadata = metadata;
    }
    ScopeListElement2._equals = function(a, b) {
      do {
        if (a === b) {
          return true;
        }
        if (a.scope !== b.scope || a.metadata !== b.metadata) {
          return false;
        }
        a = a.parent;
        b = b.parent;
        if (!a && !b) {
          return true;
        }
        if (!a || !b) {
          return false;
        }
      } while (true);
    };
    ScopeListElement2.prototype.equals = function(other) {
      return ScopeListElement2._equals(this, other);
    };
    ScopeListElement2._matchesScope = function(scope, selector, selectorWithDot) {
      return selector === scope || scope.substring(0, selectorWithDot.length) === selectorWithDot;
    };
    ScopeListElement2._matches = function(target, parentScopes) {
      if (parentScopes === null) {
        return true;
      }
      var len = parentScopes.length;
      var index = 0;
      var selector = parentScopes[index];
      var selectorWithDot = selector + ".";
      while (target) {
        if (this._matchesScope(target.scope, selector, selectorWithDot)) {
          index++;
          if (index === len) {
            return true;
          }
          selector = parentScopes[index];
          selectorWithDot = selector + ".";
        }
        target = target.parent;
      }
      return false;
    };
    ScopeListElement2.mergeMetadata = function(metadata, scopesList, source) {
      if (source === null) {
        return metadata;
      }
      var fontStyle = -1;
      var foreground = 0;
      var background = 0;
      if (source.themeData !== null) {
        for (var i = 0, len = source.themeData.length; i < len; i++) {
          var themeData = source.themeData[i];
          if (this._matches(scopesList, themeData.parentScopes)) {
            fontStyle = themeData.fontStyle;
            foreground = themeData.foreground;
            background = themeData.background;
            break;
          }
        }
      }
      return StackElementMetadata.set(metadata, source.languageId, source.tokenType, fontStyle, foreground, background);
    };
    ScopeListElement2._push = function(target, grammar2, scopes) {
      for (var i = 0, len = scopes.length; i < len; i++) {
        var scope = scopes[i];
        var rawMetadata = grammar2.getMetadataForScope(scope);
        var metadata = ScopeListElement2.mergeMetadata(target.metadata, target, rawMetadata);
        target = new ScopeListElement2(target, scope, metadata);
      }
      return target;
    };
    ScopeListElement2.prototype.push = function(grammar2, scope) {
      if (scope === null) {
        return this;
      }
      if (scope.indexOf(" ") >= 0) {
        return ScopeListElement2._push(this, grammar2, scope.split(/ /g));
      }
      return ScopeListElement2._push(this, grammar2, [scope]);
    };
    ScopeListElement2._generateScopes = function(scopesList) {
      var result = [], resultLen = 0;
      while (scopesList) {
        result[resultLen++] = scopesList.scope;
        scopesList = scopesList.parent;
      }
      result.reverse();
      return result;
    };
    ScopeListElement2.prototype.generateScopes = function() {
      return ScopeListElement2._generateScopes(this);
    };
    return ScopeListElement2;
  }();
  grammar.ScopeListElement = ScopeListElement;
  var StackElement = function() {
    function StackElement2(parent, ruleId, enterPos, endRule, nameScopesList, contentNameScopesList) {
      this.parent = parent;
      this.depth = this.parent ? this.parent.depth + 1 : 1;
      this.ruleId = ruleId;
      this._enterPos = enterPos;
      this.endRule = endRule;
      this.nameScopesList = nameScopesList;
      this.contentNameScopesList = contentNameScopesList;
    }
    StackElement2._structuralEquals = function(a, b) {
      do {
        if (a === b) {
          return true;
        }
        if (a.depth !== b.depth || a.ruleId !== b.ruleId || a.endRule !== b.endRule) {
          return false;
        }
        a = a.parent;
        b = b.parent;
        if (!a && !b) {
          return true;
        }
        if (!a || !b) {
          return false;
        }
      } while (true);
    };
    StackElement2._equals = function(a, b) {
      if (a === b) {
        return true;
      }
      if (!this._structuralEquals(a, b)) {
        return false;
      }
      return a.contentNameScopesList.equals(b.contentNameScopesList);
    };
    StackElement2.prototype.clone = function() {
      return this;
    };
    StackElement2.prototype.equals = function(other) {
      if (other === null) {
        return false;
      }
      return StackElement2._equals(this, other);
    };
    StackElement2._reset = function(el) {
      while (el) {
        el._enterPos = -1;
        el = el.parent;
      }
    };
    StackElement2.prototype.reset = function() {
      StackElement2._reset(this);
    };
    StackElement2.prototype.pop = function() {
      return this.parent;
    };
    StackElement2.prototype.safePop = function() {
      if (this.parent) {
        return this.parent;
      }
      return this;
    };
    StackElement2.prototype.push = function(ruleId, enterPos, endRule, nameScopesList, contentNameScopesList) {
      return new StackElement2(this, ruleId, enterPos, endRule, nameScopesList, contentNameScopesList);
    };
    StackElement2.prototype.getEnterPos = function() {
      return this._enterPos;
    };
    StackElement2.prototype.getRule = function(grammar2) {
      return grammar2.getRule(this.ruleId);
    };
    StackElement2.prototype._writeString = function(res, outIndex) {
      if (this.parent) {
        outIndex = this.parent._writeString(res, outIndex);
      }
      res[outIndex++] = "(" + this.ruleId + ", TODO-" + this.nameScopesList + ", TODO-" + this.contentNameScopesList + ")";
      return outIndex;
    };
    StackElement2.prototype.toString = function() {
      var r = [];
      this._writeString(r, 0);
      return "[" + r.join(",") + "]";
    };
    StackElement2.prototype.setContentNameScopesList = function(contentNameScopesList) {
      if (this.contentNameScopesList === contentNameScopesList) {
        return this;
      }
      return this.parent.push(this.ruleId, this._enterPos, this.endRule, this.nameScopesList, contentNameScopesList);
    };
    StackElement2.prototype.setEndRule = function(endRule) {
      if (this.endRule === endRule) {
        return this;
      }
      return new StackElement2(this.parent, this.ruleId, this._enterPos, endRule, this.nameScopesList, this.contentNameScopesList);
    };
    StackElement2.prototype.hasSameRuleAs = function(other) {
      return this.ruleId === other.ruleId;
    };
    StackElement2.NULL = new StackElement2(null, 0, 0, null, null, null);
    return StackElement2;
  }();
  grammar.StackElement = StackElement;
  var LocalStackElement = function() {
    function LocalStackElement2(scopes, endPos) {
      this.scopes = scopes;
      this.endPos = endPos;
    }
    return LocalStackElement2;
  }();
  grammar.LocalStackElement = LocalStackElement;
  var LineTokens = function() {
    function LineTokens2(emitBinaryTokens, lineText, tokenTypeOverrides) {
      this._emitBinaryTokens = emitBinaryTokens;
      this._tokenTypeOverrides = tokenTypeOverrides;
      if (debug_1$1.IN_DEBUG_MODE) {
        this._lineText = lineText;
      }
      if (this._emitBinaryTokens) {
        this._binaryTokens = [];
      } else {
        this._tokens = [];
      }
      this._lastTokenEndIndex = 0;
    }
    LineTokens2.prototype.produce = function(stack, endIndex) {
      this.produceFromScopes(stack.contentNameScopesList, endIndex);
    };
    LineTokens2.prototype.produceFromScopes = function(scopesList, endIndex) {
      if (this._lastTokenEndIndex >= endIndex) {
        return;
      }
      if (this._emitBinaryTokens) {
        var metadata = scopesList.metadata;
        for (var _i2 = 0, _a2 = this._tokenTypeOverrides; _i2 < _a2.length; _i2++) {
          var tokenType = _a2[_i2];
          if (tokenType.matcher(scopesList.generateScopes())) {
            metadata = StackElementMetadata.set(metadata, 0, toTemporaryType(tokenType.type), -1, 0, 0);
          }
        }
        if (this._binaryTokens.length > 0 && this._binaryTokens[this._binaryTokens.length - 1] === metadata) {
          this._lastTokenEndIndex = endIndex;
          return;
        }
        this._binaryTokens.push(this._lastTokenEndIndex);
        this._binaryTokens.push(metadata);
        this._lastTokenEndIndex = endIndex;
        return;
      }
      var scopes = scopesList.generateScopes();
      if (debug_1$1.IN_DEBUG_MODE) {
        console.log("  token: |" + this._lineText.substring(this._lastTokenEndIndex, endIndex).replace(/\n$/, "\\n") + "|");
        for (var k = 0; k < scopes.length; k++) {
          console.log("      * " + scopes[k]);
        }
      }
      this._tokens.push({
        startIndex: this._lastTokenEndIndex,
        endIndex,
        scopes
      });
      this._lastTokenEndIndex = endIndex;
    };
    LineTokens2.prototype.getResult = function(stack, lineLength) {
      if (this._tokens.length > 0 && this._tokens[this._tokens.length - 1].startIndex === lineLength - 1) {
        this._tokens.pop();
      }
      if (this._tokens.length === 0) {
        this._lastTokenEndIndex = -1;
        this.produce(stack, lineLength);
        this._tokens[this._tokens.length - 1].startIndex = 0;
      }
      return this._tokens;
    };
    LineTokens2.prototype.getBinaryResult = function(stack, lineLength) {
      if (this._binaryTokens.length > 0 && this._binaryTokens[this._binaryTokens.length - 2] === lineLength - 1) {
        this._binaryTokens.pop();
        this._binaryTokens.pop();
      }
      if (this._binaryTokens.length === 0) {
        this._lastTokenEndIndex = -1;
        this.produce(stack, lineLength);
        this._binaryTokens[this._binaryTokens.length - 2] = 0;
      }
      var result = new Uint32Array(this._binaryTokens.length);
      for (var i = 0, len = this._binaryTokens.length; i < len; i++) {
        result[i] = this._binaryTokens[i];
      }
      return result;
    };
    return LineTokens2;
  }();
  function toTemporaryType(standardType) {
    switch (standardType) {
      case 4:
        return 4;
      case 2:
        return 2;
      case 1:
        return 1;
      case 0:
      default:
        return 8;
    }
  }
  Object.defineProperty(registry, "__esModule", { value: true });
  var grammar_1$1 = grammar;
  var SyncRegistry = function() {
    function SyncRegistry2(theme2) {
      this._theme = theme2;
      this._grammars = {};
      this._rawGrammars = {};
      this._injectionGrammars = {};
    }
    SyncRegistry2.prototype.setTheme = function(theme2) {
      var _this = this;
      this._theme = theme2;
      Object.keys(this._grammars).forEach(function(scopeName) {
        var grammar2 = _this._grammars[scopeName];
        grammar2.onDidChangeTheme();
      });
    };
    SyncRegistry2.prototype.getColorMap = function() {
      return this._theme.getColorMap();
    };
    SyncRegistry2.prototype.addGrammar = function(grammar2, injectionScopeNames) {
      this._rawGrammars[grammar2.scopeName] = grammar2;
      var includedScopes = {};
      grammar_1$1.collectIncludedScopes(includedScopes, grammar2);
      if (injectionScopeNames) {
        this._injectionGrammars[grammar2.scopeName] = injectionScopeNames;
        injectionScopeNames.forEach(function(scopeName) {
          includedScopes[scopeName] = true;
        });
      }
      return Object.keys(includedScopes);
    };
    SyncRegistry2.prototype.lookup = function(scopeName) {
      return this._rawGrammars[scopeName];
    };
    SyncRegistry2.prototype.injections = function(targetScope) {
      return this._injectionGrammars[targetScope];
    };
    SyncRegistry2.prototype.getDefaults = function() {
      return this._theme.getDefaults();
    };
    SyncRegistry2.prototype.themeMatch = function(scopeName) {
      return this._theme.match(scopeName);
    };
    SyncRegistry2.prototype.grammarForScopeName = function(scopeName, initialLanguage, embeddedLanguages, tokenTypes) {
      if (!this._grammars[scopeName]) {
        var rawGrammar = this._rawGrammars[scopeName];
        if (!rawGrammar) {
          return null;
        }
        this._grammars[scopeName] = grammar_1$1.createGrammar(rawGrammar, initialLanguage, embeddedLanguages, tokenTypes, this);
      }
      return this._grammars[scopeName];
    };
    return SyncRegistry2;
  }();
  registry.SyncRegistry = SyncRegistry;
  var grammarReader = {};
  var main = {};
  main.__esModule = true;
  main.parse = main.parseWithLocation = void 0;
  function parseWithLocation(content, filename, locationKeyName) {
    return _parse(content, filename, locationKeyName);
  }
  main.parseWithLocation = parseWithLocation;
  function parse$1(content) {
    return _parse(content, null, null);
  }
  main.parse = parse$1;
  function _parse(content, filename, locationKeyName) {
    var len = content.length;
    var pos = 0;
    var line = 1;
    var char = 0;
    if (len > 0 && content.charCodeAt(0) === 65279) {
      pos = 1;
    }
    function advancePosBy(by) {
      if (locationKeyName === null) {
        pos = pos + by;
      } else {
        while (by > 0) {
          var chCode2 = content.charCodeAt(pos);
          if (chCode2 === 10) {
            pos++;
            line++;
            char = 0;
          } else {
            pos++;
            char++;
          }
          by--;
        }
      }
    }
    function advancePosTo(to) {
      if (locationKeyName === null) {
        pos = to;
      } else {
        advancePosBy(to - pos);
      }
    }
    function skipWhitespace() {
      while (pos < len) {
        var chCode2 = content.charCodeAt(pos);
        if (chCode2 !== 32 && chCode2 !== 9 && chCode2 !== 13 && chCode2 !== 10) {
          break;
        }
        advancePosBy(1);
      }
    }
    function advanceIfStartsWith(str) {
      if (content.substr(pos, str.length) === str) {
        advancePosBy(str.length);
        return true;
      }
      return false;
    }
    function advanceUntil(str) {
      var nextOccurence = content.indexOf(str, pos);
      if (nextOccurence !== -1) {
        advancePosTo(nextOccurence + str.length);
      } else {
        advancePosTo(len);
      }
    }
    function captureUntil(str) {
      var nextOccurence = content.indexOf(str, pos);
      if (nextOccurence !== -1) {
        var r = content.substring(pos, nextOccurence);
        advancePosTo(nextOccurence + str.length);
        return r;
      } else {
        var r = content.substr(pos);
        advancePosTo(len);
        return r;
      }
    }
    var state = 0;
    var cur = null;
    var stateStack = [];
    var objStack = [];
    var curKey = null;
    function pushState(newState, newCur) {
      stateStack.push(state);
      objStack.push(cur);
      state = newState;
      cur = newCur;
    }
    function popState() {
      if (stateStack.length === 0) {
        return fail("illegal state stack");
      }
      state = stateStack.pop();
      cur = objStack.pop();
    }
    function fail(msg) {
      throw new Error("Near offset " + pos + ": " + msg + " ~~~" + content.substr(pos, 50) + "~~~");
    }
    var dictState = {
      enterDict: function() {
        if (curKey === null) {
          return fail("missing <key>");
        }
        var newDict = {};
        if (locationKeyName !== null) {
          newDict[locationKeyName] = {
            filename,
            line,
            char
          };
        }
        cur[curKey] = newDict;
        curKey = null;
        pushState(1, newDict);
      },
      enterArray: function() {
        if (curKey === null) {
          return fail("missing <key>");
        }
        var newArr = [];
        cur[curKey] = newArr;
        curKey = null;
        pushState(2, newArr);
      }
    };
    var arrState = {
      enterDict: function() {
        var newDict = {};
        if (locationKeyName !== null) {
          newDict[locationKeyName] = {
            filename,
            line,
            char
          };
        }
        cur.push(newDict);
        pushState(1, newDict);
      },
      enterArray: function() {
        var newArr = [];
        cur.push(newArr);
        pushState(2, newArr);
      }
    };
    function enterDict() {
      if (state === 1) {
        dictState.enterDict();
      } else if (state === 2) {
        arrState.enterDict();
      } else {
        cur = {};
        if (locationKeyName !== null) {
          cur[locationKeyName] = {
            filename,
            line,
            char
          };
        }
        pushState(1, cur);
      }
    }
    function leaveDict() {
      if (state === 1) {
        popState();
      } else if (state === 2) {
        return fail("unexpected </dict>");
      } else {
        return fail("unexpected </dict>");
      }
    }
    function enterArray() {
      if (state === 1) {
        dictState.enterArray();
      } else if (state === 2) {
        arrState.enterArray();
      } else {
        cur = [];
        pushState(2, cur);
      }
    }
    function leaveArray() {
      if (state === 1) {
        return fail("unexpected </array>");
      } else if (state === 2) {
        popState();
      } else {
        return fail("unexpected </array>");
      }
    }
    function acceptKey(val) {
      if (state === 1) {
        if (curKey !== null) {
          return fail("too many <key>");
        }
        curKey = val;
      } else if (state === 2) {
        return fail("unexpected <key>");
      } else {
        return fail("unexpected <key>");
      }
    }
    function acceptString(val) {
      if (state === 1) {
        if (curKey === null) {
          return fail("missing <key>");
        }
        cur[curKey] = val;
        curKey = null;
      } else if (state === 2) {
        cur.push(val);
      } else {
        cur = val;
      }
    }
    function acceptReal(val) {
      if (isNaN(val)) {
        return fail("cannot parse float");
      }
      if (state === 1) {
        if (curKey === null) {
          return fail("missing <key>");
        }
        cur[curKey] = val;
        curKey = null;
      } else if (state === 2) {
        cur.push(val);
      } else {
        cur = val;
      }
    }
    function acceptInteger(val) {
      if (isNaN(val)) {
        return fail("cannot parse integer");
      }
      if (state === 1) {
        if (curKey === null) {
          return fail("missing <key>");
        }
        cur[curKey] = val;
        curKey = null;
      } else if (state === 2) {
        cur.push(val);
      } else {
        cur = val;
      }
    }
    function acceptDate(val) {
      if (state === 1) {
        if (curKey === null) {
          return fail("missing <key>");
        }
        cur[curKey] = val;
        curKey = null;
      } else if (state === 2) {
        cur.push(val);
      } else {
        cur = val;
      }
    }
    function acceptData(val) {
      if (state === 1) {
        if (curKey === null) {
          return fail("missing <key>");
        }
        cur[curKey] = val;
        curKey = null;
      } else if (state === 2) {
        cur.push(val);
      } else {
        cur = val;
      }
    }
    function acceptBool(val) {
      if (state === 1) {
        if (curKey === null) {
          return fail("missing <key>");
        }
        cur[curKey] = val;
        curKey = null;
      } else if (state === 2) {
        cur.push(val);
      } else {
        cur = val;
      }
    }
    function escapeVal(str) {
      return str.replace(/&#([0-9]+);/g, function(_2, m0) {
        return String.fromCodePoint(parseInt(m0, 10));
      }).replace(/&#x([0-9a-f]+);/g, function(_2, m0) {
        return String.fromCodePoint(parseInt(m0, 16));
      }).replace(/&amp;|&lt;|&gt;|&quot;|&apos;/g, function(_2) {
        switch (_2) {
          case "&amp;":
            return "&";
          case "&lt;":
            return "<";
          case "&gt;":
            return ">";
          case "&quot;":
            return '"';
          case "&apos;":
            return "'";
        }
        return _2;
      });
    }
    function parseOpenTag() {
      var r = captureUntil(">");
      var isClosed = false;
      if (r.charCodeAt(r.length - 1) === 47) {
        isClosed = true;
        r = r.substring(0, r.length - 1);
      }
      return {
        name: r.trim(),
        isClosed
      };
    }
    function parseTagValue(tag2) {
      if (tag2.isClosed) {
        return "";
      }
      var val = captureUntil("</");
      advanceUntil(">");
      return escapeVal(val);
    }
    while (pos < len) {
      skipWhitespace();
      if (pos >= len) {
        break;
      }
      var chCode = content.charCodeAt(pos);
      advancePosBy(1);
      if (chCode !== 60) {
        return fail("expected <");
      }
      if (pos >= len) {
        return fail("unexpected end of input");
      }
      var peekChCode = content.charCodeAt(pos);
      if (peekChCode === 63) {
        advancePosBy(1);
        advanceUntil("?>");
        continue;
      }
      if (peekChCode === 33) {
        advancePosBy(1);
        if (advanceIfStartsWith("--")) {
          advanceUntil("-->");
          continue;
        }
        advanceUntil(">");
        continue;
      }
      if (peekChCode === 47) {
        advancePosBy(1);
        skipWhitespace();
        if (advanceIfStartsWith("plist")) {
          advanceUntil(">");
          continue;
        }
        if (advanceIfStartsWith("dict")) {
          advanceUntil(">");
          leaveDict();
          continue;
        }
        if (advanceIfStartsWith("array")) {
          advanceUntil(">");
          leaveArray();
          continue;
        }
        return fail("unexpected closed tag");
      }
      var tag = parseOpenTag();
      switch (tag.name) {
        case "dict":
          enterDict();
          if (tag.isClosed) {
            leaveDict();
          }
          continue;
        case "array":
          enterArray();
          if (tag.isClosed) {
            leaveArray();
          }
          continue;
        case "key":
          acceptKey(parseTagValue(tag));
          continue;
        case "string":
          acceptString(parseTagValue(tag));
          continue;
        case "real":
          acceptReal(parseFloat(parseTagValue(tag)));
          continue;
        case "integer":
          acceptInteger(parseInt(parseTagValue(tag), 10));
          continue;
        case "date":
          acceptDate(new Date(parseTagValue(tag)));
          continue;
        case "data":
          acceptData(parseTagValue(tag));
          continue;
        case "true":
          parseTagValue(tag);
          acceptBool(true);
          continue;
        case "false":
          parseTagValue(tag);
          acceptBool(false);
          continue;
      }
      if (/^plist/.test(tag.name)) {
        continue;
      }
      return fail("unexpected opened tag " + tag.name);
    }
    return cur;
  }
  var json = {};
  Object.defineProperty(json, "__esModule", { value: true });
  function doFail(streamState, msg) {
    throw new Error("Near offset " + streamState.pos + ": " + msg + " ~~~" + streamState.source.substr(streamState.pos, 50) + "~~~");
  }
  function parse(source, filename, withMetadata) {
    var streamState = new JSONStreamState(source);
    var token = new JSONToken();
    var state = 0;
    var cur = null;
    var stateStack = [];
    var objStack = [];
    function pushState() {
      stateStack.push(state);
      objStack.push(cur);
    }
    function popState() {
      state = stateStack.pop();
      cur = objStack.pop();
    }
    function fail(msg) {
      doFail(streamState, msg);
    }
    while (nextJSONToken(streamState, token)) {
      if (state === 0) {
        if (cur !== null) {
          fail("too many constructs in root");
        }
        if (token.type === 3) {
          cur = {};
          if (withMetadata) {
            cur.$vscodeTextmateLocation = token.toLocation(filename);
          }
          pushState();
          state = 1;
          continue;
        }
        if (token.type === 2) {
          cur = [];
          pushState();
          state = 4;
          continue;
        }
        fail("unexpected token in root");
      }
      if (state === 2) {
        if (token.type === 5) {
          popState();
          continue;
        }
        if (token.type === 7) {
          state = 3;
          continue;
        }
        fail("expected , or }");
      }
      if (state === 1 || state === 3) {
        if (state === 1 && token.type === 5) {
          popState();
          continue;
        }
        if (token.type === 1) {
          var keyValue = token.value;
          if (!nextJSONToken(streamState, token) || token.type !== 6) {
            fail("expected colon");
          }
          if (!nextJSONToken(streamState, token)) {
            fail("expected value");
          }
          state = 2;
          if (token.type === 1) {
            cur[keyValue] = token.value;
            continue;
          }
          if (token.type === 8) {
            cur[keyValue] = null;
            continue;
          }
          if (token.type === 9) {
            cur[keyValue] = true;
            continue;
          }
          if (token.type === 10) {
            cur[keyValue] = false;
            continue;
          }
          if (token.type === 11) {
            cur[keyValue] = parseFloat(token.value);
            continue;
          }
          if (token.type === 2) {
            var newArr = [];
            cur[keyValue] = newArr;
            pushState();
            state = 4;
            cur = newArr;
            continue;
          }
          if (token.type === 3) {
            var newDict = {};
            if (withMetadata) {
              newDict.$vscodeTextmateLocation = token.toLocation(filename);
            }
            cur[keyValue] = newDict;
            pushState();
            state = 1;
            cur = newDict;
            continue;
          }
        }
        fail("unexpected token in dict");
      }
      if (state === 5) {
        if (token.type === 4) {
          popState();
          continue;
        }
        if (token.type === 7) {
          state = 6;
          continue;
        }
        fail("expected , or ]");
      }
      if (state === 4 || state === 6) {
        if (state === 4 && token.type === 4) {
          popState();
          continue;
        }
        state = 5;
        if (token.type === 1) {
          cur.push(token.value);
          continue;
        }
        if (token.type === 8) {
          cur.push(null);
          continue;
        }
        if (token.type === 9) {
          cur.push(true);
          continue;
        }
        if (token.type === 10) {
          cur.push(false);
          continue;
        }
        if (token.type === 11) {
          cur.push(parseFloat(token.value));
          continue;
        }
        if (token.type === 2) {
          var newArr = [];
          cur.push(newArr);
          pushState();
          state = 4;
          cur = newArr;
          continue;
        }
        if (token.type === 3) {
          var newDict = {};
          if (withMetadata) {
            newDict.$vscodeTextmateLocation = token.toLocation(filename);
          }
          cur.push(newDict);
          pushState();
          state = 1;
          cur = newDict;
          continue;
        }
        fail("unexpected token in array");
      }
      fail("unknown state");
    }
    if (objStack.length !== 0) {
      fail("unclosed constructs");
    }
    return cur;
  }
  json.parse = parse;
  var JSONStreamState = function() {
    function JSONStreamState2(source) {
      this.source = source;
      this.pos = 0;
      this.len = source.length;
      this.line = 1;
      this.char = 0;
    }
    return JSONStreamState2;
  }();
  var JSONToken = function() {
    function JSONToken2() {
      this.value = null;
      this.offset = -1;
      this.len = -1;
      this.line = -1;
      this.char = -1;
    }
    JSONToken2.prototype.toLocation = function(filename) {
      return {
        filename,
        line: this.line,
        char: this.char
      };
    };
    return JSONToken2;
  }();
  function nextJSONToken(_state, _out) {
    _out.value = null;
    _out.type = 0;
    _out.offset = -1;
    _out.len = -1;
    _out.line = -1;
    _out.char = -1;
    var source = _state.source;
    var pos = _state.pos;
    var len = _state.len;
    var line = _state.line;
    var char = _state.char;
    var chCode;
    do {
      if (pos >= len) {
        return false;
      }
      chCode = source.charCodeAt(pos);
      if (chCode === 32 || chCode === 9 || chCode === 13) {
        pos++;
        char++;
        continue;
      }
      if (chCode === 10) {
        pos++;
        line++;
        char = 0;
        continue;
      }
      break;
    } while (true);
    _out.offset = pos;
    _out.line = line;
    _out.char = char;
    if (chCode === 34) {
      _out.type = 1;
      pos++;
      char++;
      do {
        if (pos >= len) {
          return false;
        }
        chCode = source.charCodeAt(pos);
        pos++;
        char++;
        if (chCode === 92) {
          pos++;
          char++;
          continue;
        }
        if (chCode === 34) {
          break;
        }
      } while (true);
      _out.value = source.substring(_out.offset + 1, pos - 1).replace(/\\u([0-9A-Fa-f]{4})/g, function(_2, m0) {
        return String.fromCodePoint(parseInt(m0, 16));
      }).replace(/\\(.)/g, function(_2, m0) {
        switch (m0) {
          case '"':
            return '"';
          case "\\":
            return "\\";
          case "/":
            return "/";
          case "b":
            return "\b";
          case "f":
            return "\f";
          case "n":
            return "\n";
          case "r":
            return "\r";
          case "t":
            return "	";
          default:
            doFail(_state, "invalid escape sequence");
        }
      });
    } else if (chCode === 91) {
      _out.type = 2;
      pos++;
      char++;
    } else if (chCode === 123) {
      _out.type = 3;
      pos++;
      char++;
    } else if (chCode === 93) {
      _out.type = 4;
      pos++;
      char++;
    } else if (chCode === 125) {
      _out.type = 5;
      pos++;
      char++;
    } else if (chCode === 58) {
      _out.type = 6;
      pos++;
      char++;
    } else if (chCode === 44) {
      _out.type = 7;
      pos++;
      char++;
    } else if (chCode === 110) {
      _out.type = 8;
      pos++;
      char++;
      chCode = source.charCodeAt(pos);
      if (chCode !== 117) {
        return false;
      }
      pos++;
      char++;
      chCode = source.charCodeAt(pos);
      if (chCode !== 108) {
        return false;
      }
      pos++;
      char++;
      chCode = source.charCodeAt(pos);
      if (chCode !== 108) {
        return false;
      }
      pos++;
      char++;
    } else if (chCode === 116) {
      _out.type = 9;
      pos++;
      char++;
      chCode = source.charCodeAt(pos);
      if (chCode !== 114) {
        return false;
      }
      pos++;
      char++;
      chCode = source.charCodeAt(pos);
      if (chCode !== 117) {
        return false;
      }
      pos++;
      char++;
      chCode = source.charCodeAt(pos);
      if (chCode !== 101) {
        return false;
      }
      pos++;
      char++;
    } else if (chCode === 102) {
      _out.type = 10;
      pos++;
      char++;
      chCode = source.charCodeAt(pos);
      if (chCode !== 97) {
        return false;
      }
      pos++;
      char++;
      chCode = source.charCodeAt(pos);
      if (chCode !== 108) {
        return false;
      }
      pos++;
      char++;
      chCode = source.charCodeAt(pos);
      if (chCode !== 115) {
        return false;
      }
      pos++;
      char++;
      chCode = source.charCodeAt(pos);
      if (chCode !== 101) {
        return false;
      }
      pos++;
      char++;
    } else {
      _out.type = 11;
      do {
        if (pos >= len) {
          return false;
        }
        chCode = source.charCodeAt(pos);
        if (chCode === 46 || chCode >= 48 && chCode <= 57 || (chCode === 101 || chCode === 69) || (chCode === 45 || chCode === 43)) {
          pos++;
          char++;
          continue;
        }
        break;
      } while (true);
    }
    _out.len = pos - _out.offset;
    if (_out.value === null) {
      _out.value = source.substr(_out.offset, _out.len);
    }
    _state.pos = pos;
    _state.line = line;
    _state.char = char;
    return true;
  }
  Object.defineProperty(grammarReader, "__esModule", { value: true });
  var plist = main;
  var debug_1 = debug;
  var json_1 = json;
  function parseJSONGrammar(contents, filename) {
    if (debug_1.CAPTURE_METADATA) {
      return json_1.parse(contents, filename, true);
    }
    return JSON.parse(contents);
  }
  grammarReader.parseJSONGrammar = parseJSONGrammar;
  function parsePLISTGrammar(contents, filename) {
    if (debug_1.CAPTURE_METADATA) {
      return plist.parseWithLocation(contents, filename, "$vscodeTextmateLocation");
    }
    return plist.parse(contents);
  }
  grammarReader.parsePLISTGrammar = parsePLISTGrammar;
  var theme = {};
  Object.defineProperty(theme, "__esModule", { value: true });
  var ParsedThemeRule = function() {
    function ParsedThemeRule2(scope, parentScopes, index, fontStyle, foreground, background) {
      this.scope = scope;
      this.parentScopes = parentScopes;
      this.index = index;
      this.fontStyle = fontStyle;
      this.foreground = foreground;
      this.background = background;
    }
    return ParsedThemeRule2;
  }();
  theme.ParsedThemeRule = ParsedThemeRule;
  function isValidHexColor(hex) {
    if (/^#[0-9a-f]{6}$/i.test(hex)) {
      return true;
    }
    if (/^#[0-9a-f]{8}$/i.test(hex)) {
      return true;
    }
    if (/^#[0-9a-f]{3}$/i.test(hex)) {
      return true;
    }
    if (/^#[0-9a-f]{4}$/i.test(hex)) {
      return true;
    }
    return false;
  }
  function parseTheme(source) {
    if (!source) {
      return [];
    }
    if (!source.settings || !Array.isArray(source.settings)) {
      return [];
    }
    var settings = source.settings;
    var result = [], resultLen = 0;
    for (var i = 0, len = settings.length; i < len; i++) {
      var entry = settings[i];
      if (!entry.settings) {
        continue;
      }
      var scopes = void 0;
      if (typeof entry.scope === "string") {
        var _scope = entry.scope;
        _scope = _scope.replace(/^[,]+/, "");
        _scope = _scope.replace(/[,]+$/, "");
        scopes = _scope.split(",");
      } else if (Array.isArray(entry.scope)) {
        scopes = entry.scope;
      } else {
        scopes = [""];
      }
      var fontStyle = -1;
      if (typeof entry.settings.fontStyle === "string") {
        fontStyle = 0;
        var segments = entry.settings.fontStyle.split(" ");
        for (var j2 = 0, lenJ = segments.length; j2 < lenJ; j2++) {
          var segment = segments[j2];
          switch (segment) {
            case "italic":
              fontStyle = fontStyle | 1;
              break;
            case "bold":
              fontStyle = fontStyle | 2;
              break;
            case "underline":
              fontStyle = fontStyle | 4;
              break;
          }
        }
      }
      var foreground = null;
      if (typeof entry.settings.foreground === "string" && isValidHexColor(entry.settings.foreground)) {
        foreground = entry.settings.foreground;
      }
      var background = null;
      if (typeof entry.settings.background === "string" && isValidHexColor(entry.settings.background)) {
        background = entry.settings.background;
      }
      for (var j2 = 0, lenJ = scopes.length; j2 < lenJ; j2++) {
        var _scope = scopes[j2].trim();
        var segments = _scope.split(" ");
        var scope = segments[segments.length - 1];
        var parentScopes = null;
        if (segments.length > 1) {
          parentScopes = segments.slice(0, segments.length - 1);
          parentScopes.reverse();
        }
        result[resultLen++] = new ParsedThemeRule(scope, parentScopes, i, fontStyle, foreground, background);
      }
    }
    return result;
  }
  theme.parseTheme = parseTheme;
  function resolveParsedThemeRules(parsedThemeRules) {
    parsedThemeRules.sort(function(a, b) {
      var r = strcmp(a.scope, b.scope);
      if (r !== 0) {
        return r;
      }
      r = strArrCmp(a.parentScopes, b.parentScopes);
      if (r !== 0) {
        return r;
      }
      return a.index - b.index;
    });
    var defaultFontStyle = 0;
    var defaultForeground = "#000000";
    var defaultBackground = "#ffffff";
    while (parsedThemeRules.length >= 1 && parsedThemeRules[0].scope === "") {
      var incomingDefaults = parsedThemeRules.shift();
      if (incomingDefaults.fontStyle !== -1) {
        defaultFontStyle = incomingDefaults.fontStyle;
      }
      if (incomingDefaults.foreground !== null) {
        defaultForeground = incomingDefaults.foreground;
      }
      if (incomingDefaults.background !== null) {
        defaultBackground = incomingDefaults.background;
      }
    }
    var colorMap = new ColorMap();
    var defaults = new ThemeTrieElementRule(0, null, defaultFontStyle, colorMap.getId(defaultForeground), colorMap.getId(defaultBackground));
    var root = new ThemeTrieElement(new ThemeTrieElementRule(0, null, -1, 0, 0), []);
    for (var i = 0, len = parsedThemeRules.length; i < len; i++) {
      var rule2 = parsedThemeRules[i];
      root.insert(0, rule2.scope, rule2.parentScopes, rule2.fontStyle, colorMap.getId(rule2.foreground), colorMap.getId(rule2.background));
    }
    return new Theme(colorMap, defaults, root);
  }
  var ColorMap = function() {
    function ColorMap2() {
      this._lastColorId = 0;
      this._id2color = [];
      this._color2id = /* @__PURE__ */ Object.create(null);
    }
    ColorMap2.prototype.getId = function(color) {
      if (color === null) {
        return 0;
      }
      color = color.toUpperCase();
      var value = this._color2id[color];
      if (value) {
        return value;
      }
      value = ++this._lastColorId;
      this._color2id[color] = value;
      this._id2color[value] = color;
      return value;
    };
    ColorMap2.prototype.getColorMap = function() {
      return this._id2color.slice(0);
    };
    return ColorMap2;
  }();
  theme.ColorMap = ColorMap;
  var Theme = function() {
    function Theme2(colorMap, defaults, root) {
      this._colorMap = colorMap;
      this._root = root;
      this._defaults = defaults;
      this._cache = {};
    }
    Theme2.createFromRawTheme = function(source) {
      return this.createFromParsedTheme(parseTheme(source));
    };
    Theme2.createFromParsedTheme = function(source) {
      return resolveParsedThemeRules(source);
    };
    Theme2.prototype.getColorMap = function() {
      return this._colorMap.getColorMap();
    };
    Theme2.prototype.getDefaults = function() {
      return this._defaults;
    };
    Theme2.prototype.match = function(scopeName) {
      if (!this._cache.hasOwnProperty(scopeName)) {
        this._cache[scopeName] = this._root.match(scopeName);
      }
      return this._cache[scopeName];
    };
    return Theme2;
  }();
  theme.Theme = Theme;
  function strcmp(a, b) {
    if (a < b) {
      return -1;
    }
    if (a > b) {
      return 1;
    }
    return 0;
  }
  theme.strcmp = strcmp;
  function strArrCmp(a, b) {
    if (a === null && b === null) {
      return 0;
    }
    if (!a) {
      return -1;
    }
    if (!b) {
      return 1;
    }
    var len1 = a.length;
    var len2 = b.length;
    if (len1 === len2) {
      for (var i = 0; i < len1; i++) {
        var res = strcmp(a[i], b[i]);
        if (res !== 0) {
          return res;
        }
      }
      return 0;
    }
    return len1 - len2;
  }
  theme.strArrCmp = strArrCmp;
  var ThemeTrieElementRule = function() {
    function ThemeTrieElementRule2(scopeDepth, parentScopes, fontStyle, foreground, background) {
      this.scopeDepth = scopeDepth;
      this.parentScopes = parentScopes;
      this.fontStyle = fontStyle;
      this.foreground = foreground;
      this.background = background;
    }
    ThemeTrieElementRule2.prototype.clone = function() {
      return new ThemeTrieElementRule2(this.scopeDepth, this.parentScopes, this.fontStyle, this.foreground, this.background);
    };
    ThemeTrieElementRule2.cloneArr = function(arr) {
      var r = [];
      for (var i = 0, len = arr.length; i < len; i++) {
        r[i] = arr[i].clone();
      }
      return r;
    };
    ThemeTrieElementRule2.prototype.acceptOverwrite = function(scopeDepth, fontStyle, foreground, background) {
      if (this.scopeDepth > scopeDepth) {
        console.log("how did this happen?");
      } else {
        this.scopeDepth = scopeDepth;
      }
      if (fontStyle !== -1) {
        this.fontStyle = fontStyle;
      }
      if (foreground !== 0) {
        this.foreground = foreground;
      }
      if (background !== 0) {
        this.background = background;
      }
    };
    return ThemeTrieElementRule2;
  }();
  theme.ThemeTrieElementRule = ThemeTrieElementRule;
  var ThemeTrieElement = function() {
    function ThemeTrieElement2(mainRule, rulesWithParentScopes, children) {
      if (rulesWithParentScopes === void 0) {
        rulesWithParentScopes = [];
      }
      if (children === void 0) {
        children = {};
      }
      this._mainRule = mainRule;
      this._rulesWithParentScopes = rulesWithParentScopes;
      this._children = children;
    }
    ThemeTrieElement2._sortBySpecificity = function(arr) {
      if (arr.length === 1) {
        return arr;
      }
      arr.sort(this._cmpBySpecificity);
      return arr;
    };
    ThemeTrieElement2._cmpBySpecificity = function(a, b) {
      if (a.scopeDepth === b.scopeDepth) {
        var aParentScopes = a.parentScopes;
        var bParentScopes = b.parentScopes;
        var aParentScopesLen = aParentScopes === null ? 0 : aParentScopes.length;
        var bParentScopesLen = bParentScopes === null ? 0 : bParentScopes.length;
        if (aParentScopesLen === bParentScopesLen) {
          for (var i = 0; i < aParentScopesLen; i++) {
            var aLen = aParentScopes[i].length;
            var bLen = bParentScopes[i].length;
            if (aLen !== bLen) {
              return bLen - aLen;
            }
          }
        }
        return bParentScopesLen - aParentScopesLen;
      }
      return b.scopeDepth - a.scopeDepth;
    };
    ThemeTrieElement2.prototype.match = function(scope) {
      if (scope === "") {
        return ThemeTrieElement2._sortBySpecificity([].concat(this._mainRule).concat(this._rulesWithParentScopes));
      }
      var dotIndex = scope.indexOf(".");
      var head;
      var tail;
      if (dotIndex === -1) {
        head = scope;
        tail = "";
      } else {
        head = scope.substring(0, dotIndex);
        tail = scope.substring(dotIndex + 1);
      }
      if (this._children.hasOwnProperty(head)) {
        return this._children[head].match(tail);
      }
      return ThemeTrieElement2._sortBySpecificity([].concat(this._mainRule).concat(this._rulesWithParentScopes));
    };
    ThemeTrieElement2.prototype.insert = function(scopeDepth, scope, parentScopes, fontStyle, foreground, background) {
      if (scope === "") {
        this._doInsertHere(scopeDepth, parentScopes, fontStyle, foreground, background);
        return;
      }
      var dotIndex = scope.indexOf(".");
      var head;
      var tail;
      if (dotIndex === -1) {
        head = scope;
        tail = "";
      } else {
        head = scope.substring(0, dotIndex);
        tail = scope.substring(dotIndex + 1);
      }
      var child;
      if (this._children.hasOwnProperty(head)) {
        child = this._children[head];
      } else {
        child = new ThemeTrieElement2(this._mainRule.clone(), ThemeTrieElementRule.cloneArr(this._rulesWithParentScopes));
        this._children[head] = child;
      }
      child.insert(scopeDepth + 1, tail, parentScopes, fontStyle, foreground, background);
    };
    ThemeTrieElement2.prototype._doInsertHere = function(scopeDepth, parentScopes, fontStyle, foreground, background) {
      if (parentScopes === null) {
        this._mainRule.acceptOverwrite(scopeDepth, fontStyle, foreground, background);
        return;
      }
      for (var i = 0, len = this._rulesWithParentScopes.length; i < len; i++) {
        var rule2 = this._rulesWithParentScopes[i];
        if (strArrCmp(rule2.parentScopes, parentScopes) === 0) {
          rule2.acceptOverwrite(scopeDepth, fontStyle, foreground, background);
          return;
        }
      }
      if (fontStyle === -1) {
        fontStyle = this._mainRule.fontStyle;
      }
      if (foreground === 0) {
        foreground = this._mainRule.foreground;
      }
      if (background === 0) {
        background = this._mainRule.background;
      }
      this._rulesWithParentScopes.push(new ThemeTrieElementRule(scopeDepth, parentScopes, fontStyle, foreground, background));
    };
    return ThemeTrieElement2;
  }();
  theme.ThemeTrieElement = ThemeTrieElement;
  var __awaiter = commonjsGlobal && commonjsGlobal.__awaiter || function(thisArg, _arguments, P2, generator) {
    return new (P2 || (P2 = Promise))(function(resolve, reject) {
      function fulfilled(value) {
        try {
          step(generator.next(value));
        } catch (e4) {
          reject(e4);
        }
      }
      function rejected(value) {
        try {
          step(generator["throw"](value));
        } catch (e4) {
          reject(e4);
        }
      }
      function step(result) {
        result.done ? resolve(result.value) : new P2(function(resolve2) {
          resolve2(result.value);
        }).then(fulfilled, rejected);
      }
      step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
  };
  var __generator = commonjsGlobal && commonjsGlobal.__generator || function(thisArg, body) {
    var _2 = { label: 0, sent: function() {
      if (t[0] & 1)
        throw t[1];
      return t[1];
    }, trys: [], ops: [] }, f2, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
      return this;
    }), g;
    function verb(n) {
      return function(v) {
        return step([n, v]);
      };
    }
    function step(op) {
      if (f2)
        throw new TypeError("Generator is already executing.");
      while (_2)
        try {
          if (f2 = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
            return t;
          if (y = 0, t)
            op = [op[0] & 2, t.value];
          switch (op[0]) {
            case 0:
            case 1:
              t = op;
              break;
            case 4:
              _2.label++;
              return { value: op[1], done: false };
            case 5:
              _2.label++;
              y = op[1];
              op = [0];
              continue;
            case 7:
              op = _2.ops.pop();
              _2.trys.pop();
              continue;
            default:
              if (!(t = _2.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
                _2 = 0;
                continue;
              }
              if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
                _2.label = op[1];
                break;
              }
              if (op[0] === 6 && _2.label < t[1]) {
                _2.label = t[1];
                t = op;
                break;
              }
              if (t && _2.label < t[2]) {
                _2.label = t[2];
                _2.ops.push(op);
                break;
              }
              if (t[2])
                _2.ops.pop();
              _2.trys.pop();
              continue;
          }
          op = body.call(thisArg, _2);
        } catch (e4) {
          op = [6, e4];
          y = 0;
        } finally {
          f2 = t = 0;
        }
      if (op[0] & 5)
        throw op[1];
      return { value: op[0] ? op[1] : void 0, done: true };
    }
  };
  Object.defineProperty(main$1, "__esModule", { value: true });
  var registry_1 = registry;
  var grammarReader_1 = grammarReader;
  var theme_1 = theme;
  var grammar_1 = grammar;
  var DEFAULT_OPTIONS = {
    getGrammarDefinition: function(scopeName) {
      return null;
    },
    getInjections: function(scopeName) {
      return null;
    }
  };
  var Registry = function() {
    function Registry2(locator) {
      if (locator === void 0) {
        locator = DEFAULT_OPTIONS;
      }
      this._locator = locator;
      this._syncRegistry = new registry_1.SyncRegistry(theme_1.Theme.createFromRawTheme(locator.theme));
      this.installationQueue = /* @__PURE__ */ new Map();
    }
    Registry2.prototype.setTheme = function(theme2) {
      this._syncRegistry.setTheme(theme_1.Theme.createFromRawTheme(theme2));
    };
    Registry2.prototype.getColorMap = function() {
      return this._syncRegistry.getColorMap();
    };
    Registry2.prototype.loadGrammarWithEmbeddedLanguages = function(initialScopeName, initialLanguage, embeddedLanguages) {
      return this.loadGrammarWithConfiguration(initialScopeName, initialLanguage, { embeddedLanguages });
    };
    Registry2.prototype.loadGrammarWithConfiguration = function(initialScopeName, initialLanguage, configuration) {
      return __awaiter(this, void 0, void 0, function() {
        return __generator(this, function(_a2) {
          switch (_a2.label) {
            case 0:
              return [4, this._loadGrammar(initialScopeName)];
            case 1:
              _a2.sent();
              return [2, this.grammarForScopeName(initialScopeName, initialLanguage, configuration.embeddedLanguages, configuration.tokenTypes)];
          }
        });
      });
    };
    Registry2.prototype.loadGrammar = function(initialScopeName) {
      return __awaiter(this, void 0, void 0, function() {
        return __generator(this, function(_a2) {
          return [2, this._loadGrammar(initialScopeName)];
        });
      });
    };
    Registry2.prototype._loadGrammar = function(initialScopeName, dependentScope) {
      if (dependentScope === void 0) {
        dependentScope = null;
      }
      return __awaiter(this, void 0, void 0, function() {
        var prom;
        var _this = this;
        return __generator(this, function(_a2) {
          switch (_a2.label) {
            case 0:
              if (this._syncRegistry.lookup(initialScopeName)) {
                return [2, this.grammarForScopeName(initialScopeName)];
              }
              if (this.installationQueue.has(initialScopeName)) {
                return [2, this.installationQueue.get(initialScopeName)];
              }
              prom = new Promise(function(resolve, reject) {
                return __awaiter(_this, void 0, void 0, function() {
                  var grammarDefinition, rawGrammar, injections, deps;
                  var _this2 = this;
                  return __generator(this, function(_a3) {
                    switch (_a3.label) {
                      case 0:
                        return [4, this._locator.getGrammarDefinition(initialScopeName, dependentScope)];
                      case 1:
                        grammarDefinition = _a3.sent();
                        if (!grammarDefinition) {
                          throw new Error("A tmGrammar load was requested but registry host failed to provide grammar definition");
                        }
                        if (grammarDefinition.format !== "json" && grammarDefinition.format !== "plist" || grammarDefinition.format === "json" && typeof grammarDefinition.content !== "object" && typeof grammarDefinition.content !== "string" || grammarDefinition.format === "plist" && typeof grammarDefinition.content !== "string") {
                          throw new TypeError('Grammar definition must be an object, either `{ content: string | object, format: "json" }` OR `{ content: string, format: "plist" }`)');
                        }
                        rawGrammar = grammarDefinition.format === "json" ? typeof grammarDefinition.content === "string" ? grammarReader_1.parseJSONGrammar(grammarDefinition.content, "c://fakepath/grammar.json") : grammarDefinition.content : grammarReader_1.parsePLISTGrammar(grammarDefinition.content, "c://fakepath/grammar.plist");
                        injections = typeof this._locator.getInjections === "function" && this._locator.getInjections(initialScopeName);
                        rawGrammar.scopeName = initialScopeName;
                        deps = this._syncRegistry.addGrammar(rawGrammar, injections);
                        return [4, Promise.all(deps.map(function(scopeNameD) {
                          return __awaiter(_this2, void 0, void 0, function() {
                            return __generator(this, function(_a4) {
                              try {
                                return [2, this._loadGrammar(scopeNameD, initialScopeName)];
                              } catch (error) {
                                throw new Error("While trying to load tmGrammar with scopeId: '" + initialScopeName + "', it's dependency (scopeId: " + scopeNameD + ") loading errored: " + error.message);
                              }
                              return [2];
                            });
                          });
                        }))];
                      case 2:
                        _a3.sent();
                        resolve(this.grammarForScopeName(initialScopeName));
                        return [2];
                    }
                  });
                });
              });
              this.installationQueue.set(initialScopeName, prom);
              return [4, prom];
            case 1:
              _a2.sent();
              this.installationQueue.delete(initialScopeName);
              return [2, prom];
          }
        });
      });
    };
    Registry2.prototype.grammarForScopeName = function(scopeName, initialLanguage, embeddedLanguages, tokenTypes) {
      if (initialLanguage === void 0) {
        initialLanguage = 0;
      }
      if (embeddedLanguages === void 0) {
        embeddedLanguages = null;
      }
      if (tokenTypes === void 0) {
        tokenTypes = null;
      }
      return this._syncRegistry.grammarForScopeName(scopeName, initialLanguage, embeddedLanguages, tokenTypes);
    };
    return Registry2;
  }();
  var Registry_1 = main$1.Registry = Registry;
  main$1.INITIAL = grammar_1.StackElement.NULL;
  var dist = {};
  var tmToMonacoToken = {};
  Object.defineProperty(tmToMonacoToken, "__esModule", { value: true });
  tmToMonacoToken.TMToMonacoToken = void 0;
  const TMToMonacoToken = (editor, scopes) => {
    let scopeName = "";
    for (let i = scopes[0].length - 1; i >= 0; i -= 1) {
      const char = scopes[0][i];
      if (char === ".") {
        break;
      }
      scopeName = char + scopeName;
    }
    for (let i = scopes.length - 1; i >= 0; i -= 1) {
      const scope = scopes[i];
      for (let i2 = scope.length - 1; i2 >= 0; i2 -= 1) {
        const char = scope[i2];
        if (char === ".") {
          const token = scope.slice(0, i2);
          if (editor["_themeService"]._theme._tokenTheme._match(token + "." + scopeName)._foreground > 1) {
            return token + "." + scopeName;
          }
          if (editor["_themeService"]._theme._tokenTheme._match(token)._foreground > 1) {
            return token;
          }
        }
      }
    }
    return "";
  };
  tmToMonacoToken.TMToMonacoToken = TMToMonacoToken;
  Object.defineProperty(dist, "__esModule", { value: true });
  var wireTmGrammars_1 = dist.wireTmGrammars = void 0;
  const monaco_textmate_1 = main$1;
  const tm_to_monaco_token_1 = tmToMonacoToken;
  class TokenizerState {
    constructor(_ruleStack) {
      __publicField(this, "_ruleStack");
      this._ruleStack = _ruleStack;
    }
    get ruleStack() {
      return this._ruleStack;
    }
    clone() {
      return new TokenizerState(this._ruleStack);
    }
    equals(other) {
      if (!other || !(other instanceof TokenizerState) || other !== this || other._ruleStack !== this._ruleStack) {
        return false;
      }
      return true;
    }
  }
  function wireTmGrammars(monaco, registry2, languages, editor) {
    return Promise.all(Array.from(languages.keys()).map(async (languageId) => {
      const grammar2 = await registry2.loadGrammar(languages.get(languageId));
      monaco.languages.setTokensProvider(languageId, {
        getInitialState: () => new TokenizerState(monaco_textmate_1.INITIAL),
        tokenize: (line, state) => {
          const res = grammar2.tokenizeLine(line, state.ruleStack);
          return {
            endState: new TokenizerState(res.ruleStack),
            tokens: res.tokens.map((token) => ({
              ...token,
              scopes: editor ? (0, tm_to_monaco_token_1.TMToMonacoToken)(editor, token.scopes) : token.scopes[token.scopes.length - 1]
            }))
          };
        }
      });
    }));
  }
  wireTmGrammars_1 = dist.wireTmGrammars = wireTmGrammars;
  const initMonacoEditor = async () => {
    await loadWASM(`${"https://baozoulolw.oss-cn-chengdu.aliyuncs.com/codeSet/data"}/onigasm/onigasm.wasm`);
  };
  const wire = async (languageId, editor, monaco) => {
    languageId = ["vue2", "vue3", "vue"].includes(languageId) ? "vue" : languageId;
    if (!scopeNameMap[languageId]) {
      return;
    }
    const grammars = /* @__PURE__ */ new Map();
    grammars.set(languageId, scopeNameMap[languageId]);
    const registry2 = new Registry_1({
      getGrammarDefinition: async (scopeName) => {
        let jsonMap = tmGrammarJsonMap[scopeName];
        if (!jsonMap) {
          return null;
        }
        let format = "json";
        let path2 = jsonMap;
        if (typeof jsonMap !== "string") {
          format = jsonMap.format;
          path2 = jsonMap.path;
        }
        let text = await (await fetch(`${"https://baozoulolw.oss-cn-chengdu.aliyuncs.com/codeSet/data"}/grammars/${path2}`)).text();
        return {
          format,
          content: text
        };
      }
    });
    if (!monacoEditorInnerLanguages.includes(languageId)) {
      monaco.languages.register({ id: languageId });
    }
    await wireTmGrammars_1(monaco, registry2, grammars, editor);
  };
  var E;
  (function(e4) {
    e4[e4.Canceled = 1] = "Canceled", e4[e4.Unknown = 2] = "Unknown", e4[e4.InvalidArgument = 3] = "InvalidArgument", e4[e4.DeadlineExceeded = 4] = "DeadlineExceeded", e4[e4.NotFound = 5] = "NotFound", e4[e4.AlreadyExists = 6] = "AlreadyExists", e4[e4.PermissionDenied = 7] = "PermissionDenied", e4[e4.ResourceExhausted = 8] = "ResourceExhausted", e4[e4.FailedPrecondition = 9] = "FailedPrecondition", e4[e4.Aborted = 10] = "Aborted", e4[e4.OutOfRange = 11] = "OutOfRange", e4[e4.Unimplemented = 12] = "Unimplemented", e4[e4.Internal = 13] = "Internal", e4[e4.Unavailable = 14] = "Unavailable", e4[e4.DataLoss = 15] = "DataLoss", e4[e4.Unauthenticated = 16] = "Unauthenticated";
  })(E || (E = {}));
  function N(e4, t) {
    if (!e4)
      throw new Error(t);
  }
  var On = 34028234663852886e22, Un = -34028234663852886e22, Rn = 4294967295, Fn = 2147483647, _n = -2147483648;
  function L(e4) {
    if (typeof e4 != "number")
      throw new Error("invalid int 32: " + typeof e4);
    if (!Number.isInteger(e4) || e4 > Fn || e4 < _n)
      throw new Error("invalid int 32: " + e4);
  }
  function j(e4) {
    if (typeof e4 != "number")
      throw new Error("invalid uint 32: " + typeof e4);
    if (!Number.isInteger(e4) || e4 > Rn || e4 < 0)
      throw new Error("invalid uint 32: " + e4);
  }
  function oe(e4) {
    if (typeof e4 != "number")
      throw new Error("invalid float 32: " + typeof e4);
    if (Number.isFinite(e4) && (e4 > On || e4 < Un))
      throw new Error("invalid float 32: " + e4);
  }
  var Tt = Symbol("@bufbuild/protobuf/enum-type");
  function St(e4) {
    let t = e4[Tt];
    return N(t, "missing enum type on enum object"), t;
  }
  function $e(e4, t, n, r) {
    e4[Tt] = je(t, n.map((o) => ({ no: o.no, name: o.name, localName: e4[o.no] })));
  }
  function je(e4, t, n) {
    let r = /* @__PURE__ */ Object.create(null), o = /* @__PURE__ */ Object.create(null), i = [];
    for (let s of t) {
      let a = Nt(s);
      i.push(a), r[s.name] = a, o[s.no] = a;
    }
    return { typeName: e4, values: i, findName(s) {
      return r[s];
    }, findNumber(s) {
      return o[s];
    } };
  }
  function At(e4, t, n) {
    let r = {};
    for (let o of t) {
      let i = Nt(o);
      r[i.localName] = i.no, r[i.no] = i.localName;
    }
    return $e(r, e4, t), r;
  }
  function Nt(e4) {
    return "localName" in e4 ? e4 : Object.assign(Object.assign({}, e4), { localName: e4.name });
  }
  var w = class {
    equals(t) {
      return this.getType().runtime.util.equals(this.getType(), this, t);
    }
    clone() {
      return this.getType().runtime.util.clone(this);
    }
    fromBinary(t, n) {
      let r = this.getType(), o = r.runtime.bin, i = o.makeReadOptions(n);
      return o.readMessage(this, i.readerFactory(t), t.byteLength, i), this;
    }
    fromJson(t, n) {
      let r = this.getType(), o = r.runtime.json, i = o.makeReadOptions(n);
      return o.readMessage(r, t, i, this), this;
    }
    fromJsonString(t, n) {
      let r;
      try {
        r = JSON.parse(t);
      } catch (o) {
        throw new Error(`cannot decode ${this.getType().typeName} from JSON: ${o instanceof Error ? o.message : String(o)}`);
      }
      return this.fromJson(r, n);
    }
    toBinary(t) {
      let n = this.getType(), r = n.runtime.bin, o = r.makeWriteOptions(t), i = o.writerFactory();
      return r.writeMessage(this, i, o), i.finish();
    }
    toJson(t) {
      let n = this.getType(), r = n.runtime.json, o = r.makeWriteOptions(t);
      return r.writeMessage(this, o);
    }
    toJsonString(t) {
      var n;
      let r = this.toJson(t);
      return JSON.stringify(r, null, (n = t == null ? void 0 : t.prettySpaces) !== null && n !== void 0 ? n : 0);
    }
    toJSON() {
      return this.toJson({ emitDefaultValues: true });
    }
    getType() {
      return Object.getPrototypeOf(this).constructor;
    }
  };
  function Pt(e4, t, n, r) {
    var o;
    let i = (o = r == null ? void 0 : r.localName) !== null && o !== void 0 ? o : t.substring(t.lastIndexOf(".") + 1), s = { [i]: function(a) {
      e4.util.initFields(this), e4.util.initPartial(a, this);
    } }[i];
    return Object.setPrototypeOf(s.prototype, new w()), Object.assign(s, { runtime: e4, typeName: t, fields: e4.util.newFieldList(n), fromBinary(a, c) {
      return new s().fromBinary(a, c);
    }, fromJson(a, c) {
      return new s().fromJson(a, c);
    }, fromJsonString(a, c) {
      return new s().fromJsonString(a, c);
    }, equals(a, c) {
      return e4.util.equals(s, a, c);
    } }), s;
  }
  function vt(e4, t, n, r) {
    return { syntax: e4, json: t, bin: n, util: r, makeMessageType(o, i, s) {
      return Pt(this, o, i, s);
    }, makeEnum: At, makeEnumType: je, getEnumType: St };
  }
  var f;
  (function(e4) {
    e4[e4.DOUBLE = 1] = "DOUBLE", e4[e4.FLOAT = 2] = "FLOAT", e4[e4.INT64 = 3] = "INT64", e4[e4.UINT64 = 4] = "UINT64", e4[e4.INT32 = 5] = "INT32", e4[e4.FIXED64 = 6] = "FIXED64", e4[e4.FIXED32 = 7] = "FIXED32", e4[e4.BOOL = 8] = "BOOL", e4[e4.STRING = 9] = "STRING", e4[e4.BYTES = 12] = "BYTES", e4[e4.UINT32 = 13] = "UINT32", e4[e4.SFIXED32 = 15] = "SFIXED32", e4[e4.SFIXED64 = 16] = "SFIXED64", e4[e4.SINT32 = 17] = "SINT32", e4[e4.SINT64 = 18] = "SINT64";
  })(f || (f = {}));
  var R;
  (function(e4) {
    e4[e4.BIGINT = 0] = "BIGINT", e4[e4.STRING = 1] = "STRING";
  })(R || (R = {}));
  function kt() {
    let e4 = 0, t = 0;
    for (let r = 0; r < 28; r += 7) {
      let o = this.buf[this.pos++];
      if (e4 |= (o & 127) << r, !(o & 128))
        return this.assertBounds(), [e4, t];
    }
    let n = this.buf[this.pos++];
    if (e4 |= (n & 15) << 28, t = (n & 112) >> 4, !(n & 128))
      return this.assertBounds(), [e4, t];
    for (let r = 3; r <= 31; r += 7) {
      let o = this.buf[this.pos++];
      if (t |= (o & 127) << r, !(o & 128))
        return this.assertBounds(), [e4, t];
    }
    throw new Error("invalid varint");
  }
  function se(e4, t, n) {
    for (let i = 0; i < 28; i = i + 7) {
      let s = e4 >>> i, a = !(!(s >>> 7) && t == 0), c = (a ? s | 128 : s) & 255;
      if (n.push(c), !a)
        return;
    }
    let r = e4 >>> 28 & 15 | (t & 7) << 4, o = !!(t >> 3);
    if (n.push((o ? r | 128 : r) & 255), !!o) {
      for (let i = 3; i < 31; i = i + 7) {
        let s = t >>> i, a = !!(s >>> 7), c = (a ? s | 128 : s) & 255;
        if (n.push(c), !a)
          return;
      }
      n.push(t >>> 31 & 1);
    }
  }
  var ie = 4294967296;
  function He(e4) {
    let t = e4[0] === "-";
    t && (e4 = e4.slice(1));
    let n = 1e6, r = 0, o = 0;
    function i(s, a) {
      let c = Number(e4.slice(s, a));
      o *= n, r = r * n + c, r >= ie && (o = o + (r / ie | 0), r = r % ie);
    }
    return i(-24, -18), i(-18, -12), i(-12, -6), i(-6), t ? Ut(r, o) : ze(r, o);
  }
  function Ot(e4, t) {
    let n = ze(e4, t), r = n.hi & 2147483648;
    r && (n = Ut(n.lo, n.hi));
    let o = Xe(n.lo, n.hi);
    return r ? "-" + o : o;
  }
  function Xe(e4, t) {
    if ({ lo: e4, hi: t } = Jn(e4, t), t <= 2097151)
      return String(ie * t + e4);
    let n = e4 & 16777215, r = (e4 >>> 24 | t << 8) & 16777215, o = t >> 16 & 65535, i = n + r * 6777216 + o * 6710656, s = r + o * 8147497, a = o * 2, c = 1e7;
    return i >= c && (s += Math.floor(i / c), i %= c), s >= c && (a += Math.floor(s / c), s %= c), a.toString() + Ct(s) + Ct(i);
  }
  function Jn(e4, t) {
    return { lo: e4 >>> 0, hi: t >>> 0 };
  }
  function ze(e4, t) {
    return { lo: e4 | 0, hi: t | 0 };
  }
  function Ut(e4, t) {
    return t = ~t, e4 ? e4 = ~e4 + 1 : t += 1, ze(e4, t);
  }
  var Ct = (e4) => {
    let t = String(e4);
    return "0000000".slice(t.length) + t;
  };
  function Ye(e4, t) {
    if (e4 >= 0) {
      for (; e4 > 127; )
        t.push(e4 & 127 | 128), e4 = e4 >>> 7;
      t.push(e4);
    } else {
      for (let n = 0; n < 9; n++)
        t.push(e4 & 127 | 128), e4 = e4 >> 7;
      t.push(1);
    }
  }
  function Rt() {
    let e4 = this.buf[this.pos++], t = e4 & 127;
    if (!(e4 & 128))
      return this.assertBounds(), t;
    if (e4 = this.buf[this.pos++], t |= (e4 & 127) << 7, !(e4 & 128))
      return this.assertBounds(), t;
    if (e4 = this.buf[this.pos++], t |= (e4 & 127) << 14, !(e4 & 128))
      return this.assertBounds(), t;
    if (e4 = this.buf[this.pos++], t |= (e4 & 127) << 21, !(e4 & 128))
      return this.assertBounds(), t;
    e4 = this.buf[this.pos++], t |= (e4 & 15) << 28;
    for (let n = 5; e4 & 128 && n < 10; n++)
      e4 = this.buf[this.pos++];
    if (e4 & 128)
      throw new Error("invalid varint");
    return this.assertBounds(), t >>> 0;
  }
  function Mn() {
    let e4 = new DataView(new ArrayBuffer(8));
    if (typeof BigInt == "function" && typeof e4.getBigInt64 == "function" && typeof e4.getBigUint64 == "function" && typeof e4.setBigInt64 == "function" && typeof e4.setBigUint64 == "function" && (typeof process != "object" || typeof process.env != "object" || {}.BUF_BIGINT_DISABLE !== "1")) {
      let o = BigInt("-9223372036854775808"), i = BigInt("9223372036854775807"), s = BigInt("0"), a = BigInt("18446744073709551615");
      return { zero: BigInt(0), supported: true, parse(c) {
        let l = typeof c == "bigint" ? c : BigInt(c);
        if (l > i || l < o)
          throw new Error(`int64 invalid: ${c}`);
        return l;
      }, uParse(c) {
        let l = typeof c == "bigint" ? c : BigInt(c);
        if (l > a || l < s)
          throw new Error(`uint64 invalid: ${c}`);
        return l;
      }, enc(c) {
        return e4.setBigInt64(0, this.parse(c), true), { lo: e4.getInt32(0, true), hi: e4.getInt32(4, true) };
      }, uEnc(c) {
        return e4.setBigInt64(0, this.uParse(c), true), { lo: e4.getInt32(0, true), hi: e4.getInt32(4, true) };
      }, dec(c, l) {
        return e4.setInt32(0, c, true), e4.setInt32(4, l, true), e4.getBigInt64(0, true);
      }, uDec(c, l) {
        return e4.setInt32(0, c, true), e4.setInt32(4, l, true), e4.getBigUint64(0, true);
      } };
    }
    let n = (o) => N(/^-?[0-9]+$/.test(o), `int64 invalid: ${o}`), r = (o) => N(/^[0-9]+$/.test(o), `uint64 invalid: ${o}`);
    return { zero: "0", supported: false, parse(o) {
      return typeof o != "string" && (o = o.toString()), n(o), o;
    }, uParse(o) {
      return typeof o != "string" && (o = o.toString()), r(o), o;
    }, enc(o) {
      return typeof o != "string" && (o = o.toString()), n(o), He(o);
    }, uEnc(o) {
      return typeof o != "string" && (o = o.toString()), r(o), He(o);
    }, dec(o, i) {
      return Ot(o, i);
    }, uDec(o, i) {
      return Xe(o, i);
    } };
  }
  var x = Mn();
  var A;
  (function(e4) {
    e4[e4.Varint = 0] = "Varint", e4[e4.Bit64 = 1] = "Bit64", e4[e4.LengthDelimited = 2] = "LengthDelimited", e4[e4.StartGroup = 3] = "StartGroup", e4[e4.EndGroup = 4] = "EndGroup", e4[e4.Bit32 = 5] = "Bit32";
  })(A || (A = {}));
  var ae = class {
    constructor(t) {
      this.stack = [], this.textEncoder = t != null ? t : new TextEncoder(), this.chunks = [], this.buf = [];
    }
    finish() {
      this.chunks.push(new Uint8Array(this.buf));
      let t = 0;
      for (let o = 0; o < this.chunks.length; o++)
        t += this.chunks[o].length;
      let n = new Uint8Array(t), r = 0;
      for (let o = 0; o < this.chunks.length; o++)
        n.set(this.chunks[o], r), r += this.chunks[o].length;
      return this.chunks = [], n;
    }
    fork() {
      return this.stack.push({ chunks: this.chunks, buf: this.buf }), this.chunks = [], this.buf = [], this;
    }
    join() {
      let t = this.finish(), n = this.stack.pop();
      if (!n)
        throw new Error("invalid state, fork stack empty");
      return this.chunks = n.chunks, this.buf = n.buf, this.uint32(t.byteLength), this.raw(t);
    }
    tag(t, n) {
      return this.uint32((t << 3 | n) >>> 0);
    }
    raw(t) {
      return this.buf.length && (this.chunks.push(new Uint8Array(this.buf)), this.buf = []), this.chunks.push(t), this;
    }
    uint32(t) {
      for (j(t); t > 127; )
        this.buf.push(t & 127 | 128), t = t >>> 7;
      return this.buf.push(t), this;
    }
    int32(t) {
      return L(t), Ye(t, this.buf), this;
    }
    bool(t) {
      return this.buf.push(t ? 1 : 0), this;
    }
    bytes(t) {
      return this.uint32(t.byteLength), this.raw(t);
    }
    string(t) {
      let n = this.textEncoder.encode(t);
      return this.uint32(n.byteLength), this.raw(n);
    }
    float(t) {
      oe(t);
      let n = new Uint8Array(4);
      return new DataView(n.buffer).setFloat32(0, t, true), this.raw(n);
    }
    double(t) {
      let n = new Uint8Array(8);
      return new DataView(n.buffer).setFloat64(0, t, true), this.raw(n);
    }
    fixed32(t) {
      j(t);
      let n = new Uint8Array(4);
      return new DataView(n.buffer).setUint32(0, t, true), this.raw(n);
    }
    sfixed32(t) {
      L(t);
      let n = new Uint8Array(4);
      return new DataView(n.buffer).setInt32(0, t, true), this.raw(n);
    }
    sint32(t) {
      return L(t), t = (t << 1 ^ t >> 31) >>> 0, Ye(t, this.buf), this;
    }
    sfixed64(t) {
      let n = new Uint8Array(8), r = new DataView(n.buffer), o = x.enc(t);
      return r.setInt32(0, o.lo, true), r.setInt32(4, o.hi, true), this.raw(n);
    }
    fixed64(t) {
      let n = new Uint8Array(8), r = new DataView(n.buffer), o = x.uEnc(t);
      return r.setInt32(0, o.lo, true), r.setInt32(4, o.hi, true), this.raw(n);
    }
    int64(t) {
      let n = x.enc(t);
      return se(n.lo, n.hi, this.buf), this;
    }
    sint64(t) {
      let n = x.enc(t), r = n.hi >> 31, o = n.lo << 1 ^ r, i = (n.hi << 1 | n.lo >>> 31) ^ r;
      return se(o, i, this.buf), this;
    }
    uint64(t) {
      let n = x.uEnc(t);
      return se(n.lo, n.hi, this.buf), this;
    }
  }, ce = class {
    constructor(t, n) {
      this.varint64 = kt, this.uint32 = Rt, this.buf = t, this.len = t.length, this.pos = 0, this.view = new DataView(t.buffer, t.byteOffset, t.byteLength), this.textDecoder = n != null ? n : new TextDecoder();
    }
    tag() {
      let t = this.uint32(), n = t >>> 3, r = t & 7;
      if (n <= 0 || r < 0 || r > 5)
        throw new Error("illegal tag: field no " + n + " wire type " + r);
      return [n, r];
    }
    skip(t) {
      let n = this.pos;
      switch (t) {
        case A.Varint:
          for (; this.buf[this.pos++] & 128; )
            ;
          break;
        case A.Bit64:
          this.pos += 4;
        case A.Bit32:
          this.pos += 4;
          break;
        case A.LengthDelimited:
          let r = this.uint32();
          this.pos += r;
          break;
        case A.StartGroup:
          let o;
          for (; (o = this.tag()[1]) !== A.EndGroup; )
            this.skip(o);
          break;
        default:
          throw new Error("cant skip wire type " + t);
      }
      return this.assertBounds(), this.buf.subarray(n, this.pos);
    }
    assertBounds() {
      if (this.pos > this.len)
        throw new RangeError("premature EOF");
    }
    int32() {
      return this.uint32() | 0;
    }
    sint32() {
      let t = this.uint32();
      return t >>> 1 ^ -(t & 1);
    }
    int64() {
      return x.dec(...this.varint64());
    }
    uint64() {
      return x.uDec(...this.varint64());
    }
    sint64() {
      let [t, n] = this.varint64(), r = -(t & 1);
      return t = (t >>> 1 | (n & 1) << 31) ^ r, n = n >>> 1 ^ r, x.dec(t, n);
    }
    bool() {
      let [t, n] = this.varint64();
      return t !== 0 || n !== 0;
    }
    fixed32() {
      return this.view.getUint32((this.pos += 4) - 4, true);
    }
    sfixed32() {
      return this.view.getInt32((this.pos += 4) - 4, true);
    }
    fixed64() {
      return x.uDec(this.sfixed32(), this.sfixed32());
    }
    sfixed64() {
      return x.dec(this.sfixed32(), this.sfixed32());
    }
    float() {
      return this.view.getFloat32((this.pos += 4) - 4, true);
    }
    double() {
      return this.view.getFloat64((this.pos += 8) - 8, true);
    }
    bytes() {
      let t = this.uint32(), n = this.pos;
      return this.pos += t, this.assertBounds(), this.buf.subarray(n, n + t);
    }
    string() {
      return this.textDecoder.decode(this.bytes());
    }
  };
  function H(e4, t) {
    return t instanceof w || !e4.fieldWrapper ? t : e4.fieldWrapper.wrapField(t);
  }
  ({ "google.protobuf.DoubleValue": f.DOUBLE, "google.protobuf.FloatValue": f.FLOAT, "google.protobuf.Int64Value": f.INT64, "google.protobuf.UInt64Value": f.UINT64, "google.protobuf.Int32Value": f.INT32, "google.protobuf.UInt32Value": f.UINT32, "google.protobuf.BoolValue": f.BOOL, "google.protobuf.StringValue": f.STRING, "google.protobuf.BytesValue": f.BYTES });
  function F(e4, t, n) {
    if (t === n)
      return true;
    if (e4 == f.BYTES) {
      if (!(t instanceof Uint8Array) || !(n instanceof Uint8Array) || t.length !== n.length)
        return false;
      for (let r = 0; r < t.length; r++)
        if (t[r] !== n[r])
          return false;
      return true;
    }
    switch (e4) {
      case f.UINT64:
      case f.FIXED64:
      case f.INT64:
      case f.SFIXED64:
      case f.SINT64:
        return t == n;
    }
    return false;
  }
  function X(e4, t) {
    switch (e4) {
      case f.BOOL:
        return false;
      case f.UINT64:
      case f.FIXED64:
      case f.INT64:
      case f.SFIXED64:
      case f.SINT64:
        return t == 0 ? x.zero : "0";
      case f.DOUBLE:
      case f.FLOAT:
        return 0;
      case f.BYTES:
        return new Uint8Array(0);
      case f.STRING:
        return "";
      default:
        return 0;
    }
  }
  function Ke(e4, t) {
    let n = t === void 0, r = A.Varint, o = t === 0;
    switch (e4) {
      case f.STRING:
        o = n || !t.length, r = A.LengthDelimited;
        break;
      case f.BOOL:
        o = t === false;
        break;
      case f.DOUBLE:
        r = A.Bit64;
        break;
      case f.FLOAT:
        r = A.Bit32;
        break;
      case f.INT64:
        o = n || t == 0;
        break;
      case f.UINT64:
        o = n || t == 0;
        break;
      case f.FIXED64:
        o = n || t == 0, r = A.Bit64;
        break;
      case f.BYTES:
        o = n || !t.byteLength, r = A.LengthDelimited;
        break;
      case f.FIXED32:
        r = A.Bit32;
        break;
      case f.SFIXED32:
        r = A.Bit32;
        break;
      case f.SFIXED64:
        o = n || t == 0, r = A.Bit64;
        break;
      case f.SINT64:
        o = n || t == 0;
        break;
    }
    let i = f[e4].toLowerCase();
    return [r, i, n || o];
  }
  var D = Symbol("@bufbuild/protobuf/unknown-fields"), Ft = { readUnknownFields: true, readerFactory: (e4) => new ce(e4) }, _t = { writeUnknownFields: true, writerFactory: () => new ae() };
  function Gn(e4) {
    return e4 ? Object.assign(Object.assign({}, Ft), e4) : Ft;
  }
  function Bn(e4) {
    return e4 ? Object.assign(Object.assign({}, _t), e4) : _t;
  }
  function Jt() {
    return { makeReadOptions: Gn, makeWriteOptions: Bn, listUnknownFields(e4) {
      var t;
      return (t = e4[D]) !== null && t !== void 0 ? t : [];
    }, discardUnknownFields(e4) {
      delete e4[D];
    }, writeUnknownFields(e4, t) {
      let r = e4[D];
      if (r)
        for (let o of r)
          t.tag(o.no, o.wireType).raw(o.data);
    }, onUnknownField(e4, t, n, r) {
      let o = e4;
      Array.isArray(o[D]) || (o[D] = []), o[D].push({ no: t, wireType: n, data: r });
    }, readMessage(e4, t, n, r) {
      let o = e4.getType(), i = n === void 0 ? t.len : t.pos + n;
      for (; t.pos < i; ) {
        let [s, a] = t.tag(), c = o.fields.find(s);
        if (!c) {
          let m = t.skip(a);
          r.readUnknownFields && this.onUnknownField(e4, s, a, m);
          continue;
        }
        let l = e4, h = c.repeated, y = c.localName;
        switch (c.oneof && (l = l[c.oneof.localName], l.case != y && delete l.value, l.case = y, y = "value"), c.kind) {
          case "scalar":
          case "enum":
            let m = c.kind == "enum" ? f.INT32 : c.T, p = ue;
            if (c.kind == "scalar" && c.L > 0 && (p = Dn), h) {
              let v = l[y];
              if (a == A.LengthDelimited && m != f.STRING && m != f.BYTES) {
                let T = t.uint32() + t.pos;
                for (; t.pos < T; )
                  v.push(p(t, m));
              } else
                v.push(p(t, m));
            } else
              l[y] = p(t, m);
            break;
          case "message":
            let g = c.T;
            h ? l[y].push(le(t, new g(), r)) : l[y] instanceof w ? le(t, l[y], r) : (l[y] = le(t, new g(), r), g.fieldWrapper && !c.oneof && !c.repeated && (l[y] = g.fieldWrapper.unwrapField(l[y])));
            break;
          case "map":
            let [b, I] = Ln(c, t, r);
            l[y][b] = I;
            break;
        }
      }
    } };
  }
  function le(e4, t, n) {
    return t.getType().runtime.bin.readMessage(t, e4, e4.uint32(), n), t;
  }
  function Ln(e4, t, n) {
    let r = t.uint32(), o = t.pos + r, i, s;
    for (; t.pos < o; ) {
      let [a] = t.tag();
      switch (a) {
        case 1:
          i = ue(t, e4.K);
          break;
        case 2:
          switch (e4.V.kind) {
            case "scalar":
              s = ue(t, e4.V.T);
              break;
            case "enum":
              s = t.int32();
              break;
            case "message":
              s = le(t, new e4.V.T(), n);
              break;
          }
          break;
      }
    }
    if (i === void 0) {
      let a = X(e4.K, R.BIGINT);
      i = e4.K == f.BOOL ? a.toString() : a;
    }
    if (typeof i != "string" && typeof i != "number" && (i = i.toString()), s === void 0)
      switch (e4.V.kind) {
        case "scalar":
          s = X(e4.V.T, R.BIGINT);
          break;
        case "enum":
          s = 0;
          break;
        case "message":
          s = new e4.V.T();
          break;
      }
    return [i, s];
  }
  function Dn(e4, t) {
    let n = ue(e4, t);
    return typeof n == "bigint" ? n.toString() : n;
  }
  function ue(e4, t) {
    switch (t) {
      case f.STRING:
        return e4.string();
      case f.BOOL:
        return e4.bool();
      case f.DOUBLE:
        return e4.double();
      case f.FLOAT:
        return e4.float();
      case f.INT32:
        return e4.int32();
      case f.INT64:
        return e4.int64();
      case f.UINT64:
        return e4.uint64();
      case f.FIXED64:
        return e4.fixed64();
      case f.BYTES:
        return e4.bytes();
      case f.FIXED32:
        return e4.fixed32();
      case f.SFIXED32:
        return e4.sfixed32();
      case f.SFIXED64:
        return e4.sfixed64();
      case f.SINT64:
        return e4.sint64();
      case f.UINT32:
        return e4.uint32();
      case f.SINT32:
        return e4.sint32();
    }
  }
  function Mt(e4, t, n, r, o) {
    e4.tag(n.no, A.LengthDelimited), e4.fork();
    let i = r;
    switch (n.K) {
      case f.INT32:
      case f.FIXED32:
      case f.UINT32:
      case f.SFIXED32:
      case f.SINT32:
        i = Number.parseInt(r);
        break;
      case f.BOOL:
        N(r == "true" || r == "false"), i = r == "true";
        break;
    }
    switch (V(e4, n.K, 1, i, true), n.V.kind) {
      case "scalar":
        V(e4, n.V.T, 2, o, true);
        break;
      case "enum":
        V(e4, f.INT32, 2, o, true);
        break;
      case "message":
        fe(e4, t, n.V.T, 2, o);
        break;
    }
    e4.join();
  }
  function fe(e4, t, n, r, o) {
    if (o !== void 0) {
      let i = H(n, o);
      e4.tag(r, A.LengthDelimited).bytes(i.toBinary(t));
    }
  }
  function V(e4, t, n, r, o) {
    let [i, s, a] = Ke(t, r);
    (!a || o) && e4.tag(n, i)[s](r);
  }
  function Gt(e4, t, n, r) {
    if (!r.length)
      return;
    e4.tag(n, A.LengthDelimited).fork();
    let [, o] = Ke(t);
    for (let i = 0; i < r.length; i++)
      e4[o](r[i]);
    e4.join();
  }
  function Bt() {
    return Object.assign(Object.assign({}, Jt()), { writeMessage(e4, t, n) {
      let r = e4.getType();
      for (let o of r.fields.byNumber()) {
        let i, s = o.repeated, a = o.localName;
        if (o.oneof) {
          let c = e4[o.oneof.localName];
          if (c.case !== a)
            continue;
          i = c.value;
        } else
          i = e4[a];
        switch (o.kind) {
          case "scalar":
          case "enum":
            let c = o.kind == "enum" ? f.INT32 : o.T;
            if (s)
              if (o.packed)
                Gt(t, c, o.no, i);
              else
                for (let l of i)
                  V(t, c, o.no, l, true);
            else
              i !== void 0 && V(t, c, o.no, i, !!o.oneof || o.opt);
            break;
          case "message":
            if (s)
              for (let l of i)
                fe(t, n, o.T, o.no, l);
            else
              fe(t, n, o.T, o.no, i);
            break;
          case "map":
            for (let [l, h] of Object.entries(i))
              Mt(t, n, o, l, h);
            break;
        }
      }
      return n.writeUnknownFields && this.writeUnknownFields(e4, t), t;
    } });
  }
  var _$2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), me = [];
  for (let e4 = 0; e4 < _$2.length; e4++)
    me[_$2[e4].charCodeAt(0)] = e4;
  me[45] = _$2.indexOf("+");
  me[95] = _$2.indexOf("/");
  var J = { dec(e4) {
    let t = e4.length * 3 / 4;
    e4[e4.length - 2] == "=" ? t -= 2 : e4[e4.length - 1] == "=" && (t -= 1);
    let n = new Uint8Array(t), r = 0, o = 0, i, s = 0;
    for (let a = 0; a < e4.length; a++) {
      if (i = me[e4.charCodeAt(a)], i === void 0)
        switch (e4[a]) {
          case "=":
            o = 0;
          case `
`:
          case "\r":
          case "	":
          case " ":
            continue;
          default:
            throw Error("invalid base64 string.");
        }
      switch (o) {
        case 0:
          s = i, o = 1;
          break;
        case 1:
          n[r++] = s << 2 | (i & 48) >> 4, s = i, o = 2;
          break;
        case 2:
          n[r++] = (s & 15) << 4 | (i & 60) >> 2, s = i, o = 3;
          break;
        case 3:
          n[r++] = (s & 3) << 6 | i, o = 0;
          break;
      }
    }
    if (o == 1)
      throw Error("invalid base64 string.");
    return n.subarray(0, r);
  }, enc(e4) {
    let t = "", n = 0, r, o = 0;
    for (let i = 0; i < e4.length; i++)
      switch (r = e4[i], n) {
        case 0:
          t += _$2[r >> 2], o = (r & 3) << 4, n = 1;
          break;
        case 1:
          t += _$2[o | r >> 4], o = (r & 15) << 2, n = 2;
          break;
        case 2:
          t += _$2[o | r >> 6], t += _$2[r & 63], n = 0;
          break;
      }
    return n && (t += _$2[o], t += "=", n == 1 && (t += "=")), t;
  } };
  var Lt = { ignoreUnknownFields: false }, Dt = { emitDefaultValues: false, enumAsInteger: false, useProtoFieldName: false, prettySpaces: 0 };
  function Vn(e4) {
    return e4 ? Object.assign(Object.assign({}, Lt), e4) : Lt;
  }
  function qn(e4) {
    return e4 ? Object.assign(Object.assign({}, Dt), e4) : Dt;
  }
  function qt(e4) {
    let t = e4($n, Vt);
    return { makeReadOptions: Vn, makeWriteOptions: qn, readMessage(n, r, o, i) {
      if (r == null || Array.isArray(r) || typeof r != "object")
        throw new Error(`cannot decode message ${n.typeName} from JSON: ${this.debug(r)}`);
      i = i != null ? i : new n();
      let s = {};
      for (let [a, c] of Object.entries(r)) {
        let l = n.fields.findJsonName(a);
        if (!l) {
          if (!o.ignoreUnknownFields)
            throw new Error(`cannot decode message ${n.typeName} from JSON: key "${a}" is unknown`);
          continue;
        }
        let h = l.localName, y = i;
        if (l.oneof) {
          if (c === null && l.kind == "scalar")
            continue;
          let m = s[l.oneof.localName];
          if (m)
            throw new Error(`cannot decode message ${n.typeName} from JSON: multiple keys for oneof "${l.oneof.name}" present: "${m}", "${a}"`);
          s[l.oneof.localName] = a, y = y[l.oneof.localName] = { case: h }, h = "value";
        }
        if (l.repeated) {
          if (c === null)
            continue;
          if (!Array.isArray(c))
            throw new Error(`cannot decode field ${n.typeName}.${l.name} from JSON: ${this.debug(c)}`);
          let m = y[h];
          for (let p of c) {
            if (p === null)
              throw new Error(`cannot decode field ${n.typeName}.${l.name} from JSON: ${this.debug(p)}`);
            let g;
            switch (l.kind) {
              case "message":
                g = l.T.fromJson(p, o);
                break;
              case "enum":
                if (g = We(l.T, p, o.ignoreUnknownFields), g === void 0)
                  continue;
                break;
              case "scalar":
                try {
                  g = z(l.T, p, l.L);
                } catch (b) {
                  let I = `cannot decode field ${n.typeName}.${l.name} from JSON: ${this.debug(p)}`;
                  throw b instanceof Error && b.message.length > 0 && (I += `: ${b.message}`), new Error(I);
                }
                break;
            }
            m.push(g);
          }
        } else if (l.kind == "map") {
          if (c === null)
            continue;
          if (Array.isArray(c) || typeof c != "object")
            throw new Error(`cannot decode field ${n.typeName}.${l.name} from JSON: ${this.debug(c)}`);
          let m = y[h];
          for (let [p, g] of Object.entries(c)) {
            if (g === null)
              throw new Error(`cannot decode field ${n.typeName}.${l.name} from JSON: map value null`);
            let b;
            switch (l.V.kind) {
              case "message":
                b = l.V.T.fromJson(g, o);
                break;
              case "enum":
                if (b = We(l.V.T, g, o.ignoreUnknownFields), b === void 0)
                  continue;
                break;
              case "scalar":
                try {
                  b = z(l.V.T, g, R.BIGINT);
                } catch (I) {
                  let v = `cannot decode map value for field ${n.typeName}.${l.name} from JSON: ${this.debug(c)}`;
                  throw I instanceof Error && I.message.length > 0 && (v += `: ${I.message}`), new Error(v);
                }
                break;
            }
            try {
              m[z(l.K, l.K == f.BOOL ? p == "true" ? true : p == "false" ? false : p : p, R.BIGINT).toString()] = b;
            } catch (I) {
              let v = `cannot decode map key for field ${n.typeName}.${l.name} from JSON: ${this.debug(c)}`;
              throw I instanceof Error && I.message.length > 0 && (v += `: ${I.message}`), new Error(v);
            }
          }
        } else
          switch (l.kind) {
            case "message":
              let m = l.T;
              if (c === null && m.typeName != "google.protobuf.Value") {
                if (l.oneof)
                  throw new Error(`cannot decode field ${n.typeName}.${l.name} from JSON: null is invalid for oneof field "${a}"`);
                continue;
              }
              y[h] instanceof w ? y[h].fromJson(c, o) : (y[h] = m.fromJson(c, o), m.fieldWrapper && !l.oneof && (y[h] = m.fieldWrapper.unwrapField(y[h])));
              break;
            case "enum":
              let p = We(l.T, c, o.ignoreUnknownFields);
              p !== void 0 && (y[h] = p);
              break;
            case "scalar":
              try {
                y[h] = z(l.T, c, l.L);
              } catch (g) {
                let b = `cannot decode field ${n.typeName}.${l.name} from JSON: ${this.debug(c)}`;
                throw g instanceof Error && g.message.length > 0 && (b += `: ${g.message}`), new Error(b);
              }
              break;
          }
      }
      return i;
    }, writeMessage(n, r) {
      let o = n.getType(), i = {}, s;
      try {
        for (let a of o.fields.byMember()) {
          let c;
          if (a.kind == "oneof") {
            let l = n[a.localName];
            if (l.value === void 0)
              continue;
            if (s = a.findField(l.case), !s)
              throw "oneof case not found: " + l.case;
            c = t(s, l.value, r);
          } else
            s = a, c = t(s, n[s.localName], r);
          c !== void 0 && (i[r.useProtoFieldName ? s.name : s.jsonName] = c);
        }
      } catch (a) {
        let c = s ? `cannot encode field ${o.typeName}.${s.name} to JSON` : `cannot encode message ${o.typeName} to JSON`, l = a instanceof Error ? a.message : String(a);
        throw new Error(c + (l.length > 0 ? `: ${l}` : ""));
      }
      return i;
    }, readScalar: z, writeScalar: Vt, debug: $t };
  }
  function $t(e4) {
    if (e4 === null)
      return "null";
    switch (typeof e4) {
      case "object":
        return Array.isArray(e4) ? "array" : "object";
      case "string":
        return e4.length > 100 ? "string" : `"${e4.split('"').join('\\"')}"`;
      default:
        return String(e4);
    }
  }
  function z(e4, t, n) {
    switch (e4) {
      case f.DOUBLE:
      case f.FLOAT:
        if (t === null)
          return 0;
        if (t === "NaN")
          return Number.NaN;
        if (t === "Infinity")
          return Number.POSITIVE_INFINITY;
        if (t === "-Infinity")
          return Number.NEGATIVE_INFINITY;
        if (t === "" || typeof t == "string" && t.trim().length !== t.length || typeof t != "string" && typeof t != "number")
          break;
        let r = Number(t);
        if (Number.isNaN(r) || !Number.isFinite(r))
          break;
        return e4 == f.FLOAT && oe(r), r;
      case f.INT32:
      case f.FIXED32:
      case f.SFIXED32:
      case f.SINT32:
      case f.UINT32:
        if (t === null)
          return 0;
        let o;
        if (typeof t == "number" ? o = t : typeof t == "string" && t.length > 0 && t.trim().length === t.length && (o = Number(t)), o === void 0)
          break;
        return e4 == f.UINT32 ? j(o) : L(o), o;
      case f.INT64:
      case f.SFIXED64:
      case f.SINT64:
        if (t === null)
          return x.zero;
        if (typeof t != "number" && typeof t != "string")
          break;
        let i = x.parse(t);
        return n ? i.toString() : i;
      case f.FIXED64:
      case f.UINT64:
        if (t === null)
          return x.zero;
        if (typeof t != "number" && typeof t != "string")
          break;
        let s = x.uParse(t);
        return n ? s.toString() : s;
      case f.BOOL:
        if (t === null)
          return false;
        if (typeof t != "boolean")
          break;
        return t;
      case f.STRING:
        if (t === null)
          return "";
        if (typeof t != "string")
          break;
        try {
          encodeURIComponent(t);
        } catch {
          throw new Error("invalid UTF8");
        }
        return t;
      case f.BYTES:
        if (t === null || t === "")
          return new Uint8Array(0);
        if (typeof t != "string")
          break;
        return J.dec(t);
    }
    throw new Error();
  }
  function We(e4, t, n) {
    if (t === null)
      return 0;
    switch (typeof t) {
      case "number":
        if (Number.isInteger(t))
          return t;
        break;
      case "string":
        let r = e4.findName(t);
        if (r || n)
          return r == null ? void 0 : r.no;
        break;
    }
    throw new Error(`cannot decode enum ${e4.typeName} from JSON: ${$t(t)}`);
  }
  function $n(e4, t, n, r) {
    var o;
    if (t === void 0)
      return t;
    if (t === 0 && !n)
      return;
    if (r)
      return t;
    if (e4.typeName == "google.protobuf.NullValue")
      return null;
    let i = e4.findNumber(t);
    return (o = i == null ? void 0 : i.name) !== null && o !== void 0 ? o : t;
  }
  function Vt(e4, t, n) {
    if (t !== void 0)
      switch (e4) {
        case f.INT32:
        case f.SFIXED32:
        case f.SINT32:
        case f.FIXED32:
        case f.UINT32:
          return N(typeof t == "number"), t != 0 || n ? t : void 0;
        case f.FLOAT:
        case f.DOUBLE:
          return N(typeof t == "number"), Number.isNaN(t) ? "NaN" : t === Number.POSITIVE_INFINITY ? "Infinity" : t === Number.NEGATIVE_INFINITY ? "-Infinity" : t !== 0 || n ? t : void 0;
        case f.STRING:
          return N(typeof t == "string"), t.length > 0 || n ? t : void 0;
        case f.BOOL:
          return N(typeof t == "boolean"), t || n ? t : void 0;
        case f.UINT64:
        case f.FIXED64:
        case f.INT64:
        case f.SFIXED64:
        case f.SINT64:
          return N(typeof t == "bigint" || typeof t == "string" || typeof t == "number"), n || t != 0 ? t.toString(10) : void 0;
        case f.BYTES:
          return N(t instanceof Uint8Array), n || t.byteLength > 0 ? J.enc(t) : void 0;
      }
  }
  function jt() {
    return qt((e4, t) => function(r, o, i) {
      if (r.kind == "map") {
        let s = {};
        switch (r.V.kind) {
          case "scalar":
            for (let [c, l] of Object.entries(o)) {
              let h = t(r.V.T, l, true);
              N(h !== void 0), s[c.toString()] = h;
            }
            break;
          case "message":
            for (let [c, l] of Object.entries(o))
              s[c.toString()] = l.toJson(i);
            break;
          case "enum":
            let a = r.V.T;
            for (let [c, l] of Object.entries(o)) {
              N(l === void 0 || typeof l == "number");
              let h = e4(a, l, true, i.enumAsInteger);
              N(h !== void 0), s[c.toString()] = h;
            }
            break;
        }
        return i.emitDefaultValues || Object.keys(s).length > 0 ? s : void 0;
      } else if (r.repeated) {
        let s = [];
        switch (r.kind) {
          case "scalar":
            for (let a = 0; a < o.length; a++)
              s.push(t(r.T, o[a], true));
            break;
          case "enum":
            for (let a = 0; a < o.length; a++)
              s.push(e4(r.T, o[a], true, i.enumAsInteger));
            break;
          case "message":
            for (let a = 0; a < o.length; a++)
              s.push(H(r.T, o[a]).toJson(i));
            break;
        }
        return i.emitDefaultValues || s.length > 0 ? s : void 0;
      } else
        switch (r.kind) {
          case "scalar":
            return t(r.T, o, !!r.oneof || r.opt || i.emitDefaultValues);
          case "enum":
            return e4(r.T, o, !!r.oneof || r.opt || i.emitDefaultValues, i.enumAsInteger);
          case "message":
            return o !== void 0 ? H(r.T, o).toJson(i) : void 0;
        }
    });
  }
  function Ht() {
    return { setEnumType: $e, initPartial(e4, t) {
      if (e4 === void 0)
        return;
      let n = t.getType();
      for (let r of n.fields.byMember()) {
        let o = r.localName, i = t, s = e4;
        if (s[o] !== void 0)
          switch (r.kind) {
            case "oneof":
              let a = s[o].case;
              if (a === void 0)
                continue;
              let c = r.findField(a), l = s[o].value;
              c && c.kind == "message" && !(l instanceof c.T) ? l = new c.T(l) : c && c.kind === "scalar" && c.T === f.BYTES && (l = Y(l)), i[o] = { case: a, value: l };
              break;
            case "scalar":
            case "enum":
              let h = s[o];
              r.T === f.BYTES && (h = r.repeated ? h.map(Y) : Y(h)), i[o] = h;
              break;
            case "map":
              switch (r.V.kind) {
                case "scalar":
                case "enum":
                  if (r.V.T === f.BYTES)
                    for (let [p, g] of Object.entries(s[o]))
                      i[o][p] = Y(g);
                  else
                    Object.assign(i[o], s[o]);
                  break;
                case "message":
                  let m = r.V.T;
                  for (let p of Object.keys(s[o])) {
                    let g = s[o][p];
                    m.fieldWrapper || (g = new m(g)), i[o][p] = g;
                  }
                  break;
              }
              break;
            case "message":
              let y = r.T;
              if (r.repeated)
                i[o] = s[o].map((m) => m instanceof y ? m : new y(m));
              else if (s[o] !== void 0) {
                let m = s[o];
                y.fieldWrapper ? y.typeName === "google.protobuf.BytesValue" ? i[o] = Y(m) : i[o] = m : i[o] = m instanceof y ? m : new y(m);
              }
              break;
          }
      }
    }, equals(e4, t, n) {
      return t === n ? true : !t || !n ? false : e4.fields.byMember().every((r) => {
        let o = t[r.localName], i = n[r.localName];
        if (r.repeated) {
          if (o.length !== i.length)
            return false;
          switch (r.kind) {
            case "message":
              return o.every((s, a) => r.T.equals(s, i[a]));
            case "scalar":
              return o.every((s, a) => F(r.T, s, i[a]));
            case "enum":
              return o.every((s, a) => F(f.INT32, s, i[a]));
          }
          throw new Error(`repeated cannot contain ${r.kind}`);
        }
        switch (r.kind) {
          case "message":
            return r.T.equals(o, i);
          case "enum":
            return F(f.INT32, o, i);
          case "scalar":
            return F(r.T, o, i);
          case "oneof":
            if (o.case !== i.case)
              return false;
            let s = r.findField(o.case);
            if (s === void 0)
              return true;
            switch (s.kind) {
              case "message":
                return s.T.equals(o.value, i.value);
              case "enum":
                return F(f.INT32, o.value, i.value);
              case "scalar":
                return F(s.T, o.value, i.value);
            }
            throw new Error(`oneof cannot contain ${s.kind}`);
          case "map":
            let a = Object.keys(o).concat(Object.keys(i));
            switch (r.V.kind) {
              case "message":
                let c = r.V.T;
                return a.every((h) => c.equals(o[h], i[h]));
              case "enum":
                return a.every((h) => F(f.INT32, o[h], i[h]));
              case "scalar":
                let l = r.V.T;
                return a.every((h) => F(l, o[h], i[h]));
            }
            break;
        }
      });
    }, clone(e4) {
      let t = e4.getType(), n = new t(), r = n;
      for (let o of t.fields.byMember()) {
        let i = e4[o.localName], s;
        if (o.repeated)
          s = i.map(de);
        else if (o.kind == "map") {
          s = r[o.localName];
          for (let [a, c] of Object.entries(i))
            s[a] = de(c);
        } else
          o.kind == "oneof" ? s = o.findField(i.case) ? { case: i.case, value: de(i.value) } : { case: void 0 } : s = de(i);
        r[o.localName] = s;
      }
      return n;
    } };
  }
  function de(e4) {
    if (e4 === void 0)
      return e4;
    if (e4 instanceof w)
      return e4.clone();
    if (e4 instanceof Uint8Array) {
      let t = new Uint8Array(e4.byteLength);
      return t.set(e4), t;
    }
    return e4;
  }
  function Y(e4) {
    return e4 instanceof Uint8Array ? e4 : new Uint8Array(e4);
  }
  var pe = class {
    constructor(t, n) {
      this._fields = t, this._normalizer = n;
    }
    findJsonName(t) {
      if (!this.jsonNames) {
        let n = {};
        for (let r of this.list())
          n[r.jsonName] = n[r.name] = r;
        this.jsonNames = n;
      }
      return this.jsonNames[t];
    }
    find(t) {
      if (!this.numbers) {
        let n = {};
        for (let r of this.list())
          n[r.no] = r;
        this.numbers = n;
      }
      return this.numbers[t];
    }
    list() {
      return this.all || (this.all = this._normalizer(this._fields)), this.all;
    }
    byNumber() {
      return this.numbersAsc || (this.numbersAsc = this.list().concat().sort((t, n) => t.no - n.no)), this.numbersAsc;
    }
    byMember() {
      if (!this.members) {
        this.members = [];
        let t = this.members, n;
        for (let r of this.list())
          r.oneof ? r.oneof !== n && (n = r.oneof, t.push(n)) : t.push(r);
      }
      return this.members;
    }
  };
  function Qe(e4, t) {
    let n = Yt(e4);
    return t ? n : zn(Xn(n));
  }
  function Xt(e4) {
    return Qe(e4, false);
  }
  var zt = Yt;
  function Yt(e4) {
    let t = false, n = [];
    for (let r = 0; r < e4.length; r++) {
      let o = e4.charAt(r);
      switch (o) {
        case "_":
          t = true;
          break;
        case "0":
        case "1":
        case "2":
        case "3":
        case "4":
        case "5":
        case "6":
        case "7":
        case "8":
        case "9":
          n.push(o), t = false;
          break;
        default:
          t && (t = false, o = o.toUpperCase()), n.push(o);
          break;
      }
    }
    return n.join("");
  }
  var jn = /* @__PURE__ */ new Set(["constructor", "toString", "toJSON", "valueOf"]), Hn = /* @__PURE__ */ new Set(["getType", "clone", "equals", "fromBinary", "fromJson", "fromJsonString", "toBinary", "toJson", "toJsonString", "toObject"]), Kt = (e4) => `${e4}$`, Xn = (e4) => Hn.has(e4) ? Kt(e4) : e4, zn = (e4) => jn.has(e4) ? Kt(e4) : e4;
  var he = class {
    constructor(t) {
      this.kind = "oneof", this.repeated = false, this.packed = false, this.opt = false, this.default = void 0, this.fields = [], this.name = t, this.localName = Xt(t);
    }
    addField(t) {
      N(t.oneof === this, `field ${t.name} not one of ${this.name}`), this.fields.push(t);
    }
    findField(t) {
      if (!this._lookup) {
        this._lookup = /* @__PURE__ */ Object.create(null);
        for (let n = 0; n < this.fields.length; n++)
          this._lookup[this.fields[n].localName] = this.fields[n];
      }
      return this._lookup[t];
    }
  };
  var d = vt("proto3", jt(), Bt(), Object.assign(Object.assign({}, Ht()), { newFieldList(e4) {
    return new pe(e4, Yn);
  }, initFields(e4) {
    for (let t of e4.getType().fields.byMember()) {
      if (t.opt)
        continue;
      let n = t.localName, r = e4;
      if (t.repeated) {
        r[n] = [];
        continue;
      }
      switch (t.kind) {
        case "oneof":
          r[n] = { case: void 0 };
          break;
        case "enum":
          r[n] = 0;
          break;
        case "map":
          r[n] = {};
          break;
        case "scalar":
          r[n] = X(t.T, t.L);
          break;
      }
    }
  } }));
  function Yn(e4) {
    var t, n, r, o;
    let i = [], s;
    for (let a of typeof e4 == "function" ? e4() : e4) {
      let c = a;
      if (c.localName = Qe(a.name, a.oneof !== void 0), c.jsonName = (t = a.jsonName) !== null && t !== void 0 ? t : zt(a.name), c.repeated = (n = a.repeated) !== null && n !== void 0 ? n : false, a.kind == "scalar" && (c.L = (r = a.L) !== null && r !== void 0 ? r : R.BIGINT), c.packed = (o = a.packed) !== null && o !== void 0 ? o : a.kind == "enum" || a.kind == "scalar" && a.T != f.BYTES && a.T != f.STRING, a.oneof !== void 0) {
        let l = typeof a.oneof == "string" ? a.oneof : a.oneof.name;
        (!s || s.name != l) && (s = new he(l)), c.oneof = s, s.addField(c);
      }
      i.push(c);
    }
    return i;
  }
  var P;
  (function(e4) {
    e4[e4.Unary = 0] = "Unary", e4[e4.ServerStreaming = 1] = "ServerStreaming", e4[e4.ClientStreaming = 2] = "ClientStreaming", e4[e4.BiDiStreaming = 3] = "BiDiStreaming";
  })(P || (P = {}));
  var K;
  (function(e4) {
    e4[e4.NoSideEffects = 1] = "NoSideEffects", e4[e4.Idempotent = 2] = "Idempotent";
  })(K || (K = {}));
  function W(e4) {
    let t = E[e4];
    return typeof t != "string" ? e4.toString() : t[0].toLowerCase() + t.substring(1).replace(/[A-Z]/g, (n) => "_" + n.toLowerCase());
  }
  var ye;
  function Wt(e4) {
    if (!ye) {
      ye = {};
      for (let t of Object.values(E))
        typeof t != "string" && (ye[W(t)] = t);
    }
    return ye[e4];
  }
  var S = class e extends Error {
    constructor(t, n = E.Unknown, r, o, i) {
      super(Kn(t, n)), this.name = "ConnectError", Object.setPrototypeOf(this, new.target.prototype), this.rawMessage = t, this.code = n, this.metadata = new Headers(r != null ? r : {}), this.details = o != null ? o : [], this.cause = i;
    }
    static from(t, n = E.Unknown) {
      return t instanceof e ? t : t instanceof Error ? t.name == "AbortError" ? new e(t.message, E.Canceled) : new e(t.message, n, void 0, void 0, t) : new e(String(t), n, void 0, void 0, t);
    }
    findDetails(t) {
      let n = "typeName" in t ? { findMessage: (o) => o === t.typeName ? t : void 0 } : t, r = [];
      for (let o of this.details) {
        if (o instanceof w) {
          n.findMessage(o.getType().typeName) && r.push(o);
          continue;
        }
        let i = n.findMessage(o.type);
        if (i)
          try {
            r.push(i.fromBinary(o.value));
          } catch {
          }
      }
      return r;
    }
  };
  function Kn(e4, t) {
    return e4.length ? `[${W(t)}] ${e4}` : `[${W(t)}]`;
  }
  function Ze(...e4) {
    let t = new Headers();
    for (let n of e4)
      n.forEach((r, o) => {
        t.append(o, r);
      });
    return t;
  }
  function Qt(e4, t) {
    let n = {};
    for (let [r, o] of Object.entries(e4.methods)) {
      let i = t(Object.assign(Object.assign({}, o), { localName: r, service: e4 }));
      i != null && (n[r] = i);
    }
    return n;
  }
  function et(e4) {
    let t, n = new Uint8Array(0);
    function r(o) {
      let i = new Uint8Array(n.length + o.length);
      i.set(n), i.set(o, n.length), n = i;
    }
    return new ReadableStream({ start() {
      t = e4.getReader();
    }, async pull(o) {
      let i;
      for (; ; ) {
        if (i === void 0 && n.byteLength >= 5) {
          let c = 0;
          for (let l = 1; l < 5; l++)
            c = (c << 8) + n[l];
          i = { flags: n[0], length: c };
        }
        if (i !== void 0 && n.byteLength >= i.length + 5)
          break;
        let a = await t.read();
        if (a.done)
          break;
        r(a.value);
      }
      if (i === void 0) {
        if (n.byteLength == 0) {
          o.close();
          return;
        }
        o.error(new S("premature end of stream", E.DataLoss));
        return;
      }
      let s = n.subarray(5, 5 + i.length);
      n = n.subarray(5 + i.length), o.enqueue({ flags: i.flags, data: s });
    } });
  }
  function tt(e4, t) {
    let n = new Uint8Array(t.length + 5);
    n.set(t, 5);
    let r = new DataView(n.buffer, n.byteOffset, n.byteLength);
    return r.setUint8(0, e4), r.setUint32(1, t.length), n;
  }
  var Wn = function(e4) {
    if (!Symbol.asyncIterator)
      throw new TypeError("Symbol.asyncIterator is not defined.");
    var t = e4[Symbol.asyncIterator], n;
    return t ? t.call(e4) : (e4 = typeof __values == "function" ? __values(e4) : e4[Symbol.iterator](), n = {}, r("next"), r("throw"), r("return"), n[Symbol.asyncIterator] = function() {
      return this;
    }, n);
    function r(i) {
      n[i] = e4[i] && function(s) {
        return new Promise(function(a, c) {
          s = e4[i](s), o(a, c, s.done, s.value);
        });
      };
    }
    function o(i, s, a, c) {
      Promise.resolve(c).then(function(l) {
        i({ value: l, done: a });
      }, s);
    }
  }, Q = function(e4) {
    return this instanceof Q ? (this.v = e4, this) : new Q(e4);
  }, Qn = function(e4, t, n) {
    if (!Symbol.asyncIterator)
      throw new TypeError("Symbol.asyncIterator is not defined.");
    var r = n.apply(e4, t || []), o, i = [];
    return o = {}, s("next"), s("throw"), s("return"), o[Symbol.asyncIterator] = function() {
      return this;
    }, o;
    function s(m) {
      r[m] && (o[m] = function(p) {
        return new Promise(function(g, b) {
          i.push([m, p, g, b]) > 1 || a(m, p);
        });
      });
    }
    function a(m, p) {
      try {
        c(r[m](p));
      } catch (g) {
        y(i[0][3], g);
      }
    }
    function c(m) {
      m.value instanceof Q ? Promise.resolve(m.value.v).then(l, h) : y(i[0][2], m);
    }
    function l(m) {
      a("next", m);
    }
    function h(m) {
      a("throw", m);
    }
    function y(m, p) {
      m(p), i.shift(), i.length && a(i[0][0], i[0][1]);
    }
  }, Zn = function(e4) {
    var t, n;
    return t = {}, r("next"), r("throw", function(o) {
      throw o;
    }), r("return"), t[Symbol.iterator] = function() {
      return this;
    }, t;
    function r(o, i) {
      t[o] = e4[o] ? function(s) {
        return (n = !n) ? { value: Q(e4[o](s)), done: false } : i ? i(s) : s;
      } : i;
    }
  };
  function Zt(e4) {
    return Qn(this, arguments, function* () {
      yield Q(yield* Zn(Wn(e4)));
    });
  }
  var en = function(e4) {
    if (!Symbol.asyncIterator)
      throw new TypeError("Symbol.asyncIterator is not defined.");
    var t = e4[Symbol.asyncIterator], n;
    return t ? t.call(e4) : (e4 = typeof __values == "function" ? __values(e4) : e4[Symbol.iterator](), n = {}, r("next"), r("throw"), r("return"), n[Symbol.asyncIterator] = function() {
      return this;
    }, n);
    function r(i) {
      n[i] = e4[i] && function(s) {
        return new Promise(function(a, c) {
          s = e4[i](s), o(a, c, s.done, s.value);
        });
      };
    }
    function o(i, s, a, c) {
      Promise.resolve(c).then(function(l) {
        i({ value: l, done: a });
      }, s);
    }
  }, q = function(e4) {
    return this instanceof q ? (this.v = e4, this) : new q(e4);
  }, er = function(e4) {
    var t, n;
    return t = {}, r("next"), r("throw", function(o) {
      throw o;
    }), r("return"), t[Symbol.iterator] = function() {
      return this;
    }, t;
    function r(o, i) {
      t[o] = e4[o] ? function(s) {
        return (n = !n) ? { value: q(e4[o](s)), done: false } : i ? i(s) : s;
      } : i;
    }
  }, tr = function(e4, t, n) {
    if (!Symbol.asyncIterator)
      throw new TypeError("Symbol.asyncIterator is not defined.");
    var r = n.apply(e4, t || []), o, i = [];
    return o = {}, s("next"), s("throw"), s("return"), o[Symbol.asyncIterator] = function() {
      return this;
    }, o;
    function s(m) {
      r[m] && (o[m] = function(p) {
        return new Promise(function(g, b) {
          i.push([m, p, g, b]) > 1 || a(m, p);
        });
      });
    }
    function a(m, p) {
      try {
        c(r[m](p));
      } catch (g) {
        y(i[0][3], g);
      }
    }
    function c(m) {
      m.value instanceof q ? Promise.resolve(m.value.v).then(l, h) : y(i[0][2], m);
    }
    function l(m) {
      a("next", m);
    }
    function h(m) {
      a("throw", m);
    }
    function y(m, p) {
      m(p), i.shift(), i.length && a(i[0][0], i[0][1]);
    }
  };
  function nt(e4, t) {
    return Qt(e4, (n) => {
      switch (n.kind) {
        case P.Unary:
          return nr(t, e4, n);
        case P.ServerStreaming:
          return rr(t, e4, n);
        case P.ClientStreaming:
          return or(t, e4, n);
        case P.BiDiStreaming:
          return ir(t, e4, n);
        default:
          return null;
      }
    });
  }
  function nr(e4, t, n) {
    return async function(r, o) {
      var i, s;
      let a = await e4.unary(t, n, o == null ? void 0 : o.signal, o == null ? void 0 : o.timeoutMs, o == null ? void 0 : o.headers, r, o == null ? void 0 : o.contextValues);
      return (i = o == null ? void 0 : o.onHeader) === null || i === void 0 || i.call(o, a.header), (s = o == null ? void 0 : o.onTrailer) === null || s === void 0 || s.call(o, a.trailer), a.message;
    };
  }
  function rr(e4, t, n) {
    return function(r, o) {
      return tn(e4.stream(t, n, o == null ? void 0 : o.signal, o == null ? void 0 : o.timeoutMs, o == null ? void 0 : o.headers, Zt([r]), o == null ? void 0 : o.contextValues), o);
    };
  }
  function or(e4, t, n) {
    return async function(r, o) {
      var i, s, a, c, l, h;
      let y = await e4.stream(t, n, o == null ? void 0 : o.signal, o == null ? void 0 : o.timeoutMs, o == null ? void 0 : o.headers, r, o == null ? void 0 : o.contextValues);
      (l = o == null ? void 0 : o.onHeader) === null || l === void 0 || l.call(o, y.header);
      let m;
      try {
        for (var p = true, g = en(y.message), b; b = await g.next(), i = b.done, !i; p = true)
          c = b.value, p = false, m = c;
      } catch (I) {
        s = { error: I };
      } finally {
        try {
          !p && !i && (a = g.return) && await a.call(g);
        } finally {
          if (s)
            throw s.error;
        }
      }
      if (!m)
        throw new S("protocol error: missing response message", E.Internal);
      return (h = o == null ? void 0 : o.onTrailer) === null || h === void 0 || h.call(o, y.trailer), m;
    };
  }
  function ir(e4, t, n) {
    return function(r, o) {
      return tn(e4.stream(t, n, o == null ? void 0 : o.signal, o == null ? void 0 : o.timeoutMs, o == null ? void 0 : o.headers, r, o == null ? void 0 : o.contextValues), o);
    };
  }
  function tn(e4, t) {
    let n = function() {
      var r, o;
      return tr(this, arguments, function* () {
        let i = yield q(e4);
        (r = t == null ? void 0 : t.onHeader) === null || r === void 0 || r.call(t, i.header), yield q(yield* er(en(i.message))), (o = t == null ? void 0 : t.onTrailer) === null || o === void 0 || o.call(t, i.trailer);
      });
    }()[Symbol.asyncIterator]();
    return { [Symbol.asyncIterator]: () => ({ next: () => n.next() }) };
  }
  function nn(...e4) {
    let t = new AbortController(), n = e4.filter((o) => o !== void 0).concat(t.signal);
    for (let o of n) {
      if (o.aborted) {
        r.apply(o);
        break;
      }
      o.addEventListener("abort", r);
    }
    function r() {
      t.signal.aborted || t.abort(rt(this));
      for (let o of n)
        o.removeEventListener("abort", r);
    }
    return t;
  }
  function rn(e4) {
    let t = new AbortController(), n = () => {
      t.abort(new S("the operation timed out", E.DeadlineExceeded));
    }, r;
    return e4 !== void 0 && (e4 <= 0 ? n() : r = setTimeout(n, e4)), { signal: t.signal, cleanup: () => clearTimeout(r) };
  }
  function rt(e4) {
    if (!e4.aborted)
      return;
    if (e4.reason !== void 0)
      return e4.reason;
    let t = new Error("This operation was aborted");
    return t.name = "AbortError", t;
  }
  function ge() {
    return { get(e4) {
      return e4.id in this ? this[e4.id] : e4.defaultValue;
    }, set(e4, t) {
      return this[e4.id] = t, this;
    }, delete(e4) {
      return delete this[e4.id], this;
    } };
  }
  function be(e4, t, n) {
    let r = typeof t == "string" ? t : t.typeName, o = typeof n == "string" ? n : n.name;
    return e4.toString().replace(/\/?$/, `/${r}/${o}`);
  }
  function ot(e4, t) {
    return t instanceof w ? t : new e4(t);
  }
  function on(e4, t) {
    function n(r) {
      return r.done === true ? r : { done: r.done, value: ot(e4, r.value) };
    }
    return { [Symbol.asyncIterator]() {
      let r = t[Symbol.asyncIterator](), o = { next: () => r.next().then(n) };
      return r.throw !== void 0 && (o.throw = (i) => r.throw(i).then(n)), r.return !== void 0 && (o.return = (i) => r.return(i).then(n)), o;
    } };
  }
  function Ee(e4) {
    var t;
    let n = Object.assign({}, e4);
    return (t = n.ignoreUnknownFields) !== null && t !== void 0 || (n.ignoreUnknownFields = true), n;
  }
  function we(e4, t, n, r) {
    let o = t ? sn(e4.I, r) : an(e4.I, n);
    return { parse: (t ? sn(e4.O, r) : an(e4.O, n)).parse, serialize: o.serialize };
  }
  function sn(e4, t) {
    return { parse(n) {
      try {
        return e4.fromBinary(n, t);
      } catch (r) {
        let o = r instanceof Error ? r.message : String(r);
        throw new S(`parse binary: ${o}`, E.InvalidArgument);
      }
    }, serialize(n) {
      try {
        return n.toBinary(t);
      } catch (r) {
        let o = r instanceof Error ? r.message : String(r);
        throw new S(`serialize binary: ${o}`, E.Internal);
      }
    } };
  }
  function an(e4, t) {
    var n, r;
    let o = (n = t == null ? void 0 : t.textEncoder) !== null && n !== void 0 ? n : new TextEncoder(), i = (r = t == null ? void 0 : t.textDecoder) !== null && r !== void 0 ? r : new TextDecoder(), s = Ee(t);
    return { parse(a) {
      try {
        let c = i.decode(a);
        return e4.fromJsonString(c, s);
      } catch (c) {
        throw S.from(c, E.InvalidArgument);
      }
    }, serialize(a) {
      try {
        let c = a.toJsonString(s);
        return o.encode(c);
      } catch (c) {
        throw S.from(c, E.Internal);
      }
    } };
  }
  var sr = /^application\/(connect\+)?(?:(json)(?:; ?charset=utf-?8)?|(proto))$/i;
  var cn = "application/proto", ln = "application/json", un = "application/connect+proto", fn = "application/connect+json";
  function mn(e4) {
    let t = e4 == null ? void 0 : e4.match(sr);
    if (!t)
      return;
    let n = !!t[1], r = !!t[3];
    return { stream: n, binary: r };
  }
  function Z(e4, t, n) {
    if (t && new Headers(t).forEach((s, a) => n.metadata.append(a, s)), typeof e4 != "object" || e4 == null || Array.isArray(e4) || !("code" in e4) || typeof e4.code != "string")
      throw n;
    let r = Wt(e4.code);
    if (r === void 0)
      throw n;
    let o = e4.message;
    if (o != null && typeof o != "string")
      throw n;
    let i = new S(o != null ? o : "", r, t);
    if ("details" in e4 && Array.isArray(e4.details))
      for (let s of e4.details) {
        if (s === null || typeof s != "object" || Array.isArray(s) || typeof s.type != "string" || typeof s.value != "string" || "debug" in s && typeof s.debug != "object")
          throw n;
        try {
          i.details.push({ type: s.type, value: J.dec(s.value), debug: s.debug });
        } catch {
          throw n;
        }
      }
    return i;
  }
  var xe = 2;
  function it(e4) {
    let t = new S("invalid end stream", E.InvalidArgument), n;
    try {
      n = JSON.parse(typeof e4 == "string" ? e4 : new TextDecoder().decode(e4));
    } catch {
      throw t;
    }
    if (typeof n != "object" || n == null || Array.isArray(n))
      throw t;
    let r = new Headers();
    if ("metadata" in n) {
      if (typeof n.metadata != "object" || n.metadata == null || Array.isArray(n.metadata))
        throw t;
      for (let [i, s] of Object.entries(n.metadata)) {
        if (!Array.isArray(s) || s.some((a) => typeof a != "string"))
          throw t;
        for (let a of s)
          r.append(i, a);
      }
    }
    let o = "error" in n ? Z(n.error, r, t) : void 0;
    return { metadata: r, error: o };
  }
  var ee = "Content-Type", dn = "Content-Length", Ie = "Content-Encoding";
  var st = "Accept-Encoding";
  var pn = "Connect-Timeout-Ms", Te = "Connect-Protocol-Version", hn = "User-Agent";
  function yn(e4) {
    switch (e4) {
      case 400:
        return E.InvalidArgument;
      case 401:
        return E.Unauthenticated;
      case 403:
        return E.PermissionDenied;
      case 404:
        return E.Unimplemented;
      case 408:
        return E.DeadlineExceeded;
      case 409:
        return E.Aborted;
      case 412:
        return E.FailedPrecondition;
      case 413:
        return E.ResourceExhausted;
      case 415:
        return E.Internal;
      case 429:
        return E.Unavailable;
      case 431:
        return E.ResourceExhausted;
      case 502:
        return E.Unavailable;
      case 503:
        return E.Unavailable;
      case 504:
        return E.Unavailable;
      default:
        return E.Unknown;
    }
  }
  function Se(e4) {
    let t = new Headers(), n = new Headers();
    return e4.forEach((r, o) => {
      o.toLowerCase().startsWith("trailer-") ? n.set(o.substring(8), r) : t.set(o, r);
    }), [t, n];
  }
  var Ae = "1";
  function Ne(e4, t, n, r) {
    let o = new Headers(r != null ? r : {});
    return n !== void 0 && o.set(pn, `${n}`), o.set(ee, e4 == P.Unary ? t ? cn : ln : t ? un : fn), o.set(Te, Ae), o.set(hn, "connect-es/1.1.3"), o;
  }
  function Pe(e4, t, n) {
    let r = n.get("Content-Type"), o = mn(r);
    if (t !== 200) {
      let i = new S(`HTTP ${t}`, yn(t), n);
      if (e4 == P.Unary && o && !o.binary)
        return { isUnaryError: true, unaryError: i };
      throw i;
    }
    return { isUnaryError: false };
  }
  var gn = "application/";
  function cr(e4, t) {
    return t ? J.enc(e4).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "") : encodeURIComponent(new TextDecoder().decode(e4));
  }
  function at(e4, t, n) {
    let r = `?connect=v${Ae}`, o = e4.header.get(ee);
    (o == null ? void 0 : o.indexOf(gn)) === 0 && (r += "&encoding=" + encodeURIComponent(o.slice(gn.length)));
    let i = e4.header.get(Ie);
    i !== null && i !== "identity" && (r += "&compression=" + encodeURIComponent(i), n = true), n && (r += "&base64=1"), r += "&message=" + cr(t, n);
    let s = e4.url + r, a = new Headers(e4.header);
    return [Te, ee, dn, Ie, st].forEach((c) => a.delete(c)), Object.assign(Object.assign({}, e4), { init: Object.assign(Object.assign({}, e4.init), { method: "GET" }), url: s, header: a });
  }
  function ct(e4) {
    let t = En(e4.next, e4.interceptors), [n, r, o] = bn(e4), i = Object.assign(Object.assign({}, e4.req), { message: ot(e4.req.method.I, e4.req.message), signal: n });
    return t(i).then((s) => (o(), s), r);
  }
  function lt(e4) {
    let t = En(e4.next, e4.interceptors), [n, r, o] = bn(e4), i = Object.assign(Object.assign({}, e4.req), { message: on(e4.req.method.I, e4.req.message), signal: n }), s = false;
    return n.addEventListener("abort", function() {
      var a, c;
      let l = e4.req.message[Symbol.asyncIterator]();
      s || (a = l.throw) === null || a === void 0 || a.call(l, this.reason).catch(() => {
      }), (c = l.return) === null || c === void 0 || c.call(l).catch(() => {
      });
    }), t(i).then((a) => Object.assign(Object.assign({}, a), { message: { [Symbol.asyncIterator]() {
      let c = a.message[Symbol.asyncIterator]();
      return { next() {
        return c.next().then((l) => (l.done == true && (s = true, o()), l), r);
      } };
    } } }), r);
  }
  function bn(e4) {
    let { signal: t, cleanup: n } = rn(e4.timeoutMs), r = nn(e4.signal, t);
    return [r.signal, function(i) {
      let s = S.from(t.aborted ? rt(t) : i);
      return r.abort(s), n(), Promise.reject(s);
    }, function() {
      n(), r.abort();
    }];
  }
  function En(e4, t) {
    var n;
    return (n = t == null ? void 0 : t.concat().reverse().reduce((r, o) => o(r), e4)) !== null && n !== void 0 ? n : e4;
  }
  var ke = ((n) => (n[n.UNSPECIFIED = 0] = "UNSPECIFIED", n[n.JUPYTER_FORMAT = 77] = "JUPYTER_FORMAT", n))(ke || {});
  d.util.setEnumType(ke, "exa.codeium_common_pb.ExperimentKey", [{ no: 0, name: "UNSPECIFIED" }, { no: 77, name: "JUPYTER_FORMAT" }]);
  var ut = ((t) => (t[t.CODEIUM = 0] = "CODEIUM", t))(ut || {});
  d.util.setEnumType(ut, "exa.codeium_common_pb.AuthSource", [{ no: 0, name: "AUTH_SOURCE_CODEIUM" }]);
  var ft = ((i) => (i[i.UNSPECIFIED = 0] = "UNSPECIFIED", i[i.ENABLE_CODEIUM = 1] = "ENABLE_CODEIUM", i[i.DISABLE_CODEIUM = 2] = "DISABLE_CODEIUM", i[i.SHOW_PREVIOUS_COMPLETION = 3] = "SHOW_PREVIOUS_COMPLETION", i[i.SHOW_NEXT_COMPLETION = 4] = "SHOW_NEXT_COMPLETION", i))(ft || {});
  d.util.setEnumType(ft, "exa.codeium_common_pb.EventType", [{ no: 0, name: "EVENT_TYPE_UNSPECIFIED" }, { no: 1, name: "EVENT_TYPE_ENABLE_CODEIUM" }, { no: 2, name: "EVENT_TYPE_DISABLE_CODEIUM" }, { no: 3, name: "EVENT_TYPE_SHOW_PREVIOUS_COMPLETION" }, { no: 4, name: "EVENT_TYPE_SHOW_NEXT_COMPLETION" }]);
  var Oe = ((o) => (o[o.UNSPECIFIED = 0] = "UNSPECIFIED", o[o.TYPING_AS_SUGGESTED = 1] = "TYPING_AS_SUGGESTED", o[o.CACHE = 2] = "CACHE", o[o.NETWORK = 3] = "NETWORK", o))(Oe || {});
  d.util.setEnumType(Oe, "exa.codeium_common_pb.CompletionSource", [{ no: 0, name: "COMPLETION_SOURCE_UNSPECIFIED" }, { no: 1, name: "COMPLETION_SOURCE_TYPING_AS_SUGGESTED" }, { no: 2, name: "COMPLETION_SOURCE_CACHE" }, { no: 3, name: "COMPLETION_SOURCE_NETWORK" }]);
  var $ = ((u) => (u[u.UNSPECIFIED = 0] = "UNSPECIFIED", u[u.C = 1] = "C", u[u.CLOJURE = 2] = "CLOJURE", u[u.COFFEESCRIPT = 3] = "COFFEESCRIPT", u[u.CPP = 4] = "CPP", u[u.CSHARP = 5] = "CSHARP", u[u.CSS = 6] = "CSS", u[u.CUDACPP = 7] = "CUDACPP", u[u.DOCKERFILE = 8] = "DOCKERFILE", u[u.GO = 9] = "GO", u[u.GROOVY = 10] = "GROOVY", u[u.HANDLEBARS = 11] = "HANDLEBARS", u[u.HASKELL = 12] = "HASKELL", u[u.HCL = 13] = "HCL", u[u.HTML = 14] = "HTML", u[u.INI = 15] = "INI", u[u.JAVA = 16] = "JAVA", u[u.JAVASCRIPT = 17] = "JAVASCRIPT", u[u.JSON = 18] = "JSON", u[u.JULIA = 19] = "JULIA", u[u.KOTLIN = 20] = "KOTLIN", u[u.LATEX = 21] = "LATEX", u[u.LESS = 22] = "LESS", u[u.LUA = 23] = "LUA", u[u.MAKEFILE = 24] = "MAKEFILE", u[u.MARKDOWN = 25] = "MARKDOWN", u[u.OBJECTIVEC = 26] = "OBJECTIVEC", u[u.OBJECTIVECPP = 27] = "OBJECTIVECPP", u[u.PERL = 28] = "PERL", u[u.PHP = 29] = "PHP", u[u.PLAINTEXT = 30] = "PLAINTEXT", u[u.PROTOBUF = 31] = "PROTOBUF", u[u.PBTXT = 32] = "PBTXT", u[u.PYTHON = 33] = "PYTHON", u[u.R = 34] = "R", u[u.RUBY = 35] = "RUBY", u[u.RUST = 36] = "RUST", u[u.SASS = 37] = "SASS", u[u.SCALA = 38] = "SCALA", u[u.SCSS = 39] = "SCSS", u[u.SHELL = 40] = "SHELL", u[u.SQL = 41] = "SQL", u[u.STARLARK = 42] = "STARLARK", u[u.SWIFT = 43] = "SWIFT", u[u.TSX = 44] = "TSX", u[u.TYPESCRIPT = 45] = "TYPESCRIPT", u[u.VISUALBASIC = 46] = "VISUALBASIC", u[u.VUE = 47] = "VUE", u[u.XML = 48] = "XML", u[u.XSL = 49] = "XSL", u[u.YAML = 50] = "YAML", u[u.SVELTE = 51] = "SVELTE", u[u.TOML = 52] = "TOML", u[u.DART = 53] = "DART", u[u.RST = 54] = "RST", u[u.OCAML = 55] = "OCAML", u[u.CMAKE = 56] = "CMAKE", u[u.PASCAL = 57] = "PASCAL", u[u.ELIXIR = 58] = "ELIXIR", u[u.FSHARP = 59] = "FSHARP", u[u.LISP = 60] = "LISP", u[u.MATLAB = 61] = "MATLAB", u[u.POWERSHELL = 62] = "POWERSHELL", u[u.SOLIDITY = 63] = "SOLIDITY", u[u.ADA = 64] = "ADA", u[u.OCAML_INTERFACE = 65] = "OCAML_INTERFACE", u))($ || {});
  d.util.setEnumType($, "exa.codeium_common_pb.Language", [{ no: 0, name: "LANGUAGE_UNSPECIFIED" }, { no: 1, name: "LANGUAGE_C" }, { no: 2, name: "LANGUAGE_CLOJURE" }, { no: 3, name: "LANGUAGE_COFFEESCRIPT" }, { no: 4, name: "LANGUAGE_CPP" }, { no: 5, name: "LANGUAGE_CSHARP" }, { no: 6, name: "LANGUAGE_CSS" }, { no: 7, name: "LANGUAGE_CUDACPP" }, { no: 8, name: "LANGUAGE_DOCKERFILE" }, { no: 9, name: "LANGUAGE_GO" }, { no: 10, name: "LANGUAGE_GROOVY" }, { no: 11, name: "LANGUAGE_HANDLEBARS" }, { no: 12, name: "LANGUAGE_HASKELL" }, { no: 13, name: "LANGUAGE_HCL" }, { no: 14, name: "LANGUAGE_HTML" }, { no: 15, name: "LANGUAGE_INI" }, { no: 16, name: "LANGUAGE_JAVA" }, { no: 17, name: "LANGUAGE_JAVASCRIPT" }, { no: 18, name: "LANGUAGE_JSON" }, { no: 19, name: "LANGUAGE_JULIA" }, { no: 20, name: "LANGUAGE_KOTLIN" }, { no: 21, name: "LANGUAGE_LATEX" }, { no: 22, name: "LANGUAGE_LESS" }, { no: 23, name: "LANGUAGE_LUA" }, { no: 24, name: "LANGUAGE_MAKEFILE" }, { no: 25, name: "LANGUAGE_MARKDOWN" }, { no: 26, name: "LANGUAGE_OBJECTIVEC" }, { no: 27, name: "LANGUAGE_OBJECTIVECPP" }, { no: 28, name: "LANGUAGE_PERL" }, { no: 29, name: "LANGUAGE_PHP" }, { no: 30, name: "LANGUAGE_PLAINTEXT" }, { no: 31, name: "LANGUAGE_PROTOBUF" }, { no: 32, name: "LANGUAGE_PBTXT" }, { no: 33, name: "LANGUAGE_PYTHON" }, { no: 34, name: "LANGUAGE_R" }, { no: 35, name: "LANGUAGE_RUBY" }, { no: 36, name: "LANGUAGE_RUST" }, { no: 37, name: "LANGUAGE_SASS" }, { no: 38, name: "LANGUAGE_SCALA" }, { no: 39, name: "LANGUAGE_SCSS" }, { no: 40, name: "LANGUAGE_SHELL" }, { no: 41, name: "LANGUAGE_SQL" }, { no: 42, name: "LANGUAGE_STARLARK" }, { no: 43, name: "LANGUAGE_SWIFT" }, { no: 44, name: "LANGUAGE_TSX" }, { no: 45, name: "LANGUAGE_TYPESCRIPT" }, { no: 46, name: "LANGUAGE_VISUALBASIC" }, { no: 47, name: "LANGUAGE_VUE" }, { no: 48, name: "LANGUAGE_XML" }, { no: 49, name: "LANGUAGE_XSL" }, { no: 50, name: "LANGUAGE_YAML" }, { no: 51, name: "LANGUAGE_SVELTE" }, { no: 52, name: "LANGUAGE_TOML" }, { no: 53, name: "LANGUAGE_DART" }, { no: 54, name: "LANGUAGE_RST" }, { no: 55, name: "LANGUAGE_OCAML" }, { no: 56, name: "LANGUAGE_CMAKE" }, { no: 57, name: "LANGUAGE_PASCAL" }, { no: 58, name: "LANGUAGE_ELIXIR" }, { no: 59, name: "LANGUAGE_FSHARP" }, { no: 60, name: "LANGUAGE_LISP" }, { no: 61, name: "LANGUAGE_MATLAB" }, { no: 62, name: "LANGUAGE_POWERSHELL" }, { no: 63, name: "LANGUAGE_SOLIDITY" }, { no: 64, name: "LANGUAGE_ADA" }, { no: 65, name: "LANGUAGE_OCAML_INTERFACE" }]);
  var ve = (_a = class extends w {
    constructor(n) {
      super();
      this.completionId = "";
      this.text = "";
      this.prefix = "";
      this.stop = "";
      this.score = 0;
      this.tokens = [];
      this.decodedTokens = [];
      this.probabilities = [];
      this.adjustedProbabilities = [];
      this.generatedLength = x.zero;
      d.util.initPartial(n, this);
    }
    static fromBinary(n, r) {
      return new _a().fromBinary(n, r);
    }
    static fromJson(n, r) {
      return new _a().fromJson(n, r);
    }
    static fromJsonString(n, r) {
      return new _a().fromJsonString(n, r);
    }
    static equals(n, r) {
      return d.util.equals(_a, n, r);
    }
  }, (() => {
    _a.runtime = d;
  })(), (() => {
    _a.typeName = "exa.codeium_common_pb.Completion";
  })(), (() => {
    _a.fields = d.util.newFieldList(() => [{ no: 1, name: "completion_id", kind: "scalar", T: 9 }, { no: 2, name: "text", kind: "scalar", T: 9 }, { no: 3, name: "prefix", kind: "scalar", T: 9 }, { no: 4, name: "stop", kind: "scalar", T: 9 }, { no: 5, name: "score", kind: "scalar", T: 1 }, { no: 6, name: "tokens", kind: "scalar", T: 4, repeated: true }, { no: 7, name: "decoded_tokens", kind: "scalar", T: 9, repeated: true }, { no: 8, name: "probabilities", kind: "scalar", T: 1, repeated: true }, { no: 9, name: "adjusted_probabilities", kind: "scalar", T: 1, repeated: true }, { no: 10, name: "generated_length", kind: "scalar", T: 4 }]);
  })(), _a), G = (_b = class extends w {
    constructor(n) {
      super();
      this.ideName = "";
      this.ideVersion = "";
      this.extensionName = "";
      this.extensionVersion = "";
      this.apiKey = "";
      this.locale = "";
      this.sessionId = "";
      this.requestId = x.zero;
      this.userAgent = "";
      this.url = "";
      this.authSource = 0;
      d.util.initPartial(n, this);
    }
    static fromBinary(n, r) {
      return new _b().fromBinary(n, r);
    }
    static fromJson(n, r) {
      return new _b().fromJson(n, r);
    }
    static fromJsonString(n, r) {
      return new _b().fromJsonString(n, r);
    }
    static equals(n, r) {
      return d.util.equals(_b, n, r);
    }
  }, (() => {
    _b.runtime = d;
  })(), (() => {
    _b.typeName = "exa.codeium_common_pb.Metadata";
  })(), (() => {
    _b.fields = d.util.newFieldList(() => [{ no: 1, name: "ide_name", kind: "scalar", T: 9 }, { no: 7, name: "ide_version", kind: "scalar", T: 9 }, { no: 12, name: "extension_name", kind: "scalar", T: 9 }, { no: 2, name: "extension_version", kind: "scalar", T: 9 }, { no: 3, name: "api_key", kind: "scalar", T: 9 }, { no: 4, name: "locale", kind: "scalar", T: 9 }, { no: 10, name: "session_id", kind: "scalar", T: 9 }, { no: 9, name: "request_id", kind: "scalar", T: 4 }, { no: 13, name: "user_agent", kind: "scalar", T: 9 }, { no: 14, name: "url", kind: "scalar", T: 9 }, { no: 15, name: "auth_source", kind: "enum", T: d.getEnumType(ut) }]);
  })(), _b), Ce = (_c = class extends w {
    constructor(n) {
      super();
      this.tabSize = x.zero;
      this.insertSpaces = false;
      d.util.initPartial(n, this);
    }
    static fromBinary(n, r) {
      return new _c().fromBinary(n, r);
    }
    static fromJson(n, r) {
      return new _c().fromJson(n, r);
    }
    static fromJsonString(n, r) {
      return new _c().fromJsonString(n, r);
    }
    static equals(n, r) {
      return d.util.equals(_c, n, r);
    }
  }, (() => {
    _c.runtime = d;
  })(), (() => {
    _c.typeName = "exa.codeium_common_pb.EditorOptions";
  })(), (() => {
    _c.fields = d.util.newFieldList(() => [{ no: 1, name: "tab_size", kind: "scalar", T: 4 }, { no: 2, name: "insert_spaces", kind: "scalar", T: 8 }]);
  })(), _c);
  _d = class extends w {
    constructor(n) {
      super();
      this.eventType = 0;
      this.eventJson = "";
      this.timestampUnixMs = x.zero;
      d.util.initPartial(n, this);
    }
    static fromBinary(n, r) {
      return new _d().fromBinary(n, r);
    }
    static fromJson(n, r) {
      return new _d().fromJson(n, r);
    }
    static fromJsonString(n, r) {
      return new _d().fromJsonString(n, r);
    }
    static equals(n, r) {
      return d.util.equals(_d, n, r);
    }
  }, (() => {
    _d.runtime = d;
  })(), (() => {
    _d.typeName = "exa.codeium_common_pb.Event";
  })(), (() => {
    _d.fields = d.util.newFieldList(() => [{ no: 1, name: "event_type", kind: "enum", T: d.getEnumType(ft) }, { no: 2, name: "event_json", kind: "scalar", T: 9 }, { no: 3, name: "timestamp_unix_ms", kind: "scalar", T: 3 }]);
  })();
  var bt = ((s) => (s[s.UNSPECIFIED = 0] = "UNSPECIFIED", s[s.INACTIVE = 1] = "INACTIVE", s[s.PROCESSING = 2] = "PROCESSING", s[s.SUCCESS = 3] = "SUCCESS", s[s.WARNING = 4] = "WARNING", s[s.ERROR = 5] = "ERROR", s))(bt || {});
  d.util.setEnumType(bt, "exa.language_server_pb.CodeiumState", [{ no: 0, name: "CODEIUM_STATE_UNSPECIFIED" }, { no: 1, name: "CODEIUM_STATE_INACTIVE" }, { no: 2, name: "CODEIUM_STATE_PROCESSING" }, { no: 3, name: "CODEIUM_STATE_SUCCESS" }, { no: 4, name: "CODEIUM_STATE_WARNING" }, { no: 5, name: "CODEIUM_STATE_ERROR" }]);
  var xn = ((r) => (r[r.UNSPECIFIED = 0] = "UNSPECIFIED", r[r.SINGLE = 1] = "SINGLE", r[r.MULTI = 2] = "MULTI", r))(xn || {});
  d.util.setEnumType(xn, "exa.language_server_pb.LineType", [{ no: 0, name: "LINE_TYPE_UNSPECIFIED" }, { no: 1, name: "LINE_TYPE_SINGLE" }, { no: 2, name: "LINE_TYPE_MULTI" }]);
  var Et = ((o) => (o[o.UNSPECIFIED = 0] = "UNSPECIFIED", o[o.INLINE = 1] = "INLINE", o[o.BLOCK = 2] = "BLOCK", o[o.INLINE_MASK = 3] = "INLINE_MASK", o))(Et || {});
  d.util.setEnumType(Et, "exa.language_server_pb.CompletionPartType", [{ no: 0, name: "COMPLETION_PART_TYPE_UNSPECIFIED" }, { no: 1, name: "COMPLETION_PART_TYPE_INLINE" }, { no: 2, name: "COMPLETION_PART_TYPE_BLOCK" }, { no: 3, name: "COMPLETION_PART_TYPE_INLINE_MASK" }]);
  var Ue = (_e2 = class extends w {
    constructor(n) {
      super();
      this.otherDocuments = [];
      this.modelName = "";
      d.util.initPartial(n, this);
    }
    static fromBinary(n, r) {
      return new _e2().fromBinary(n, r);
    }
    static fromJson(n, r) {
      return new _e2().fromJson(n, r);
    }
    static fromJsonString(n, r) {
      return new _e2().fromJsonString(n, r);
    }
    static equals(n, r) {
      return d.util.equals(_e2, n, r);
    }
  }, (() => {
    _e2.runtime = d;
  })(), (() => {
    _e2.typeName = "exa.language_server_pb.GetCompletionsRequest";
  })(), (() => {
    _e2.fields = d.util.newFieldList(() => [{ no: 1, name: "metadata", kind: "message", T: G }, { no: 2, name: "document", kind: "message", T: M }, { no: 3, name: "editor_options", kind: "message", T: Ce }, { no: 5, name: "other_documents", kind: "message", T: M, repeated: true }, { no: 7, name: "experiment_config", kind: "message", T: mt }, { no: 10, name: "model_name", kind: "scalar", T: 9 }]);
  })(), _e2), Re = (_f = class extends w {
    constructor(n) {
      super();
      this.completionItems = [];
      d.util.initPartial(n, this);
    }
    static fromBinary(n, r) {
      return new _f().fromBinary(n, r);
    }
    static fromJson(n, r) {
      return new _f().fromJson(n, r);
    }
    static fromJsonString(n, r) {
      return new _f().fromJsonString(n, r);
    }
    static equals(n, r) {
      return d.util.equals(_f, n, r);
    }
  }, (() => {
    _f.runtime = d;
  })(), (() => {
    _f.typeName = "exa.language_server_pb.GetCompletionsResponse";
  })(), (() => {
    _f.fields = d.util.newFieldList(() => [{ no: 1, name: "state", kind: "message", T: dt }, { no: 2, name: "completion_items", kind: "message", T: gt, repeated: true }]);
  })(), _f), Fe = (_g = class extends w {
    constructor(n) {
      super();
      this.completionId = "";
      d.util.initPartial(n, this);
    }
    static fromBinary(n, r) {
      return new _g().fromBinary(n, r);
    }
    static fromJson(n, r) {
      return new _g().fromJson(n, r);
    }
    static fromJsonString(n, r) {
      return new _g().fromJsonString(n, r);
    }
    static equals(n, r) {
      return d.util.equals(_g, n, r);
    }
  }, (() => {
    _g.runtime = d;
  })(), (() => {
    _g.typeName = "exa.language_server_pb.AcceptCompletionRequest";
  })(), (() => {
    _g.fields = d.util.newFieldList(() => [{ no: 1, name: "metadata", kind: "message", T: G }, { no: 2, name: "completion_id", kind: "scalar", T: 9 }]);
  })(), _g), _e = (_h = class extends w {
    constructor(t) {
      super(), d.util.initPartial(t, this);
    }
    static fromBinary(t, n) {
      return new _h().fromBinary(t, n);
    }
    static fromJson(t, n) {
      return new _h().fromJson(t, n);
    }
    static fromJsonString(t, n) {
      return new _h().fromJsonString(t, n);
    }
    static equals(t, n) {
      return d.util.equals(_h, t, n);
    }
  }, (() => {
    _h.runtime = d;
  })(), (() => {
    _h.typeName = "exa.language_server_pb.AcceptCompletionResponse";
  })(), (() => {
    _h.fields = d.util.newFieldList(() => []);
  })(), _h), Je = (_i = class extends w {
    constructor(t) {
      super(), d.util.initPartial(t, this);
    }
    static fromBinary(t, n) {
      return new _i().fromBinary(t, n);
    }
    static fromJson(t, n) {
      return new _i().fromJson(t, n);
    }
    static fromJsonString(t, n) {
      return new _i().fromJsonString(t, n);
    }
    static equals(t, n) {
      return d.util.equals(_i, t, n);
    }
  }, (() => {
    _i.runtime = d;
  })(), (() => {
    _i.typeName = "exa.language_server_pb.GetAuthTokenRequest";
  })(), (() => {
    _i.fields = d.util.newFieldList(() => []);
  })(), _i), Me = (_j = class extends w {
    constructor(n) {
      super();
      this.authToken = "";
      this.uuid = "";
      d.util.initPartial(n, this);
    }
    static fromBinary(n, r) {
      return new _j().fromBinary(n, r);
    }
    static fromJson(n, r) {
      return new _j().fromJson(n, r);
    }
    static fromJsonString(n, r) {
      return new _j().fromJsonString(n, r);
    }
    static equals(n, r) {
      return d.util.equals(_j, n, r);
    }
  }, (() => {
    _j.runtime = d;
  })(), (() => {
    _j.typeName = "exa.language_server_pb.GetAuthTokenResponse";
  })(), (() => {
    _j.fields = d.util.newFieldList(() => [{ no: 1, name: "auth_token", kind: "scalar", T: 9 }, { no: 2, name: "uuid", kind: "scalar", T: 9 }]);
  })(), _j), te = (_k = class extends w {
    constructor(n) {
      super();
      this.row = x.zero;
      this.col = x.zero;
      d.util.initPartial(n, this);
    }
    static fromBinary(n, r) {
      return new _k().fromBinary(n, r);
    }
    static fromJson(n, r) {
      return new _k().fromJson(n, r);
    }
    static fromJsonString(n, r) {
      return new _k().fromJsonString(n, r);
    }
    static equals(n, r) {
      return d.util.equals(_k, n, r);
    }
  }, (() => {
    _k.runtime = d;
  })(), (() => {
    _k.typeName = "exa.language_server_pb.DocumentPosition";
  })(), (() => {
    _k.fields = d.util.newFieldList(() => [{ no: 1, name: "row", kind: "scalar", T: 4 }, { no: 2, name: "col", kind: "scalar", T: 4 }]);
  })(), _k), M = (_l = class extends w {
    constructor(n) {
      super();
      this.absolutePath = "";
      this.relativePath = "";
      this.text = "";
      this.editorLanguage = "";
      this.language = 0;
      this.cursorOffset = x.zero;
      this.lineEnding = "";
      d.util.initPartial(n, this);
    }
    static fromBinary(n, r) {
      return new _l().fromBinary(n, r);
    }
    static fromJson(n, r) {
      return new _l().fromJson(n, r);
    }
    static fromJsonString(n, r) {
      return new _l().fromJsonString(n, r);
    }
    static equals(n, r) {
      return d.util.equals(_l, n, r);
    }
  }, (() => {
    _l.runtime = d;
  })(), (() => {
    _l.typeName = "exa.language_server_pb.Document";
  })(), (() => {
    _l.fields = d.util.newFieldList(() => [{ no: 1, name: "absolute_path", kind: "scalar", T: 9 }, { no: 2, name: "relative_path", kind: "scalar", T: 9 }, { no: 3, name: "text", kind: "scalar", T: 9 }, { no: 4, name: "editor_language", kind: "scalar", T: 9 }, { no: 5, name: "language", kind: "enum", T: d.getEnumType($) }, { no: 6, name: "cursor_offset", kind: "scalar", T: 4 }, { no: 8, name: "cursor_position", kind: "message", T: te }, { no: 7, name: "line_ending", kind: "scalar", T: 9 }]);
  })(), _l), mt = (_m = class extends w {
    constructor(n) {
      super();
      this.forceEnableExperiments = [];
      d.util.initPartial(n, this);
    }
    static fromBinary(n, r) {
      return new _m().fromBinary(n, r);
    }
    static fromJson(n, r) {
      return new _m().fromJson(n, r);
    }
    static fromJsonString(n, r) {
      return new _m().fromJsonString(n, r);
    }
    static equals(n, r) {
      return d.util.equals(_m, n, r);
    }
  }, (() => {
    _m.runtime = d;
  })(), (() => {
    _m.typeName = "exa.language_server_pb.ExperimentConfig";
  })(), (() => {
    _m.fields = d.util.newFieldList(() => [{ no: 1, name: "force_enable_experiments", kind: "enum", T: d.getEnumType(ke), repeated: true }]);
  })(), _m), dt = (_n2 = class extends w {
    constructor(n) {
      super();
      this.state = 0;
      this.message = "";
      d.util.initPartial(n, this);
    }
    static fromBinary(n, r) {
      return new _n2().fromBinary(n, r);
    }
    static fromJson(n, r) {
      return new _n2().fromJson(n, r);
    }
    static fromJsonString(n, r) {
      return new _n2().fromJsonString(n, r);
    }
    static equals(n, r) {
      return d.util.equals(_n2, n, r);
    }
  }, (() => {
    _n2.runtime = d;
  })(), (() => {
    _n2.typeName = "exa.language_server_pb.State";
  })(), (() => {
    _n2.fields = d.util.newFieldList(() => [{ no: 1, name: "state", kind: "enum", T: d.getEnumType(bt) }, { no: 2, name: "message", kind: "scalar", T: 9 }]);
  })(), _n2), pt = (_o = class extends w {
    constructor(n) {
      super();
      this.startOffset = x.zero;
      this.endOffset = x.zero;
      d.util.initPartial(n, this);
    }
    static fromBinary(n, r) {
      return new _o().fromBinary(n, r);
    }
    static fromJson(n, r) {
      return new _o().fromJson(n, r);
    }
    static fromJsonString(n, r) {
      return new _o().fromJsonString(n, r);
    }
    static equals(n, r) {
      return d.util.equals(_o, n, r);
    }
  }, (() => {
    _o.runtime = d;
  })(), (() => {
    _o.typeName = "exa.language_server_pb.Range";
  })(), (() => {
    _o.fields = d.util.newFieldList(() => [{ no: 1, name: "start_offset", kind: "scalar", T: 4 }, { no: 2, name: "end_offset", kind: "scalar", T: 4 }, { no: 3, name: "start_position", kind: "message", T: te }, { no: 4, name: "end_position", kind: "message", T: te }]);
  })(), _o), ht = (_p = class extends w {
    constructor(n) {
      super();
      this.text = "";
      this.deltaCursorOffset = x.zero;
      d.util.initPartial(n, this);
    }
    static fromBinary(n, r) {
      return new _p().fromBinary(n, r);
    }
    static fromJson(n, r) {
      return new _p().fromJson(n, r);
    }
    static fromJsonString(n, r) {
      return new _p().fromJsonString(n, r);
    }
    static equals(n, r) {
      return d.util.equals(_p, n, r);
    }
  }, (() => {
    _p.runtime = d;
  })(), (() => {
    _p.typeName = "exa.language_server_pb.Suffix";
  })(), (() => {
    _p.fields = d.util.newFieldList(() => [{ no: 1, name: "text", kind: "scalar", T: 9 }, { no: 2, name: "delta_cursor_offset", kind: "scalar", T: 3 }]);
  })(), _p), yt = (_q = class extends w {
    constructor(n) {
      super();
      this.text = "";
      this.offset = x.zero;
      this.type = 0;
      this.prefix = "";
      this.line = x.zero;
      d.util.initPartial(n, this);
    }
    static fromBinary(n, r) {
      return new _q().fromBinary(n, r);
    }
    static fromJson(n, r) {
      return new _q().fromJson(n, r);
    }
    static fromJsonString(n, r) {
      return new _q().fromJsonString(n, r);
    }
    static equals(n, r) {
      return d.util.equals(_q, n, r);
    }
  }, (() => {
    _q.runtime = d;
  })(), (() => {
    _q.typeName = "exa.language_server_pb.CompletionPart";
  })(), (() => {
    _q.fields = d.util.newFieldList(() => [{ no: 1, name: "text", kind: "scalar", T: 9 }, { no: 2, name: "offset", kind: "scalar", T: 4 }, { no: 3, name: "type", kind: "enum", T: d.getEnumType(Et) }, { no: 4, name: "prefix", kind: "scalar", T: 9 }, { no: 5, name: "line", kind: "scalar", T: 4 }]);
  })(), _q), gt = (_r = class extends w {
    constructor(n) {
      super();
      this.source = 0;
      this.completionParts = [];
      d.util.initPartial(n, this);
    }
    static fromBinary(n, r) {
      return new _r().fromBinary(n, r);
    }
    static fromJson(n, r) {
      return new _r().fromJson(n, r);
    }
    static fromJsonString(n, r) {
      return new _r().fromJsonString(n, r);
    }
    static equals(n, r) {
      return d.util.equals(_r, n, r);
    }
  }, (() => {
    _r.runtime = d;
  })(), (() => {
    _r.typeName = "exa.language_server_pb.CompletionItem";
  })(), (() => {
    _r.fields = d.util.newFieldList(() => [{ no: 1, name: "completion", kind: "message", T: ve }, { no: 5, name: "suffix", kind: "message", T: ht }, { no: 2, name: "range", kind: "message", T: pt }, { no: 3, name: "source", kind: "enum", T: d.getEnumType(Oe) }, { no: 8, name: "completion_parts", kind: "message", T: yt, repeated: true }]);
  })(), _r);
  var O = class e2 {
    constructor(t, n) {
      this.line = t, this.character = n, this.lineNumber = t + 1, this.column = n + 1;
    }
    static fromMonaco(t) {
      return new e2(t.lineNumber - 1, t.column - 1);
    }
    static fromPosition(t) {
      return new e2(t.line, t.character);
    }
  }, B = class e3 {
    constructor(t, n) {
      this.start = t, this.end = n, this.startLineNumber = t.line + 1, this.startColumn = t.character + 1, this.endLineNumber = n.line + 1, this.endColumn = n.character + 1;
    }
    static fromMonaco(t) {
      return new e3(new O(t.startLineNumber - 1, t.startColumn - 1), new O(t.endLineNumber - 1, t.endColumn - 1));
    }
    static fromRange(t) {
      return new e3(t.start, t.end);
    }
  };
  var Ge = class {
    constructor(t, n) {
      this.text = t, this.range = n;
    }
  };
  var Be = class {
    constructor(t) {
      this.model = t, this.uri = t.uri, this.languageId = t.getLanguageId();
    }
    get lineCount() {
      return this.model.getLineCount();
    }
    lineAt(t) {
      return typeof t != "number" && (t = t.line), new Ge(this.model.getLineContent(t + 1), new B(new O(t, 0), new O(t, this.model.getLineLength(t + 1))));
    }
    offsetAt(t) {
      return this.model.getOffsetAt(O.fromPosition(t));
    }
    positionAt(t) {
      return O.fromMonaco(this.model.getPositionAt(t));
    }
    getText(t) {
      return t ? this.model.getValueInRange(B.fromRange(t)) : this.model.getValue();
    }
  };
  var In = () => {
    try {
      return window.location.origin;
    } catch {
      return null;
    }
  }, Tn = () => "1.0.10";
  function Sn(e4) {
    return e4 < 128 ? 1 : e4 < 2048 ? 2 : e4 < 65536 ? 3 : 4;
  }
  function An(e4, t) {
    if (t === 0)
      return 0;
    let n = 0, r = 0;
    for (let o of e4)
      if (r += o.length, n += Sn(o.codePointAt(0)), t !== void 0 && r >= t)
        break;
    return n;
  }
  function wt(e4, t) {
    if (t === 0)
      return 0;
    let n = 0, r = 0;
    for (let o of e4)
      if (r += Sn(o.codePointAt(0)), n += o.length, t !== void 0 && r >= t)
        break;
    return n;
  }
  var Nn = () => "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (e4) => {
    let t = Math.random() * 16 | 0;
    return (e4 === "x" ? t : t & 3 | 8).toString(16);
  }), Le = (e4) => {
    switch (e4.toLowerCase()) {
      case "c":
        return 1;
      case "clojure":
        return 2;
      case "coffeescript":
        return 3;
      case "cpp":
        return 4;
      case "csharp":
        return 5;
      case "css":
        return 6;
      case "cudacpp":
        return 7;
      case "dockerfile":
        return 8;
      case "go":
        return 9;
      case "groovy":
        return 10;
      case "handlebars":
        return 11;
      case "haskell":
        return 12;
      case "hcl":
        return 13;
      case "html":
        return 14;
      case "ini":
        return 15;
      case "java":
        return 16;
      case "javascript":
        return 17;
      case "json":
        return 18;
      case "julia":
        return 19;
      case "kotlin":
        return 20;
      case "latex":
        return 21;
      case "less":
        return 22;
      case "lua":
        return 23;
      case "makefile":
        return 24;
      case "markdown":
        return 25;
      case "objectivec":
        return 26;
      case "objectivecpp":
        return 27;
      case "perl":
        return 28;
      case "php":
        return 29;
      case "plaintext":
        return 30;
      case "protobuf":
        return 31;
      case "pbtxt":
        return 32;
      case "python":
        return 33;
      case "r":
        return 34;
      case "ruby":
        return 35;
      case "rust":
        return 36;
      case "sass":
        return 37;
      case "scala":
        return 38;
      case "scss":
        return 39;
      case "shell":
        return 40;
      case "sql":
        return 41;
      case "starlark":
        return 42;
      case "swift":
        return 43;
      case "tsx":
        return 44;
      case "typescript":
        return 45;
      case "visualbasic":
        return 46;
      case "vue":
        return 47;
      case "xml":
        return 48;
      case "xsl":
        return 49;
      case "yaml":
        return 50;
      case "svelte":
        return 51;
      case "toml":
        return 52;
      case "dart":
        return 53;
      case "rst":
        return 54;
      case "ocaml":
        return 55;
      case "cmake":
        return 56;
      case "pascal":
        return 57;
      case "elixir":
        return 58;
      case "fsharp":
        return 59;
      case "lisp":
        return 60;
      case "matlab":
        return 61;
      case "powershell":
        return 62;
      case "solidity":
        return 63;
      case "ada":
        return 64;
      case "ocaml_interface":
        return 65;
      default:
        return 0;
    }
  };
  var xt = class {
    constructor(t, n, r) {
      this.insertText = t, this.text = t, this.range = n, this.command = { id: "codeium.acceptCompletion", title: "Accept Completion", arguments: [r, t] };
    }
  }, ur = "d49954eb-cfba-4992-980f-d8fb37f0e942", De = class {
    constructor(t, n, r, o) {
      this.setStatus = n;
      this.setMessage = r;
      this.apiKey = o;
      this.otherDocuments = [];
      this.sessionId = `react-editor-${Nn()}`, this.client = t;
    }
    getAuthHeader() {
      let t = this.getMetadata();
      return { Authorization: `Basic ${t.apiKey}-${t.sessionId}` };
    }
    getMetadata() {
      var _a2, _b2;
      return new G({ ideName: "web", ideVersion: (_a2 = In()) != null ? _a2 : "unknown", extensionName: "@codeium/react-code-editor", extensionVersion: Tn(), apiKey: (_b2 = this.apiKey) != null ? _b2 : ur, sessionId: this.sessionId });
    }
    async provideInlineCompletions(t, n, r) {
      let o = new Be(t), i = O.fromMonaco(n);
      r.onCancellationRequested(() => {
        var _a2;
        return (_a2 = r.cancellationCallback) == null ? void 0 : _a2.call(r);
      });
      let s = new AbortController();
      r.onCancellationRequested(() => {
        s.abort();
      });
      let a = s.signal;
      this.setStatus("processing"), this.setMessage("Generating completions...");
      let c = this.getDocumentInfo(o, i), l = { tabSize: BigInt(t.getOptions().tabSize), insertSpaces: t.getOptions().insertSpaces }, h = this.otherDocuments;
      h.length > 10 && (h = h.slice(0, 10));
      let y;
      try {
        y = await this.client.getCompletions({ metadata: this.getMetadata(), document: c, editorOptions: l, otherDocuments: h }, { signal: a, headers: this.getAuthHeader() });
      } catch (b) {
        b instanceof S && b.code === E.Canceled || (this.setStatus("error"), this.setMessage("Something went wrong; please try again."));
        return;
      }
      if (!y.completionItems) {
        let b = " No completions were generated";
        this.setStatus("success"), this.setMessage(b);
        return;
      }
      let p = y.completionItems.map((b) => this.createInlineCompletionItem(b, o)).filter((b) => !!b);
      this.setStatus("success");
      let g = `Generated ${p.length} completions`;
      return p.length === 1 && (g = "Generated 1 completion"), this.setMessage(g), { items: p };
    }
    acceptedLastCompletion(t) {
      new Promise((n, r) => {
        this.client.acceptCompletion({ metadata: this.getMetadata(), completionId: t }, { headers: this.getAuthHeader() }).then(n).catch((o) => {
        });
      });
    }
    getDocumentInfo(t, n) {
      let r = t.getText(), o = t.offsetAt(n), i = An(r, o), s = Le(t.languageId);
      return new M({ text: r, editorLanguage: t.languageId, language: s, cursorOffset: BigInt(i), lineEnding: `
` });
    }
    createInlineCompletionItem(t, n) {
      if (!t.completion || !t.range)
        return;
      let r = n.getText(), o = n.positionAt(wt(r, Number(t.range.startOffset))), i = n.positionAt(wt(r, Number(t.range.endOffset))), s = new B(o, i);
      return new xt(t.completion.text, s, t.completion.completionId);
    }
  };
  var Ve = class {
    constructor(t, n, r, o, i, s) {
      this.setCompletionCount = n;
      this.getEditorDocuments = i;
      this.numCompletionsProvided = 0, this.completionProvider = new De(t, r, o, s);
    }
    freeInlineCompletions() {
    }
    async provideInlineCompletions(t, n, r, o) {
      this.updateOtherDocuments(this.getEditorDocuments(t));
      let i = await this.completionProvider.provideInlineCompletions(t, n, o);
      return i && (this.numCompletionsProvided += 1, this.setCompletionCount(this.numCompletionsProvided)), i;
    }
    acceptedLastCompletion(t) {
      this.completionProvider.acceptedLastCompletion(t);
    }
    updateOtherDocuments(t) {
      this.completionProvider.otherDocuments = t;
    }
  };
  function Pn() {
    try {
      new Headers();
    } catch {
      throw new Error("connect-web requires the fetch API. Are you running on an old version of Node.js? Node.js is not supported in Connect for Web - please stay tuned for Connect for Node.");
    }
  }
  var ne = function(e4) {
    return this instanceof ne ? (this.v = e4, this) : new ne(e4);
  }, fr = function(e4, t, n) {
    if (!Symbol.asyncIterator)
      throw new TypeError("Symbol.asyncIterator is not defined.");
    var r = n.apply(e4, t || []), o, i = [];
    return o = {}, s("next"), s("throw"), s("return"), o[Symbol.asyncIterator] = function() {
      return this;
    }, o;
    function s(m) {
      r[m] && (o[m] = function(p) {
        return new Promise(function(g, b) {
          i.push([m, p, g, b]) > 1 || a(m, p);
        });
      });
    }
    function a(m, p) {
      try {
        c(r[m](p));
      } catch (g) {
        y(i[0][3], g);
      }
    }
    function c(m) {
      m.value instanceof ne ? Promise.resolve(m.value.v).then(l, h) : y(i[0][2], m);
    }
    function l(m) {
      a("next", m);
    }
    function h(m) {
      a("throw", m);
    }
    function y(m, p) {
      m(p), i.shift(), i.length && a(i[0][0], i[0][1]);
    }
  };
  function It(e4) {
    var t;
    Pn();
    let n = (t = e4.useBinaryFormat) !== null && t !== void 0 ? t : false;
    return { async unary(r, o, i, s, a, c, l) {
      var h;
      let { serialize: y, parse: m } = we(o, n, e4.jsonOptions, e4.binaryOptions);
      return s = s === void 0 ? e4.defaultTimeoutMs : s <= 0 ? void 0 : s, await ct({ interceptors: e4.interceptors, signal: i, timeoutMs: s, req: { stream: false, service: r, method: o, url: be(e4.baseUrl, r, o), init: { method: "POST", credentials: (h = e4.credentials) !== null && h !== void 0 ? h : "same-origin", redirect: "error", mode: "cors" }, header: Ne(o.kind, n, s, a), contextValues: l != null ? l : ge(), message: c }, next: async (p) => {
        var g;
        let b = e4.useHttpGet === true && o.idempotency === K.NoSideEffects, I = null;
        b ? p = at(p, y(p.message), n) : I = y(p.message);
        let T = await ((g = e4.fetch) !== null && g !== void 0 ? g : globalThis.fetch)(p.url, Object.assign(Object.assign({}, p.init), { headers: p.header, signal: p.signal, body: I })), { isUnaryError: k, unaryError: U } = Pe(o.kind, T.status, T.headers);
        if (k)
          throw Z(await T.json(), Ze(...Se(T.headers)), U);
        let [C, re] = Se(T.headers);
        return { stream: false, service: r, method: o, header: C, message: n ? m(new Uint8Array(await T.arrayBuffer())) : o.O.fromJson(await T.json(), Ee(e4.jsonOptions)), trailer: re };
      } });
    }, async stream(r, o, i, s, a, c, l) {
      var h;
      let { serialize: y, parse: m } = we(o, n, e4.jsonOptions, e4.binaryOptions);
      function p(b, I) {
        return fr(this, arguments, function* () {
          let T = et(b).getReader(), k = false;
          for (; ; ) {
            let U = yield ne(T.read());
            if (U.done)
              break;
            let { flags: C, data: re } = U.value;
            if ((C & xe) === xe) {
              k = true;
              let qe = it(re);
              if (qe.error)
                throw qe.error;
              qe.metadata.forEach((Cn, kn) => I.set(kn, Cn));
              continue;
            }
            yield yield ne(m(re));
          }
          if (!k)
            throw "missing EndStreamResponse";
        });
      }
      async function g(b) {
        if (o.kind != P.ServerStreaming)
          throw "The fetch API does not support streaming request bodies";
        let I = await b[Symbol.asyncIterator]().next();
        if (I.done == true)
          throw "missing request message";
        return tt(0, y(I.value));
      }
      return s = s === void 0 ? e4.defaultTimeoutMs : s <= 0 ? void 0 : s, await lt({ interceptors: e4.interceptors, timeoutMs: s, signal: i, req: { stream: true, service: r, method: o, url: be(e4.baseUrl, r, o), init: { method: "POST", credentials: (h = e4.credentials) !== null && h !== void 0 ? h : "same-origin", redirect: "error", mode: "cors" }, header: Ne(o.kind, n, s, a), contextValues: l != null ? l : ge(), message: c }, next: async (b) => {
        var I;
        let T = await ((I = e4.fetch) !== null && I !== void 0 ? I : globalThis.fetch)(b.url, Object.assign(Object.assign({}, b.init), { headers: b.header, signal: b.signal, body: await g(b.message) }));
        if (Pe(o.kind, T.status, T.headers), T.body === null)
          throw "missing response body";
        let k = new Headers();
        return Object.assign(Object.assign({}, b), { header: T.headers, trailer: k, message: p(T.body, k) });
      } });
    } };
  }
  var vn = { typeName: "exa.language_server_pb.LanguageServerService", methods: { getCompletions: { name: "GetCompletions", I: Ue, O: Re, kind: P.Unary }, acceptCompletion: { name: "AcceptCompletion", I: Fe, O: _e, kind: P.Unary }, getAuthToken: { name: "GetAuthToken", I: Je, O: Me, kind: P.Unary } } };
  var mr = (e4, { onAutocomplete: t, languageServer: n = "https://web-backend.codeium.com", apiKey: r, getEditors: o = () => [] } = {}) => {
    let i = 1, s = 0, a = (T) => {
      s = T;
    }, c = "inactive", l = (T) => {
      c = T;
    }, h = "", y = (T) => {
      h = T;
    }, m = It({ baseUrl: n, useBinaryFormat: true }), p = nt(vn, m), g = new Ve(p, a, l, y, v, r), b = e4.languages.registerInlineCompletionsProvider({ pattern: "**" }, g), I = e4.editor.registerCommand("codeium.acceptCompletion", (T, k, U) => {
      try {
        typeof t == "function" && t(U), i = i + 1, g.acceptedLastCompletion(k);
      } catch {
      }
    });
    function v(T) {
      let k = [];
      return o().forEach((U) => {
        let C = U.getModel();
        !C || C === T || k.push(new M({ absolutePath: C.uri.path, relativePath: C.uri.path.startsWith("/") ? C.uri.path.slice(1) : C.uri.path, text: U.getValue(), editorLanguage: C.getLanguageId(), language: Le(C.getLanguageId()) }));
      }), k;
    }
    return { getCompletionCount: () => s, getCodeiumStatus: () => c, getCodeiumStatusMessage: () => h, getAcceptedCompletionCount: () => i, dispose: () => {
      b.dispose(), I.dispose();
    } };
  };
  const _$1 = _unsafeWindow._;
  const regTheme = async (theme2) => {
    let themes = _unsafeWindow.codeThemes;
    let themeItem = themes.find((i) => i.themeName === theme2);
    if (themeItem.out)
      return;
    if (themeItem.loaded && themeItem.cache)
      return;
    let editor = _unsafeWindow.monaco.editor;
    const response = await fetch(`${"https://baozoulolw.oss-cn-chengdu.aliyuncs.com/codeSet/data"}/theme/${themeItem.group}/${themeItem.path}`);
    if (response.ok) {
      const json2 = await response.json();
      editor.defineTheme(theme2, json2);
      themeItem.loaded = true;
      themeItem.cache = json2;
    }
  };
  const setFeature = (font = {}) => {
    let dom = document.querySelector(
      ".view-lines.monaco-mouse-cursor-text"
    );
    if (!dom)
      return;
    dom.style["fontFamily"] = font.value;
  };
  const regTips = (language, monaco) => {
    var _a2;
    let allTips = _unsafeWindow.editorTips;
    const tipsList = allTips.filter((i) => i.supportLanguage === language);
    const completionItems = tipsList.map((tip) => {
      let kind = completionItemKinds.find((i) => i.value === tip.kind).name;
      let rule2 = tip.insertTextRules.map((i) => insertTextRules.find((fi) => fi.value === i).name);
      let result;
      for (let i = 0; i < rule2.length; i++) {
        result |= monaco.languages.CompletionItemInsertTextRule[rule2];
      }
      return {
        label: tip.label,
        kind: monaco.languages.CompletionItemKind[kind],
        insertText: tip.insertText,
        documentation: tip.documentation,
        detail: tip.detail,
        insertTextRules: result,
        sortText: tip.sortText
      };
    });
    if (_$1.isEmpty(completionItems))
      return;
    let { [language]: disposable = {} } = (_a2 = _unsafeWindow.disposables) != null ? _a2 : {};
    if (!_$1.isEmpty(disposable)) {
      disposable.dispose();
    }
    disposable = monaco.languages.registerCompletionItemProvider(language, {
      provideCompletionItems(model, position) {
        return { suggestions: completionItems };
      }
    });
    _unsafeWindow.disposables[language] = disposable;
  };
  const editorCreated = async (monaco) => {
    await setDefaultSetting();
    useDTS(monaco, "lodash");
    useDTS(monaco, "Big");
    _unsafeWindow.disposables = {};
    let create = monaco.editor.create;
    monaco.editor.create = (ref, options, ...params) => {
      var _a2;
      let settings = (_a2 = JSON.parse(_unsafeWindow.localStorage.getItem("codeSettings"))) != null ? _a2 : {};
      let option = _$1.omit(options, ["theme", "fontFamily", "fontSize", "tabSize", "fontFeatureSettings"]);
      let font = fontFamilys.find((i) => i.value === settings.fontFamily);
      let editor = create(ref, {
        ...option,
        theme: settings.theme,
        fontFamily: settings.fontFamily,
        fontSize: settings.fontSize,
        tabSize: settings.tabSize,
        cursorSmoothCaretAnimation: true,
        roundedSelection: true,
        fontLigatures: true,
        formatOnType: true,
        minimap: {
          enabled: false
        },
        EditorAutoClosingEditStrategy: "auto",
        autoClosingComments: true,
        cursorBlinking: "smooth",
        overviewRulerBorder: true
      }, ...params);
      setFeature(font);
      setOther(option.language, editor, monaco);
      regTips(option.language, monaco);
      if (settings.aiCode) {
        addCodeium(monaco);
      }
      return editor;
    };
    previewEditor(monaco);
    monaco.editor.onWillDisposeModel(async function(editor) {
      disposeAi();
    });
  };
  const setOther = async (mode, editor, monaco) => {
    await wire(mode, editor, monaco);
  };
  const defineTheme = async () => {
    var _a2;
    const { theme: theme2 = "vs" } = (_a2 = JSON.parse(_unsafeWindow.localStorage.getItem("codeSettings"))) != null ? _a2 : {};
    await regTheme(theme2);
  };
  const setDefaultSetting = async () => {
    let defaultSetting = {
      fontSize: 13,
      fontFamily: "Menlo, Monaco, Courier New, monospace",
      theme: "vs",
      tabSize: 2,
      aiCode: false
    };
    let settings = _unsafeWindow.localStorage.getItem("codeSettings");
    if (_$1.isEmpty(settings)) {
      _unsafeWindow.localStorage.setItem("codeSettings", JSON.stringify(defaultSetting));
    } else {
      settings = JSON.parse(settings);
      Object.keys(defaultSetting).forEach((key) => {
        if (!_$1.has(settings, key)) {
          settings[key] = defaultSetting[key];
        }
      });
      _unsafeWindow.localStorage.setItem("codeSettings", JSON.stringify(settings));
      defineTheme();
    }
  };
  const initWork = () => {
    _unsafeWindow.MonacoEnvironment = {
      getWorkerUrl: function(workerId, label) {
        var _a2, _b2;
        let editorPath = ((_a2 = _unsafeWindow.$GLOBAL_CONFIG) == null ? void 0 : _a2.editorPath) ? _unsafeWindow.$GLOBAL_CONFIG.editorPath : `${((_b2 = _unsafeWindow.$GLOBAL_CONFIG) == null ? void 0 : _b2.resRoot) || ""}/fe_components/lowcode/third-party/monaco-editor/min`;
        return `data:text/javascript;charset=utf-8,${encodeURIComponent(`
          self.MonacoEnvironment = {
            baseUrl: '${editorPath}'
          };
          importScripts('${editorPath}/vs/base/worker/workerMain.js');`)}`;
      }
    };
  };
  const previewEditor = async (monaco) => {
    initWork();
    let editor = monaco.editor.create(document.createElement("div"), {
      language: "javascript",
      regTip: false
    });
    editor.dispose();
  };
  const addCodeium = async (monaco) => {
    _unsafeWindow.codeiumProvider = mr(
      monaco,
      {
        languageServer: "https://web-backend.codeium.com",
        apiKey: "d49954eb-cfba-4992-980f-d8fb37f0e942",
        onAutocomplete: (acceptedText) => {
        },
        getEditors: () => {
          return [];
        }
      }
    );
  };
  const disposeAi = () => {
    if (_$1.has(_unsafeWindow, "codeiumProvider")) {
      _unsafeWindow.codeiumProvider.dispose();
      delete _unsafeWindow.codeiumProvider;
    }
  };
  const useDTS = async (monaco, type) => {
    const response = await fetch(`${"https://baozoulolw.oss-cn-chengdu.aliyuncs.com/codeSet/data"}/type/${type}.d.ts`);
    const text = await response.text();
    const libUrl = `ts:fileName/${type}.d.ts`;
    monaco.languages.typescript.javascriptDefaults.addExtraLib(text, libUrl);
    monaco.editor.createModel(text, "typescript", monaco.Uri.parse(libUrl));
  };
  var render$1 = function() {
    var _vm = this;
    var _h2 = _vm.$createElement;
    var _c2 = _vm._self._c || _h2;
    return _c2("div", {
      attrs: {
        "id": "self_dialog"
      }
    }, [_c2("el-popover", {
      attrs: {
        "placement": "bottom",
        "width": "250",
        "trigger": "click"
      }
    }, [_c2("el-form", {
      attrs: {
        "label-width": "50px"
      }
    }, [_c2("el-form-item", {
      attrs: {
        "label": "\u5B57\u53F7"
      }
    }, [_c2("el-input-number", {
      staticClass: "tw-w-full",
      attrs: {
        "controls-position": "right"
      },
      model: {
        value: _vm.setting.fontSize,
        callback: function($$v) {
          _vm.$set(_vm.setting, "fontSize", $$v);
        },
        expression: "setting.fontSize"
      }
    })], 1), _c2("el-form-item", {
      attrs: {
        "label": "\u5B57\u4F53"
      }
    }, [_c2("el-select", {
      staticClass: "tw-w-full",
      model: {
        value: _vm.setting.fontFamily,
        callback: function($$v) {
          _vm.$set(_vm.setting, "fontFamily", $$v);
        },
        expression: "setting.fontFamily"
      }
    }, _vm._l(_vm.fontFamilys, function(item) {
      return _c2("el-option", {
        key: item.value,
        attrs: {
          "label": item.label,
          "value": item.value
        }
      });
    }), 1)], 1), _c2("el-form-item", {
      attrs: {
        "label": "\u7F29\u8FDB"
      }
    }, [_c2("el-input-number", {
      staticClass: "tw-w-full",
      attrs: {
        "controls-position": "right"
      },
      model: {
        value: _vm.setting.tabSize,
        callback: function($$v) {
          _vm.$set(_vm.setting, "tabSize", $$v);
        },
        expression: "setting.tabSize"
      }
    })], 1), _c2("el-form-item", {
      attrs: {
        "label": "\u4E3B\u9898"
      }
    }, [_c2("el-select", {
      staticClass: "tw-w-full",
      attrs: {
        "filterable": true
      },
      on: {
        "change": _vm.themeChange
      },
      model: {
        value: _vm.setting.theme,
        callback: function($$v) {
          _vm.$set(_vm.setting, "theme", $$v);
        },
        expression: "setting.theme"
      }
    }, _vm._l(_vm.themes, function(list, index) {
      return _c2("el-option-group", {
        key: index,
        attrs: {
          "label": list.group,
          "divider": true
        }
      }, _vm._l(list.children, function(item) {
        return _c2("el-option", {
          key: item.themeName,
          attrs: {
            "value": item.themeName,
            "label": item.name
          }
        });
      }), 1);
    }), 1)], 1), _c2("el-form-item", {
      attrs: {
        "label": "AI"
      }
    }, [_c2("el-switch", {
      attrs: {
        "active-color": "#13ce66",
        "inactive-color": "#ff4949",
        "inactive-text": "",
        "active-text": _vm.setting.aiCode ? "\u5DF2\u5F00\u542F" : "\u5DF2\u5173\u95ED"
      },
      on: {
        "change": _vm.aiCodeChange
      },
      model: {
        value: _vm.setting.aiCode,
        callback: function($$v) {
          _vm.$set(_vm.setting, "aiCode", $$v);
        },
        expression: "setting.aiCode"
      }
    })], 1)], 1), _c2("el-button", {
      staticStyle: {
        "float": "right"
      },
      on: {
        "click": _vm.regTips
      }
    }, [_vm._v("\u6CE8\u518C\u4EE3\u7801\u63D0\u793A")]), _c2("el-button", {
      attrs: {
        "slot": "reference",
        "icon": "el-icon-setting"
      },
      on: {
        "click": _vm.initData
      },
      slot: "reference"
    }, [_vm._v("\u8BBE\u7F6E")])], 1), _c2("el-drawer", {
      attrs: {
        "title": "\u6CE8\u518C\u4EE3\u7801\u63D0\u793A",
        "visible": _vm.drawer,
        "size": 500,
        "append-to-body": ""
      },
      on: {
        "update:visible": function($event) {
          _vm.drawer = $event;
        }
      }
    }, [_c2("tips")], 1)], 1);
  };
  var staticRenderFns = [];
  const _ = _unsafeWindow._;
  const __vue2_script = {
    props: {},
    components: { Tips },
    data() {
      return {
        setting: {},
        themes: [],
        fontFamilys: [],
        drawer: false
      };
    },
    watch: {
      setting: {
        handler: function(n, o) {
          this.setData(n);
        },
        deep: true
      }
    },
    methods: {
      initData() {
        let settings = _unsafeWindow.localStorage.getItem(
          "codeSettings"
        );
        if (!_.isEmpty(settings)) {
          let obj = JSON.parse(settings);
          Object.keys(obj).forEach((key) => {
            this.$set(this.setting, key, obj[key]);
          });
        }
      },
      themeChange(theme2) {
        if (_.isEmpty(theme2))
          return;
        regTheme(theme2);
      },
      setData(val) {
        _unsafeWindow.localStorage.setItem(
          "codeSettings",
          JSON.stringify(val)
        );
      },
      initOptions() {
        let obj = _.groupBy(codeThemeList, "group");
        Object.keys(obj).forEach((key) => {
          this.themes.push({
            group: key === "undefined" ? "\u5176\u4ED6" : key,
            children: obj[key]
          });
        });
      },
      regTips: function() {
        this.drawer = true;
      },
      aiCodeChange(val) {
      }
    },
    mounted() {
      this.initData();
      this.initOptions();
      this.fontFamilys = fontFamilys;
    }
  };
  const __cssModules = {};
  var __component__ = /* @__PURE__ */ normalizeComponent(
    __vue2_script,
    render$1,
    staticRenderFns,
    false,
    __vue2_injectStyles,
    "93c5e0b4",
    null,
    null
  );
  function __vue2_injectStyles(context) {
    for (let o in __cssModules) {
      this[o] = __cssModules[o];
    }
  }
  var App = /* @__PURE__ */ function() {
    return __component__.exports;
  }();
  const Vue = _unsafeWindow.Vue;
  window.Vue = Vue;
  const render = (el) => {
    new Vue({
      render: (h) => h(App)
    }).$mount("#self_dialog");
  };
  let renderHeader = async (dom) => {
    dom.className = dom.className + " head-right";
    const app = document.createElement("div");
    app.setAttribute("id", "self_dialog");
    dom.insertBefore(app, dom.firstChild);
    render();
  };
  if (_unsafeWindow.location.hash.startsWith("#/widgetPage")) {
    let selector = ".design-container .header-box>span:nth-child(2)";
    let dom = document.querySelector(selector);
    if (dom) {
      await( renderHeader(dom));
    } else {
      waitForElementByClass("edit-page-design", async (e4) => {
        if (!document.getElementById("self_dialog")) {
          dom = document.querySelector(selector);
          await renderHeader(dom);
        }
      });
    }
    await( initMonacoEditor());
    _unsafeWindow.codeThemes = codeThemeList;
    _unsafeWindow.editorTips = tips;
    _unsafeWindow.require(["vs/editor/editor.main"], (monaco) => editorCreated(monaco));
  }

})();