youtube-comment-censor-detector

A real-time comment checker, Fuck YouTube’s opaque comment censorship

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

Advertisement:

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

Advertisement:

// ==UserScript==
// @name               youtube-comment-censor-detector
// @name:zh-CN         YouTube发评反诈
// @name:zh-TW         YouTube發評反詐
// @namespace          npm/vite-plugin-monkey
// @version            3.3.0
// @author             freedom-introvert
// @description        A real-time comment checker, Fuck YouTube’s opaque comment censorship
// @description:zh-CN  Fuck YouTube版“阿瓦隆系统”,实时检查评论状态,防止评论被儿童偷偷误食你还被蒙在鼓里
// @description:zh-TW  Fuck YouTube版“阿瓦隆系統”,即時檢查評論狀態,防止評論被兒童偷偷誤食你還被蒙在鼓裡
// @license            GPL
// @icon               https://raw.githubusercontent.com/freedom-introvert/youtube-comment-censor-detector/refs/heads/main/logo/logo_256x256.avif
// @match              *://*.youtube.com/*
// @require            https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.global.prod.js
// @require            https://unpkg.com/vue-demi@latest/lib/index.iife.js
// @require            data:application/javascript,window.Vue%3DVue%3B
// @require            https://cdn.jsdelivr.net/npm/[email protected]/dist/index.full.min.js
// @resource           element-plus/dist/index.css  https://cdn.jsdelivr.net/npm/[email protected]/dist/index.css
// @grant              GM_addStyle
// @grant              GM_getResourceText
// @grant              GM_registerMenuCommand
// @grant              unsafeWindow
// @run-at             document-start
// ==/UserScript==

(a=>{if(typeof GM_addStyle=="function"){GM_addStyle(a);return}const e=document.createElement("style");e.textContent=a,document.head.append(e)})(" .el-message,.is-message-box{z-index:9999!important}.comment-checker[data-v-913ed6a0]{font-size:12px}.container[data-v-913ed6a0]{width:80%;margin:0 auto}.comment-checker[data-v-913ed6a0]{padding:15px 15px 11px;border-radius:8px;transition:background-color .3s}.title[data-v-913ed6a0]{font-weight:700;margin-bottom:6px}.message[data-v-913ed6a0]{margin-bottom:10px}.el-progress[data-v-913ed6a0]{margin-bottom:4px}.buttons[data-v-913ed6a0]>[data-v-913ed6a0]{display:inline-flex;align-items:center;padding:4px 8px;margin-left:-8px;color:#4b5e9d;border-radius:4px;transition:background-color .2s,color .2s;-webkit-user-select:none;user-select:none;margin-right:10px}.buttons[data-v-913ed6a0]>[data-v-913ed6a0]:hover{background-color:#0000000d}.buttons[data-v-913ed6a0]>[data-v-913ed6a0]:active{background-color:#0000001a}.comment-checker.not-check[data-v-913ed6a0]{background-color:#00f3}.comment-checker.normal[data-v-913ed6a0]{background-color:#0f03}.comment-checker.deleted[data-v-913ed6a0]{background-color:#f003}.comment-checker.shadow-ban[data-v-913ed6a0]{background-color:#ff03}.hot-ban-checker[data-v-c5ba1027]{background-color:#007bff1a;border:1px solid rgba(0,60,136,.4);border-radius:6px;padding:1rem;margin:10px 0}.title[data-v-c5ba1027]{font-weight:700;margin-bottom:6px}.message[data-v-c5ba1027]{margin-bottom:10px}.actions[data-v-c5ba1027]{margin-top:10px}.buttons[data-v-c5ba1027]>[data-v-c5ba1027]{display:inline-flex;align-items:center;padding:4px 8px;margin-left:-8px;color:#4b5e9d;border-radius:4px;transition:background-color .2s,color .2s;-webkit-user-select:none;user-select:none;margin-right:10px}.buttons[data-v-c5ba1027]>[data-v-c5ba1027]:hover{background-color:#0000000d}.buttons[data-v-c5ba1027]>[data-v-c5ba1027]:active{background-color:#0000001a}.comment-history-container[data-v-ad8c8fe3]{height:100%;display:flex;flex-direction:column;overflow:hidden}.toolbar[data-v-ad8c8fe3]{display:flex;align-items:center;gap:12px;padding-bottom:10px;flex-shrink:0}.comment-list[data-v-ad8c8fe3]{flex:1;min-height:0}[data-v-ad8c8fe3] .comment-list .el-table__inner-wrapper,[data-v-ad8c8fe3] .comment-list .el-scrollbar{height:100%}[data-v-ad8c8fe3] .comment-list .el-scrollbar__wrap{overflow-y:auto}.load-status[data-v-ad8c8fe3]{padding:12px 0;text-align:center;color:var(--el-text-color-secondary);font-size:13px;flex-shrink:0}.detail[data-v-ad8c8fe3]{margin-left:10px}.info-table td[data-v-ad8c8fe3]:nth-child(1){white-space:nowrap;vertical-align:top}.info-table td[data-v-ad8c8fe3]:nth-child(2){padding-left:16px}.comment-content[data-v-ad8c8fe3]{white-space:break-spaces;word-break:break-word}summary[data-v-ad8c8fe3]{cursor:pointer;margin-top:2px;-webkit-user-select:none;user-select:none}.locate-link[data-v-ad8c8fe3]{width:100%}[data-v-ad8c8fe3] .locate-link>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.post-locate-link[data-v-ad8c8fe3]{font-size:10px}.youtube-comment[data-v-e03141e7]{display:flex;align-items:flex-start;padding:16px;gap:16px;font-family:Roboto,sans-serif}.avatar-container[data-v-e03141e7]{flex-shrink:0}.avatar[data-v-e03141e7]{width:40px;height:40px;border-radius:50%;object-fit:cover}.comment-content[data-v-e03141e7]{flex:1;display:flex;flex-direction:column;gap:4px}.comment-header[data-v-e03141e7]{display:flex;align-items:center;gap:8px}.author-name[data-v-e03141e7]{font-size:13px;font-weight:500;color:#000;text-decoration:none;transition:color .2s ease}.published-at[data-v-e03141e7]{font-size:12px;color:#aaa}.comment-text[data-v-e03141e7]{font-size:14px;line-height:1.5;white-space:pre-wrap;word-break:break-word;margin:0}.comment-actions[data-v-e03141e7]{display:flex;align-items:center;gap:8px;margin-top:8px}[data-v-e03141e7] .button{display:flex;align-items:center;gap:4px;background-color:transparent;border:none;cursor:pointer;color:#aaa;font-size:12px;transition:opacity .2s ease;text-decoration:none;padding:1px 6px}[data-v-e03141e7] .button:hover{opacity:.5}[data-v-e03141e7] .icon{width:16px;height:16px;fill:currentColor}[data-v-e03141e7] .action-text{line-height:100%}.collected{color:#ffc107}.hot-ban-comment-searcher[data-v-658a2b6f],.not-comment-section[data-v-658a2b6f]{height:100%}.warning[data-v-658a2b6f]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.search-progress[data-v-658a2b6f]{display:flex;height:100%;flex-direction:column;justify-content:center;align-items:center;gap:15px}.warning-title[data-v-658a2b6f]{margin-bottom:4px}.warning-text[data-v-658a2b6f]{text-align:center;max-width:500px}.warning-divider[data-v-658a2b6f]{max-width:800px}.el-progress[data-v-658a2b6f]{width:300px}.footer[data-v-658a2b6f]{display:flex;flex-direction:column;align-items:center}.settings-container[data-v-a3a10182]{padding:16px}.title[data-v-a3a10182]{font-size:20px;font-weight:600;margin-bottom:20px}.setting-item[data-v-a3a10182]{display:flex;justify-content:space-between;align-items:center;margin:16px 0}.setting-info[data-v-a3a10182]{max-width:80%}.setting-label[data-v-a3a10182]{font-size:16px;font-weight:500}.setting-desc[data-v-a3a10182]{font-size:13px;color:#888;margin-top:4px}.el-input[data-v-a3a10182]{margin-top:10px}.toolbar{display:flex;align-items:center;gap:12px;padding-bottom:10px;flex-shrink:0}[data-v-ffd6c60d] .dialog-body{height:calc(100% - 40px);display:flex;flex-direction:column} ");

(function (vue, ElementPlus) {
  'use strict';

  function sleep(time) {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve();
      }, time);
    });
  }
  function urlSafeBase64ToStandard(urlSafeBase64) {
    let standardBase64 = urlSafeBase64.replace(/%3D/g, "=").replace(/-/g, "+").replace(/_/g, "/");
    return standardBase64;
  }
  function standardBase64ToUrlSafe(standardBase64) {
    let urlSafeBase64 = standardBase64.replace(/=/g, "%3D").replace(/\+/g, "-").replace(/\//g, "_");
    return urlSafeBase64;
  }
  function base64ToU8Array(base642, urlSafe = true) {
    if (urlSafe) {
      base642 = urlSafeBase64ToStandard(base642);
    }
    return Uint8Array.from(atob(base642), (c) => c.charCodeAt(0));
  }
  function u8ArrayToBase64(u8Array, urlSafe = true) {
    let base642 = btoa(String.fromCharCode(...u8Array));
    if (urlSafe) {
      base642 = standardBase64ToUrlSafe(base642);
    }
    return base642;
  }
  function createUrl(path) {
    if (path) {
      return new URL(new URL(window.location.href).origin + path);
    }
    return new URL(window.location.href);
  }
  function formatSecondsToMMSS(seconds) {
    const sec = parseInt(seconds, 10);
    const minutes = Math.floor(sec / 60);
    const remainingSeconds = sec % 60;
    const formattedMinutes = String(minutes).padStart(2, "0");
    const formattedSeconds = String(remainingSeconds).padStart(2, "0");
    return `${formattedMinutes}:${formattedSeconds}`;
  }
  function formatTimestamp(timestamp) {
    if (!timestamp) {
      return "--:--:--";
    }
    const date = new Date(timestamp);
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, "0");
    const day = String(date.getDate()).padStart(2, "0");
    const hours = String(date.getHours()).padStart(2, "0");
    const minutes = String(date.getMinutes()).padStart(2, "0");
    const seconds = String(date.getSeconds()).padStart(2, "0");
    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  }
  function translateState(state) {
    switch (state) {
      case "NORMAL":
        return "正常";
      case "DELETED":
        return "已删除";
      case "SHADOW_BAN":
        return "仅自己可见";
      case "NOT_CHECK":
        return "还未检查";
    }
  }
  function findValueInSingleEntryArray(data, key) {
    for (const item of data) {
      if (item.hasOwnProperty(key)) {
        return item[key];
      }
    }
    return void 0;
  }
  function nowDate() {
    var timestamp = /* @__PURE__ */ new Date();
    var year = timestamp.getFullYear();
    var month = timestamp.getMonth() + 1;
    var day = timestamp.getDate();
    var hours = timestamp.getHours();
    var minutes = timestamp.getMinutes();
    var seconds = timestamp.getSeconds();
    var dateStr = year + "-" + (month < 10 ? "0" + month : month) + "-" + (day < 10 ? "0" + day : day) + "_" + (hours < 10 ? "0" + hours : hours) + (minutes < 10 ? "0" + minutes : minutes) + (seconds < 10 ? "0" + seconds : seconds);
    return dateStr;
  }
  function validateObjectKeys(obj, requiredKeys) {
    if (typeof obj !== "object" || obj === null || !Array.isArray(requiredKeys)) {
      return false;
    }
    const objKeys = Object.keys(obj);
    if (objKeys.length !== requiredKeys.length) {
      return false;
    }
    return requiredKeys.every((key) => Object.prototype.hasOwnProperty.call(obj, key));
  }
  function copyToClipboard(text) {
    return new Promise((resolve, reject) => {
      if (navigator.clipboard) {
        navigator.clipboard.writeText(text).then(() => {
          resolve();
        }).catch((err) => {
          reject(err);
        });
      } else {
        const textArea = document.createElement("textarea");
        textArea.value = commentText;
        document.body.appendChild(textArea);
        textArea.select();
        try {
          document.execCommand("copy");
          document.body.removeChild(textArea);
          resolve();
        } catch (err) {
          document.body.removeChild(textArea);
          reject(err);
        }
      }
    });
  }
  const _export_sfc = (sfc, props) => {
    const target = sfc.__vccOpts || sfc;
    for (const [key, val] of props) {
      target[key] = val;
    }
    return target;
  };
  const _hoisted_1$9 = { class: "title" };
  const _hoisted_2$7 = { class: "message" };
  const _hoisted_3$5 = { key: 0 };
  const _hoisted_4$5 = { class: "message" };
  const _hoisted_5$4 = { class: "buttons" };
  const maxTimeSec = 120;
  const _sfc_main$a = {
    __name: "CommentChecker",
    setup(__props) {
      const check2 = vue.inject("check");
      const hotBanCheck2 = vue.inject("hotBanCheck");
      const commentRecord = vue.inject("commentRecord");
      const onClose = vue.inject("onClose");
      const onUnblock = vue.inject("onUnblock");
      const interval = vue.inject("interval");
      const unsafeWindow2 = vue.inject("unsafeWindow");
      const settings2 = vue.inject("settings");
      const showCancelButton = vue.ref(true);
      const showConfirmButton = vue.ref(false);
      const showCloseButton = vue.ref(false);
      const showHotBanCheckButton = vue.ref(false);
      const showStopHotBanCheckButton = vue.ref(false);
      const showLetMeAccessButtton = vue.ref(false);
      const showHotBanChecker = vue.ref(false);
      const stateClass = vue.ref("not-check");
      const title = vue.ref("等待检查中……");
      const message = vue.ref("");
      const messageByHotCheck = vue.ref("等待检查中……");
      let completed = false;
      let netErr = false;
      let hotBanCheckerController = {
        isCancelled: false
      };
      let skipHotBanCheckWait = false;
      const stripedFlow = vue.ref(false);
      const currentTimeSec = vue.ref(0);
      const percentage = vue.computed(() => {
        if (currentTimeSec.value < 0 || currentTimeSec.value > maxTimeSec) {
          return 100;
        } else {
          return currentTimeSec.value / maxTimeSec * 100;
        }
      });
      function format() {
        if (currentTimeSec.value < 0) {
          return `--:-- / ${formatSecondsToMMSS(maxTimeSec)}`;
        } else {
          return `${formatSecondsToMMSS(currentTimeSec.value)} / ${formatSecondsToMMSS(maxTimeSec)}`;
        }
      }
      let shown = null;
      let startTime = Date.now() / 1e3;
      async function startCheck() {
        while (currentTimeSec.value < maxTimeSec || netErr) {
          if (!netErr) {
            for (let i = interval; i > 0; i--) {
              message.value = "等待 " + i + "s 后检查评论状态";
              await sleep(1e3);
              currentTimeSec.value = Date.now() / 1e3 - startTime;
              if (completed) {
                onStateCheckComplete();
                return;
              }
            }
          } else {
            currentTimeSec.value = Date.now() / 1e3 - startTime;
            if (completed) {
              onStateCheckComplete();
              return;
            }
          }
          message.value = "检查评论状态中……";
          stripedFlow.value = true;
          try {
            await check2(commentRecord);
          } catch (err) {
            netErr = true;
            title.value = "网络错误,获取当前状态失败";
            showConfirmButton.value = false;
            showCloseButton.value = true;
            stripedFlow.value = false;
            console.error(err);
            continue;
          }
          netErr = false;
          showCancelButton.value = false;
          showCloseButton.value = false;
          stripedFlow.value = false;
          if (commentRecord.currentState == "NORMAL") {
            title.value = "当前状态:正常";
            stateClass.value = "normal";
            shown = commentRecord.currentState;
          } else if (commentRecord.currentState == "SHADOW_BAN") {
            title.value = "当前状态:仅自己可见";
            stateClass.value = "shadow-ban";
            shown = commentRecord.currentState;
          } else if (commentRecord.currentState == "DELETED") {
            title.value = "当前状态:已被删除";
            stateClass.value = "deleted";
            if (shown) {
              completed = true;
              message.value = `不用等了,你的评论检查到的状态先从『${shown == "NORMAL" ? "正常" : "仅自己可见"}』再到删除,系统偷偷删了无疑。如果不信,你可以尝试编辑评论或添加回复来求证`;
              onStateCheckComplete();
              return;
            }
          }
          showConfirmButton.value = true;
        }
        onStateCheckComplete();
        completed = true;
        message.value = "观察时间已足够,当前状态可信,检查完毕";
        if (settings2.autoHotBanCheck) {
          let count = tryGetCommentCount();
          if (count && count <= parseInt(settings2.hotBanCheckCountCondition)) {
            checkHotBan(false);
          }
        }
      }
      function onStateCheckComplete() {
        showConfirmButton.value = false;
        showCloseButton.value = true;
        if (commentRecord.currentState == "NORMAL") {
          showHotBanCheckButton.value = true;
        } else if (commentRecord.currentState == "DELETED") {
          onUnblock(commentRecord);
        }
      }
      startCheck();
      function cancelCheck() {
        completed = true;
        onClose(commentRecord);
      }
      function confirmCurrentState() {
        completed = true;
        message.value = "您已确认当前状态,检查完毕";
      }
      function close() {
        onClose(commentRecord);
      }
      async function checkHotBan(needWarning = true) {
        if (needWarning && commentRecord.commentId.indexOf(".") == -1) {
          let count = tryGetCommentCount();
          if (count > parseInt(settings2.hotBanCheckCountCondition)) {
            try {
              await ElementPlus.ElMessageBox.confirm(
                `确认检查吗?该检查需要遍历热门评论区,请注意评论区的评论数量(总数大于3000的评论区慎重考虑)!
        数量太多将导致漫长的检查过程,同时频繁调用API可能会引发不可预料的后果!(当前评论区评论数量:${count ? count : "获取失败"})`,
                "警告",
                {
                  confirmButtonText: "确定",
                  cancelButtonText: "取消"
                }
              );
            } catch (err) {
              return;
            }
          }
        }
        showCloseButton.value = false;
        showHotBanCheckButton.value = false;
        showHotBanChecker.value = true;
        showStopHotBanCheckButton.value = true;
        while (currentTimeSec.value < maxTimeSec && !hotBanCheckerController.isCancelled) {
          messageByHotCheck.value = `为避免检查误判,检查需要等待至状态可信任时开始,剩余 ${Math.floor(maxTimeSec - currentTimeSec.value)}s`;
          if (!skipHotBanCheckWait && currentTimeSec.value > 50) {
            showLetMeAccessButtton.value = true;
          }
          if (skipHotBanCheckWait) {
            break;
          }
          await sleep(1e3);
          if (hotBanCheckerController.isCancelled) {
            return;
          }
          currentTimeSec.value = Date.now() / 1e3 - startTime;
        }
        showLetMeAccessButtton.value = false;
        messageByHotCheck.value = "正在重新检查评论状态……";
        await check2(commentRecord);
        if (commentRecord.currentState != "NORMAL") {
          if (commentRecord.currentState == "SHADOW_BAN") {
            title.value = "当前状态:仅自己可见";
            stateClass.value = "shadow-ban";
            messageByHotCheck.value = "评论已被ShadowBan,热门的屏蔽的检查已取消";
          } else if (commentRecord.currentState == "DELETED") {
            title.value = "当前状态:已被删除";
            stateClass.value = "deleted";
            messageByHotCheck.value = "评论已被删除,热门的屏蔽的检查已取消";
          }
          showStopHotBanCheckButton.value = false;
          showCloseButton.value = true;
          return;
        }
        messageByHotCheck.value = "评论状态正常,准备检查中……";
        let observer = {
          onCountChange(c, p) {
            messageByHotCheck.value = `正在搜索热门列表,已搜寻至:第${c}个 第${p}页`;
          }
        };
        if (await hotBanCheck2(commentRecord, observer, hotBanCheckerController)) {
          if (commentRecord.hotBan) {
            messageByHotCheck.value = "⚠ 你的评论未在热门列表找到,已被热门屏蔽,检查完成";
          } else {
            messageByHotCheck.value = "✔ 你的评论已在热门列表找到,没有被热门屏蔽,检查完成";
          }
        }
        showStopHotBanCheckButton.value = false;
        showCloseButton.value = true;
      }
      function tryGetCommentCount() {
        let count = null;
        let nodeList = unsafeWindow2.document.querySelectorAll("#count > yt-formatted-string");
        if (nodeList) {
          for (let node of nodeList) {
            let text = node.innerText;
            if (text != "") {
              count = extractNumber(text);
            }
          }
        }
        console.log("当前评论区评论数量:" + (count ? count : "获取失败"));
        return count;
      }
      function extractNumber(str) {
        return parseInt(str.replace(/\D+/g, ""), 10) || 0;
      }
      function stopHotBanCheck() {
        hotBanCheckerController.isCancelled = true;
        messageByHotCheck.value = "你已终止热门屏蔽的检查";
        showStopHotBanCheckButton.value = false;
        showCloseButton.value = true;
      }
      function letMeAccess() {
        skipHotBanCheckWait = true;
        showLetMeAccessButtton.value = false;
      }
      return (_ctx, _cache) => {
        const _component_el_progress = vue.resolveComponent("el-progress");
        return vue.openBlock(), vue.createElementBlock("div", {
          class: vue.normalizeClass(["comment-checker", stateClass.value])
        }, [
          vue.createElementVNode("div", _hoisted_1$9, vue.toDisplayString(title.value), 1),
          vue.createElementVNode("div", _hoisted_2$7, vue.toDisplayString(message.value), 1),
          vue.createVNode(_component_el_progress, {
            percentage: percentage.value,
            striped: "",
            format,
            "striped-flow": stripedFlow.value
          }, null, 8, ["percentage", "striped-flow"]),
          showHotBanChecker.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$5, [
            _cache[0] || (_cache[0] = vue.createElementVNode("div", { class: "title" }, "热门屏蔽检查", -1)),
            vue.createElementVNode("div", _hoisted_4$5, vue.toDisplayString(messageByHotCheck.value), 1)
          ])) : vue.createCommentVNode("", true),
          vue.createElementVNode("div", _hoisted_5$4, [
            showCancelButton.value ? (vue.openBlock(), vue.createElementBlock("span", {
              key: 0,
              onClick: cancelCheck
            }, "取消")) : vue.createCommentVNode("", true),
            showConfirmButton.value ? (vue.openBlock(), vue.createElementBlock("span", {
              key: 1,
              onClick: confirmCurrentState
            }, "确认当前状态")) : vue.createCommentVNode("", true),
            showCloseButton.value ? (vue.openBlock(), vue.createElementBlock("span", {
              key: 2,
              onClick: close
            }, "关闭")) : vue.createCommentVNode("", true),
            showHotBanCheckButton.value ? (vue.openBlock(), vue.createElementBlock("span", {
              key: 3,
              onClick: checkHotBan
            }, "热门屏蔽检查")) : vue.createCommentVNode("", true),
            showStopHotBanCheckButton.value ? (vue.openBlock(), vue.createElementBlock("span", {
              key: 4,
              onClick: stopHotBanCheck
            }, "终止检查")) : vue.createCommentVNode("", true),
            showLetMeAccessButtton.value ? (vue.openBlock(), vue.createElementBlock("span", {
              key: 5,
              onClick: letMeAccess
            }, "让我检查!")) : vue.createCommentVNode("", true)
          ])
        ], 2);
      };
    }
  };
  const CommentChecker = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-913ed6a0"]]);
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
  var indexMinimal = {};
  var minimal$1 = {};
  var aspromise;
  var hasRequiredAspromise;
  function requireAspromise() {
    if (hasRequiredAspromise) return aspromise;
    hasRequiredAspromise = 1;
    aspromise = asPromise;
    function asPromise(fn, ctx) {
      var params = new Array(arguments.length - 1), offset = 0, index = 2, pending = true;
      while (index < arguments.length)
        params[offset++] = arguments[index++];
      return new Promise(function executor(resolve, reject) {
        params[offset] = function callback(err) {
          if (pending) {
            pending = false;
            if (err)
              reject(err);
            else {
              var params2 = new Array(arguments.length - 1), offset2 = 0;
              while (offset2 < params2.length)
                params2[offset2++] = arguments[offset2];
              resolve.apply(null, params2);
            }
          }
        };
        try {
          fn.apply(ctx || null, params);
        } catch (err) {
          if (pending) {
            pending = false;
            reject(err);
          }
        }
      });
    }
    return aspromise;
  }
  var base64 = {};
  var hasRequiredBase64;
  function requireBase64() {
    if (hasRequiredBase64) return base64;
    hasRequiredBase64 = 1;
    (function(exports) {
      var base642 = exports;
      base642.length = function length(string) {
        var p = string.length;
        if (!p)
          return 0;
        var n = 0;
        while (--p % 4 > 1 && string.charAt(p) === "=")
          ++n;
        return Math.ceil(string.length * 3) / 4 - n;
      };
      var b64 = new Array(64);
      var s64 = new Array(123);
      for (var i = 0; i < 64; )
        s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;
      base642.encode = function encode(buffer, start, end) {
        var parts = null, chunk = [];
        var i2 = 0, j = 0, t;
        while (start < end) {
          var b = buffer[start++];
          switch (j) {
            case 0:
              chunk[i2++] = b64[b >> 2];
              t = (b & 3) << 4;
              j = 1;
              break;
            case 1:
              chunk[i2++] = b64[t | b >> 4];
              t = (b & 15) << 2;
              j = 2;
              break;
            case 2:
              chunk[i2++] = b64[t | b >> 6];
              chunk[i2++] = b64[b & 63];
              j = 0;
              break;
          }
          if (i2 > 8191) {
            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));
            i2 = 0;
          }
        }
        if (j) {
          chunk[i2++] = b64[t];
          chunk[i2++] = 61;
          if (j === 1)
            chunk[i2++] = 61;
        }
        if (parts) {
          if (i2)
            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i2)));
          return parts.join("");
        }
        return String.fromCharCode.apply(String, chunk.slice(0, i2));
      };
      var invalidEncoding = "invalid encoding";
      base642.decode = function decode(string, buffer, offset) {
        var start = offset;
        var j = 0, t;
        for (var i2 = 0; i2 < string.length; ) {
          var c = string.charCodeAt(i2++);
          if (c === 61 && j > 1)
            break;
          if ((c = s64[c]) === void 0)
            throw Error(invalidEncoding);
          switch (j) {
            case 0:
              t = c;
              j = 1;
              break;
            case 1:
              buffer[offset++] = t << 2 | (c & 48) >> 4;
              t = c;
              j = 2;
              break;
            case 2:
              buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;
              t = c;
              j = 3;
              break;
            case 3:
              buffer[offset++] = (t & 3) << 6 | c;
              j = 0;
              break;
          }
        }
        if (j === 1)
          throw Error(invalidEncoding);
        return offset - start;
      };
      base642.test = function test(string) {
        return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);
      };
    })(base64);
    return base64;
  }
  var eventemitter;
  var hasRequiredEventemitter;
  function requireEventemitter() {
    if (hasRequiredEventemitter) return eventemitter;
    hasRequiredEventemitter = 1;
    eventemitter = EventEmitter;
    function EventEmitter() {
      this._listeners = {};
    }
    EventEmitter.prototype.on = function on(evt, fn, ctx) {
      (this._listeners[evt] || (this._listeners[evt] = [])).push({
        fn,
        ctx: ctx || this
      });
      return this;
    };
    EventEmitter.prototype.off = function off(evt, fn) {
      if (evt === void 0)
        this._listeners = {};
      else {
        if (fn === void 0)
          this._listeners[evt] = [];
        else {
          var listeners = this._listeners[evt];
          for (var i = 0; i < listeners.length; )
            if (listeners[i].fn === fn)
              listeners.splice(i, 1);
            else
              ++i;
        }
      }
      return this;
    };
    EventEmitter.prototype.emit = function emit(evt) {
      var listeners = this._listeners[evt];
      if (listeners) {
        var args = [], i = 1;
        for (; i < arguments.length; )
          args.push(arguments[i++]);
        for (i = 0; i < listeners.length; )
          listeners[i].fn.apply(listeners[i++].ctx, args);
      }
      return this;
    };
    return eventemitter;
  }
  var float;
  var hasRequiredFloat;
  function requireFloat() {
    if (hasRequiredFloat) return float;
    hasRequiredFloat = 1;
    float = factory(factory);
    function factory(exports) {
      if (typeof Float32Array !== "undefined") (function() {
        var f32 = new Float32Array([-0]), f8b = new Uint8Array(f32.buffer), le = f8b[3] === 128;
        function writeFloat_f32_cpy(val, buf, pos) {
          f32[0] = val;
          buf[pos] = f8b[0];
          buf[pos + 1] = f8b[1];
          buf[pos + 2] = f8b[2];
          buf[pos + 3] = f8b[3];
        }
        function writeFloat_f32_rev(val, buf, pos) {
          f32[0] = val;
          buf[pos] = f8b[3];
          buf[pos + 1] = f8b[2];
          buf[pos + 2] = f8b[1];
          buf[pos + 3] = f8b[0];
        }
        exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;
        exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;
        function readFloat_f32_cpy(buf, pos) {
          f8b[0] = buf[pos];
          f8b[1] = buf[pos + 1];
          f8b[2] = buf[pos + 2];
          f8b[3] = buf[pos + 3];
          return f32[0];
        }
        function readFloat_f32_rev(buf, pos) {
          f8b[3] = buf[pos];
          f8b[2] = buf[pos + 1];
          f8b[1] = buf[pos + 2];
          f8b[0] = buf[pos + 3];
          return f32[0];
        }
        exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;
        exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;
      })();
      else (function() {
        function writeFloat_ieee754(writeUint, val, buf, pos) {
          var sign = val < 0 ? 1 : 0;
          if (sign)
            val = -val;
          if (val === 0)
            writeUint(1 / val > 0 ? (
              /* positive */
              0
            ) : (
              /* negative 0 */
              2147483648
            ), buf, pos);
          else if (isNaN(val))
            writeUint(2143289344, buf, pos);
          else if (val > 34028234663852886e22)
            writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);
          else if (val < 11754943508222875e-54)
            writeUint((sign << 31 | Math.round(val / 1401298464324817e-60)) >>> 0, buf, pos);
          else {
            var exponent = Math.floor(Math.log(val) / Math.LN2), mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;
            writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);
          }
        }
        exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);
        exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);
        function readFloat_ieee754(readUint, buf, pos) {
          var uint = readUint(buf, pos), sign = (uint >> 31) * 2 + 1, exponent = uint >>> 23 & 255, mantissa = uint & 8388607;
          return exponent === 255 ? mantissa ? NaN : sign * Infinity : exponent === 0 ? sign * 1401298464324817e-60 * mantissa : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);
        }
        exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);
        exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);
      })();
      if (typeof Float64Array !== "undefined") (function() {
        var f64 = new Float64Array([-0]), f8b = new Uint8Array(f64.buffer), le = f8b[7] === 128;
        function writeDouble_f64_cpy(val, buf, pos) {
          f64[0] = val;
          buf[pos] = f8b[0];
          buf[pos + 1] = f8b[1];
          buf[pos + 2] = f8b[2];
          buf[pos + 3] = f8b[3];
          buf[pos + 4] = f8b[4];
          buf[pos + 5] = f8b[5];
          buf[pos + 6] = f8b[6];
          buf[pos + 7] = f8b[7];
        }
        function writeDouble_f64_rev(val, buf, pos) {
          f64[0] = val;
          buf[pos] = f8b[7];
          buf[pos + 1] = f8b[6];
          buf[pos + 2] = f8b[5];
          buf[pos + 3] = f8b[4];
          buf[pos + 4] = f8b[3];
          buf[pos + 5] = f8b[2];
          buf[pos + 6] = f8b[1];
          buf[pos + 7] = f8b[0];
        }
        exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;
        exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;
        function readDouble_f64_cpy(buf, pos) {
          f8b[0] = buf[pos];
          f8b[1] = buf[pos + 1];
          f8b[2] = buf[pos + 2];
          f8b[3] = buf[pos + 3];
          f8b[4] = buf[pos + 4];
          f8b[5] = buf[pos + 5];
          f8b[6] = buf[pos + 6];
          f8b[7] = buf[pos + 7];
          return f64[0];
        }
        function readDouble_f64_rev(buf, pos) {
          f8b[7] = buf[pos];
          f8b[6] = buf[pos + 1];
          f8b[5] = buf[pos + 2];
          f8b[4] = buf[pos + 3];
          f8b[3] = buf[pos + 4];
          f8b[2] = buf[pos + 5];
          f8b[1] = buf[pos + 6];
          f8b[0] = buf[pos + 7];
          return f64[0];
        }
        exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;
        exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;
      })();
      else (function() {
        function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {
          var sign = val < 0 ? 1 : 0;
          if (sign)
            val = -val;
          if (val === 0) {
            writeUint(0, buf, pos + off0);
            writeUint(1 / val > 0 ? (
              /* positive */
              0
            ) : (
              /* negative 0 */
              2147483648
            ), buf, pos + off1);
          } else if (isNaN(val)) {
            writeUint(0, buf, pos + off0);
            writeUint(2146959360, buf, pos + off1);
          } else if (val > 17976931348623157e292) {
            writeUint(0, buf, pos + off0);
            writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);
          } else {
            var mantissa;
            if (val < 22250738585072014e-324) {
              mantissa = val / 5e-324;
              writeUint(mantissa >>> 0, buf, pos + off0);
              writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);
            } else {
              var exponent = Math.floor(Math.log(val) / Math.LN2);
              if (exponent === 1024)
                exponent = 1023;
              mantissa = val * Math.pow(2, -exponent);
              writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);
              writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);
            }
          }
        }
        exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);
        exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);
        function readDouble_ieee754(readUint, off0, off1, buf, pos) {
          var lo = readUint(buf, pos + off0), hi = readUint(buf, pos + off1);
          var sign = (hi >> 31) * 2 + 1, exponent = hi >>> 20 & 2047, mantissa = 4294967296 * (hi & 1048575) + lo;
          return exponent === 2047 ? mantissa ? NaN : sign * Infinity : exponent === 0 ? sign * 5e-324 * mantissa : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);
        }
        exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);
        exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);
      })();
      return exports;
    }
    function writeUintLE(val, buf, pos) {
      buf[pos] = val & 255;
      buf[pos + 1] = val >>> 8 & 255;
      buf[pos + 2] = val >>> 16 & 255;
      buf[pos + 3] = val >>> 24;
    }
    function writeUintBE(val, buf, pos) {
      buf[pos] = val >>> 24;
      buf[pos + 1] = val >>> 16 & 255;
      buf[pos + 2] = val >>> 8 & 255;
      buf[pos + 3] = val & 255;
    }
    function readUintLE(buf, pos) {
      return (buf[pos] | buf[pos + 1] << 8 | buf[pos + 2] << 16 | buf[pos + 3] << 24) >>> 0;
    }
    function readUintBE(buf, pos) {
      return (buf[pos] << 24 | buf[pos + 1] << 16 | buf[pos + 2] << 8 | buf[pos + 3]) >>> 0;
    }
    return float;
  }
  var inquire_1;
  var hasRequiredInquire;
  function requireInquire() {
    if (hasRequiredInquire) return inquire_1;
    hasRequiredInquire = 1;
    inquire_1 = inquire;
    function inquire(moduleName) {
      try {
        var mod = eval("quire".replace(/^/, "re"))(moduleName);
        if (mod && (mod.length || Object.keys(mod).length))
          return mod;
      } catch (e) {
      }
      return null;
    }
    return inquire_1;
  }
  var utf8 = {};
  var hasRequiredUtf8;
  function requireUtf8() {
    if (hasRequiredUtf8) return utf8;
    hasRequiredUtf8 = 1;
    (function(exports) {
      var utf82 = exports;
      utf82.length = function utf8_length(string) {
        var len = 0, c = 0;
        for (var i = 0; i < string.length; ++i) {
          c = string.charCodeAt(i);
          if (c < 128)
            len += 1;
          else if (c < 2048)
            len += 2;
          else if ((c & 64512) === 55296 && (string.charCodeAt(i + 1) & 64512) === 56320) {
            ++i;
            len += 4;
          } else
            len += 3;
        }
        return len;
      };
      utf82.read = function utf8_read(buffer, start, end) {
        var len = end - start;
        if (len < 1)
          return "";
        var parts = null, chunk = [], i = 0, t;
        while (start < end) {
          t = buffer[start++];
          if (t < 128)
            chunk[i++] = t;
          else if (t > 191 && t < 224)
            chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;
          else if (t > 239 && t < 365) {
            t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 65536;
            chunk[i++] = 55296 + (t >> 10);
            chunk[i++] = 56320 + (t & 1023);
          } else
            chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;
          if (i > 8191) {
            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));
            i = 0;
          }
        }
        if (parts) {
          if (i)
            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));
          return parts.join("");
        }
        return String.fromCharCode.apply(String, chunk.slice(0, i));
      };
      utf82.write = function utf8_write(string, buffer, offset) {
        var start = offset, c1, c2;
        for (var i = 0; i < string.length; ++i) {
          c1 = string.charCodeAt(i);
          if (c1 < 128) {
            buffer[offset++] = c1;
          } else if (c1 < 2048) {
            buffer[offset++] = c1 >> 6 | 192;
            buffer[offset++] = c1 & 63 | 128;
          } else if ((c1 & 64512) === 55296 && ((c2 = string.charCodeAt(i + 1)) & 64512) === 56320) {
            c1 = 65536 + ((c1 & 1023) << 10) + (c2 & 1023);
            ++i;
            buffer[offset++] = c1 >> 18 | 240;
            buffer[offset++] = c1 >> 12 & 63 | 128;
            buffer[offset++] = c1 >> 6 & 63 | 128;
            buffer[offset++] = c1 & 63 | 128;
          } else {
            buffer[offset++] = c1 >> 12 | 224;
            buffer[offset++] = c1 >> 6 & 63 | 128;
            buffer[offset++] = c1 & 63 | 128;
          }
        }
        return offset - start;
      };
    })(utf8);
    return utf8;
  }
  var pool_1;
  var hasRequiredPool;
  function requirePool() {
    if (hasRequiredPool) return pool_1;
    hasRequiredPool = 1;
    pool_1 = pool;
    function pool(alloc, slice, size) {
      var SIZE = size || 8192;
      var MAX = SIZE >>> 1;
      var slab = null;
      var offset = SIZE;
      return function pool_alloc(size2) {
        if (size2 < 1 || size2 > MAX)
          return alloc(size2);
        if (offset + size2 > SIZE) {
          slab = alloc(SIZE);
          offset = 0;
        }
        var buf = slice.call(slab, offset, offset += size2);
        if (offset & 7)
          offset = (offset | 7) + 1;
        return buf;
      };
    }
    return pool_1;
  }
  var longbits;
  var hasRequiredLongbits;
  function requireLongbits() {
    if (hasRequiredLongbits) return longbits;
    hasRequiredLongbits = 1;
    longbits = LongBits;
    var util = requireMinimal$1();
    function LongBits(lo, hi) {
      this.lo = lo >>> 0;
      this.hi = hi >>> 0;
    }
    var zero = LongBits.zero = new LongBits(0, 0);
    zero.toNumber = function() {
      return 0;
    };
    zero.zzEncode = zero.zzDecode = function() {
      return this;
    };
    zero.length = function() {
      return 1;
    };
    var zeroHash = LongBits.zeroHash = "\0\0\0\0\0\0\0\0";
    LongBits.fromNumber = function fromNumber(value) {
      if (value === 0)
        return zero;
      var sign = value < 0;
      if (sign)
        value = -value;
      var lo = value >>> 0, hi = (value - lo) / 4294967296 >>> 0;
      if (sign) {
        hi = ~hi >>> 0;
        lo = ~lo >>> 0;
        if (++lo > 4294967295) {
          lo = 0;
          if (++hi > 4294967295)
            hi = 0;
        }
      }
      return new LongBits(lo, hi);
    };
    LongBits.from = function from(value) {
      if (typeof value === "number")
        return LongBits.fromNumber(value);
      if (util.isString(value)) {
        if (util.Long)
          value = util.Long.fromString(value);
        else
          return LongBits.fromNumber(parseInt(value, 10));
      }
      return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;
    };
    LongBits.prototype.toNumber = function toNumber(unsigned) {
      if (!unsigned && this.hi >>> 31) {
        var lo = ~this.lo + 1 >>> 0, hi = ~this.hi >>> 0;
        if (!lo)
          hi = hi + 1 >>> 0;
        return -(lo + hi * 4294967296);
      }
      return this.lo + this.hi * 4294967296;
    };
    LongBits.prototype.toLong = function toLong(unsigned) {
      return util.Long ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned)) : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };
    };
    var charCodeAt = String.prototype.charCodeAt;
    LongBits.fromHash = function fromHash(hash) {
      if (hash === zeroHash)
        return zero;
      return new LongBits(
        (charCodeAt.call(hash, 0) | charCodeAt.call(hash, 1) << 8 | charCodeAt.call(hash, 2) << 16 | charCodeAt.call(hash, 3) << 24) >>> 0,
        (charCodeAt.call(hash, 4) | charCodeAt.call(hash, 5) << 8 | charCodeAt.call(hash, 6) << 16 | charCodeAt.call(hash, 7) << 24) >>> 0
      );
    };
    LongBits.prototype.toHash = function toHash() {
      return String.fromCharCode(
        this.lo & 255,
        this.lo >>> 8 & 255,
        this.lo >>> 16 & 255,
        this.lo >>> 24,
        this.hi & 255,
        this.hi >>> 8 & 255,
        this.hi >>> 16 & 255,
        this.hi >>> 24
      );
    };
    LongBits.prototype.zzEncode = function zzEncode() {
      var mask = this.hi >> 31;
      this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;
      this.lo = (this.lo << 1 ^ mask) >>> 0;
      return this;
    };
    LongBits.prototype.zzDecode = function zzDecode() {
      var mask = -(this.lo & 1);
      this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;
      this.hi = (this.hi >>> 1 ^ mask) >>> 0;
      return this;
    };
    LongBits.prototype.length = function length() {
      var part0 = this.lo, part1 = (this.lo >>> 28 | this.hi << 4) >>> 0, part2 = this.hi >>> 24;
      return part2 === 0 ? part1 === 0 ? part0 < 16384 ? part0 < 128 ? 1 : 2 : part0 < 2097152 ? 3 : 4 : part1 < 16384 ? part1 < 128 ? 5 : 6 : part1 < 2097152 ? 7 : 8 : part2 < 128 ? 9 : 10;
    };
    return longbits;
  }
  var hasRequiredMinimal$1;
  function requireMinimal$1() {
    if (hasRequiredMinimal$1) return minimal$1;
    hasRequiredMinimal$1 = 1;
    (function(exports) {
      var util = exports;
      util.asPromise = requireAspromise();
      util.base64 = requireBase64();
      util.EventEmitter = requireEventemitter();
      util.float = requireFloat();
      util.inquire = requireInquire();
      util.utf8 = requireUtf8();
      util.pool = requirePool();
      util.LongBits = requireLongbits();
      util.isNode = Boolean(typeof commonjsGlobal !== "undefined" && commonjsGlobal && commonjsGlobal.process && commonjsGlobal.process.versions && commonjsGlobal.process.versions.node);
      util.global = util.isNode && commonjsGlobal || typeof window !== "undefined" && window || typeof self !== "undefined" && self || minimal$1;
      util.emptyArray = Object.freeze ? Object.freeze([]) : (
        /* istanbul ignore next */
        []
      );
      util.emptyObject = Object.freeze ? Object.freeze({}) : (
        /* istanbul ignore next */
        {}
      );
      util.isInteger = Number.isInteger || /* istanbul ignore next */
      function isInteger(value) {
        return typeof value === "number" && isFinite(value) && Math.floor(value) === value;
      };
      util.isString = function isString(value) {
        return typeof value === "string" || value instanceof String;
      };
      util.isObject = function isObject2(value) {
        return value && typeof value === "object";
      };
      util.isset = /**
       * Checks if a property on a message is considered to be present.
       * @param {Object} obj Plain object or message instance
       * @param {string} prop Property name
       * @returns {boolean} `true` if considered to be present, otherwise `false`
       */
      util.isSet = function isSet(obj, prop) {
        var value = obj[prop];
        if (value != null && obj.hasOwnProperty(prop))
          return typeof value !== "object" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;
        return false;
      };
      util.Buffer = function() {
        try {
          var Buffer = util.inquire("buffer").Buffer;
          return Buffer.prototype.utf8Write ? Buffer : (
            /* istanbul ignore next */
            null
          );
        } catch (e) {
          return null;
        }
      }();
      util._Buffer_from = null;
      util._Buffer_allocUnsafe = null;
      util.newBuffer = function newBuffer(sizeOrArray) {
        return typeof sizeOrArray === "number" ? util.Buffer ? util._Buffer_allocUnsafe(sizeOrArray) : new util.Array(sizeOrArray) : util.Buffer ? util._Buffer_from(sizeOrArray) : typeof Uint8Array === "undefined" ? sizeOrArray : new Uint8Array(sizeOrArray);
      };
      util.Array = typeof Uint8Array !== "undefined" ? Uint8Array : Array;
      util.Long = /* istanbul ignore next */
      util.global.dcodeIO && /* istanbul ignore next */
      util.global.dcodeIO.Long || /* istanbul ignore next */
      util.global.Long || util.inquire("long");
      util.key2Re = /^true|false|0|1$/;
      util.key32Re = /^-?(?:0|[1-9][0-9]*)$/;
      util.key64Re = /^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;
      util.longToHash = function longToHash(value) {
        return value ? util.LongBits.from(value).toHash() : util.LongBits.zeroHash;
      };
      util.longFromHash = function longFromHash(hash, unsigned) {
        var bits = util.LongBits.fromHash(hash);
        if (util.Long)
          return util.Long.fromBits(bits.lo, bits.hi, unsigned);
        return bits.toNumber(Boolean(unsigned));
      };
      function merge(dst, src, ifNotSet) {
        for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)
          if (dst[keys[i]] === void 0 || !ifNotSet)
            dst[keys[i]] = src[keys[i]];
        return dst;
      }
      util.merge = merge;
      util.lcFirst = function lcFirst(str) {
        return str.charAt(0).toLowerCase() + str.substring(1);
      };
      function newError(name) {
        function CustomError(message, properties) {
          if (!(this instanceof CustomError))
            return new CustomError(message, properties);
          Object.defineProperty(this, "message", { get: function() {
            return message;
          } });
          if (Error.captureStackTrace)
            Error.captureStackTrace(this, CustomError);
          else
            Object.defineProperty(this, "stack", { value: new Error().stack || "" });
          if (properties)
            merge(this, properties);
        }
        CustomError.prototype = Object.create(Error.prototype, {
          constructor: {
            value: CustomError,
            writable: true,
            enumerable: false,
            configurable: true
          },
          name: {
            get: function get() {
              return name;
            },
            set: void 0,
            enumerable: false,
            // configurable: false would accurately preserve the behavior of
            // the original, but I'm guessing that was not intentional.
            // For an actual error subclass, this property would
            // be configurable.
            configurable: true
          },
          toString: {
            value: function value() {
              return this.name + ": " + this.message;
            },
            writable: true,
            enumerable: false,
            configurable: true
          }
        });
        return CustomError;
      }
      util.newError = newError;
      util.ProtocolError = newError("ProtocolError");
      util.oneOfGetter = function getOneOf(fieldNames) {
        var fieldMap = {};
        for (var i = 0; i < fieldNames.length; ++i)
          fieldMap[fieldNames[i]] = 1;
        return function() {
          for (var keys = Object.keys(this), i2 = keys.length - 1; i2 > -1; --i2)
            if (fieldMap[keys[i2]] === 1 && this[keys[i2]] !== void 0 && this[keys[i2]] !== null)
              return keys[i2];
        };
      };
      util.oneOfSetter = function setOneOf(fieldNames) {
        return function(name) {
          for (var i = 0; i < fieldNames.length; ++i)
            if (fieldNames[i] !== name)
              delete this[fieldNames[i]];
        };
      };
      util.toJSONOptions = {
        longs: String,
        enums: String,
        bytes: String,
        json: true
      };
      util._configure = function() {
        var Buffer = util.Buffer;
        if (!Buffer) {
          util._Buffer_from = util._Buffer_allocUnsafe = null;
          return;
        }
        util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from || /* istanbul ignore next */
        function Buffer_from(value, encoding) {
          return new Buffer(value, encoding);
        };
        util._Buffer_allocUnsafe = Buffer.allocUnsafe || /* istanbul ignore next */
        function Buffer_allocUnsafe(size) {
          return new Buffer(size);
        };
      };
    })(minimal$1);
    return minimal$1;
  }
  var writer;
  var hasRequiredWriter;
  function requireWriter() {
    if (hasRequiredWriter) return writer;
    hasRequiredWriter = 1;
    writer = Writer;
    var util = requireMinimal$1();
    var BufferWriter;
    var LongBits = util.LongBits, base642 = util.base64, utf82 = util.utf8;
    function Op(fn, len, val) {
      this.fn = fn;
      this.len = len;
      this.next = void 0;
      this.val = val;
    }
    function noop2() {
    }
    function State(writer2) {
      this.head = writer2.head;
      this.tail = writer2.tail;
      this.len = writer2.len;
      this.next = writer2.states;
    }
    function Writer() {
      this.len = 0;
      this.head = new Op(noop2, 0, 0);
      this.tail = this.head;
      this.states = null;
    }
    var create = function create2() {
      return util.Buffer ? function create_buffer_setup() {
        return (Writer.create = function create_buffer() {
          return new BufferWriter();
        })();
      } : function create_array() {
        return new Writer();
      };
    };
    Writer.create = create();
    Writer.alloc = function alloc(size) {
      return new util.Array(size);
    };
    if (util.Array !== Array)
      Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);
    Writer.prototype._push = function push(fn, len, val) {
      this.tail = this.tail.next = new Op(fn, len, val);
      this.len += len;
      return this;
    };
    function writeByte(val, buf, pos) {
      buf[pos] = val & 255;
    }
    function writeVarint32(val, buf, pos) {
      while (val > 127) {
        buf[pos++] = val & 127 | 128;
        val >>>= 7;
      }
      buf[pos] = val;
    }
    function VarintOp(len, val) {
      this.len = len;
      this.next = void 0;
      this.val = val;
    }
    VarintOp.prototype = Object.create(Op.prototype);
    VarintOp.prototype.fn = writeVarint32;
    Writer.prototype.uint32 = function write_uint32(value) {
      this.len += (this.tail = this.tail.next = new VarintOp(
        (value = value >>> 0) < 128 ? 1 : value < 16384 ? 2 : value < 2097152 ? 3 : value < 268435456 ? 4 : 5,
        value
      )).len;
      return this;
    };
    Writer.prototype.int32 = function write_int32(value) {
      return value < 0 ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) : this.uint32(value);
    };
    Writer.prototype.sint32 = function write_sint32(value) {
      return this.uint32((value << 1 ^ value >> 31) >>> 0);
    };
    function writeVarint64(val, buf, pos) {
      while (val.hi) {
        buf[pos++] = val.lo & 127 | 128;
        val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;
        val.hi >>>= 7;
      }
      while (val.lo > 127) {
        buf[pos++] = val.lo & 127 | 128;
        val.lo = val.lo >>> 7;
      }
      buf[pos++] = val.lo;
    }
    Writer.prototype.uint64 = function write_uint64(value) {
      var bits = LongBits.from(value);
      return this._push(writeVarint64, bits.length(), bits);
    };
    Writer.prototype.int64 = Writer.prototype.uint64;
    Writer.prototype.sint64 = function write_sint64(value) {
      var bits = LongBits.from(value).zzEncode();
      return this._push(writeVarint64, bits.length(), bits);
    };
    Writer.prototype.bool = function write_bool(value) {
      return this._push(writeByte, 1, value ? 1 : 0);
    };
    function writeFixed32(val, buf, pos) {
      buf[pos] = val & 255;
      buf[pos + 1] = val >>> 8 & 255;
      buf[pos + 2] = val >>> 16 & 255;
      buf[pos + 3] = val >>> 24;
    }
    Writer.prototype.fixed32 = function write_fixed32(value) {
      return this._push(writeFixed32, 4, value >>> 0);
    };
    Writer.prototype.sfixed32 = Writer.prototype.fixed32;
    Writer.prototype.fixed64 = function write_fixed64(value) {
      var bits = LongBits.from(value);
      return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);
    };
    Writer.prototype.sfixed64 = Writer.prototype.fixed64;
    Writer.prototype.float = function write_float(value) {
      return this._push(util.float.writeFloatLE, 4, value);
    };
    Writer.prototype.double = function write_double(value) {
      return this._push(util.float.writeDoubleLE, 8, value);
    };
    var writeBytes = util.Array.prototype.set ? function writeBytes_set(val, buf, pos) {
      buf.set(val, pos);
    } : function writeBytes_for(val, buf, pos) {
      for (var i = 0; i < val.length; ++i)
        buf[pos + i] = val[i];
    };
    Writer.prototype.bytes = function write_bytes(value) {
      var len = value.length >>> 0;
      if (!len)
        return this._push(writeByte, 1, 0);
      if (util.isString(value)) {
        var buf = Writer.alloc(len = base642.length(value));
        base642.decode(value, buf, 0);
        value = buf;
      }
      return this.uint32(len)._push(writeBytes, len, value);
    };
    Writer.prototype.string = function write_string(value) {
      var len = utf82.length(value);
      return len ? this.uint32(len)._push(utf82.write, len, value) : this._push(writeByte, 1, 0);
    };
    Writer.prototype.fork = function fork() {
      this.states = new State(this);
      this.head = this.tail = new Op(noop2, 0, 0);
      this.len = 0;
      return this;
    };
    Writer.prototype.reset = function reset() {
      if (this.states) {
        this.head = this.states.head;
        this.tail = this.states.tail;
        this.len = this.states.len;
        this.states = this.states.next;
      } else {
        this.head = this.tail = new Op(noop2, 0, 0);
        this.len = 0;
      }
      return this;
    };
    Writer.prototype.ldelim = function ldelim() {
      var head = this.head, tail = this.tail, len = this.len;
      this.reset().uint32(len);
      if (len) {
        this.tail.next = head.next;
        this.tail = tail;
        this.len += len;
      }
      return this;
    };
    Writer.prototype.finish = function finish() {
      var head = this.head.next, buf = this.constructor.alloc(this.len), pos = 0;
      while (head) {
        head.fn(head.val, buf, pos);
        pos += head.len;
        head = head.next;
      }
      return buf;
    };
    Writer._configure = function(BufferWriter_) {
      BufferWriter = BufferWriter_;
      Writer.create = create();
      BufferWriter._configure();
    };
    return writer;
  }
  var writer_buffer;
  var hasRequiredWriter_buffer;
  function requireWriter_buffer() {
    if (hasRequiredWriter_buffer) return writer_buffer;
    hasRequiredWriter_buffer = 1;
    writer_buffer = BufferWriter;
    var Writer = requireWriter();
    (BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;
    var util = requireMinimal$1();
    function BufferWriter() {
      Writer.call(this);
    }
    BufferWriter._configure = function() {
      BufferWriter.alloc = util._Buffer_allocUnsafe;
      BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === "set" ? function writeBytesBuffer_set(val, buf, pos) {
        buf.set(val, pos);
      } : function writeBytesBuffer_copy(val, buf, pos) {
        if (val.copy)
          val.copy(buf, pos, 0, val.length);
        else for (var i = 0; i < val.length; )
          buf[pos++] = val[i++];
      };
    };
    BufferWriter.prototype.bytes = function write_bytes_buffer(value) {
      if (util.isString(value))
        value = util._Buffer_from(value, "base64");
      var len = value.length >>> 0;
      this.uint32(len);
      if (len)
        this._push(BufferWriter.writeBytesBuffer, len, value);
      return this;
    };
    function writeStringBuffer(val, buf, pos) {
      if (val.length < 40)
        util.utf8.write(val, buf, pos);
      else if (buf.utf8Write)
        buf.utf8Write(val, pos);
      else
        buf.write(val, pos);
    }
    BufferWriter.prototype.string = function write_string_buffer(value) {
      var len = util.Buffer.byteLength(value);
      this.uint32(len);
      if (len)
        this._push(writeStringBuffer, len, value);
      return this;
    };
    BufferWriter._configure();
    return writer_buffer;
  }
  var reader;
  var hasRequiredReader;
  function requireReader() {
    if (hasRequiredReader) return reader;
    hasRequiredReader = 1;
    reader = Reader;
    var util = requireMinimal$1();
    var BufferReader;
    var LongBits = util.LongBits, utf82 = util.utf8;
    function indexOutOfRange(reader2, writeLength) {
      return RangeError("index out of range: " + reader2.pos + " + " + (writeLength || 1) + " > " + reader2.len);
    }
    function Reader(buffer) {
      this.buf = buffer;
      this.pos = 0;
      this.len = buffer.length;
    }
    var create_array = typeof Uint8Array !== "undefined" ? function create_typed_array(buffer) {
      if (buffer instanceof Uint8Array || Array.isArray(buffer))
        return new Reader(buffer);
      throw Error("illegal buffer");
    } : function create_array2(buffer) {
      if (Array.isArray(buffer))
        return new Reader(buffer);
      throw Error("illegal buffer");
    };
    var create = function create2() {
      return util.Buffer ? function create_buffer_setup(buffer) {
        return (Reader.create = function create_buffer(buffer2) {
          return util.Buffer.isBuffer(buffer2) ? new BufferReader(buffer2) : create_array(buffer2);
        })(buffer);
      } : create_array;
    };
    Reader.create = create();
    Reader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */
    util.Array.prototype.slice;
    Reader.prototype.uint32 = /* @__PURE__ */ function read_uint32_setup() {
      var value = 4294967295;
      return function read_uint32() {
        value = (this.buf[this.pos] & 127) >>> 0;
        if (this.buf[this.pos++] < 128) return value;
        value = (value | (this.buf[this.pos] & 127) << 7) >>> 0;
        if (this.buf[this.pos++] < 128) return value;
        value = (value | (this.buf[this.pos] & 127) << 14) >>> 0;
        if (this.buf[this.pos++] < 128) return value;
        value = (value | (this.buf[this.pos] & 127) << 21) >>> 0;
        if (this.buf[this.pos++] < 128) return value;
        value = (value | (this.buf[this.pos] & 15) << 28) >>> 0;
        if (this.buf[this.pos++] < 128) return value;
        if ((this.pos += 5) > this.len) {
          this.pos = this.len;
          throw indexOutOfRange(this, 10);
        }
        return value;
      };
    }();
    Reader.prototype.int32 = function read_int32() {
      return this.uint32() | 0;
    };
    Reader.prototype.sint32 = function read_sint32() {
      var value = this.uint32();
      return value >>> 1 ^ -(value & 1) | 0;
    };
    function readLongVarint() {
      var bits = new LongBits(0, 0);
      var i = 0;
      if (this.len - this.pos > 4) {
        for (; i < 4; ++i) {
          bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;
          if (this.buf[this.pos++] < 128)
            return bits;
        }
        bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;
        bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;
        if (this.buf[this.pos++] < 128)
          return bits;
        i = 0;
      } else {
        for (; i < 3; ++i) {
          if (this.pos >= this.len)
            throw indexOutOfRange(this);
          bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;
          if (this.buf[this.pos++] < 128)
            return bits;
        }
        bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;
        return bits;
      }
      if (this.len - this.pos > 4) {
        for (; i < 5; ++i) {
          bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;
          if (this.buf[this.pos++] < 128)
            return bits;
        }
      } else {
        for (; i < 5; ++i) {
          if (this.pos >= this.len)
            throw indexOutOfRange(this);
          bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;
          if (this.buf[this.pos++] < 128)
            return bits;
        }
      }
      throw Error("invalid varint encoding");
    }
    Reader.prototype.bool = function read_bool() {
      return this.uint32() !== 0;
    };
    function readFixed32_end(buf, end) {
      return (buf[end - 4] | buf[end - 3] << 8 | buf[end - 2] << 16 | buf[end - 1] << 24) >>> 0;
    }
    Reader.prototype.fixed32 = function read_fixed32() {
      if (this.pos + 4 > this.len)
        throw indexOutOfRange(this, 4);
      return readFixed32_end(this.buf, this.pos += 4);
    };
    Reader.prototype.sfixed32 = function read_sfixed32() {
      if (this.pos + 4 > this.len)
        throw indexOutOfRange(this, 4);
      return readFixed32_end(this.buf, this.pos += 4) | 0;
    };
    function readFixed64() {
      if (this.pos + 8 > this.len)
        throw indexOutOfRange(this, 8);
      return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));
    }
    Reader.prototype.float = function read_float() {
      if (this.pos + 4 > this.len)
        throw indexOutOfRange(this, 4);
      var value = util.float.readFloatLE(this.buf, this.pos);
      this.pos += 4;
      return value;
    };
    Reader.prototype.double = function read_double() {
      if (this.pos + 8 > this.len)
        throw indexOutOfRange(this, 4);
      var value = util.float.readDoubleLE(this.buf, this.pos);
      this.pos += 8;
      return value;
    };
    Reader.prototype.bytes = function read_bytes() {
      var length = this.uint32(), start = this.pos, end = this.pos + length;
      if (end > this.len)
        throw indexOutOfRange(this, length);
      this.pos += length;
      if (Array.isArray(this.buf))
        return this.buf.slice(start, end);
      if (start === end) {
        var nativeBuffer = util.Buffer;
        return nativeBuffer ? nativeBuffer.alloc(0) : new this.buf.constructor(0);
      }
      return this._slice.call(this.buf, start, end);
    };
    Reader.prototype.string = function read_string() {
      var bytes = this.bytes();
      return utf82.read(bytes, 0, bytes.length);
    };
    Reader.prototype.skip = function skip(length) {
      if (typeof length === "number") {
        if (this.pos + length > this.len)
          throw indexOutOfRange(this, length);
        this.pos += length;
      } else {
        do {
          if (this.pos >= this.len)
            throw indexOutOfRange(this);
        } while (this.buf[this.pos++] & 128);
      }
      return this;
    };
    Reader.prototype.skipType = function(wireType) {
      switch (wireType) {
        case 0:
          this.skip();
          break;
        case 1:
          this.skip(8);
          break;
        case 2:
          this.skip(this.uint32());
          break;
        case 3:
          while ((wireType = this.uint32() & 7) !== 4) {
            this.skipType(wireType);
          }
          break;
        case 5:
          this.skip(4);
          break;
        /* istanbul ignore next */
        default:
          throw Error("invalid wire type " + wireType + " at offset " + this.pos);
      }
      return this;
    };
    Reader._configure = function(BufferReader_) {
      BufferReader = BufferReader_;
      Reader.create = create();
      BufferReader._configure();
      var fn = util.Long ? "toLong" : (
        /* istanbul ignore next */
        "toNumber"
      );
      util.merge(Reader.prototype, {
        int64: function read_int64() {
          return readLongVarint.call(this)[fn](false);
        },
        uint64: function read_uint64() {
          return readLongVarint.call(this)[fn](true);
        },
        sint64: function read_sint64() {
          return readLongVarint.call(this).zzDecode()[fn](false);
        },
        fixed64: function read_fixed64() {
          return readFixed64.call(this)[fn](true);
        },
        sfixed64: function read_sfixed64() {
          return readFixed64.call(this)[fn](false);
        }
      });
    };
    return reader;
  }
  var reader_buffer;
  var hasRequiredReader_buffer;
  function requireReader_buffer() {
    if (hasRequiredReader_buffer) return reader_buffer;
    hasRequiredReader_buffer = 1;
    reader_buffer = BufferReader;
    var Reader = requireReader();
    (BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;
    var util = requireMinimal$1();
    function BufferReader(buffer) {
      Reader.call(this, buffer);
    }
    BufferReader._configure = function() {
      if (util.Buffer)
        BufferReader.prototype._slice = util.Buffer.prototype.slice;
    };
    BufferReader.prototype.string = function read_string_buffer() {
      var len = this.uint32();
      return this.buf.utf8Slice ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len)) : this.buf.toString("utf-8", this.pos, this.pos = Math.min(this.pos + len, this.len));
    };
    BufferReader._configure();
    return reader_buffer;
  }
  var rpc = {};
  var service;
  var hasRequiredService;
  function requireService() {
    if (hasRequiredService) return service;
    hasRequiredService = 1;
    service = Service;
    var util = requireMinimal$1();
    (Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;
    function Service(rpcImpl, requestDelimited, responseDelimited) {
      if (typeof rpcImpl !== "function")
        throw TypeError("rpcImpl must be a function");
      util.EventEmitter.call(this);
      this.rpcImpl = rpcImpl;
      this.requestDelimited = Boolean(requestDelimited);
      this.responseDelimited = Boolean(responseDelimited);
    }
    Service.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {
      if (!request)
        throw TypeError("request must be specified");
      var self2 = this;
      if (!callback)
        return util.asPromise(rpcCall, self2, method, requestCtor, responseCtor, request);
      if (!self2.rpcImpl) {
        setTimeout(function() {
          callback(Error("already ended"));
        }, 0);
        return void 0;
      }
      try {
        return self2.rpcImpl(
          method,
          requestCtor[self2.requestDelimited ? "encodeDelimited" : "encode"](request).finish(),
          function rpcCallback(err, response) {
            if (err) {
              self2.emit("error", err, method);
              return callback(err);
            }
            if (response === null) {
              self2.end(
                /* endedByRPC */
                true
              );
              return void 0;
            }
            if (!(response instanceof responseCtor)) {
              try {
                response = responseCtor[self2.responseDelimited ? "decodeDelimited" : "decode"](response);
              } catch (err2) {
                self2.emit("error", err2, method);
                return callback(err2);
              }
            }
            self2.emit("data", response, method);
            return callback(null, response);
          }
        );
      } catch (err) {
        self2.emit("error", err, method);
        setTimeout(function() {
          callback(err);
        }, 0);
        return void 0;
      }
    };
    Service.prototype.end = function end(endedByRPC) {
      if (this.rpcImpl) {
        if (!endedByRPC)
          this.rpcImpl(null, null, null);
        this.rpcImpl = null;
        this.emit("end").off();
      }
      return this;
    };
    return service;
  }
  var hasRequiredRpc;
  function requireRpc() {
    if (hasRequiredRpc) return rpc;
    hasRequiredRpc = 1;
    (function(exports) {
      var rpc2 = exports;
      rpc2.Service = requireService();
    })(rpc);
    return rpc;
  }
  var roots;
  var hasRequiredRoots;
  function requireRoots() {
    if (hasRequiredRoots) return roots;
    hasRequiredRoots = 1;
    roots = {};
    return roots;
  }
  var hasRequiredIndexMinimal;
  function requireIndexMinimal() {
    if (hasRequiredIndexMinimal) return indexMinimal;
    hasRequiredIndexMinimal = 1;
    (function(exports) {
      var protobuf = exports;
      protobuf.build = "minimal";
      protobuf.Writer = requireWriter();
      protobuf.BufferWriter = requireWriter_buffer();
      protobuf.Reader = requireReader();
      protobuf.BufferReader = requireReader_buffer();
      protobuf.util = requireMinimal$1();
      protobuf.rpc = requireRpc();
      protobuf.roots = requireRoots();
      protobuf.configure = configure;
      function configure() {
        protobuf.util._configure();
        protobuf.Writer._configure(protobuf.BufferWriter);
        protobuf.Reader._configure(protobuf.BufferReader);
      }
      configure();
    })(indexMinimal);
    return indexMinimal;
  }
  var minimal;
  var hasRequiredMinimal;
  function requireMinimal() {
    if (hasRequiredMinimal) return minimal;
    hasRequiredMinimal = 1;
    minimal = requireIndexMinimal();
    return minimal;
  }
  var minimalExports = requireMinimal();
  const $Reader$2 = minimalExports.Reader, $Writer$1 = minimalExports.Writer;
  const $root$3 = minimalExports.roots["default"] || (minimalExports.roots["default"] = {});
  const NextContinuation = $root$3.NextContinuation = (() => {
    function NextContinuation2(p) {
      if (p) {
        for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
          if (p[ks[i]] != null)
            this[ks[i]] = p[ks[i]];
      }
    }
    NextContinuation2.prototype.commentAreaWrapper = null;
    NextContinuation2.prototype.uField3 = 0;
    NextContinuation2.prototype.mainCommentRequest = null;
    NextContinuation2.encode = function encode(m, w) {
      if (!w)
        w = $Writer$1.create();
      if (m.commentAreaWrapper != null && Object.hasOwnProperty.call(m, "commentAreaWrapper"))
        $root$3.CommentAreaWrapper.encode(m.commentAreaWrapper, w.uint32(18).fork()).ldelim();
      if (m.uField3 != null && Object.hasOwnProperty.call(m, "uField3"))
        w.uint32(24).int32(m.uField3);
      if (m.mainCommentRequest != null && Object.hasOwnProperty.call(m, "mainCommentRequest"))
        $root$3.MainCommentRequest.encode(m.mainCommentRequest, w.uint32(50).fork()).ldelim();
      return w;
    };
    NextContinuation2.decode = function decode(r, l, e) {
      if (!(r instanceof $Reader$2))
        r = $Reader$2.create(r);
      var c = l === void 0 ? r.len : r.pos + l, m = new $root$3.NextContinuation();
      while (r.pos < c) {
        var t = r.uint32();
        if (t === e)
          break;
        switch (t >>> 3) {
          case 2: {
            m.commentAreaWrapper = $root$3.CommentAreaWrapper.decode(r, r.uint32());
            break;
          }
          case 3: {
            m.uField3 = r.int32();
            break;
          }
          case 6: {
            m.mainCommentRequest = $root$3.MainCommentRequest.decode(r, r.uint32());
            break;
          }
          default:
            r.skipType(t & 7);
            break;
        }
      }
      return m;
    };
    return NextContinuation2;
  })();
  $root$3.CommentAreaWrapper = (() => {
    function CommentAreaWrapper(p) {
      if (p) {
        for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
          if (p[ks[i]] != null)
            this[ks[i]] = p[ks[i]];
      }
    }
    CommentAreaWrapper.prototype.videoId = "";
    CommentAreaWrapper.encode = function encode(m, w) {
      if (!w)
        w = $Writer$1.create();
      if (m.videoId != null && Object.hasOwnProperty.call(m, "videoId"))
        w.uint32(18).string(m.videoId);
      return w;
    };
    CommentAreaWrapper.decode = function decode(r, l, e) {
      if (!(r instanceof $Reader$2))
        r = $Reader$2.create(r);
      var c = l === void 0 ? r.len : r.pos + l, m = new $root$3.CommentAreaWrapper();
      while (r.pos < c) {
        var t = r.uint32();
        if (t === e)
          break;
        switch (t >>> 3) {
          case 2: {
            m.videoId = r.string();
            break;
          }
          default:
            r.skipType(t & 7);
            break;
        }
      }
      return m;
    };
    return CommentAreaWrapper;
  })();
  $root$3.MainCommentRequest = (() => {
    function MainCommentRequest(p) {
      if (p) {
        for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
          if (p[ks[i]] != null)
            this[ks[i]] = p[ks[i]];
      }
    }
    MainCommentRequest.prototype.commentParameters = null;
    MainCommentRequest.prototype.commentReplyParameters = null;
    MainCommentRequest.prototype.sectionIdentifier = "";
    MainCommentRequest.encode = function encode(m, w) {
      if (!w)
        w = $Writer$1.create();
      if (m.commentReplyParameters != null && Object.hasOwnProperty.call(m, "commentReplyParameters"))
        $root$3.CommentReplyParameters.encode(m.commentReplyParameters, w.uint32(26).fork()).ldelim();
      if (m.commentParameters != null && Object.hasOwnProperty.call(m, "commentParameters"))
        $root$3.CommentParameters.encode(m.commentParameters, w.uint32(34).fork()).ldelim();
      if (m.sectionIdentifier != null && Object.hasOwnProperty.call(m, "sectionIdentifier"))
        w.uint32(66).string(m.sectionIdentifier);
      return w;
    };
    MainCommentRequest.decode = function decode(r, l, e) {
      if (!(r instanceof $Reader$2))
        r = $Reader$2.create(r);
      var c = l === void 0 ? r.len : r.pos + l, m = new $root$3.MainCommentRequest();
      while (r.pos < c) {
        var t = r.uint32();
        if (t === e)
          break;
        switch (t >>> 3) {
          case 4: {
            m.commentParameters = $root$3.CommentParameters.decode(r, r.uint32());
            break;
          }
          case 3: {
            m.commentReplyParameters = $root$3.CommentReplyParameters.decode(r, r.uint32());
            break;
          }
          case 8: {
            m.sectionIdentifier = r.string();
            break;
          }
          default:
            r.skipType(t & 7);
            break;
        }
      }
      return m;
    };
    return MainCommentRequest;
  })();
  $root$3.CommentParameters = (() => {
    function CommentParameters(p) {
      if (p) {
        for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
          if (p[ks[i]] != null)
            this[ks[i]] = p[ks[i]];
      }
    }
    CommentParameters.prototype.videoId = "";
    CommentParameters.prototype.postId = "";
    CommentParameters.prototype.channelId = "";
    CommentParameters.prototype.sortType = 0;
    CommentParameters.prototype.targetCommentId = "";
    CommentParameters.encode = function encode(m, w) {
      if (!w)
        w = $Writer$1.create();
      if (m.videoId != null && Object.hasOwnProperty.call(m, "videoId"))
        w.uint32(34).string(m.videoId);
      if (m.sortType != null && Object.hasOwnProperty.call(m, "sortType"))
        w.uint32(48).int32(m.sortType);
      if (m.targetCommentId != null && Object.hasOwnProperty.call(m, "targetCommentId"))
        w.uint32(130).string(m.targetCommentId);
      if (m.postId != null && Object.hasOwnProperty.call(m, "postId"))
        w.uint32(234).string(m.postId);
      if (m.channelId != null && Object.hasOwnProperty.call(m, "channelId"))
        w.uint32(242).string(m.channelId);
      return w;
    };
    CommentParameters.decode = function decode(r, l, e) {
      if (!(r instanceof $Reader$2))
        r = $Reader$2.create(r);
      var c = l === void 0 ? r.len : r.pos + l, m = new $root$3.CommentParameters();
      while (r.pos < c) {
        var t = r.uint32();
        if (t === e)
          break;
        switch (t >>> 3) {
          case 4: {
            m.videoId = r.string();
            break;
          }
          case 29: {
            m.postId = r.string();
            break;
          }
          case 30: {
            m.channelId = r.string();
            break;
          }
          case 6: {
            m.sortType = r.int32();
            break;
          }
          case 16: {
            m.targetCommentId = r.string();
            break;
          }
          default:
            r.skipType(t & 7);
            break;
        }
      }
      return m;
    };
    CommentParameters.SortType = function() {
      const valuesById = {}, values = Object.create(valuesById);
      values[valuesById[0] = "HOT"] = 0;
      values[valuesById[1] = "LATEST"] = 1;
      return values;
    }();
    return CommentParameters;
  })();
  $root$3.CommentReplyParameters = (() => {
    function CommentReplyParameters(p) {
      if (p) {
        for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
          if (p[ks[i]] != null)
            this[ks[i]] = p[ks[i]];
      }
    }
    CommentReplyParameters.prototype.rootCommentId = "";
    CommentReplyParameters.prototype.channelId = "";
    CommentReplyParameters.prototype.videoId = "";
    CommentReplyParameters.prototype.postId = "";
    CommentReplyParameters.prototype.pageSize = 0;
    CommentReplyParameters.prototype.sortParam = null;
    CommentReplyParameters.encode = function encode(m, w) {
      if (!w)
        w = $Writer$1.create();
      if (m.rootCommentId != null && Object.hasOwnProperty.call(m, "rootCommentId"))
        w.uint32(18).string(m.rootCommentId);
      if (m.channelId != null && Object.hasOwnProperty.call(m, "channelId"))
        w.uint32(42).string(m.channelId);
      if (m.videoId != null && Object.hasOwnProperty.call(m, "videoId"))
        w.uint32(50).string(m.videoId);
      if (m.pageSize != null && Object.hasOwnProperty.call(m, "pageSize"))
        w.uint32(72).int32(m.pageSize);
      if (m.postId != null && Object.hasOwnProperty.call(m, "postId"))
        w.uint32(122).string(m.postId);
      if (m.sortParam != null && Object.hasOwnProperty.call(m, "sortParam"))
        $root$3.CommentReplyParameters.SortParam.encode(m.sortParam, w.uint32(130).fork()).ldelim();
      return w;
    };
    CommentReplyParameters.decode = function decode(r, l, e) {
      if (!(r instanceof $Reader$2))
        r = $Reader$2.create(r);
      var c = l === void 0 ? r.len : r.pos + l, m = new $root$3.CommentReplyParameters();
      while (r.pos < c) {
        var t = r.uint32();
        if (t === e)
          break;
        switch (t >>> 3) {
          case 2: {
            m.rootCommentId = r.string();
            break;
          }
          case 5: {
            m.channelId = r.string();
            break;
          }
          case 6: {
            m.videoId = r.string();
            break;
          }
          case 15: {
            m.postId = r.string();
            break;
          }
          case 9: {
            m.pageSize = r.int32();
            break;
          }
          case 16: {
            m.sortParam = $root$3.CommentReplyParameters.SortParam.decode(r, r.uint32());
            break;
          }
          default:
            r.skipType(t & 7);
            break;
        }
      }
      return m;
    };
    CommentReplyParameters.SortParam = function() {
      function SortParam(p) {
        if (p) {
          for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
            if (p[ks[i]] != null)
              this[ks[i]] = p[ks[i]];
        }
      }
      SortParam.prototype.sortType = 0;
      SortParam.encode = function encode(m, w) {
        if (!w)
          w = $Writer$1.create();
        if (m.sortType != null && Object.hasOwnProperty.call(m, "sortType"))
          w.uint32(8).int32(m.sortType);
        return w;
      };
      SortParam.decode = function decode(r, l, e) {
        if (!(r instanceof $Reader$2))
          r = $Reader$2.create(r);
        var c = l === void 0 ? r.len : r.pos + l, m = new $root$3.CommentReplyParameters.SortParam();
        while (r.pos < c) {
          var t = r.uint32();
          if (t === e)
            break;
          switch (t >>> 3) {
            case 1: {
              m.sortType = r.int32();
              break;
            }
            default:
              r.skipType(t & 7);
              break;
          }
        }
        return m;
      };
      SortParam.SortType = function() {
        const valuesById = {}, values = Object.create(valuesById);
        values[valuesById[0] = "DEFAULT"] = 0;
        values[valuesById[1] = "HOT"] = 1;
        values[valuesById[2] = "LATEST"] = 2;
        return values;
      }();
      return SortParam;
    }();
    return CommentReplyParameters;
  })();
  const BrowserContinuation = $root$3.BrowserContinuation = (() => {
    function BrowserContinuation2(p) {
      if (p) {
        for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
          if (p[ks[i]] != null)
            this[ks[i]] = p[ks[i]];
      }
    }
    BrowserContinuation2.prototype.request = null;
    BrowserContinuation2.encode = function encode(m, w) {
      if (!w)
        w = $Writer$1.create();
      if (m.request != null && Object.hasOwnProperty.call(m, "request"))
        $root$3.BrowserContinuation.Request.encode(m.request, w.uint32(641815778).fork()).ldelim();
      return w;
    };
    BrowserContinuation2.decode = function decode(r, l, e) {
      if (!(r instanceof $Reader$2))
        r = $Reader$2.create(r);
      var c = l === void 0 ? r.len : r.pos + l, m = new $root$3.BrowserContinuation();
      while (r.pos < c) {
        var t = r.uint32();
        if (t === e)
          break;
        switch (t >>> 3) {
          case 80226972: {
            m.request = $root$3.BrowserContinuation.Request.decode(r, r.uint32());
            break;
          }
          default:
            r.skipType(t & 7);
            break;
        }
      }
      return m;
    };
    BrowserContinuation2.Request = function() {
      function Request2(p) {
        if (p) {
          for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
            if (p[ks[i]] != null)
              this[ks[i]] = p[ks[i]];
        }
      }
      Request2.prototype.description = "";
      Request2.prototype.continuationBase64 = "";
      Request2.encode = function encode(m, w) {
        if (!w)
          w = $Writer$1.create();
        if (m.description != null && Object.hasOwnProperty.call(m, "description"))
          w.uint32(18).string(m.description);
        if (m.continuationBase64 != null && Object.hasOwnProperty.call(m, "continuationBase64"))
          w.uint32(26).string(m.continuationBase64);
        return w;
      };
      Request2.decode = function decode(r, l, e) {
        if (!(r instanceof $Reader$2))
          r = $Reader$2.create(r);
        var c = l === void 0 ? r.len : r.pos + l, m = new $root$3.BrowserContinuation.Request();
        while (r.pos < c) {
          var t = r.uint32();
          if (t === e)
            break;
          switch (t >>> 3) {
            case 2: {
              m.description = r.string();
              break;
            }
            case 3: {
              m.continuationBase64 = r.string();
              break;
            }
            default:
              r.skipType(t & 7);
              break;
          }
        }
        return m;
      };
      return Request2;
    }();
    return BrowserContinuation2;
  })();
  const BrowserCommentListContinuation = $root$3.BrowserCommentListContinuation = (() => {
    function BrowserCommentListContinuation2(p) {
      if (p) {
        for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
          if (p[ks[i]] != null)
            this[ks[i]] = p[ks[i]];
      }
    }
    BrowserCommentListContinuation2.prototype.description = "";
    BrowserCommentListContinuation2.prototype.mainCommentRequest = null;
    BrowserCommentListContinuation2.encode = function encode(m, w) {
      if (!w)
        w = $Writer$1.create();
      if (m.description != null && Object.hasOwnProperty.call(m, "description"))
        w.uint32(18).string(m.description);
      if (m.mainCommentRequest != null && Object.hasOwnProperty.call(m, "mainCommentRequest"))
        $root$3.MainCommentRequest.encode(m.mainCommentRequest, w.uint32(426).fork()).ldelim();
      return w;
    };
    BrowserCommentListContinuation2.decode = function decode(r, l, e) {
      if (!(r instanceof $Reader$2))
        r = $Reader$2.create(r);
      var c = l === void 0 ? r.len : r.pos + l, m = new $root$3.BrowserCommentListContinuation();
      while (r.pos < c) {
        var t = r.uint32();
        if (t === e)
          break;
        switch (t >>> 3) {
          case 2: {
            m.description = r.string();
            break;
          }
          case 53: {
            m.mainCommentRequest = $root$3.MainCommentRequest.decode(r, r.uint32());
            break;
          }
          default:
            r.skipType(t & 7);
            break;
        }
      }
      return m;
    };
    return BrowserCommentListContinuation2;
  })();
  const $Reader$1 = minimalExports.Reader;
  const $root$2 = minimalExports.roots["default"] || (minimalExports.roots["default"] = {});
  const CommentAction = $root$2.CommentAction = (() => {
    function CommentAction2(p) {
      if (p) {
        for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
          if (p[ks[i]] != null)
            this[ks[i]] = p[ks[i]];
      }
    }
    CommentAction2.prototype.action = 0;
    CommentAction2.prototype.commentId = "";
    CommentAction2.decode = function decode(r, l, e) {
      if (!(r instanceof $Reader$1))
        r = $Reader$1.create(r);
      var c = l === void 0 ? r.len : r.pos + l, m = new $root$2.CommentAction();
      while (r.pos < c) {
        var t = r.uint32();
        if (t === e)
          break;
        switch (t >>> 3) {
          case 1: {
            m.action = r.int32();
            break;
          }
          case 3: {
            m.commentId = r.string();
            break;
          }
          default:
            r.skipType(t & 7);
            break;
        }
      }
      return m;
    };
    return CommentAction2;
  })();
  $root$2.Action = (() => {
    const valuesById = {}, values = Object.create(valuesById);
    values[valuesById[0] = "DEFAULT"] = 0;
    values[valuesById[5] = "LIKE"] = 5;
    values[valuesById[6] = "DELETE"] = 6;
    return values;
  })();
  const $Writer = minimalExports.Writer;
  const $root$1 = minimalExports.roots["default"] || (minimalExports.roots["default"] = {});
  const GetPanelRequest = $root$1.GetPanelRequest = (() => {
    function GetPanelRequest2(p) {
      if (p) {
        for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
          if (p[ks[i]] != null)
            this[ks[i]] = p[ks[i]];
      }
    }
    GetPanelRequest2.prototype.params = null;
    GetPanelRequest2.encode = function encode(m, w) {
      if (!w)
        w = $Writer.create();
      if (m.params != null && Object.hasOwnProperty.call(m, "params"))
        $root$1.Params.encode(m.params, w.uint32(890).fork()).ldelim();
      return w;
    };
    return GetPanelRequest2;
  })();
  $root$1.Params = (() => {
    function Params(p) {
      if (p) {
        for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
          if (p[ks[i]] != null)
            this[ks[i]] = p[ks[i]];
      }
    }
    Params.prototype.videoId = "";
    Params.prototype.uField5 = 0;
    Params.encode = function encode(m, w) {
      if (!w)
        w = $Writer.create();
      if (m.videoId != null && Object.hasOwnProperty.call(m, "videoId"))
        w.uint32(10).string(m.videoId);
      if (m.uField5 != null && Object.hasOwnProperty.call(m, "uField5"))
        w.uint32(40).int32(m.uField5);
      return w;
    };
    return Params;
  })();
  const $Reader = minimalExports.Reader;
  const $root = minimalExports.roots["default"] || (minimalExports.roots["default"] = {});
  const UpdateCommentParams = $root.UpdateCommentParams = (() => {
    function UpdateCommentParams2(p) {
      if (p) {
        for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
          if (p[ks[i]] != null)
            this[ks[i]] = p[ks[i]];
      }
    }
    UpdateCommentParams2.prototype.commentId = "";
    UpdateCommentParams2.decode = function decode(r, l, e) {
      if (!(r instanceof $Reader))
        r = $Reader.create(r);
      var c = l === void 0 ? r.len : r.pos + l, m = new $root.UpdateCommentParams();
      while (r.pos < c) {
        var t = r.uint32();
        if (t === e)
          break;
        switch (t >>> 3) {
          case 1: {
            m.commentId = r.string();
            break;
          }
          default:
            r.skipType(t & 7);
            break;
        }
      }
      return m;
    };
    return UpdateCommentParams2;
  })();
  var _GM_registerMenuCommand = /* @__PURE__ */ (() => typeof GM_registerMenuCommand != "undefined" ? GM_registerMenuCommand : void 0)();
  var _unsafeWindow = /* @__PURE__ */ (() => typeof unsafeWindow != "undefined" ? unsafeWindow : void 0)();
  var zh_cn_default = {
    name: "zh-cn",
    el: {
      breadcrumb: { label: "面包屑" },
      colorpicker: {
        confirm: "确定",
        clear: "清空",
        defaultLabel: "颜色选择器",
        description: "当前颜色 {color},按 Enter 键选择新颜色",
        alphaLabel: "选择透明度的值",
        alphaDescription: "透明度 {alpha}, 当前颜色 {color}",
        hueLabel: "选择色相值",
        hueDescription: "色相 {hue}, 当前颜色 {color}",
        svLabel: "选择饱和度与明度的值",
        svDescription: "饱和度 {saturation}, 明度 {brightness}, 当前颜色 {color}",
        predefineDescription: "选择 {value} 作为颜色"
      },
      datepicker: {
        now: "此刻",
        today: "今天",
        cancel: "取消",
        clear: "清空",
        confirm: "确定",
        dateTablePrompt: "使用方向键与 Enter 键可选择日期",
        monthTablePrompt: "使用方向键与 Enter 键可选择月份",
        yearTablePrompt: "使用方向键与 Enter 键可选择年份",
        selectedDate: "已选日期",
        selectDate: "选择日期",
        selectTime: "选择时间",
        startDate: "开始日期",
        startTime: "开始时间",
        endDate: "结束日期",
        endTime: "结束时间",
        prevYear: "前一年",
        nextYear: "后一年",
        prevMonth: "上个月",
        nextMonth: "下个月",
        year: "年",
        month1: "1 月",
        month2: "2 月",
        month3: "3 月",
        month4: "4 月",
        month5: "5 月",
        month6: "6 月",
        month7: "7 月",
        month8: "8 月",
        month9: "9 月",
        month10: "10 月",
        month11: "11 月",
        month12: "12 月",
        weeks: {
          sun: "日",
          mon: "一",
          tue: "二",
          wed: "三",
          thu: "四",
          fri: "五",
          sat: "六"
        },
        weeksFull: {
          sun: "星期日",
          mon: "星期一",
          tue: "星期二",
          wed: "星期三",
          thu: "星期四",
          fri: "星期五",
          sat: "星期六"
        },
        months: {
          jan: "一月",
          feb: "二月",
          mar: "三月",
          apr: "四月",
          may: "五月",
          jun: "六月",
          jul: "七月",
          aug: "八月",
          sep: "九月",
          oct: "十月",
          nov: "十一月",
          dec: "十二月"
        }
      },
      inputNumber: {
        decrease: "减少数值",
        increase: "增加数值"
      },
      select: {
        loading: "加载中",
        noMatch: "无匹配数据",
        noData: "无数据",
        placeholder: "请选择"
      },
      mention: { loading: "加载中" },
      dropdown: { toggleDropdown: "切换下拉选项" },
      cascader: {
        noMatch: "无匹配数据",
        loading: "加载中",
        placeholder: "请选择",
        noData: "暂无数据"
      },
      pagination: {
        goto: "前往",
        pagesize: "条/页",
        total: "共 {total} 条",
        pageClassifier: "页",
        page: "页",
        prev: "上一页",
        next: "下一页",
        currentPage: "第 {pager} 页",
        prevPages: "向前 {pager} 页",
        nextPages: "向后 {pager} 页",
        deprecationWarning: "你使用了一些已被废弃的用法,请参考 el-pagination 的官方文档"
      },
      dialog: { close: "关闭此对话框" },
      drawer: { close: "关闭此对话框" },
      messagebox: {
        title: "提示",
        confirm: "确定",
        cancel: "取消",
        error: "输入的数据不合法!",
        close: "关闭此对话框"
      },
      upload: {
        deleteTip: "按 Delete 键可删除",
        delete: "删除",
        preview: "查看图片",
        continue: "继续上传"
      },
      slider: {
        defaultLabel: "滑块介于 {min} 至 {max}",
        defaultRangeStartLabel: "选择起始值",
        defaultRangeEndLabel: "选择结束值"
      },
      table: {
        emptyText: "暂无数据",
        confirmFilter: "筛选",
        resetFilter: "重置",
        clearFilter: "全部",
        sumText: "合计",
        selectAllLabel: "选择所有行",
        selectRowLabel: "选择当前行",
        expandRowLabel: "展开当前行",
        collapseRowLabel: "收起当前行",
        sortLabel: "按 {column} 排序",
        filterLabel: "按 {column} 过滤"
      },
      tag: { close: "关闭此标签" },
      tour: {
        next: "下一步",
        previous: "上一步",
        finish: "结束导览",
        close: "关闭此对话框"
      },
      tree: { emptyText: "暂无数据" },
      transfer: {
        noMatch: "无匹配数据",
        noData: "无数据",
        titles: ["列表 1", "列表 2"],
        filterPlaceholder: "请输入搜索内容",
        noCheckedFormat: "共 {total} 项",
        hasCheckedFormat: "已选 {checked}/{total} 项"
      },
      image: { error: "加载失败" },
      pageHeader: { title: "返回" },
      popconfirm: {
        confirmButtonText: "确定",
        cancelButtonText: "取消"
      },
      carousel: {
        leftArrow: "上一张幻灯片",
        rightArrow: "下一张幻灯片",
        indicator: "幻灯片切换至索引 {index}"
      },
      inputOTP: {
        groupLabel: "一次性密码输入框",
        defaultLabel: "请输入第 {index} 位 OTP 字符"
      }
    }
  };
  const cssLoader = (e) => {
    const t = GM_getResourceText(e);
    return GM_addStyle(t), t;
  };
  cssLoader("element-plus/dist/index.css");
  const _hoisted_1$8 = {
    key: 0,
    class: "hot-ban-checker"
  };
  const _hoisted_2$6 = { class: "message" };
  const _hoisted_3$4 = { class: "buttons" };
  const _hoisted_4$4 = { class: "actions" };
  const _sfc_main$9 = {
    __name: "CommentActions",
    props: ["comment"],
    emits: ["delete", "checkHotBan"],
    setup(__props, { emit: __emit }) {
      const props = __props;
      const emit = __emit;
      const comment = props.comment;
      const check2 = vue.inject("check");
      const hotBanCheck2 = vue.inject("hotBanCheck");
      const updating = vue.ref(false);
      const showHotBanChecker = vue.ref(false);
      const hotBanCheckerMessage = vue.ref("等待检查中……");
      let hotBanCheckerController = vue.reactive({ isCancelled: false });
      function updateState() {
        updating.value = true;
        check2(comment).then(() => {
          updating.value = false;
          ElementPlus.ElMessage({
            type: comment.currentState == "NORMAL" ? "success" : "warning",
            message: "更新成功,当前状态:" + translateState(comment.currentState)
          });
        }).catch((err) => {
          updating.value = false;
          let msg = err.message;
          if (msg == "COMMENT_AREA_CLOSED") {
            msg = "评论区已关闭";
          }
          ElementPlus.ElMessage.error("更新失败,因为:" + msg);
        });
      }
      function copyComment(commentText2) {
        copyToClipboard(commentText2).then(() => {
          ElementPlus.ElMessage({
            message: "评论已复制到剪贴板",
            type: "success"
          });
        }).catch((err) => {
          ElementPlus.ElMessage.error("无法复制文本,因为: " + err);
        });
      }
      function askDelete() {
        ElementPlus.ElMessageBox.confirm("确定要删除这条记录吗(这不会删除你在YouTube上发布的评论)?删除操作无法撤销!").then(() => {
          emit("delete");
        }).catch(() => {
        });
      }
      async function toHotBanCheck() {
        if (Date.now() - comment.recordedTime < 120 * 1e3) {
          ElementPlus.ElMessage.warning(`当前时间距评论记录时间不足2分钟,状态不可信,请到 ${formatTimestamp(comment.recordedTime + 120 * 1e3)} 来检查`);
          return;
        }
        if (comment.commentId.indexOf(".") == -1) {
          try {
            await ElementPlus.ElMessageBox.confirm(
              "确认检查吗?该检查需要遍历热门评论区,请注意评论区的评论数量(总数大于3000的评论区慎重考虑)!数量太多将导致漫长的检查过程,同时频繁调用API可能会引发不可预料的后果!",
              "警告",
              {
                confirmButtonText: "确定",
                cancelButtonText: "取消"
              }
            );
          } catch (err) {
            return;
          }
        }
        hotBanCheckerMessage.value = "正在重新检查评论状态……";
        hotBanCheckerController.isCancelled = false;
        showHotBanChecker.value = true;
        try {
          await check2(comment);
          if (comment.currentState != "NORMAL") {
            ElementPlus.ElMessage.error(`评论状态重新检查后为${translateState(comment.currentState)},无法继续进行检查`);
            showHotBanChecker.value = false;
            return;
          }
        } catch (err) {
          let msg = err.message;
          if (msg == "COMMENT_AREA_CLOSED") {
            msg = "评论区已关闭";
          }
          console.log("状态检查失败", err);
          ElementPlus.ElMessage.error("状态检查失败,因为:" + msg);
          showHotBanChecker.value = false;
          return;
        }
        let observer = {
          onCountChange(c, p) {
            hotBanCheckerMessage.value = `正在搜索热门列表,已搜寻至:第${c}个 第${p}页`;
          }
        };
        let notCancelled;
        try {
          notCancelled = await hotBanCheck2(comment, observer, hotBanCheckerController);
        } catch (err) {
          showHotBanChecker.value = false;
          console.log("热门屏蔽检查失败", err);
          ElementPlus.ElMessage.error("热门屏蔽检查失败,因为:" + err.message);
          return;
        }
        if (notCancelled) {
          if (comment.hotBan) {
            ElementPlus.ElMessage.warning("你的评论未在热门列表找到,已被热门屏蔽,检查完成");
          } else {
            ElementPlus.ElMessage.success("你的评论已在热门列表找到,没有被热门屏蔽,检查完成");
          }
        }
        showHotBanChecker.value = false;
      }
      return (_ctx, _cache) => {
        const _component_el_button = vue.resolveComponent("el-button");
        return vue.openBlock(), vue.createElementBlock("div", null, [
          showHotBanChecker.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$8, [
            _cache[2] || (_cache[2] = vue.createElementVNode("div", { class: "title" }, "热门屏蔽检查", -1)),
            vue.createElementVNode("div", _hoisted_2$6, vue.toDisplayString(hotBanCheckerMessage.value), 1),
            vue.createElementVNode("div", _hoisted_3$4, [
              vue.createElementVNode("span", {
                onClick: _cache[0] || (_cache[0] = ($event) => vue.unref(hotBanCheckerController).isCancelled = true)
              }, "终止检查")
            ])
          ])) : vue.createCommentVNode("", true),
          vue.createElementVNode("div", _hoisted_4$4, [
            vue.unref(comment).isUserDelete == false ? (vue.openBlock(), vue.createBlock(_component_el_button, {
              key: 0,
              type: "primary",
              plain: "",
              onClick: updateState,
              loading: updating.value
            }, {
              default: vue.withCtx(() => _cache[3] || (_cache[3] = [
                vue.createTextVNode("更新状态")
              ])),
              _: 1,
              __: [3]
            }, 8, ["loading"])) : vue.createCommentVNode("", true),
            vue.unref(comment).currentState == "NORMAL" ? (vue.openBlock(), vue.createBlock(_component_el_button, {
              key: 1,
              type: "primary",
              plain: "",
              onClick: toHotBanCheck
            }, {
              default: vue.withCtx(() => _cache[4] || (_cache[4] = [
                vue.createTextVNode("热门屏蔽检查")
              ])),
              _: 1,
              __: [4]
            })) : vue.createCommentVNode("", true),
            vue.createVNode(_component_el_button, {
              type: "primary",
              plain: "",
              onClick: _cache[1] || (_cache[1] = ($event) => copyComment(vue.unref(comment).content))
            }, {
              default: vue.withCtx(() => _cache[5] || (_cache[5] = [
                vue.createTextVNode("复制")
              ])),
              _: 1,
              __: [5]
            }),
            vue.createVNode(_component_el_button, {
              type: "danger",
              plain: "",
              onClick: askDelete
            }, {
              default: vue.withCtx(() => _cache[6] || (_cache[6] = [
                vue.createTextVNode("删除记录")
              ])),
              _: 1,
              __: [6]
            })
          ])
        ]);
      };
    }
  };
  const CommentActions = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-c5ba1027"]]);
  /*! Element Plus Icons Vue v2.3.2 */
  var _sfc_main91 = /* @__PURE__ */ vue.defineComponent({
    name: "Download",
    __name: "download",
    setup(__props) {
      return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", {
        xmlns: "http://www.w3.org/2000/svg",
        viewBox: "0 0 1024 1024"
      }, [
        vue.createElementVNode("path", {
          fill: "currentColor",
          d: "M160 832h704a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64m384-253.696 236.288-236.352 45.248 45.248L508.8 704 192 387.2l45.248-45.248L480 584.704V128h64z"
        })
      ]));
    }
  }), download_default = _sfc_main91;
  var _sfc_main275 = /* @__PURE__ */ vue.defineComponent({
    name: "Upload",
    __name: "upload",
    setup(__props) {
      return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", {
        xmlns: "http://www.w3.org/2000/svg",
        viewBox: "0 0 1024 1024"
      }, [
        vue.createElementVNode("path", {
          fill: "currentColor",
          d: "M160 832h704a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64m384-578.304V704h-64V247.296L237.248 490.048 192 444.8 508.8 128l316.8 316.8-45.312 45.248z"
        })
      ]));
    }
  }), upload_default = _sfc_main275;
  const _hoisted_1$7 = { class: "export-container" };
  const _sfc_main$8 = {
    __name: "Export",
    props: {
      fetchDataFn: {
        type: Function,
        required: true
      },
      getFilenameFn: {
        type: Function,
        default: () => `export_${(/* @__PURE__ */ new Date()).getTime()}`
      }
    },
    setup(__props) {
      const props = __props;
      const loading = vue.ref(false);
      const handleExport = async () => {
        if (loading.value) return;
        loading.value = true;
        try {
          const data = await props.fetchDataFn();
          const jsonString = JSON.stringify(data, null, 2);
          const blob = new Blob([jsonString], { type: "application/json" });
          const filename = typeof props.getFilenameFn === "function" ? props.getFilenameFn() : props.getFilenameFn;
          const link = document.createElement("a");
          link.href = URL.createObjectURL(blob);
          link.download = `${filename}.json`;
          link.click();
          URL.revokeObjectURL(link.href);
          ElementPlus.ElMessage.success("导出成功");
        } catch (error) {
          console.error("Export failed:", error);
          ElementPlus.ElMessage.error("导出失败");
        } finally {
          loading.value = false;
        }
      };
      return (_ctx, _cache) => {
        const _component_el_button = vue.resolveComponent("el-button");
        return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [
          vue.createVNode(_component_el_button, {
            type: "primary",
            icon: vue.unref(upload_default),
            loading: loading.value,
            onClick: handleExport
          }, {
            default: vue.withCtx(() => [
              vue.renderSlot(_ctx.$slots, "default", {}, () => [
                _cache[0] || (_cache[0] = vue.createTextVNode("导出数据"))
              ])
            ]),
            _: 3
          }, 8, ["icon", "loading"])
        ]);
      };
    }
  };
  const _hoisted_1$6 = { class: "import-container" };
  const _sfc_main$7 = {
    __name: "Import",
    emits: ["success"],
    setup(__props, { emit: __emit }) {
      const emit = __emit;
      const fileInput = vue.ref(null);
      const triggerFileInput = () => {
        if (fileInput.value) {
          fileInput.value.click();
        }
      };
      const handleFileChange = (event) => {
        const file = event.target.files[0];
        if (!file) return;
        const reader2 = new FileReader();
        reader2.onload = (e) => {
          try {
            const json = JSON.parse(e.target.result);
            emit("success", json);
          } catch (error) {
            console.error("JSON 解析失败:", error);
            ElementPlus.ElMessage.error("文件解析失败,请检查文件格式是否正确");
          } finally {
            if (fileInput.value) {
              fileInput.value.value = "";
            }
          }
        };
        reader2.onerror = (error) => {
          console.error("文件读取失败:", error);
          ElementPlus.ElMessage.error("文件读取失败");
          if (fileInput.value) {
            fileInput.value.value = "";
          }
        };
        reader2.readAsText(file);
      };
      return (_ctx, _cache) => {
        const _component_el_button = vue.resolveComponent("el-button");
        return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [
          vue.createElementVNode("input", {
            type: "file",
            ref_key: "fileInput",
            ref: fileInput,
            accept: ".json",
            style: { "display": "none" },
            onChange: handleFileChange
          }, null, 544),
          vue.createVNode(_component_el_button, {
            type: "primary",
            icon: vue.unref(download_default),
            onClick: triggerFileInput
          }, {
            default: vue.withCtx(() => [
              vue.renderSlot(_ctx.$slots, "default", {}, () => [
                _cache[0] || (_cache[0] = vue.createTextVNode("导入 JSON 文件"))
              ])
            ]),
            _: 3
          }, 8, ["icon"])
        ]);
      };
    }
  };
  const _hoisted_1$5 = { class: "comment-history-container" };
  const _hoisted_2$5 = { class: "toolbar" };
  const _hoisted_3$3 = { class: "detail" };
  const _hoisted_4$3 = { class: "info-table" };
  const _hoisted_5$3 = { class: "comment-content" };
  const _hoisted_6$2 = { key: 0 };
  const _hoisted_7$2 = { key: 3 };
  const _hoisted_8$1 = { class: "comment-content" };
  const pageSize$1 = 20;
  const _sfc_main$6 = {
    __name: "CommentHistories",
    setup(__props) {
      const commentObjectKeys = [
        "commentId",
        "displayName",
        "channelId",
        "content",
        "webPageType",
        "url",
        "commentAreaInfo",
        "currentState",
        "hotBan",
        "histories",
        "likeCount",
        "replyCount",
        "recordedTime",
        "updatedTime",
        "isUserDelete"
      ];
      const deleteComment2 = vue.inject("deleteComment");
      const insertComment2 = vue.inject("insertComment");
      const updateComment2 = vue.inject("updateComment");
      const db2 = vue.inject("db");
      const comments = vue.reactive([]);
      const keyword = vue.ref("");
      const selectedTime = vue.ref(null);
      const loadingComments = vue.ref(false);
      const finished = vue.ref(false);
      let timeCursor = null;
      function reloadComments() {
        if (loadingComments.value) {
          return;
        }
        finished.value = false;
        comments.length = 0;
        if (selectedTime.value) {
          timeCursor = selectedTime.value.getTime();
        } else {
          timeCursor = null;
        }
        loadComments();
      }
      async function loadComments() {
        if (loadingComments.value || finished.value) {
          return;
        }
        loadingComments.value = true;
        selectedTime.value;
        await loadCommentPage();
        loadingComments.value = false;
      }
      function loadCommentPage() {
        return new Promise((resolve, reject) => {
          let transaction = db2.transaction("comments").objectStore("comments").index("recordedTime").openCursor(timeCursor ? IDBKeyRange.upperBound(timeCursor) : null, "prev");
          let count = 0;
          transaction.onsuccess = (event) => {
            var cursor = event.target.result;
            if (cursor) {
              if (count < pageSize$1) {
                let value = cursor.value;
                let textSearch = keyword.value;
                if (textSearch == "" || value.content.indexOf(textSearch) != -1) {
                  comments.push(value);
                  count++;
                }
                cursor.continue();
              } else {
                timeCursor = cursor.value.recordedTime;
                resolve();
              }
            } else {
              timeCursor = null;
              finished.value = true;
              resolve();
            }
          };
          transaction.onerror = (event) => {
            reject(event);
          };
        });
      }
      function getComment(commentId) {
        return new Promise((resolve, reject) => {
          let req = db2.transaction("comments", "readonly").objectStore("comments").get(commentId);
          req.onsuccess = () => {
            resolve(req.result);
          };
          req.onerror = () => reject(req.error);
        });
      }
      function formatStateDesc(comment) {
        switch (comment.currentState) {
          case "NORMAL":
            if (comment.hotBan === true) return "热门屏蔽";
            if (comment.hotBan === false) return "完全正常";
            return "正常";
          case "DELETED":
            return comment.isUserDelete ? "用户删除" : "已删除";
          case "SHADOW_BAN":
            return "仅自己可见";
          case "NOT_CHECK":
            return "还未检查";
        }
      }
      function formatCommentArea(comment, needEmojiHead) {
        const info = comment.commentAreaInfo;
        switch (comment.webPageType) {
          case "WEB_PAGE_TYPE_WATCH":
            return "📺 " + info.videoId;
          case "WEB_PAGE_TYPE_BROWSE":
            return "📰 " + info.postId;
        }
      }
      function formatHotBan(hotBan) {
        if (hotBan == null) {
          return "未检查";
        }
        return hotBan ? "是" : "否";
      }
      function deleteCommentItem(comment) {
        deleteComment2(comment.commentId).then(() => {
          const index = comments.findIndex(
            (item) => item.commentId === comment.commentId
          );
          if (index !== -1) {
            comments.splice(index, 1);
          }
          ElementPlus.ElMessage.success("评论记录删除成功");
        }).catch((err) => {
          console.error(err);
          if (err instanceof Error) {
            if (err.message == "checking-now") {
              ElementPlus.ElMessage.error("评论正在检查中,禁止删除评论记录!");
              return;
            }
          }
          ElementPlus.ElMessage.error("评论记录删除失败");
        });
      }
      async function handleImportData(data) {
        if (!data || !data instanceof Array) {
          ElementPlus.ElMessage.error("非法数据");
          return;
        }
        let successCount = 0;
        let skippedCount = 0;
        let invalidCount = 0;
        let failedCount = 0;
        for (let item of data) {
          if (validateObjectKeys(item, commentObjectKeys)) {
            try {
              let comment = await getComment(item.commentId);
              if (comment) {
                if (comment.updatedTime < item.updatedTime) {
                  await updateComment2(item);
                  successCount++;
                  console.log("已更新评论数据", item);
                } else {
                  skippedCount++;
                  console.log("已跳过评论数据", item);
                }
              } else {
                await insertComment2(item);
                successCount++;
                console.log("已插入评论数据", item);
              }
            } catch (error) {
              failedCount++;
              console.error("评论导入时出错", error);
            }
          } else {
            invalidCount++;
            console.error("非法的评论数据", item);
          }
        }
        reloadComments();
        ElementPlus.ElMessage.success(`已导入 成功${successCount}条 失败${failedCount}条 跳过${skippedCount}条 无效${invalidCount}条`);
      }
      function generateName() {
        return "comments-export_" + nowDate();
      }
      function getDataToExport() {
        return new Promise((resolve, reject) => {
          let transaction = db2.transaction("comments").objectStore("comments").index("recordedTime").openCursor(null, "prev");
          let localComments = [];
          transaction.onsuccess = (event) => {
            var cursor = event.target.result;
            if (cursor) {
              cursor.continue();
              localComments.push(cursor.value);
            } else {
              resolve(localComments);
            }
          };
          transaction.onerror = (event) => {
            reject(event);
          };
        });
      }
      return (_ctx, _cache) => {
        const _component_el_date_picker = vue.resolveComponent("el-date-picker");
        const _component_el_button = vue.resolveComponent("el-button");
        const _component_el_input = vue.resolveComponent("el-input");
        const _component_el_table_column = vue.resolveComponent("el-table-column");
        const _component_el_link = vue.resolveComponent("el-link");
        const _component_el_table = vue.resolveComponent("el-table");
        const _directive_el_table_infinite_scroll = vue.resolveDirective("el-table-infinite-scroll");
        return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [
          vue.createElementVNode("div", _hoisted_2$5, [
            vue.createVNode(_component_el_date_picker, {
              modelValue: selectedTime.value,
              "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => selectedTime.value = $event),
              type: "datetime",
              placeholder: "从指定时间开始",
              clearable: "",
              style: { "width": "220px" },
              onChange: reloadComments
            }, null, 8, ["modelValue"]),
            vue.createVNode(_component_el_input, {
              modelValue: keyword.value,
              "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => keyword.value = $event),
              placeholder: "搜索评论内容",
              clearable: "",
              style: { "width": "260px" },
              onKeyup: vue.withKeys(reloadComments, ["enter"]),
              onClear: reloadComments
            }, {
              append: vue.withCtx(() => [
                vue.createVNode(_component_el_button, { onClick: reloadComments }, {
                  default: vue.withCtx(() => _cache[2] || (_cache[2] = [
                    vue.createTextVNode(" 搜索 ")
                  ])),
                  _: 1,
                  __: [2]
                })
              ]),
              _: 1
            }, 8, ["modelValue"]),
            vue.createVNode(_sfc_main$8, {
              getFilenameFn: generateName,
              fetchDataFn: getDataToExport
            }, {
              default: vue.withCtx(() => _cache[3] || (_cache[3] = [
                vue.createTextVNode("导出")
              ])),
              _: 1,
              __: [3]
            }),
            vue.createVNode(_sfc_main$7, { onSuccess: handleImportData }, {
              default: vue.withCtx(() => _cache[4] || (_cache[4] = [
                vue.createTextVNode("导入")
              ])),
              _: 1,
              __: [4]
            })
          ]),
          vue.withDirectives((vue.openBlock(), vue.createBlock(_component_el_table, {
            data: comments,
            "row-key": "commentId",
            class: "comment-list",
            height: "100%"
          }, {
            default: vue.withCtx(() => [
              vue.createVNode(_component_el_table_column, {
                prop: "content",
                label: "评论内容",
                align: "left",
                "show-overflow-tooltip": ""
              }),
              vue.createVNode(_component_el_table_column, {
                prop: "state",
                label: "当前状态",
                align: "center",
                width: "136",
                formatter: formatStateDesc
              }),
              vue.createVNode(_component_el_table_column, {
                prop: "recordedTime",
                label: "记录时间",
                align: "center",
                width: "160",
                formatter: (comment) => vue.unref(formatTimestamp)(comment.recordedTime)
              }, null, 8, ["formatter"]),
              vue.createVNode(_component_el_table_column, {
                prop: "area",
                label: "所在评论区",
                align: "center",
                width: "240"
              }, {
                default: vue.withCtx(({ row }) => [
                  vue.createElementVNode("div", null, [
                    vue.createVNode(_component_el_link, {
                      type: "primary",
                      href: row.url,
                      class: vue.normalizeClass(["locate-link", { "post-locate-link": row.webPageType === "WEB_PAGE_TYPE_BROWSE" }])
                    }, {
                      default: vue.withCtx(() => [
                        vue.createTextVNode(vue.toDisplayString(formatCommentArea(row)), 1)
                      ]),
                      _: 2
                    }, 1032, ["href", "class"])
                  ])
                ]),
                _: 1
              }),
              vue.createVNode(_component_el_table_column, { type: "expand" }, {
                default: vue.withCtx(({ row }) => [
                  vue.createElementVNode("div", _hoisted_3$3, [
                    vue.createElementVNode("table", _hoisted_4$3, [
                      vue.createElementVNode("tbody", null, [
                        vue.createElementVNode("tr", null, [
                          _cache[5] || (_cache[5] = vue.createElementVNode("td", null, "评论内容", -1)),
                          vue.createElementVNode("td", _hoisted_5$3, vue.toDisplayString(row.content), 1)
                        ]),
                        vue.createElementVNode("tr", null, [
                          _cache[6] || (_cache[6] = vue.createElementVNode("td", null, "当前状态", -1)),
                          vue.createElementVNode("td", null, vue.toDisplayString(vue.unref(translateState)(row.currentState)), 1)
                        ]),
                        row.currentState == "DELETED" ? (vue.openBlock(), vue.createElementBlock("tr", _hoisted_6$2, [
                          _cache[7] || (_cache[7] = vue.createElementVNode("td", null, "用户删除", -1)),
                          vue.createElementVNode("td", null, vue.toDisplayString(row.isUserDelete ? "是" : "否"), 1)
                        ])) : vue.createCommentVNode("", true),
                        vue.createElementVNode("tr", null, [
                          _cache[8] || (_cache[8] = vue.createElementVNode("td", null, "热门屏蔽", -1)),
                          vue.createElementVNode("td", null, vue.toDisplayString(formatHotBan(row.hotBan)), 1)
                        ]),
                        vue.createElementVNode("tr", null, [
                          _cache[9] || (_cache[9] = vue.createElementVNode("td", null, "发送者", -1)),
                          vue.createElementVNode("td", null, vue.toDisplayString(row.displayName), 1)
                        ]),
                        vue.createElementVNode("tr", null, [
                          _cache[10] || (_cache[10] = vue.createElementVNode("td", null, "评论ID", -1)),
                          vue.createElementVNode("td", null, vue.toDisplayString(row.commentId), 1)
                        ]),
                        row.webPageType == "WEB_PAGE_TYPE_WATCH" ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
                          _cache[12] || (_cache[12] = vue.createElementVNode("tr", null, [
                            vue.createElementVNode("td", null, "评论区类型"),
                            vue.createElementVNode("td", null, "视频")
                          ], -1)),
                          vue.createElementVNode("tr", null, [
                            _cache[11] || (_cache[11] = vue.createElementVNode("td", null, "视频ID", -1)),
                            vue.createElementVNode("td", null, vue.toDisplayString(row.commentAreaInfo.videoId), 1)
                          ])
                        ], 64)) : row.webPageType == "WEB_PAGE_TYPE_BROWSE" ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 2 }, [
                          _cache[15] || (_cache[15] = vue.createElementVNode("tr", null, [
                            vue.createElementVNode("td", null, "评论区类型"),
                            vue.createElementVNode("td", null, "帖子")
                          ], -1)),
                          vue.createElementVNode("tr", null, [
                            _cache[13] || (_cache[13] = vue.createElementVNode("td", null, "帖子所属频道ID", -1)),
                            vue.createElementVNode("td", null, vue.toDisplayString(row.commentAreaInfo.channelId), 1)
                          ]),
                          vue.createElementVNode("tr", null, [
                            _cache[14] || (_cache[14] = vue.createElementVNode("td", null, "帖子ID", -1)),
                            vue.createElementVNode("td", null, vue.toDisplayString(row.commentAreaInfo.postId), 1)
                          ])
                        ], 64)) : vue.createCommentVNode("", true),
                        vue.createElementVNode("tr", null, [
                          _cache[16] || (_cache[16] = vue.createElementVNode("td", null, "点赞数", -1)),
                          vue.createElementVNode("td", null, vue.toDisplayString(row.likeCount), 1)
                        ]),
                        row.commentId.indexOf(".") == -1 ? (vue.openBlock(), vue.createElementBlock("tr", _hoisted_7$2, [
                          _cache[17] || (_cache[17] = vue.createElementVNode("td", null, "回复数", -1)),
                          vue.createElementVNode("td", null, vue.toDisplayString(row.replyCount), 1)
                        ])) : vue.createCommentVNode("", true),
                        vue.createElementVNode("tr", null, [
                          _cache[18] || (_cache[18] = vue.createElementVNode("td", null, "记录时间", -1)),
                          vue.createElementVNode("td", null, vue.toDisplayString(vue.unref(formatTimestamp)(row.recordedTime)), 1)
                        ]),
                        vue.createElementVNode("tr", null, [
                          _cache[19] || (_cache[19] = vue.createElementVNode("td", null, "更新时间", -1)),
                          vue.createElementVNode("td", null, vue.toDisplayString(vue.unref(formatTimestamp)(row.updatedTime)), 1)
                        ])
                      ])
                    ]),
                    vue.createElementVNode("details", null, [
                      _cache[20] || (_cache[20] = vue.createElementVNode("summary", null, "历史检查记录", -1)),
                      vue.createVNode(_component_el_table, {
                        data: row.histories,
                        style: { "width": "100%" }
                      }, {
                        default: vue.withCtx(() => [
                          vue.createVNode(_component_el_table_column, {
                            prop: "time",
                            label: "时间戳",
                            width: "160",
                            formatter: (history) => vue.unref(formatTimestamp)(history.time)
                          }, null, 8, ["formatter"]),
                          vue.createVNode(_component_el_table_column, {
                            prop: "state",
                            label: "状态",
                            width: "136",
                            formatter: (history) => vue.unref(translateState)(history.state)
                          }, null, 8, ["formatter"]),
                          vue.createVNode(_component_el_table_column, {
                            prop: "hotBan",
                            label: "热门屏蔽",
                            width: "120",
                            formatter: (history) => formatHotBan(history.hotBan)
                          }, null, 8, ["formatter"]),
                          vue.createVNode(_component_el_table_column, {
                            prop: "content",
                            label: "评论内容",
                            "show-overflow-tooltip": ""
                          }),
                          vue.createVNode(_component_el_table_column, { type: "expand" }, {
                            default: vue.withCtx(({ row: row2 }) => [
                              vue.createElementVNode("div", _hoisted_8$1, vue.toDisplayString(row2.content), 1)
                            ]),
                            _: 2
                          }, 1024)
                        ]),
                        _: 2
                      }, 1032, ["data"])
                    ]),
                    vue.createVNode(CommentActions, {
                      comment: row,
                      onDelete: ($event) => deleteCommentItem(row)
                    }, null, 8, ["comment", "onDelete"])
                  ])
                ]),
                _: 1
              })
            ]),
            _: 1
          }, 8, ["data"])), [
            [_directive_el_table_infinite_scroll, loadComments]
          ])
        ]);
      };
    }
  };
  const CommentHistories = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-ad8c8fe3"]]);
  function createVideoRootCommentListContinuation(channelId, videoId, isLatestSort) {
    let payload = {
      uField3: 6,
      commentAreaWrapper: {
        videoId
      },
      mainCommentRequest: {
        sectionIdentifier: "comments-section",
        commentParameters: {
          videoId,
          sortType: isLatestSort ? 1 : 0
        }
      }
    };
    return u8ArrayToBase64(NextContinuation.encode(payload).finish());
  }
  function createVideoReplyCommentListContinuation(channelId, videoId, rootCommentId, isLatestSort) {
    let payload = {
      uField3: 6,
      commentAreaWrapper: {
        videoId
      },
      mainCommentRequest: {
        sectionIdentifier: `comment-replies-item-${rootCommentId}`,
        commentReplyParameters: {
          rootCommentId,
          channelId,
          videoId,
          pageSize: 10,
          sortParam: {
            sortType: 1
          }
        }
      }
    };
    return u8ArrayToBase64(NextContinuation.encode(payload).finish());
  }
  function createPostRootCommentListContinuation(channelId, postId, isLatestSort) {
    let payload = {
      description: "community",
      mainCommentRequest: {
        sectionIdentifier: "comments-section",
        commentParameters: {
          channelId,
          postId,
          sortType: isLatestSort ? 1 : 0
        }
      }
    };
    let continuation = u8ArrayToBase64(BrowserCommentListContinuation.encode(payload).finish());
    payload = {
      request: {
        description: "FEcomment_post_detail_page_web_top_level",
        continuationBase64: continuation
      }
    };
    return u8ArrayToBase64(BrowserContinuation.encode(payload).finish());
  }
  function createPostReplyCommentListContinuation(channelId, postId, rootCommentId, isLatestSort) {
    let payload = {
      description: "community",
      mainCommentRequest: {
        sectionIdentifier: `comment-replies-item-${rootCommentId}`,
        commentReplyParameters: {
          rootCommentId,
          channelId,
          postId,
          pageSize: 10,
          sortParam: {
            sortType: 1
          }
        }
      }
    };
    let continuation = u8ArrayToBase64(BrowserCommentListContinuation.encode(payload).finish());
    payload = {
      request: {
        description: "FEcomment_post_detail_page_web_replies_page",
        continuationBase64: continuation
      }
    };
    return u8ArrayToBase64(BrowserContinuation.encode(payload).finish());
  }
  function findNextContinuation(data) {
    var _a, _b, _c, _d;
    let continuation = null;
    for (const endpoint of data.onResponseReceivedEndpoints) {
      const items = ((_a = endpoint.appendContinuationItemsAction) == null ? void 0 : _a.continuationItems) || ((_b = endpoint.reloadContinuationItemsCommand) == null ? void 0 : _b.continuationItems);
      if (!items) continue;
      for (const item of items) {
        const continuationItemRenderer = item.continuationItemRenderer;
        if (!continuationItemRenderer) continue;
        const token = (_d = (_c = continuationItemRenderer == null ? void 0 : continuationItemRenderer.continuationEndpoint) == null ? void 0 : _c.continuationCommand) == null ? void 0 : _d.token;
        if (!token) {
          continuation = continuationItemRenderer == null ? void 0 : continuationItemRenderer.button.buttonRenderer.command.continuationCommand.token;
        }
        if (token) {
          continuation = token;
          break;
        }
      }
      if (continuation) break;
    }
    return continuation;
  }
  const _hoisted_1$4 = { class: "youtube-comment" };
  const _hoisted_2$4 = { class: "avatar-container" };
  const _hoisted_3$2 = ["href"];
  const _hoisted_4$2 = ["src", "alt"];
  const _hoisted_5$2 = { class: "comment-content" };
  const _hoisted_6$1 = { class: "comment-header" };
  const _hoisted_7$1 = ["href"];
  const _hoisted_8 = { class: "published-at" };
  const _hoisted_9 = { class: "comment-text" };
  const _hoisted_10 = { class: "comment-actions" };
  const _hoisted_11 = { class: "action-text" };
  const _hoisted_12 = { class: "action-text" };
  const _hoisted_13 = ["href"];
  const _sfc_main$5 = {
    __name: "YouTubeComment",
    props: ["comment", "publishedAtFormatter"],
    setup(__props) {
      const props = __props;
      const comment = props.comment;
      const publishedAtFormatter = props.publishedAtFormatter;
      function getPublishedAtText() {
        if (publishedAtFormatter) {
          return publishedAtFormatter(comment);
        }
        return comment.publishedTime;
      }
      function copyComment(commentText2) {
        copyToClipboard(commentText2).then(() => {
          ElementPlus.ElMessage({
            message: "评论已复制到剪贴板",
            type: "success"
          });
        }).catch((err) => {
          ElementPlus.ElMessage.error("无法复制文本,因为: " + err);
        });
      }
      return (_ctx, _cache) => {
        return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [
          vue.createElementVNode("div", _hoisted_2$4, [
            vue.createElementVNode("a", {
              href: "https://www.youtube.com/" + vue.unref(comment).userDisplayName,
              target: "_blank",
              rel: "noopener noreferrer"
            }, [
              vue.createElementVNode("img", {
                src: vue.unref(comment).userProfileImageUrl,
                alt: vue.unref(comment).authorDisplayName,
                class: "avatar"
              }, null, 8, _hoisted_4$2)
            ], 8, _hoisted_3$2)
          ]),
          vue.createElementVNode("div", _hoisted_5$2, [
            vue.createElementVNode("div", _hoisted_6$1, [
              vue.createElementVNode("a", {
                href: "https://www.youtube.com/" + vue.unref(comment).userDisplayName,
                target: "_blank",
                rel: "noopener noreferrer",
                class: "author-name"
              }, vue.toDisplayString(vue.unref(comment).userDisplayName), 9, _hoisted_7$1),
              vue.createElementVNode("span", _hoisted_8, vue.toDisplayString(getPublishedAtText()), 1)
            ]),
            vue.createElementVNode("p", _hoisted_9, vue.toDisplayString(vue.unref(comment).contentText), 1),
            vue.createElementVNode("div", _hoisted_10, [
              vue.createElementVNode("button", {
                class: "button",
                onClick: _cache[0] || (_cache[0] = ($event) => vue.unref(ElementPlus.ElMessage).info("需要点赞评论请定位至评论"))
              }, [
                _cache[3] || (_cache[3] = vue.createElementVNode("svg", {
                  class: "icon",
                  xmlns: "http://www.w3.org/2000/svg",
                  viewBox: "0 0 24 24"
                }, [
                  vue.createElementVNode("path", { d: "M16.5 3c-1.74 0-3.41.81-4.5 2.09C10.91 3.81 9.24 3 7.5 3 4.42 3 2 5.42 2 8.5c0 3.78 3.4 6.86 8.55 11.54L12 21.35l1.45-1.31C18.6 15.36 22 12.28 22 8.5 22 5.42 19.58 3 16.5 3z" })
                ], -1)),
                vue.createElementVNode("span", _hoisted_11, vue.toDisplayString(vue.unref(comment).likeCount), 1)
              ]),
              vue.createElementVNode("button", {
                class: "button",
                onClick: _cache[1] || (_cache[1] = ($event) => vue.unref(ElementPlus.ElMessage).info("需要查看回复请定位评论查看"))
              }, [
                _cache[4] || (_cache[4] = vue.createElementVNode("svg", {
                  class: "icon",
                  viewBox: "0 0 1024 1024",
                  version: "1.1",
                  xmlns: "http://www.w3.org/2000/svg",
                  "p-id": "5216",
                  width: "200",
                  height: "200"
                }, [
                  vue.createElementVNode("path", {
                    d: "M1024 640l-3.5 41.6c-6.5 78.1-27.7 154-62.2 223.9-7.5 15.2-30.4 10-30.4-7V800c0-61.9-25.1-117.9-65.6-158.4C821.9 601.1 765.9 576 704 576H552c-4.4 0-8 3.6-8 8v179.6c0 13.9-16.5 21.2-26.8 11.8L160 447.9 516.5 76.7c10-10.4 27.5-3.3 27.5 11.1V280c0 4.4 3.6 8 8 8h120c97.2 0 185.2 39.4 248.9 103.1S1024 542.8 1024 640z",
                    "p-id": "5217"
                  }),
                  vue.createElementVNode("path", {
                    d: "M356.7 95.1L0 453.1l357.3 326.1c10.3 9.4 26.8 2.1 26.8-11.8 0-32.1-13.5-62.7-37.2-84.4L92.5 450.9l258.2-259.1c21.3-21.4 33.3-50.4 33.3-80.6v-4.8c0-14.3-17.3-21.4-27.3-11.3z",
                    "p-id": "5218"
                  })
                ], -1)),
                vue.createElementVNode("span", _hoisted_12, vue.toDisplayString(vue.unref(comment).replyCount), 1)
              ]),
              vue.createElementVNode("a", {
                class: "button",
                href: vue.unref(comment).url,
                target: "_blank"
              }, _cache[5] || (_cache[5] = [
                vue.createElementVNode("svg", {
                  class: "icon",
                  viewBox: "0 0 1024 1024",
                  version: "1.1",
                  xmlns: "http://www.w3.org/2000/svg",
                  "p-id": "7302",
                  width: "200",
                  height: "200"
                }, [
                  vue.createElementVNode("path", {
                    d: "M511.36599 512.177066m-201.557982 0a201.557983 201.557983 0 1 0 403.115965 0 201.557983 201.557983 0 1 0-403.115965 0Z",
                    "p-id": "7303"
                  }),
                  vue.createElementVNode("path", {
                    d: "M990.163299 477.654949h-78.434431a34.350763 34.350763 0 0 0-5.883154 0.514062c-16.278629-191.288167-168.532358-343.770368-359.706288-360.357433a33.619652 33.619652 0 0 0 0.376979-5.060655V34.270797a34.270797 34.270797 0 0 0-68.541595 0v78.434432a35.059026 35.059026 0 0 0 0.354132 4.923571c-191.790805 15.844532-344.798492 168.372427-361.385558 359.957608a34.556387 34.556387 0 0 0-4.226732-0.274167H34.270797a34.270797 34.270797 0 1 0 0 68.541595h78.445855a32.762882 32.762882 0 0 0 4.12392-0.262743c16.02731 192.076395 169.217774 345.17547 361.328439 361.134239a34.853401 34.853401 0 0 0-0.308437 4.569439v78.434432a34.270797 34.270797 0 0 0 68.541595 0v-78.480126a34.670623 34.670623 0 0 0-0.319861-4.649405c191.368132-16.621337 343.747521-169.377704 359.843372-360.905766a35.001908 35.001908 0 0 0 5.837459 0.502638h78.434431a34.270797 34.270797 0 0 0 34.270798-34.270797 34.270797 34.270797 0 0 0-34.305069-34.270798z m-177.065786 161.940941a328.656946 328.656946 0 1 1 25.703098-127.418824 326.440768 326.440768 0 0 1-25.748792 127.418824z",
                    "p-id": "7304"
                  })
                ], -1),
                vue.createElementVNode("span", { class: "action-text" }, "定位", -1)
              ]), 8, _hoisted_13),
              vue.createElementVNode("button", {
                class: "button",
                onClick: _cache[2] || (_cache[2] = ($event) => copyComment(vue.unref(comment).contentText))
              }, _cache[6] || (_cache[6] = [
                vue.createElementVNode("svg", {
                  class: "icon",
                  viewBox: "0 0 1024 1024",
                  version: "1.1",
                  xmlns: "http://www.w3.org/2000/svg",
                  "p-id": "6662",
                  width: "200",
                  height: "200"
                }, [
                  vue.createElementVNode("path", {
                    d: "M706.5 188.4H190.2c-29.8 0-54 24.2-54 54v662.9c0 29.8 24.2 54 54 54h516.3c29.8 0 54-24.2 54-54V242.4c0-29.8-24.2-54-54-54z m-18 698.9H208.2V260.4h480.3v626.9z",
                    "p-id": "6663"
                  }),
                  vue.createElementVNode("path", {
                    d: "M313.7 512.2h275.2c19.9 0 36-16.1 36-36s-16.1-36-36-36H313.7c-19.9 0-36 16.1-36 36s16.1 36 36 36zM313.7 715.2h201.6c19.9 0 36-16.1 36-36s-16.1-36-36-36H313.7c-19.9 0-36 16.1-36 36s16.1 36 36 36z",
                    "p-id": "6664"
                  }),
                  vue.createElementVNode("path", {
                    d: "M837.2 64.7H302.9c-19.9 0-36 16.1-36 36s16.1 36 36 36h516.3v662.9c0 19.9 16.1 36 36 36s36-16.1 36-36V118.7c0-29.8-24.2-54-54-54z",
                    "p-id": "6665"
                  })
                ], -1),
                vue.createElementVNode("span", { class: "action-text" }, "复制", -1)
              ])),
              vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
            ])
          ])
        ]);
      };
    }
  };
  const YouTubeComment = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-e03141e7"]]);
  const _hoisted_1$3 = ["disabled"];
  const _hoisted_2$3 = { class: "action-text" };
  const _sfc_main$4 = {
    __name: "HotBanCommentCollector",
    props: ["comment"],
    setup(__props) {
      const props = __props;
      const collected = vue.ref(false);
      const loading = vue.ref(true);
      const db2 = vue.inject("db");
      async function collectComment(comment) {
        if (loading.value) {
          return;
        }
        loading.value = true;
        if (collected.value) {
          try {
            await deleteComment2(comment.commentId);
            collected.value = false;
            ElementPlus.ElMessage.success("评论收藏已删除");
          } catch (error) {
            console.error(error);
            ElementPlus.ElMessage.error("评论收藏删除失败");
          }
        } else {
          try {
            let nowComment = vue.toRaw(comment);
            nowComment.recordedTime = Date.now();
            await insert(nowComment);
            collected.value = true;
            ElementPlus.ElMessage.success("评论已保存,你可以到热门屏蔽评论收藏列表查看");
          } catch (error) {
            console.error(error);
            ElementPlus.ElMessage.error("评论保存失败");
          }
        }
        loading.value = false;
      }
      loadCollect();
      async function loadCollect() {
        try {
          collected.value = await isCollected(props.comment.commentId);
          loading.value = false;
        } catch (error) {
          console.log(error);
        }
      }
      function isCollected(id) {
        return new Promise((resolve, reject) => {
          let req = db2.transaction("hotBanCommentCollect", "readonly").objectStore("hotBanCommentCollect").get(id);
          req.onsuccess = () => {
            resolve(req.result !== void 0);
          };
          req.onerror = () => reject(req.error);
        });
      }
      function insert(comment) {
        return new Promise((resolve, reject) => {
          let req = db2.transaction("hotBanCommentCollect", "readwrite").objectStore("hotBanCommentCollect").add(comment);
          req.onsuccess = (event) => {
            resolve(event);
          };
          req.onerror = (event) => {
            reject(event);
          };
        });
      }
      function deleteComment2(commentId) {
        return new Promise((resolve, reject) => {
          let request = db2.transaction("hotBanCommentCollect", "readwrite").objectStore("hotBanCommentCollect").delete(commentId);
          request.onsuccess = (event) => {
            resolve(request.result);
          };
          request.onerror = (event) => {
            reject(event);
          };
        });
      }
      return (_ctx, _cache) => {
        return vue.openBlock(), vue.createElementBlock("button", {
          class: "button",
          onClick: _cache[0] || (_cache[0] = ($event) => collectComment(__props.comment)),
          disabled: loading.value
        }, [
          (vue.openBlock(), vue.createElementBlock("svg", {
            class: vue.normalizeClass(["icon", { collected: collected.value }]),
            viewBox: "0 0 1426 1024",
            version: "1.1",
            xmlns: "http://www.w3.org/2000/svg",
            "p-id": "1830",
            width: "200",
            height: "200"
          }, _cache[1] || (_cache[1] = [
            vue.createElementVNode("path", {
              d: "M985.6 1022.976c-14.848 0-31.744-4.096-47.104-12.288L716.288 899.584l-223.744 111.104c-14.336 7.68-30.208 11.776-47.104 11.776-21.504 0-42.496-6.656-59.392-19.456-31.232-23.552-47.104-64-39.936-101.376l45.568-237.056-175.616-163.328c-27.136-27.648-37.376-67.072-27.136-104.448l0.512-1.024c12.8-38.4 44.544-65.024 82.944-70.144l243.712-44.544L625.152 58.88C642.56 23.552 678.4 1.024 716.288 1.024c39.424 0 76.288 23.552 91.648 58.368l109.056 221.696 243.712 42.496c38.4 5.632 70.656 33.28 81.408 71.168 12.288 36.864 2.048 77.312-25.6 104.96l-0.512 0.512-174.592 164.864 44.032 237.568c7.168 37.888-8.192 76.288-39.424 100.352-17.92 12.8-38.912 19.968-60.416 19.968z",
              "p-id": "1831"
            }, null, -1)
          ]), 2)),
          vue.createElementVNode("span", _hoisted_2$3, vue.toDisplayString(collected.value ? "移除收藏" : "收藏"), 1)
        ], 8, _hoisted_1$3);
      };
    }
  };
  const _hoisted_1$2 = { class: "hot-ban-comment-searcher" };
  const _hoisted_2$2 = {
    key: 1,
    class: "warning"
  };
  const _hoisted_3$1 = {
    key: 2,
    class: "search-progress"
  };
  const _hoisted_4$1 = { class: "footer" };
  const _hoisted_5$1 = { key: 1 };
  const _sfc_main$3 = {
    __name: "HotBanCommentSearcher",
    setup(__props) {
      const originalFetch2 = vue.inject("originalFetch");
      const getAuthorization2 = vue.inject("getAuthorization");
      const getContext2 = vue.inject("getContext");
      const showNcs = vue.ref(true);
      const showWarning = vue.ref(false);
      const showSearchProgress = vue.ref(false);
      const showResults = vue.ref(false);
      const progressMsg = vue.ref("加载中...");
      const comments = vue.reactive([]);
      const hasNext = vue.ref(true);
      const loading = vue.ref(false);
      const progStatus = vue.ref("");
      let nextContinuation;
      let cancelled = false;
      let hotCommentIdSet2 = /* @__PURE__ */ new Set();
      let url = createUrl();
      let api;
      let channelId;
      let TYPE = null;
      if (url.searchParams.has("v")) {
        TYPE = "WEB_PAGE_TYPE_WATCH";
        api = "https://www.youtube.com/youtubei/v1/next?prettyPrint=false";
      } else if (url.pathname.split("/").includes("post")) {
        TYPE = "WEB_PAGE_TYPE_BROWSE";
        api = "https://www.youtube.com/youtubei/v1/browse?prettyPrint=false";
      }
      if (TYPE) {
        showNcs.value = false;
        showWarning.value = true;
      }
      async function onSearch() {
        var _a, _b;
        showWarning.value = false;
        showSearchProgress.value = true;
        let continuation = null;
        if (TYPE === "WEB_PAGE_TYPE_WATCH") {
          continuation = createVideoRootCommentListContinuation(null, url.searchParams.get("v"), false);
          nextContinuation = createVideoRootCommentListContinuation(null, url.searchParams.get("v"), true);
        } else if (TYPE === "WEB_PAGE_TYPE_BROWSE") {
          channelId = (_b = (_a = ytInitialData.metadata) == null ? void 0 : _a.channelMetadataRenderer) == null ? void 0 : _b.externalId;
          if (!channelId) {
            progressMsg.value = "无法获取频道ID,请尝试刷新页面后重试!";
          }
          continuation = createPostRootCommentListContinuation(channelId, url.pathname.split("/")[2], false);
          nextContinuation = createPostRootCommentListContinuation(channelId, url.pathname.split("/")[2], true);
        }
        let count = 0;
        while (continuation) {
          let data = {
            context: getContext2(),
            continuation
          };
          let options = {
            method: "POST",
            body: JSON.stringify(data),
            headers: {
              //因为我搜索的是别人的热门屏蔽评论,所以带上认证信息也没啥(还能减轻风控?)
              authorization: getAuthorization2()
            }
          };
          if (cancelled) {
            return;
          }
          let response;
          try {
            response = await (await originalFetch2(api, options)).json();
          } catch (err) {
            progressMsg.value = "获取热门列表失败,您可以关闭后重试!";
            return;
          }
          let mutations = response.frameworkUpdates.entityBatchUpdate.mutations;
          for (let mutation of mutations) {
            if (mutation.payload.commentEntityPayload) {
              hotCommentIdSet2.add(mutation.payload.commentEntityPayload.properties.commentId);
              count++;
              progressMsg.value = `正在获取热门评论(已获取 ${count} 个)……`;
            }
          }
          continuation = findNextContinuation(response);
        }
        next();
      }
      function onEndReached(direction) {
        if (direction == "bottom") {
          next();
        }
      }
      async function next() {
        var _a, _b, _c, _d, _e;
        if (!hasNext.value || loading.value || cancelled) {
          return;
        }
        loading.value = true;
        showSearchProgress.value = false;
        showResults.value = true;
        let count = 0;
        while (count < 20) {
          let data = {
            context: getContext2(),
            continuation: nextContinuation
          };
          let options = {
            method: "POST",
            body: JSON.stringify(data),
            headers: {
              authorization: getAuthorization2()
            }
          };
          if (cancelled) {
            return;
          }
          let response;
          try {
            response = await (await originalFetch2(api, options)).json();
          } catch (err) {
            progStatus.value = "exception";
            return;
          }
          nextContinuation = null;
          for (const endpoint of response.onResponseReceivedEndpoints) {
            const items = ((_a = endpoint.appendContinuationItemsAction) == null ? void 0 : _a.continuationItems) || ((_b = endpoint.reloadContinuationItemsCommand) == null ? void 0 : _b.continuationItems);
            if (!items) continue;
            for (const item of items) {
              const token = (_e = (_d = (_c = item.continuationItemRenderer) == null ? void 0 : _c.continuationEndpoint) == null ? void 0 : _d.continuationCommand) == null ? void 0 : _e.token;
              if (token) {
                nextContinuation = token;
                break;
              }
            }
            if (nextContinuation) break;
          }
          let mutations = response.frameworkUpdates.entityBatchUpdate.mutations;
          for (let i = 0; i < mutations.length; i++) {
            let mutation = mutations[i];
            if (mutation.payload.commentEntityPayload) {
              let entity = mutation.payload.commentEntityPayload;
              let commentId = entity.properties.commentId;
              if (!hotCommentIdSet2.has(commentId)) {
                let likeCount = parseInt(entity.toolbar.likeCountNotliked);
                likeCount = likeCount ? likeCount : 0;
                let replyCount = parseInt(entity.toolbar.replyCount);
                replyCount = replyCount ? replyCount : 0;
                let url2 = mutations[i + 1].payload.commentSurfaceEntityPayload.publishedTimeCommand.innertubeCommand.commandMetadata.webCommandMetadata.url;
                count++;
                comments.push({
                  commentId,
                  url: url2,
                  userDisplayName: entity.author.displayName,
                  userProfileImageUrl: entity.avatar.image.sources[0].url,
                  likeCount,
                  replyCount,
                  publishedTime: entity.properties.publishedTime,
                  contentText: entity.properties.content.content
                });
              }
            }
          }
          if (!nextContinuation) {
            hasNext.value = false;
            break;
          }
        }
        loading.value = false;
      }
      vue.onUnmounted(() => {
        cancelled = true;
      });
      return (_ctx, _cache) => {
        const _component_el_empty = vue.resolveComponent("el-empty");
        const _component_el_divider = vue.resolveComponent("el-divider");
        const _component_el_button = vue.resolveComponent("el-button");
        const _component_el_progress = vue.resolveComponent("el-progress");
        const _component_el_scrollbar = vue.resolveComponent("el-scrollbar");
        return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$2, [
          showNcs.value ? (vue.openBlock(), vue.createBlock(_component_el_empty, {
            key: 0,
            description: "请在有评论区(视频、帖子)的页面使用此功能",
            class: "not-comment-section"
          })) : vue.createCommentVNode("", true),
          showWarning.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$2, [
            _cache[1] || (_cache[1] = vue.createElementVNode("svg", {
              class: "warn-icon",
              viewBox: "0 0 1024 1024",
              version: "1.1",
              xmlns: "http://www.w3.org/2000/svg",
              "p-id": "4518",
              width: "64",
              height: "64"
            }, [
              vue.createElementVNode("path", {
                d: "M1001.661867 796.544c48.896 84.906667 7.68 157.013333-87.552 157.013333H110.781867c-97.834667 0-139.050667-69.504-90.112-157.013333l401.664-666.88c48.896-87.552 128.725333-87.552 177.664 0l401.664 666.88zM479.165867 296.533333v341.333334a32 32 0 1 0 64 0v-341.333334a32 32 0 1 0-64 0z m0 469.333334v42.666666a32 32 0 1 0 64 0v-42.666666a32 32 0 1 0-64 0z",
                fill: "#FAAD14",
                "p-id": "4519"
              })
            ], -1)),
            _cache[2] || (_cache[2] = vue.createElementVNode("h2", { class: "warning-title" }, "警告", -1)),
            _cache[3] || (_cache[3] = vue.createElementVNode("p", { class: "warning-text" }, [
              vue.createTextVNode("将会获取所有热门评论,之后懒加载按时间评论"),
              vue.createElementVNode("br"),
              vue.createTextVNode(" 评论区数量过多(例如超过 5000 条),获取热门评论的过程将非常漫长,且过多的API调用可能导致不可预料的后果,请酌情使用! ")
            ], -1)),
            vue.createVNode(_component_el_divider, { class: "warning-divider" }),
            vue.createVNode(_component_el_button, {
              type: "primary",
              onClick: onSearch
            }, {
              default: vue.withCtx(() => _cache[0] || (_cache[0] = [
                vue.createTextVNode("搜索")
              ])),
              _: 1,
              __: [0]
            })
          ])) : vue.createCommentVNode("", true),
          showSearchProgress.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$1, [
            vue.createElementVNode("p", null, vue.toDisplayString(progressMsg.value), 1),
            vue.createVNode(_component_el_progress, {
              percentage: 50,
              indeterminate: true,
              "show-text": false
            })
          ])) : vue.createCommentVNode("", true),
          showResults.value ? (vue.openBlock(), vue.createBlock(_component_el_scrollbar, {
            key: 3,
            class: "search-results"
          }, {
            default: vue.withCtx(() => [
              vue.createElementVNode("div", {
                onEndReached,
                distance: 500
              }, [
                (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(comments, (comment) => {
                  return vue.openBlock(), vue.createBlock(YouTubeComment, {
                    key: comment.commentId,
                    comment
                  }, {
                    default: vue.withCtx(() => [
                      vue.createVNode(_sfc_main$4, { comment }, null, 8, ["comment"])
                    ]),
                    _: 2
                  }, 1032, ["comment"]);
                }), 128)),
                vue.createElementVNode("div", _hoisted_4$1, [
                  loading.value ? (vue.openBlock(), vue.createBlock(_component_el_progress, {
                    key: 0,
                    percentage: 50,
                    indeterminate: true,
                    "show-text": false,
                    status: progStatus.value,
                    duration: 1
                  }, null, 8, ["status"])) : vue.createCommentVNode("", true),
                  !hasNext.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_5$1, "- PAGE END -")) : vue.createCommentVNode("", true)
                ])
              ], 32)
            ]),
            _: 1
          })) : vue.createCommentVNode("", true)
        ]);
      };
    }
  };
  const HotBanCommentSearcher = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-658a2b6f"]]);
  /*!
   * pinia v3.0.3
   * (c) 2025 Eduardo San Martin Morote
   * @license MIT
   */
  let activePinia;
  const setActivePinia = (pinia2) => activePinia = pinia2;
  const piniaSymbol = (
    /* istanbul ignore next */
    Symbol()
  );
  function isPlainObject(o) {
    return o && typeof o === "object" && Object.prototype.toString.call(o) === "[object Object]" && typeof o.toJSON !== "function";
  }
  var MutationType;
  (function(MutationType2) {
    MutationType2["direct"] = "direct";
    MutationType2["patchObject"] = "patch object";
    MutationType2["patchFunction"] = "patch function";
  })(MutationType || (MutationType = {}));
  function createPinia() {
    const scope = vue.effectScope(true);
    const state = scope.run(() => vue.ref({}));
    let _p = [];
    let toBeInstalled = [];
    const pinia2 = vue.markRaw({
      install(app) {
        setActivePinia(pinia2);
        pinia2._a = app;
        app.provide(piniaSymbol, pinia2);
        app.config.globalProperties.$pinia = pinia2;
        toBeInstalled.forEach((plugin) => _p.push(plugin));
        toBeInstalled = [];
      },
      use(plugin) {
        if (!this._a) {
          toBeInstalled.push(plugin);
        } else {
          _p.push(plugin);
        }
        return this;
      },
      _p,
      // it's actually undefined here
      // @ts-expect-error
      _a: null,
      _e: scope,
      _s: /* @__PURE__ */ new Map(),
      state
    });
    return pinia2;
  }
  const noop = () => {
  };
  function addSubscription(subscriptions, callback, detached, onCleanup = noop) {
    subscriptions.push(callback);
    const removeSubscription = () => {
      const idx = subscriptions.indexOf(callback);
      if (idx > -1) {
        subscriptions.splice(idx, 1);
        onCleanup();
      }
    };
    if (!detached && vue.getCurrentScope()) {
      vue.onScopeDispose(removeSubscription);
    }
    return removeSubscription;
  }
  function triggerSubscriptions(subscriptions, ...args) {
    subscriptions.slice().forEach((callback) => {
      callback(...args);
    });
  }
  const fallbackRunWithContext = (fn) => fn();
  const ACTION_MARKER = Symbol();
  const ACTION_NAME = Symbol();
  function mergeReactiveObjects(target, patchToApply) {
    if (target instanceof Map && patchToApply instanceof Map) {
      patchToApply.forEach((value, key) => target.set(key, value));
    } else if (target instanceof Set && patchToApply instanceof Set) {
      patchToApply.forEach(target.add, target);
    }
    for (const key in patchToApply) {
      if (!patchToApply.hasOwnProperty(key))
        continue;
      const subPatch = patchToApply[key];
      const targetValue = target[key];
      if (isPlainObject(targetValue) && isPlainObject(subPatch) && target.hasOwnProperty(key) && !vue.isRef(subPatch) && !vue.isReactive(subPatch)) {
        target[key] = mergeReactiveObjects(targetValue, subPatch);
      } else {
        target[key] = subPatch;
      }
    }
    return target;
  }
  const skipHydrateSymbol = (
    /* istanbul ignore next */
    Symbol()
  );
  function shouldHydrate(obj) {
    return !isPlainObject(obj) || !Object.prototype.hasOwnProperty.call(obj, skipHydrateSymbol);
  }
  const { assign } = Object;
  function isComputed(o) {
    return !!(vue.isRef(o) && o.effect);
  }
  function createOptionsStore(id, options, pinia2, hot) {
    const { state, actions, getters } = options;
    const initialState = pinia2.state.value[id];
    let store;
    function setup() {
      if (!initialState && true) {
        pinia2.state.value[id] = state ? state() : {};
      }
      const localState = vue.toRefs(pinia2.state.value[id]);
      return assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => {
        computedGetters[name] = vue.markRaw(vue.computed(() => {
          setActivePinia(pinia2);
          const store2 = pinia2._s.get(id);
          return getters[name].call(store2, store2);
        }));
        return computedGetters;
      }, {}));
    }
    store = createSetupStore(id, setup, options, pinia2, hot, true);
    return store;
  }
  function createSetupStore($id, setup, options = {}, pinia2, hot, isOptionsStore) {
    let scope;
    const optionsForPlugin = assign({ actions: {} }, options);
    const $subscribeOptions = { deep: true };
    let isListening;
    let isSyncListening;
    let subscriptions = [];
    let actionSubscriptions = [];
    let debuggerEvents;
    const initialState = pinia2.state.value[$id];
    if (!isOptionsStore && !initialState && true) {
      pinia2.state.value[$id] = {};
    }
    vue.ref({});
    let activeListener;
    function $patch(partialStateOrMutator) {
      let subscriptionMutation;
      isListening = isSyncListening = false;
      if (typeof partialStateOrMutator === "function") {
        partialStateOrMutator(pinia2.state.value[$id]);
        subscriptionMutation = {
          type: MutationType.patchFunction,
          storeId: $id,
          events: debuggerEvents
        };
      } else {
        mergeReactiveObjects(pinia2.state.value[$id], partialStateOrMutator);
        subscriptionMutation = {
          type: MutationType.patchObject,
          payload: partialStateOrMutator,
          storeId: $id,
          events: debuggerEvents
        };
      }
      const myListenerId = activeListener = Symbol();
      vue.nextTick().then(() => {
        if (activeListener === myListenerId) {
          isListening = true;
        }
      });
      isSyncListening = true;
      triggerSubscriptions(subscriptions, subscriptionMutation, pinia2.state.value[$id]);
    }
    const $reset = isOptionsStore ? function $reset2() {
      const { state } = options;
      const newState = state ? state() : {};
      this.$patch(($state) => {
        assign($state, newState);
      });
    } : (
      /* istanbul ignore next */
      noop
    );
    function $dispose() {
      scope.stop();
      subscriptions = [];
      actionSubscriptions = [];
      pinia2._s.delete($id);
    }
    const action = (fn, name = "") => {
      if (ACTION_MARKER in fn) {
        fn[ACTION_NAME] = name;
        return fn;
      }
      const wrappedAction = function() {
        setActivePinia(pinia2);
        const args = Array.from(arguments);
        const afterCallbackList = [];
        const onErrorCallbackList = [];
        function after(callback) {
          afterCallbackList.push(callback);
        }
        function onError(callback) {
          onErrorCallbackList.push(callback);
        }
        triggerSubscriptions(actionSubscriptions, {
          args,
          name: wrappedAction[ACTION_NAME],
          store,
          after,
          onError
        });
        let ret;
        try {
          ret = fn.apply(this && this.$id === $id ? this : store, args);
        } catch (error) {
          triggerSubscriptions(onErrorCallbackList, error);
          throw error;
        }
        if (ret instanceof Promise) {
          return ret.then((value) => {
            triggerSubscriptions(afterCallbackList, value);
            return value;
          }).catch((error) => {
            triggerSubscriptions(onErrorCallbackList, error);
            return Promise.reject(error);
          });
        }
        triggerSubscriptions(afterCallbackList, ret);
        return ret;
      };
      wrappedAction[ACTION_MARKER] = true;
      wrappedAction[ACTION_NAME] = name;
      return wrappedAction;
    };
    const partialStore = {
      _p: pinia2,
      // _s: scope,
      $id,
      $onAction: addSubscription.bind(null, actionSubscriptions),
      $patch,
      $reset,
      $subscribe(callback, options2 = {}) {
        const removeSubscription = addSubscription(subscriptions, callback, options2.detached, () => stopWatcher());
        const stopWatcher = scope.run(() => vue.watch(() => pinia2.state.value[$id], (state) => {
          if (options2.flush === "sync" ? isSyncListening : isListening) {
            callback({
              storeId: $id,
              type: MutationType.direct,
              events: debuggerEvents
            }, state);
          }
        }, assign({}, $subscribeOptions, options2)));
        return removeSubscription;
      },
      $dispose
    };
    const store = vue.reactive(partialStore);
    pinia2._s.set($id, store);
    const runWithContext = pinia2._a && pinia2._a.runWithContext || fallbackRunWithContext;
    const setupStore = runWithContext(() => pinia2._e.run(() => (scope = vue.effectScope()).run(() => setup({ action }))));
    for (const key in setupStore) {
      const prop = setupStore[key];
      if (vue.isRef(prop) && !isComputed(prop) || vue.isReactive(prop)) {
        if (!isOptionsStore) {
          if (initialState && shouldHydrate(prop)) {
            if (vue.isRef(prop)) {
              prop.value = initialState[key];
            } else {
              mergeReactiveObjects(prop, initialState[key]);
            }
          }
          pinia2.state.value[$id][key] = prop;
        }
      } else if (typeof prop === "function") {
        const actionValue = action(prop, key);
        setupStore[key] = actionValue;
        optionsForPlugin.actions[key] = prop;
      } else ;
    }
    assign(store, setupStore);
    assign(vue.toRaw(store), setupStore);
    Object.defineProperty(store, "$state", {
      get: () => pinia2.state.value[$id],
      set: (state) => {
        $patch(($state) => {
          assign($state, state);
        });
      }
    });
    pinia2._p.forEach((extender) => {
      {
        assign(store, scope.run(() => extender({
          store,
          app: pinia2._a,
          pinia: pinia2,
          options: optionsForPlugin
        })));
      }
    });
    if (initialState && isOptionsStore && options.hydrate) {
      options.hydrate(store.$state, initialState);
    }
    isListening = true;
    isSyncListening = true;
    return store;
  }
  /*! #__NO_SIDE_EFFECTS__ */
  // @__NO_SIDE_EFFECTS__
  function defineStore(id, setup, setupOptions) {
    let options;
    const isSetupStore = typeof setup === "function";
    options = isSetupStore ? setupOptions : setup;
    function useStore(pinia2, hot) {
      const hasContext = vue.hasInjectionContext();
      pinia2 = // in test mode, ignore the argument provided as we can always retrieve a
      // pinia instance with getActivePinia()
      pinia2 || (hasContext ? vue.inject(piniaSymbol, null) : null);
      if (pinia2)
        setActivePinia(pinia2);
      pinia2 = activePinia;
      if (!pinia2._s.has(id)) {
        if (isSetupStore) {
          createSetupStore(id, setup, options, pinia2);
        } else {
          createOptionsStore(id, options, pinia2);
        }
      }
      const store = pinia2._s.get(id);
      return store;
    }
    useStore.$id = id;
    return useStore;
  }
  const useSettingsStore = /* @__PURE__ */ defineStore("settings", {
    state: () => {
      let defaultSetting = {
        forceTimeSort: false,
        showBlockedHotComments: false,
        unlockKidsVideoSaveButton: true,
        hotBanCheckCountCondition: "1000",
        autoHotBanCheck: true
      };
      let local = JSON.parse(localStorage.getItem("yt-ccd-settings"));
      if (local) {
        return Object.assign(defaultSetting, local);
      } else {
        return defaultSetting;
      }
    }
  });
  const _hoisted_1$1 = { class: "settings-container" };
  const _hoisted_2$1 = { class: "setting-item" };
  const _hoisted_3 = { class: "setting-item" };
  const _hoisted_4 = { class: "setting-item" };
  const _hoisted_5 = { class: "setting-info" };
  const _hoisted_6 = { class: "setting-item" };
  const _hoisted_7 = { class: "setting-item" };
  const _sfc_main$2 = {
    __name: "Settings",
    setup(__props) {
      const settings2 = useSettingsStore();
      vue.watch(() => settings2.$state, (newState) => {
        console.log(newState);
        localStorage.setItem("yt-ccd-settings", JSON.stringify(newState));
      }, { deep: true });
      return (_ctx, _cache) => {
        const _component_el_switch = vue.resolveComponent("el-switch");
        const _component_el_divider = vue.resolveComponent("el-divider");
        const _component_el_input = vue.resolveComponent("el-input");
        return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$1, [
          _cache[11] || (_cache[11] = vue.createElementVNode("h2", { class: "title" }, "二级评论(回复/楼中楼)", -1)),
          vue.createElementVNode("div", _hoisted_2$1, [
            _cache[5] || (_cache[5] = vue.createElementVNode("div", { class: "setting-info" }, [
              vue.createElementVNode("span", { class: "setting-label" }, "二级评论列表强制最新排序"),
              vue.createElementVNode("p", { class: "setting-desc" }, "无论评论区的排序方式如何,二级评论始终按最新排序")
            ], -1)),
            vue.createVNode(_component_el_switch, {
              modelValue: vue.unref(settings2).forceTimeSort,
              "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vue.unref(settings2).forceTimeSort = $event)
            }, null, 8, ["modelValue"])
          ]),
          vue.createVNode(_component_el_divider),
          vue.createElementVNode("div", _hoisted_3, [
            _cache[6] || (_cache[6] = vue.createElementVNode("div", { class: "setting-info" }, [
              vue.createElementVNode("span", { class: "setting-label" }, "搜索并显示被热门屏蔽的二级评论"),
              vue.createElementVNode("p", { class: "setting-desc" }, "在前者的基础上,先获取一次所有的热门评论,最新排序的评论若热门列表没有,则标注“(热门屏蔽的)”")
            ], -1)),
            vue.createVNode(_component_el_switch, {
              modelValue: vue.unref(settings2).showBlockedHotComments,
              "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => vue.unref(settings2).showBlockedHotComments = $event),
              disabled: !vue.unref(settings2).forceTimeSort
            }, null, 8, ["modelValue", "disabled"])
          ]),
          vue.createVNode(_component_el_divider),
          _cache[12] || (_cache[12] = vue.createElementVNode("h2", { class: "title" }, "热门屏蔽检查", -1)),
          vue.createElementVNode("div", _hoisted_4, [
            vue.createElementVNode("div", _hoisted_5, [
              _cache[7] || (_cache[7] = vue.createElementVNode("span", { class: "setting-label" }, "数量条件", -1)),
              _cache[8] || (_cache[8] = vue.createElementVNode("p", { class: "setting-desc" }, "当评论区评论数量小于多少时不检查不弹窗警告", -1)),
              vue.createVNode(_component_el_input, {
                type: "number",
                modelValue: vue.unref(settings2).hotBanCheckCountCondition,
                "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => vue.unref(settings2).hotBanCheckCountCondition = $event),
                style: { "width": "240px" }
              }, null, 8, ["modelValue"])
            ])
          ]),
          vue.createVNode(_component_el_divider),
          vue.createElementVNode("div", _hoisted_6, [
            _cache[9] || (_cache[9] = vue.createElementVNode("div", { class: "setting-info" }, [
              vue.createElementVNode("span", { class: "setting-label" }, "自动检查热门屏蔽"),
              vue.createElementVNode("p", { class: "setting-desc" }, "在检查流程完毕后,若评论区评论数量小于设定的数量条件时,自动检查是否热门屏蔽")
            ], -1)),
            vue.createVNode(_component_el_switch, {
              modelValue: vue.unref(settings2).autoHotBanCheck,
              "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => vue.unref(settings2).autoHotBanCheck = $event)
            }, null, 8, ["modelValue"])
          ]),
          vue.createVNode(_component_el_divider),
          _cache[13] || (_cache[13] = vue.createElementVNode("h2", { class: "title" }, "爱童TV(面向儿童的视频)", -1)),
          vue.createElementVNode("div", _hoisted_7, [
            _cache[10] || (_cache[10] = vue.createElementVNode("div", { class: "setting-info" }, [
              vue.createElementVNode("span", { class: "setting-label" }, "解锁保存(收藏)按钮"),
              vue.createElementVNode("p", { class: "setting-desc" }, [
                vue.createTextVNode("禁止儿童收藏视频还能保护儿童的隐私?白左们神一样的脑回路😅! "),
                vue.createElementVNode("br"),
                vue.createTextVNode("幸好开发者也只做了前端限制应付一下,此选项可恢复收藏按钮 ")
              ]),
              vue.createCommentVNode("  \r\n打着“保护儿童”的名义,对YouTube处以1.7亿美元罚款,最终却导致平台对儿童内容作出许多无法理解的功能阉割。\r\n不去约束平台的数据机制与透明性,却在模糊的儿童隐私边界上施加高压监管。\r\n\r\nCOPPA通过高罚款与模糊边界,迫使平台采取“一刀切”策略,对儿童内容施加一系列不可理喻的限制,连目标保护的儿童用户都难以接受\r\n立法者们根本不是为了儿童着想,而是为了敛财罢了\r\n "),
              vue.createCommentVNode(" So legislators of COPPA, fuck you! "),
              vue.createCommentVNode(" \r\n....................../´¯/) \r\n....................,/¯../ \r\n.................../..../ \r\n............./´¯/'...'/´¯¯`·¸ \r\n........../'/.../..../......./¨¯\\ \r\n........('(...´...´.... ¯~/'...') \r\n.........\\.................'...../ \r\n..........''...\\.......... _.·´ \r\n............\\..............( \r\n..............\\.............\\... \r\n        ")
            ], -1)),
            vue.createVNode(_component_el_switch, {
              modelValue: vue.unref(settings2).unlockKidsVideoSaveButton,
              "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => vue.unref(settings2).unlockKidsVideoSaveButton = $event)
            }, null, 8, ["modelValue"])
          ])
        ]);
      };
    }
  };
  const Settings = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-a3a10182"]]);
  const _hoisted_1 = { class: "toolbar" };
  const _hoisted_2 = ["onClick"];
  const pageSize = 20;
  const _sfc_main$1 = {
    __name: "HotBanCommentCollect",
    setup(__props) {
      const db2 = vue.inject("db");
      const selectedTime = vue.ref(null);
      const keyword = vue.ref("");
      const comments = vue.reactive([]);
      const commentObjectKeys = [
        "commentId",
        "url",
        "userDisplayName",
        "userProfileImageUrl",
        "likeCount",
        "replyCount",
        "publishedTime",
        "contentText",
        "recordedTime"
      ];
      const loadingComments = vue.ref(false);
      const finished = vue.ref(false);
      let timeCursor = null;
      function publishedAtFormatter(comment) {
        return "收藏于:" + formatTimestamp(comment.recordedTime);
      }
      function reloadComments() {
        if (loadingComments.value) {
          return;
        }
        finished.value = false;
        comments.length = 0;
        if (selectedTime.value) {
          timeCursor = selectedTime.value.getTime();
        } else {
          timeCursor = null;
        }
        loadComments();
      }
      function onEndReached(direction) {
        if (direction == "bottom") {
          loadComments();
        }
      }
      async function loadComments() {
        if (loadingComments.value || finished.value) {
          return;
        }
        loadingComments.value = true;
        selectedTime.value;
        await loadCommentPage();
        loadingComments.value = false;
      }
      function loadCommentPage() {
        return new Promise((resolve, reject) => {
          let transaction = db2.transaction("hotBanCommentCollect").objectStore("hotBanCommentCollect").index("recordedTime").openCursor(timeCursor ? IDBKeyRange.upperBound(timeCursor) : null, "prev");
          let count = 0;
          transaction.onsuccess = (event) => {
            var cursor = event.target.result;
            if (cursor) {
              if (count < pageSize) {
                let value = cursor.value;
                let textSearch = keyword.value;
                if (textSearch == "" || value.contentText.indexOf(textSearch) != -1) {
                  comments.push(value);
                  count++;
                }
                cursor.continue();
              } else {
                timeCursor = cursor.value.recordedTime;
                resolve();
              }
            } else {
              timeCursor = null;
              finished.value = true;
              resolve();
            }
          };
          transaction.onerror = (event) => {
            reject(event);
          };
        });
      }
      async function onDeleteComment(comment) {
        try {
          await ElementPlus.ElMessageBox.confirm(
            "确认要删除评论吗?",
            "警告",
            {
              confirmButtonText: "确定",
              cancelButtonText: "取消",
              type: "warning"
            }
          );
        } catch (error) {
          return;
        }
        try {
          await deleteComment2(comment.commentId);
          const index = comments.findIndex((item) => item.commentId === comment.commentId);
          if (index !== -1) {
            comments.splice(index, 1);
          }
          ElementPlus.ElMessage.success("删除成功");
        } catch (error) {
          console.error(error);
          ElementPlus.ElMessage.error("删除失败");
        }
      }
      function deleteComment2(commentId) {
        return new Promise((resolve, reject) => {
          let request = db2.transaction("hotBanCommentCollect", "readwrite").objectStore("hotBanCommentCollect").delete(commentId);
          request.onsuccess = (event) => {
            resolve(request.result);
          };
          request.onerror = (event) => {
            reject(event);
          };
        });
      }
      loadComments();
      function getComment(commentId) {
        return new Promise((resolve, reject) => {
          let req = db2.transaction("hotBanCommentCollect", "readonly").objectStore("hotBanCommentCollect").get(commentId);
          req.onsuccess = () => {
            resolve(req.result);
          };
          req.onerror = () => reject(req.error);
        });
      }
      function insertComment2(comment) {
        return new Promise((resolve, reject) => {
          let request = db2.transaction("hotBanCommentCollect", "readwrite").objectStore("hotBanCommentCollect").add(comment);
          request.onsuccess = (event) => {
            resolve(event);
          };
          request.onerror = (event) => {
            reject(event.target.error);
          };
        });
      }
      function generateName() {
        return "collect-hotban-comments-export_" + nowDate();
      }
      function getDataToExport() {
        return new Promise((resolve, reject) => {
          let transaction = db2.transaction("hotBanCommentCollect").objectStore("hotBanCommentCollect").index("recordedTime").openCursor(null, "prev");
          let localComments = [];
          transaction.onsuccess = (event) => {
            var cursor = event.target.result;
            if (cursor) {
              cursor.continue();
              localComments.push(cursor.value);
            } else {
              resolve(localComments);
            }
          };
          transaction.onerror = (event) => {
            reject(event);
          };
        });
      }
      async function handleImportData(data) {
        if (!data || !data instanceof Array) {
          ElementPlus.ElMessage.error("非法数据");
          return;
        }
        let successCount = 0;
        let skippedCount = 0;
        let invalidCount = 0;
        let failedCount = 0;
        for (let item of data) {
          if (validateObjectKeys(item, commentObjectKeys)) {
            try {
              let comment = await getComment(item.commentId);
              if (comment) {
                skippedCount++;
                console.log("已跳过评论数据", item);
              } else {
                await insertComment2(item);
                successCount++;
                console.log("已插入评论数据", item);
              }
            } catch (error) {
              failedCount++;
              console.error("评论导入时出错", error);
            }
          } else {
            invalidCount++;
            console.error("非法的评论数据", item);
          }
        }
        reloadComments();
        ElementPlus.ElMessage.success(`已导入 成功${successCount}条 失败${failedCount}条 跳过${skippedCount}条 无效${invalidCount}条`);
      }
      return (_ctx, _cache) => {
        const _component_el_date_picker = vue.resolveComponent("el-date-picker");
        const _component_el_button = vue.resolveComponent("el-button");
        const _component_el_input = vue.resolveComponent("el-input");
        const _component_el_scrollbar = vue.resolveComponent("el-scrollbar");
        return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
          vue.createElementVNode("div", _hoisted_1, [
            vue.createVNode(_component_el_date_picker, {
              modelValue: selectedTime.value,
              "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => selectedTime.value = $event),
              type: "datetime",
              placeholder: "从指定收藏时间开始",
              clearable: "",
              style: { "width": "220px" },
              onChange: reloadComments
            }, null, 8, ["modelValue"]),
            vue.createVNode(_component_el_input, {
              modelValue: keyword.value,
              "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => keyword.value = $event),
              placeholder: "搜索评论内容",
              clearable: "",
              style: { "width": "260px" },
              onKeyup: vue.withKeys(reloadComments, ["enter"]),
              onClear: reloadComments
            }, {
              append: vue.withCtx(() => [
                vue.createVNode(_component_el_button, { onClick: reloadComments }, {
                  default: vue.withCtx(() => _cache[2] || (_cache[2] = [
                    vue.createTextVNode(" 搜索 ")
                  ])),
                  _: 1,
                  __: [2]
                })
              ]),
              _: 1
            }, 8, ["modelValue"]),
            vue.createVNode(_sfc_main$8, {
              getFilenameFn: generateName,
              fetchDataFn: getDataToExport
            }, {
              default: vue.withCtx(() => _cache[3] || (_cache[3] = [
                vue.createTextVNode("导出")
              ])),
              _: 1,
              __: [3]
            }),
            vue.createVNode(_sfc_main$7, { onSuccess: handleImportData }, {
              default: vue.withCtx(() => _cache[4] || (_cache[4] = [
                vue.createTextVNode("导入")
              ])),
              _: 1,
              __: [4]
            })
          ]),
          vue.createVNode(_component_el_scrollbar, {
            height: "100%",
            onEndReached
          }, {
            default: vue.withCtx(() => [
              (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(comments, (comment) => {
                return vue.openBlock(), vue.createBlock(YouTubeComment, {
                  comment,
                  publishedAtFormatter,
                  key: comment.commentId
                }, {
                  default: vue.withCtx(() => [
                    vue.createElementVNode("button", {
                      class: "button",
                      onClick: ($event) => onDeleteComment(comment)
                    }, _cache[5] || (_cache[5] = [
                      vue.createElementVNode("svg", {
                        class: "icon",
                        viewBox: "0 0 1024 1024",
                        version: "1.1",
                        xmlns: "http://www.w3.org/2000/svg",
                        "p-id": "7925",
                        width: "200",
                        height: "200"
                      }, [
                        vue.createElementVNode("path", {
                          d: "M799.2 874.4c0 34.4-28.001 62.4-62.4 62.4H287.2c-34.4 0-62.4-28-62.4-62.4V212h574.4v662.4zM349.6 100c0-7.2 5.6-12.8 12.8-12.8h300c7.2 0 12.8 5.6 12.8 12.8v37.6H349.6V100z m636.8 37.6H749.6V100c0-48.001-39.2-87.2-87.2-87.2h-300c-48 0-87.2 39.199-87.2 87.2v37.6H37.6C16.8 137.6 0 154.4 0 175.2s16.8 37.6 37.6 37.6h112v661.6c0 76 61.6 137.6 137.6 137.6h449.6c76 0 137.6-61.6 137.6-137.6V212h112c20.8 0 37.6-16.8 37.6-37.6s-16.8-36.8-37.6-36.8zM512 824c20.8 0 37.6-16.8 37.6-37.6v-400c0-20.8-16.8-37.6-37.6-37.6s-37.6 16.8-37.6 37.6v400c0 20.8 16.8 37.6 37.6 37.6m-175.2 0c20.8 0 37.6-16.8 37.6-37.6v-400c0-20.8-16.8-37.6-37.6-37.6s-37.6 16.8-37.6 37.6v400c0.8 20.8 17.6 37.6 37.6 37.6m350.4 0c20.8 0 37.6-16.8 37.6-37.6v-400c0-20.8-16.8-37.6-37.6-37.6s-37.6 16.8-37.6 37.6v400c0 20.8 16.8 37.6 37.6 37.6",
                          "p-id": "7926"
                        })
                      ], -1),
                      vue.createElementVNode("span", { class: "action-text" }, "删除收藏", -1)
                    ]), 8, _hoisted_2)
                  ]),
                  _: 2
                }, 1032, ["comment"]);
              }), 128))
            ]),
            _: 1
          })
        ], 64);
      };
    }
  };
  const _sfc_main = {
    __name: "App",
    setup(__props) {
      let historiesVisible = vue.ref(false);
      let searchHotBanVisible = vue.ref(false);
      let settingsVisible = vue.ref(false);
      let collectedHotBanCommentVisible = vue.ref(false);
      const menuListener = vue.inject("menuListener");
      menuListener.onOpenHistory = () => {
        historiesVisible.value = true;
      };
      menuListener.onSearchHotBan = () => {
        searchHotBanVisible.value = true;
      };
      menuListener.onOpenSettings = () => {
        settingsVisible.value = true;
      };
      menuListener.onOpenHotBanCollect = () => {
        collectedHotBanCommentVisible.value = true;
      };
      return (_ctx, _cache) => {
        const _component_el_dialog = vue.resolveComponent("el-dialog");
        const _component_el_scrollbar = vue.resolveComponent("el-scrollbar");
        return vue.openBlock(), vue.createElementBlock("div", null, [
          vue.createVNode(_component_el_dialog, {
            modelValue: vue.unref(historiesVisible),
            "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vue.isRef(historiesVisible) ? historiesVisible.value = $event : historiesVisible = $event),
            title: "历史评论列表",
            width: "80%",
            style: { "height": "92vh" },
            "body-class": "dialog-body",
            "align-center": "",
            "destroy-on-close": ""
          }, {
            default: vue.withCtx(() => [
              vue.createVNode(CommentHistories)
            ]),
            _: 1
          }, 8, ["modelValue"]),
          vue.createVNode(_component_el_dialog, {
            modelValue: vue.unref(searchHotBanVisible),
            "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => vue.isRef(searchHotBanVisible) ? searchHotBanVisible.value = $event : searchHotBanVisible = $event),
            title: "热门屏蔽评论搜索",
            width: "80%",
            style: { "height": "92vh" },
            "body-class": "dialog-body",
            "align-center": "",
            "destroy-on-close": ""
          }, {
            default: vue.withCtx(() => [
              vue.createVNode(HotBanCommentSearcher)
            ]),
            _: 1
          }, 8, ["modelValue"]),
          vue.createVNode(_component_el_dialog, {
            modelValue: vue.unref(settingsVisible),
            "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => vue.isRef(settingsVisible) ? settingsVisible.value = $event : settingsVisible = $event),
            title: "设置",
            width: "60%",
            style: { "height": "92vh" },
            "body-class": "dialog-body",
            "align-center": "",
            "destroy-on-close": ""
          }, {
            default: vue.withCtx(() => [
              vue.createVNode(_component_el_scrollbar, null, {
                default: vue.withCtx(() => [
                  vue.createVNode(Settings)
                ]),
                _: 1
              })
            ]),
            _: 1
          }, 8, ["modelValue"]),
          vue.createVNode(_component_el_dialog, {
            modelValue: vue.unref(collectedHotBanCommentVisible),
            "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => vue.isRef(collectedHotBanCommentVisible) ? collectedHotBanCommentVisible.value = $event : collectedHotBanCommentVisible = $event),
            title: "热门屏蔽评论收藏",
            width: "80%",
            style: { "height": "92vh" },
            "body-class": "dialog-body",
            "align-center": "",
            "destroy-on-close": ""
          }, {
            default: vue.withCtx(() => [
              vue.createVNode(_sfc_main$1)
            ]),
            _: 1
          }, 8, ["modelValue"])
        ]);
      };
    }
  };
  const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-ffd6c60d"]]);
  var es_array_concat = {};
  var globalThis_1;
  var hasRequiredGlobalThis;
  function requireGlobalThis() {
    if (hasRequiredGlobalThis) return globalThis_1;
    hasRequiredGlobalThis = 1;
    var check2 = function(it) {
      return it && it.Math === Math && it;
    };
    globalThis_1 = // eslint-disable-next-line es/no-global-this -- safe
    check2(typeof globalThis == "object" && globalThis) || check2(typeof window == "object" && window) || // eslint-disable-next-line no-restricted-globals -- safe
    check2(typeof self == "object" && self) || check2(typeof commonjsGlobal == "object" && commonjsGlobal) || check2(typeof globalThis_1 == "object" && globalThis_1) || // eslint-disable-next-line no-new-func -- fallback
    /* @__PURE__ */ function() {
      return this;
    }() || Function("return this")();
    return globalThis_1;
  }
  var objectGetOwnPropertyDescriptor = {};
  var fails;
  var hasRequiredFails;
  function requireFails() {
    if (hasRequiredFails) return fails;
    hasRequiredFails = 1;
    fails = function(exec) {
      try {
        return !!exec();
      } catch (error) {
        return true;
      }
    };
    return fails;
  }
  var descriptors;
  var hasRequiredDescriptors;
  function requireDescriptors() {
    if (hasRequiredDescriptors) return descriptors;
    hasRequiredDescriptors = 1;
    var fails2 = requireFails();
    descriptors = !fails2(function() {
      return Object.defineProperty({}, 1, { get: function() {
        return 7;
      } })[1] !== 7;
    });
    return descriptors;
  }
  var functionBindNative;
  var hasRequiredFunctionBindNative;
  function requireFunctionBindNative() {
    if (hasRequiredFunctionBindNative) return functionBindNative;
    hasRequiredFunctionBindNative = 1;
    var fails2 = requireFails();
    functionBindNative = !fails2(function() {
      var test = (function() {
      }).bind();
      return typeof test != "function" || test.hasOwnProperty("prototype");
    });
    return functionBindNative;
  }
  var functionCall;
  var hasRequiredFunctionCall;
  function requireFunctionCall() {
    if (hasRequiredFunctionCall) return functionCall;
    hasRequiredFunctionCall = 1;
    var NATIVE_BIND = requireFunctionBindNative();
    var call = Function.prototype.call;
    functionCall = NATIVE_BIND ? call.bind(call) : function() {
      return call.apply(call, arguments);
    };
    return functionCall;
  }
  var objectPropertyIsEnumerable = {};
  var hasRequiredObjectPropertyIsEnumerable;
  function requireObjectPropertyIsEnumerable() {
    if (hasRequiredObjectPropertyIsEnumerable) return objectPropertyIsEnumerable;
    hasRequiredObjectPropertyIsEnumerable = 1;
    var $propertyIsEnumerable = {}.propertyIsEnumerable;
    var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
    var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);
    objectPropertyIsEnumerable.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
      var descriptor = getOwnPropertyDescriptor(this, V);
      return !!descriptor && descriptor.enumerable;
    } : $propertyIsEnumerable;
    return objectPropertyIsEnumerable;
  }
  var createPropertyDescriptor;
  var hasRequiredCreatePropertyDescriptor;
  function requireCreatePropertyDescriptor() {
    if (hasRequiredCreatePropertyDescriptor) return createPropertyDescriptor;
    hasRequiredCreatePropertyDescriptor = 1;
    createPropertyDescriptor = function(bitmap, value) {
      return {
        enumerable: !(bitmap & 1),
        configurable: !(bitmap & 2),
        writable: !(bitmap & 4),
        value
      };
    };
    return createPropertyDescriptor;
  }
  var functionUncurryThis;
  var hasRequiredFunctionUncurryThis;
  function requireFunctionUncurryThis() {
    if (hasRequiredFunctionUncurryThis) return functionUncurryThis;
    hasRequiredFunctionUncurryThis = 1;
    var NATIVE_BIND = requireFunctionBindNative();
    var FunctionPrototype = Function.prototype;
    var call = FunctionPrototype.call;
    var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);
    functionUncurryThis = NATIVE_BIND ? uncurryThisWithBind : function(fn) {
      return function() {
        return call.apply(fn, arguments);
      };
    };
    return functionUncurryThis;
  }
  var classofRaw;
  var hasRequiredClassofRaw;
  function requireClassofRaw() {
    if (hasRequiredClassofRaw) return classofRaw;
    hasRequiredClassofRaw = 1;
    var uncurryThis = requireFunctionUncurryThis();
    var toString2 = uncurryThis({}.toString);
    var stringSlice = uncurryThis("".slice);
    classofRaw = function(it) {
      return stringSlice(toString2(it), 8, -1);
    };
    return classofRaw;
  }
  var indexedObject;
  var hasRequiredIndexedObject;
  function requireIndexedObject() {
    if (hasRequiredIndexedObject) return indexedObject;
    hasRequiredIndexedObject = 1;
    var uncurryThis = requireFunctionUncurryThis();
    var fails2 = requireFails();
    var classof2 = requireClassofRaw();
    var $Object = Object;
    var split = uncurryThis("".split);
    indexedObject = fails2(function() {
      return !$Object("z").propertyIsEnumerable(0);
    }) ? function(it) {
      return classof2(it) === "String" ? split(it, "") : $Object(it);
    } : $Object;
    return indexedObject;
  }
  var isNullOrUndefined;
  var hasRequiredIsNullOrUndefined;
  function requireIsNullOrUndefined() {
    if (hasRequiredIsNullOrUndefined) return isNullOrUndefined;
    hasRequiredIsNullOrUndefined = 1;
    isNullOrUndefined = function(it) {
      return it === null || it === void 0;
    };
    return isNullOrUndefined;
  }
  var requireObjectCoercible;
  var hasRequiredRequireObjectCoercible;
  function requireRequireObjectCoercible() {
    if (hasRequiredRequireObjectCoercible) return requireObjectCoercible;
    hasRequiredRequireObjectCoercible = 1;
    var isNullOrUndefined2 = requireIsNullOrUndefined();
    var $TypeError = TypeError;
    requireObjectCoercible = function(it) {
      if (isNullOrUndefined2(it)) throw new $TypeError("Can't call method on " + it);
      return it;
    };
    return requireObjectCoercible;
  }
  var toIndexedObject;
  var hasRequiredToIndexedObject;
  function requireToIndexedObject() {
    if (hasRequiredToIndexedObject) return toIndexedObject;
    hasRequiredToIndexedObject = 1;
    var IndexedObject = requireIndexedObject();
    var requireObjectCoercible2 = requireRequireObjectCoercible();
    toIndexedObject = function(it) {
      return IndexedObject(requireObjectCoercible2(it));
    };
    return toIndexedObject;
  }
  var isCallable;
  var hasRequiredIsCallable;
  function requireIsCallable() {
    if (hasRequiredIsCallable) return isCallable;
    hasRequiredIsCallable = 1;
    var documentAll = typeof document == "object" && document.all;
    isCallable = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) {
      return typeof argument == "function" || argument === documentAll;
    } : function(argument) {
      return typeof argument == "function";
    };
    return isCallable;
  }
  var isObject;
  var hasRequiredIsObject;
  function requireIsObject() {
    if (hasRequiredIsObject) return isObject;
    hasRequiredIsObject = 1;
    var isCallable2 = requireIsCallable();
    isObject = function(it) {
      return typeof it == "object" ? it !== null : isCallable2(it);
    };
    return isObject;
  }
  var getBuiltIn;
  var hasRequiredGetBuiltIn;
  function requireGetBuiltIn() {
    if (hasRequiredGetBuiltIn) return getBuiltIn;
    hasRequiredGetBuiltIn = 1;
    var globalThis2 = requireGlobalThis();
    var isCallable2 = requireIsCallable();
    var aFunction = function(argument) {
      return isCallable2(argument) ? argument : void 0;
    };
    getBuiltIn = function(namespace, method) {
      return arguments.length < 2 ? aFunction(globalThis2[namespace]) : globalThis2[namespace] && globalThis2[namespace][method];
    };
    return getBuiltIn;
  }
  var objectIsPrototypeOf;
  var hasRequiredObjectIsPrototypeOf;
  function requireObjectIsPrototypeOf() {
    if (hasRequiredObjectIsPrototypeOf) return objectIsPrototypeOf;
    hasRequiredObjectIsPrototypeOf = 1;
    var uncurryThis = requireFunctionUncurryThis();
    objectIsPrototypeOf = uncurryThis({}.isPrototypeOf);
    return objectIsPrototypeOf;
  }
  var environmentUserAgent;
  var hasRequiredEnvironmentUserAgent;
  function requireEnvironmentUserAgent() {
    if (hasRequiredEnvironmentUserAgent) return environmentUserAgent;
    hasRequiredEnvironmentUserAgent = 1;
    var globalThis2 = requireGlobalThis();
    var navigator2 = globalThis2.navigator;
    var userAgent = navigator2 && navigator2.userAgent;
    environmentUserAgent = userAgent ? String(userAgent) : "";
    return environmentUserAgent;
  }
  var environmentV8Version;
  var hasRequiredEnvironmentV8Version;
  function requireEnvironmentV8Version() {
    if (hasRequiredEnvironmentV8Version) return environmentV8Version;
    hasRequiredEnvironmentV8Version = 1;
    var globalThis2 = requireGlobalThis();
    var userAgent = requireEnvironmentUserAgent();
    var process = globalThis2.process;
    var Deno = globalThis2.Deno;
    var versions = process && process.versions || Deno && Deno.version;
    var v8 = versions && versions.v8;
    var match, version;
    if (v8) {
      match = v8.split(".");
      version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);
    }
    if (!version && userAgent) {
      match = userAgent.match(/Edge\/(\d+)/);
      if (!match || match[1] >= 74) {
        match = userAgent.match(/Chrome\/(\d+)/);
        if (match) version = +match[1];
      }
    }
    environmentV8Version = version;
    return environmentV8Version;
  }
  var symbolConstructorDetection;
  var hasRequiredSymbolConstructorDetection;
  function requireSymbolConstructorDetection() {
    if (hasRequiredSymbolConstructorDetection) return symbolConstructorDetection;
    hasRequiredSymbolConstructorDetection = 1;
    var V8_VERSION = requireEnvironmentV8Version();
    var fails2 = requireFails();
    var globalThis2 = requireGlobalThis();
    var $String = globalThis2.String;
    symbolConstructorDetection = !!Object.getOwnPropertySymbols && !fails2(function() {
      var symbol = Symbol("symbol detection");
      return !$String(symbol) || !(Object(symbol) instanceof Symbol) || // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances
      !Symbol.sham && V8_VERSION && V8_VERSION < 41;
    });
    return symbolConstructorDetection;
  }
  var useSymbolAsUid;
  var hasRequiredUseSymbolAsUid;
  function requireUseSymbolAsUid() {
    if (hasRequiredUseSymbolAsUid) return useSymbolAsUid;
    hasRequiredUseSymbolAsUid = 1;
    var NATIVE_SYMBOL = requireSymbolConstructorDetection();
    useSymbolAsUid = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol";
    return useSymbolAsUid;
  }
  var isSymbol;
  var hasRequiredIsSymbol;
  function requireIsSymbol() {
    if (hasRequiredIsSymbol) return isSymbol;
    hasRequiredIsSymbol = 1;
    var getBuiltIn2 = requireGetBuiltIn();
    var isCallable2 = requireIsCallable();
    var isPrototypeOf = requireObjectIsPrototypeOf();
    var USE_SYMBOL_AS_UID = requireUseSymbolAsUid();
    var $Object = Object;
    isSymbol = USE_SYMBOL_AS_UID ? function(it) {
      return typeof it == "symbol";
    } : function(it) {
      var $Symbol = getBuiltIn2("Symbol");
      return isCallable2($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));
    };
    return isSymbol;
  }
  var tryToString;
  var hasRequiredTryToString;
  function requireTryToString() {
    if (hasRequiredTryToString) return tryToString;
    hasRequiredTryToString = 1;
    var $String = String;
    tryToString = function(argument) {
      try {
        return $String(argument);
      } catch (error) {
        return "Object";
      }
    };
    return tryToString;
  }
  var aCallable;
  var hasRequiredACallable;
  function requireACallable() {
    if (hasRequiredACallable) return aCallable;
    hasRequiredACallable = 1;
    var isCallable2 = requireIsCallable();
    var tryToString2 = requireTryToString();
    var $TypeError = TypeError;
    aCallable = function(argument) {
      if (isCallable2(argument)) return argument;
      throw new $TypeError(tryToString2(argument) + " is not a function");
    };
    return aCallable;
  }
  var getMethod;
  var hasRequiredGetMethod;
  function requireGetMethod() {
    if (hasRequiredGetMethod) return getMethod;
    hasRequiredGetMethod = 1;
    var aCallable2 = requireACallable();
    var isNullOrUndefined2 = requireIsNullOrUndefined();
    getMethod = function(V, P) {
      var func = V[P];
      return isNullOrUndefined2(func) ? void 0 : aCallable2(func);
    };
    return getMethod;
  }
  var ordinaryToPrimitive;
  var hasRequiredOrdinaryToPrimitive;
  function requireOrdinaryToPrimitive() {
    if (hasRequiredOrdinaryToPrimitive) return ordinaryToPrimitive;
    hasRequiredOrdinaryToPrimitive = 1;
    var call = requireFunctionCall();
    var isCallable2 = requireIsCallable();
    var isObject2 = requireIsObject();
    var $TypeError = TypeError;
    ordinaryToPrimitive = function(input, pref) {
      var fn, val;
      if (pref === "string" && isCallable2(fn = input.toString) && !isObject2(val = call(fn, input))) return val;
      if (isCallable2(fn = input.valueOf) && !isObject2(val = call(fn, input))) return val;
      if (pref !== "string" && isCallable2(fn = input.toString) && !isObject2(val = call(fn, input))) return val;
      throw new $TypeError("Can't convert object to primitive value");
    };
    return ordinaryToPrimitive;
  }
  var sharedStore = { exports: {} };
  var isPure;
  var hasRequiredIsPure;
  function requireIsPure() {
    if (hasRequiredIsPure) return isPure;
    hasRequiredIsPure = 1;
    isPure = false;
    return isPure;
  }
  var defineGlobalProperty;
  var hasRequiredDefineGlobalProperty;
  function requireDefineGlobalProperty() {
    if (hasRequiredDefineGlobalProperty) return defineGlobalProperty;
    hasRequiredDefineGlobalProperty = 1;
    var globalThis2 = requireGlobalThis();
    var defineProperty = Object.defineProperty;
    defineGlobalProperty = function(key, value) {
      try {
        defineProperty(globalThis2, key, { value, configurable: true, writable: true });
      } catch (error) {
        globalThis2[key] = value;
      }
      return value;
    };
    return defineGlobalProperty;
  }
  var hasRequiredSharedStore;
  function requireSharedStore() {
    if (hasRequiredSharedStore) return sharedStore.exports;
    hasRequiredSharedStore = 1;
    var IS_PURE = requireIsPure();
    var globalThis2 = requireGlobalThis();
    var defineGlobalProperty2 = requireDefineGlobalProperty();
    var SHARED = "__core-js_shared__";
    var store = sharedStore.exports = globalThis2[SHARED] || defineGlobalProperty2(SHARED, {});
    (store.versions || (store.versions = [])).push({
      version: "3.49.0",
      mode: IS_PURE ? "pure" : "global",
      copyright: "© 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.",
      license: "https://github.com/zloirock/core-js/blob/v3.49.0/LICENSE",
      source: "https://github.com/zloirock/core-js"
    });
    return sharedStore.exports;
  }
  var shared;
  var hasRequiredShared;
  function requireShared() {
    if (hasRequiredShared) return shared;
    hasRequiredShared = 1;
    var store = requireSharedStore();
    shared = function(key, value) {
      return store[key] || (store[key] = value || {});
    };
    return shared;
  }
  var toObject;
  var hasRequiredToObject;
  function requireToObject() {
    if (hasRequiredToObject) return toObject;
    hasRequiredToObject = 1;
    var requireObjectCoercible2 = requireRequireObjectCoercible();
    var $Object = Object;
    toObject = function(argument) {
      return $Object(requireObjectCoercible2(argument));
    };
    return toObject;
  }
  var hasOwnProperty_1;
  var hasRequiredHasOwnProperty;
  function requireHasOwnProperty() {
    if (hasRequiredHasOwnProperty) return hasOwnProperty_1;
    hasRequiredHasOwnProperty = 1;
    var uncurryThis = requireFunctionUncurryThis();
    var toObject2 = requireToObject();
    var hasOwnProperty = uncurryThis({}.hasOwnProperty);
    hasOwnProperty_1 = Object.hasOwn || function hasOwn(it, key) {
      return hasOwnProperty(toObject2(it), key);
    };
    return hasOwnProperty_1;
  }
  var uid;
  var hasRequiredUid;
  function requireUid() {
    if (hasRequiredUid) return uid;
    hasRequiredUid = 1;
    var uncurryThis = requireFunctionUncurryThis();
    var id = 0;
    var postfix = Math.random();
    var toString2 = uncurryThis(1.1.toString);
    uid = function(key) {
      return "Symbol(" + (key === void 0 ? "" : key) + ")_" + toString2(++id + postfix, 36);
    };
    return uid;
  }
  var wellKnownSymbol;
  var hasRequiredWellKnownSymbol;
  function requireWellKnownSymbol() {
    if (hasRequiredWellKnownSymbol) return wellKnownSymbol;
    hasRequiredWellKnownSymbol = 1;
    var globalThis2 = requireGlobalThis();
    var shared2 = requireShared();
    var hasOwn = requireHasOwnProperty();
    var uid2 = requireUid();
    var NATIVE_SYMBOL = requireSymbolConstructorDetection();
    var USE_SYMBOL_AS_UID = requireUseSymbolAsUid();
    var Symbol2 = globalThis2.Symbol;
    var WellKnownSymbolsStore = shared2("wks");
    var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol2["for"] || Symbol2 : Symbol2 && Symbol2.withoutSetter || uid2;
    wellKnownSymbol = function(name) {
      if (!hasOwn(WellKnownSymbolsStore, name)) {
        WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol2, name) ? Symbol2[name] : createWellKnownSymbol("Symbol." + name);
      }
      return WellKnownSymbolsStore[name];
    };
    return wellKnownSymbol;
  }
  var toPrimitive;
  var hasRequiredToPrimitive;
  function requireToPrimitive() {
    if (hasRequiredToPrimitive) return toPrimitive;
    hasRequiredToPrimitive = 1;
    var call = requireFunctionCall();
    var isObject2 = requireIsObject();
    var isSymbol2 = requireIsSymbol();
    var getMethod2 = requireGetMethod();
    var ordinaryToPrimitive2 = requireOrdinaryToPrimitive();
    var wellKnownSymbol2 = requireWellKnownSymbol();
    var $TypeError = TypeError;
    var TO_PRIMITIVE = wellKnownSymbol2("toPrimitive");
    toPrimitive = function(input, pref) {
      if (!isObject2(input) || isSymbol2(input)) return input;
      var exoticToPrim = getMethod2(input, TO_PRIMITIVE);
      var result;
      if (exoticToPrim) {
        if (pref === void 0) pref = "default";
        result = call(exoticToPrim, input, pref);
        if (!isObject2(result) || isSymbol2(result)) return result;
        throw new $TypeError("Can't convert object to primitive value");
      }
      if (pref === void 0) pref = "number";
      return ordinaryToPrimitive2(input, pref);
    };
    return toPrimitive;
  }
  var toPropertyKey;
  var hasRequiredToPropertyKey;
  function requireToPropertyKey() {
    if (hasRequiredToPropertyKey) return toPropertyKey;
    hasRequiredToPropertyKey = 1;
    var toPrimitive2 = requireToPrimitive();
    var isSymbol2 = requireIsSymbol();
    toPropertyKey = function(argument) {
      var key = toPrimitive2(argument, "string");
      return isSymbol2(key) ? key : key + "";
    };
    return toPropertyKey;
  }
  var documentCreateElement;
  var hasRequiredDocumentCreateElement;
  function requireDocumentCreateElement() {
    if (hasRequiredDocumentCreateElement) return documentCreateElement;
    hasRequiredDocumentCreateElement = 1;
    var globalThis2 = requireGlobalThis();
    var isObject2 = requireIsObject();
    var document2 = globalThis2.document;
    var EXISTS = isObject2(document2) && isObject2(document2.createElement);
    documentCreateElement = function(it) {
      return EXISTS ? document2.createElement(it) : {};
    };
    return documentCreateElement;
  }
  var ie8DomDefine;
  var hasRequiredIe8DomDefine;
  function requireIe8DomDefine() {
    if (hasRequiredIe8DomDefine) return ie8DomDefine;
    hasRequiredIe8DomDefine = 1;
    var DESCRIPTORS = requireDescriptors();
    var fails2 = requireFails();
    var createElement = requireDocumentCreateElement();
    ie8DomDefine = !DESCRIPTORS && !fails2(function() {
      return Object.defineProperty(createElement("div"), "a", {
        get: function() {
          return 7;
        }
      }).a !== 7;
    });
    return ie8DomDefine;
  }
  var hasRequiredObjectGetOwnPropertyDescriptor;
  function requireObjectGetOwnPropertyDescriptor() {
    if (hasRequiredObjectGetOwnPropertyDescriptor) return objectGetOwnPropertyDescriptor;
    hasRequiredObjectGetOwnPropertyDescriptor = 1;
    var DESCRIPTORS = requireDescriptors();
    var call = requireFunctionCall();
    var propertyIsEnumerableModule = requireObjectPropertyIsEnumerable();
    var createPropertyDescriptor2 = requireCreatePropertyDescriptor();
    var toIndexedObject2 = requireToIndexedObject();
    var toPropertyKey2 = requireToPropertyKey();
    var hasOwn = requireHasOwnProperty();
    var IE8_DOM_DEFINE = requireIe8DomDefine();
    var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
    objectGetOwnPropertyDescriptor.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
      O = toIndexedObject2(O);
      P = toPropertyKey2(P);
      if (IE8_DOM_DEFINE) try {
        return $getOwnPropertyDescriptor(O, P);
      } catch (error) {
      }
      if (hasOwn(O, P)) return createPropertyDescriptor2(!call(propertyIsEnumerableModule.f, O, P), O[P]);
    };
    return objectGetOwnPropertyDescriptor;
  }
  var objectDefineProperty = {};
  var v8PrototypeDefineBug;
  var hasRequiredV8PrototypeDefineBug;
  function requireV8PrototypeDefineBug() {
    if (hasRequiredV8PrototypeDefineBug) return v8PrototypeDefineBug;
    hasRequiredV8PrototypeDefineBug = 1;
    var DESCRIPTORS = requireDescriptors();
    var fails2 = requireFails();
    v8PrototypeDefineBug = DESCRIPTORS && fails2(function() {
      return Object.defineProperty(function() {
      }, "prototype", {
        value: 42,
        writable: false
      }).prototype !== 42;
    });
    return v8PrototypeDefineBug;
  }
  var anObject;
  var hasRequiredAnObject;
  function requireAnObject() {
    if (hasRequiredAnObject) return anObject;
    hasRequiredAnObject = 1;
    var isObject2 = requireIsObject();
    var $String = String;
    var $TypeError = TypeError;
    anObject = function(argument) {
      if (isObject2(argument)) return argument;
      throw new $TypeError($String(argument) + " is not an object");
    };
    return anObject;
  }
  var hasRequiredObjectDefineProperty;
  function requireObjectDefineProperty() {
    if (hasRequiredObjectDefineProperty) return objectDefineProperty;
    hasRequiredObjectDefineProperty = 1;
    var DESCRIPTORS = requireDescriptors();
    var IE8_DOM_DEFINE = requireIe8DomDefine();
    var V8_PROTOTYPE_DEFINE_BUG = requireV8PrototypeDefineBug();
    var anObject2 = requireAnObject();
    var toPropertyKey2 = requireToPropertyKey();
    var $TypeError = TypeError;
    var $defineProperty = Object.defineProperty;
    var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
    var ENUMERABLE = "enumerable";
    var CONFIGURABLE = "configurable";
    var WRITABLE = "writable";
    objectDefineProperty.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {
      anObject2(O);
      P = toPropertyKey2(P);
      anObject2(Attributes);
      if (typeof O === "function" && P === "prototype" && "value" in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {
        var current = $getOwnPropertyDescriptor(O, P);
        if (current && current[WRITABLE]) {
          O[P] = Attributes.value;
          Attributes = {
            configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],
            enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],
            writable: false
          };
        }
      }
      return $defineProperty(O, P, Attributes);
    } : $defineProperty : function defineProperty(O, P, Attributes) {
      anObject2(O);
      P = toPropertyKey2(P);
      anObject2(Attributes);
      if (IE8_DOM_DEFINE) try {
        return $defineProperty(O, P, Attributes);
      } catch (error) {
      }
      if ("get" in Attributes || "set" in Attributes) throw new $TypeError("Accessors not supported");
      if ("value" in Attributes) O[P] = Attributes.value;
      return O;
    };
    return objectDefineProperty;
  }
  var createNonEnumerableProperty;
  var hasRequiredCreateNonEnumerableProperty;
  function requireCreateNonEnumerableProperty() {
    if (hasRequiredCreateNonEnumerableProperty) return createNonEnumerableProperty;
    hasRequiredCreateNonEnumerableProperty = 1;
    var DESCRIPTORS = requireDescriptors();
    var definePropertyModule = requireObjectDefineProperty();
    var createPropertyDescriptor2 = requireCreatePropertyDescriptor();
    createNonEnumerableProperty = DESCRIPTORS ? function(object, key, value) {
      return definePropertyModule.f(object, key, createPropertyDescriptor2(1, value));
    } : function(object, key, value) {
      object[key] = value;
      return object;
    };
    return createNonEnumerableProperty;
  }
  var makeBuiltIn = { exports: {} };
  var functionName;
  var hasRequiredFunctionName;
  function requireFunctionName() {
    if (hasRequiredFunctionName) return functionName;
    hasRequiredFunctionName = 1;
    var DESCRIPTORS = requireDescriptors();
    var hasOwn = requireHasOwnProperty();
    var FunctionPrototype = Function.prototype;
    var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;
    var EXISTS = hasOwn(FunctionPrototype, "name");
    var PROPER = EXISTS && (function something() {
    }).name === "something";
    var CONFIGURABLE = EXISTS && (!DESCRIPTORS || DESCRIPTORS && getDescriptor(FunctionPrototype, "name").configurable);
    functionName = {
      EXISTS,
      PROPER,
      CONFIGURABLE
    };
    return functionName;
  }
  var inspectSource;
  var hasRequiredInspectSource;
  function requireInspectSource() {
    if (hasRequiredInspectSource) return inspectSource;
    hasRequiredInspectSource = 1;
    var uncurryThis = requireFunctionUncurryThis();
    var isCallable2 = requireIsCallable();
    var store = requireSharedStore();
    var functionToString = uncurryThis(Function.toString);
    if (!isCallable2(store.inspectSource)) {
      store.inspectSource = function(it) {
        return functionToString(it);
      };
    }
    inspectSource = store.inspectSource;
    return inspectSource;
  }
  var weakMapBasicDetection;
  var hasRequiredWeakMapBasicDetection;
  function requireWeakMapBasicDetection() {
    if (hasRequiredWeakMapBasicDetection) return weakMapBasicDetection;
    hasRequiredWeakMapBasicDetection = 1;
    var globalThis2 = requireGlobalThis();
    var isCallable2 = requireIsCallable();
    var WeakMap = globalThis2.WeakMap;
    weakMapBasicDetection = isCallable2(WeakMap) && /native code/.test(String(WeakMap));
    return weakMapBasicDetection;
  }
  var sharedKey;
  var hasRequiredSharedKey;
  function requireSharedKey() {
    if (hasRequiredSharedKey) return sharedKey;
    hasRequiredSharedKey = 1;
    var shared2 = requireShared();
    var uid2 = requireUid();
    var keys = shared2("keys");
    sharedKey = function(key) {
      return keys[key] || (keys[key] = uid2(key));
    };
    return sharedKey;
  }
  var hiddenKeys;
  var hasRequiredHiddenKeys;
  function requireHiddenKeys() {
    if (hasRequiredHiddenKeys) return hiddenKeys;
    hasRequiredHiddenKeys = 1;
    hiddenKeys = {};
    return hiddenKeys;
  }
  var internalState;
  var hasRequiredInternalState;
  function requireInternalState() {
    if (hasRequiredInternalState) return internalState;
    hasRequiredInternalState = 1;
    var NATIVE_WEAK_MAP = requireWeakMapBasicDetection();
    var globalThis2 = requireGlobalThis();
    var isObject2 = requireIsObject();
    var createNonEnumerableProperty2 = requireCreateNonEnumerableProperty();
    var hasOwn = requireHasOwnProperty();
    var shared2 = requireSharedStore();
    var sharedKey2 = requireSharedKey();
    var hiddenKeys2 = requireHiddenKeys();
    var OBJECT_ALREADY_INITIALIZED = "Object already initialized";
    var TypeError2 = globalThis2.TypeError;
    var WeakMap = globalThis2.WeakMap;
    var set, get, has;
    var enforce = function(it) {
      return has(it) ? get(it) : set(it, {});
    };
    var getterFor = function(TYPE) {
      return function(it) {
        var state;
        if (!isObject2(it) || (state = get(it)).type !== TYPE) {
          throw new TypeError2("Incompatible receiver, " + TYPE + " required");
        }
        return state;
      };
    };
    if (NATIVE_WEAK_MAP || shared2.state) {
      var store = shared2.state || (shared2.state = new WeakMap());
      store.get = store.get;
      store.has = store.has;
      store.set = store.set;
      set = function(it, metadata) {
        if (store.has(it)) throw new TypeError2(OBJECT_ALREADY_INITIALIZED);
        metadata.facade = it;
        store.set(it, metadata);
        return metadata;
      };
      get = function(it) {
        return store.get(it) || {};
      };
      has = function(it) {
        return store.has(it);
      };
    } else {
      var STATE = sharedKey2("state");
      hiddenKeys2[STATE] = true;
      set = function(it, metadata) {
        if (hasOwn(it, STATE)) throw new TypeError2(OBJECT_ALREADY_INITIALIZED);
        metadata.facade = it;
        createNonEnumerableProperty2(it, STATE, metadata);
        return metadata;
      };
      get = function(it) {
        return hasOwn(it, STATE) ? it[STATE] : {};
      };
      has = function(it) {
        return hasOwn(it, STATE);
      };
    }
    internalState = {
      set,
      get,
      has,
      enforce,
      getterFor
    };
    return internalState;
  }
  var hasRequiredMakeBuiltIn;
  function requireMakeBuiltIn() {
    if (hasRequiredMakeBuiltIn) return makeBuiltIn.exports;
    hasRequiredMakeBuiltIn = 1;
    var uncurryThis = requireFunctionUncurryThis();
    var fails2 = requireFails();
    var isCallable2 = requireIsCallable();
    var hasOwn = requireHasOwnProperty();
    var DESCRIPTORS = requireDescriptors();
    var CONFIGURABLE_FUNCTION_NAME = requireFunctionName().CONFIGURABLE;
    var inspectSource2 = requireInspectSource();
    var InternalStateModule = requireInternalState();
    var enforceInternalState = InternalStateModule.enforce;
    var getInternalState = InternalStateModule.get;
    var $String = String;
    var defineProperty = Object.defineProperty;
    var stringSlice = uncurryThis("".slice);
    var replace = uncurryThis("".replace);
    var join = uncurryThis([].join);
    var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails2(function() {
      return defineProperty(function() {
      }, "length", { value: 8 }).length !== 8;
    });
    var TEMPLATE = String(String).split("String");
    var makeBuiltIn$1 = makeBuiltIn.exports = function(value, name, options) {
      if (stringSlice($String(name), 0, 7) === "Symbol(") {
        name = "[" + replace($String(name), /^Symbol\(([^)]*)\).*$/, "$1") + "]";
      }
      if (options && options.getter) name = "get " + name;
      if (options && options.setter) name = "set " + name;
      if (!hasOwn(value, "name") || CONFIGURABLE_FUNCTION_NAME && value.name !== name) {
        if (DESCRIPTORS) defineProperty(value, "name", { value: name, configurable: true });
        else value.name = name;
      }
      if (CONFIGURABLE_LENGTH && options && hasOwn(options, "arity") && value.length !== options.arity) {
        defineProperty(value, "length", { value: options.arity });
      }
      try {
        if (options && hasOwn(options, "constructor") && options.constructor) {
          if (DESCRIPTORS) defineProperty(value, "prototype", { writable: false });
        } else if (value.prototype) value.prototype = void 0;
      } catch (error) {
      }
      var state = enforceInternalState(value);
      if (!hasOwn(state, "source")) {
        state.source = join(TEMPLATE, typeof name == "string" ? name : "");
      }
      return value;
    };
    Function.prototype.toString = makeBuiltIn$1(function toString2() {
      return isCallable2(this) && getInternalState(this).source || inspectSource2(this);
    }, "toString");
    return makeBuiltIn.exports;
  }
  var defineBuiltIn;
  var hasRequiredDefineBuiltIn;
  function requireDefineBuiltIn() {
    if (hasRequiredDefineBuiltIn) return defineBuiltIn;
    hasRequiredDefineBuiltIn = 1;
    var isCallable2 = requireIsCallable();
    var definePropertyModule = requireObjectDefineProperty();
    var makeBuiltIn2 = requireMakeBuiltIn();
    var defineGlobalProperty2 = requireDefineGlobalProperty();
    defineBuiltIn = function(O, key, value, options) {
      if (!options) options = {};
      var simple = options.enumerable;
      var name = options.name !== void 0 ? options.name : key;
      if (isCallable2(value)) makeBuiltIn2(value, name, options);
      if (options.global) {
        if (simple) O[key] = value;
        else defineGlobalProperty2(key, value);
      } else {
        try {
          if (!options.unsafe) delete O[key];
          else if (O[key]) simple = true;
        } catch (error) {
        }
        if (simple) O[key] = value;
        else definePropertyModule.f(O, key, {
          value,
          enumerable: false,
          configurable: !options.nonConfigurable,
          writable: !options.nonWritable
        });
      }
      return O;
    };
    return defineBuiltIn;
  }
  var objectGetOwnPropertyNames = {};
  var mathTrunc;
  var hasRequiredMathTrunc;
  function requireMathTrunc() {
    if (hasRequiredMathTrunc) return mathTrunc;
    hasRequiredMathTrunc = 1;
    var ceil = Math.ceil;
    var floor = Math.floor;
    mathTrunc = Math.trunc || function trunc(x) {
      var n = +x;
      return (n > 0 ? floor : ceil)(n);
    };
    return mathTrunc;
  }
  var toIntegerOrInfinity;
  var hasRequiredToIntegerOrInfinity;
  function requireToIntegerOrInfinity() {
    if (hasRequiredToIntegerOrInfinity) return toIntegerOrInfinity;
    hasRequiredToIntegerOrInfinity = 1;
    var trunc = requireMathTrunc();
    toIntegerOrInfinity = function(argument) {
      var number = +argument;
      return number !== number || number === 0 ? 0 : trunc(number);
    };
    return toIntegerOrInfinity;
  }
  var toAbsoluteIndex;
  var hasRequiredToAbsoluteIndex;
  function requireToAbsoluteIndex() {
    if (hasRequiredToAbsoluteIndex) return toAbsoluteIndex;
    hasRequiredToAbsoluteIndex = 1;
    var toIntegerOrInfinity2 = requireToIntegerOrInfinity();
    var max = Math.max;
    var min = Math.min;
    toAbsoluteIndex = function(index, length) {
      var integer = toIntegerOrInfinity2(index);
      return integer < 0 ? max(integer + length, 0) : min(integer, length);
    };
    return toAbsoluteIndex;
  }
  var toLength;
  var hasRequiredToLength;
  function requireToLength() {
    if (hasRequiredToLength) return toLength;
    hasRequiredToLength = 1;
    var toIntegerOrInfinity2 = requireToIntegerOrInfinity();
    var min = Math.min;
    toLength = function(argument) {
      var len = toIntegerOrInfinity2(argument);
      return len > 0 ? min(len, 9007199254740991) : 0;
    };
    return toLength;
  }
  var lengthOfArrayLike;
  var hasRequiredLengthOfArrayLike;
  function requireLengthOfArrayLike() {
    if (hasRequiredLengthOfArrayLike) return lengthOfArrayLike;
    hasRequiredLengthOfArrayLike = 1;
    var toLength2 = requireToLength();
    lengthOfArrayLike = function(obj) {
      return toLength2(obj.length);
    };
    return lengthOfArrayLike;
  }
  var arrayIncludes;
  var hasRequiredArrayIncludes;
  function requireArrayIncludes() {
    if (hasRequiredArrayIncludes) return arrayIncludes;
    hasRequiredArrayIncludes = 1;
    var toIndexedObject2 = requireToIndexedObject();
    var toAbsoluteIndex2 = requireToAbsoluteIndex();
    var lengthOfArrayLike2 = requireLengthOfArrayLike();
    var createMethod = function(IS_INCLUDES) {
      return function($this, el, fromIndex) {
        var O = toIndexedObject2($this);
        var length = lengthOfArrayLike2(O);
        if (length === 0) return !IS_INCLUDES && -1;
        var index = toAbsoluteIndex2(fromIndex, length);
        var value;
        if (IS_INCLUDES && el !== el) while (length > index) {
          value = O[index++];
          if (value !== value) return true;
        }
        else for (; length > index; index++) {
          if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
        }
        return !IS_INCLUDES && -1;
      };
    };
    arrayIncludes = {
      // `Array.prototype.includes` method
      // https://tc39.es/ecma262/#sec-array.prototype.includes
      includes: createMethod(true),
      // `Array.prototype.indexOf` method
      // https://tc39.es/ecma262/#sec-array.prototype.indexof
      indexOf: createMethod(false)
    };
    return arrayIncludes;
  }
  var objectKeysInternal;
  var hasRequiredObjectKeysInternal;
  function requireObjectKeysInternal() {
    if (hasRequiredObjectKeysInternal) return objectKeysInternal;
    hasRequiredObjectKeysInternal = 1;
    var uncurryThis = requireFunctionUncurryThis();
    var hasOwn = requireHasOwnProperty();
    var toIndexedObject2 = requireToIndexedObject();
    var indexOf = requireArrayIncludes().indexOf;
    var hiddenKeys2 = requireHiddenKeys();
    var push = uncurryThis([].push);
    objectKeysInternal = function(object, names) {
      var O = toIndexedObject2(object);
      var i = 0;
      var result = [];
      var key;
      for (key in O) !hasOwn(hiddenKeys2, key) && hasOwn(O, key) && push(result, key);
      while (names.length > i) if (hasOwn(O, key = names[i++])) {
        ~indexOf(result, key) || push(result, key);
      }
      return result;
    };
    return objectKeysInternal;
  }
  var enumBugKeys;
  var hasRequiredEnumBugKeys;
  function requireEnumBugKeys() {
    if (hasRequiredEnumBugKeys) return enumBugKeys;
    hasRequiredEnumBugKeys = 1;
    enumBugKeys = [
      "constructor",
      "hasOwnProperty",
      "isPrototypeOf",
      "propertyIsEnumerable",
      "toLocaleString",
      "toString",
      "valueOf"
    ];
    return enumBugKeys;
  }
  var hasRequiredObjectGetOwnPropertyNames;
  function requireObjectGetOwnPropertyNames() {
    if (hasRequiredObjectGetOwnPropertyNames) return objectGetOwnPropertyNames;
    hasRequiredObjectGetOwnPropertyNames = 1;
    var internalObjectKeys = requireObjectKeysInternal();
    var enumBugKeys2 = requireEnumBugKeys();
    var hiddenKeys2 = enumBugKeys2.concat("length", "prototype");
    objectGetOwnPropertyNames.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
      return internalObjectKeys(O, hiddenKeys2);
    };
    return objectGetOwnPropertyNames;
  }
  var objectGetOwnPropertySymbols = {};
  var hasRequiredObjectGetOwnPropertySymbols;
  function requireObjectGetOwnPropertySymbols() {
    if (hasRequiredObjectGetOwnPropertySymbols) return objectGetOwnPropertySymbols;
    hasRequiredObjectGetOwnPropertySymbols = 1;
    objectGetOwnPropertySymbols.f = Object.getOwnPropertySymbols;
    return objectGetOwnPropertySymbols;
  }
  var ownKeys;
  var hasRequiredOwnKeys;
  function requireOwnKeys() {
    if (hasRequiredOwnKeys) return ownKeys;
    hasRequiredOwnKeys = 1;
    var getBuiltIn2 = requireGetBuiltIn();
    var uncurryThis = requireFunctionUncurryThis();
    var getOwnPropertyNamesModule = requireObjectGetOwnPropertyNames();
    var getOwnPropertySymbolsModule = requireObjectGetOwnPropertySymbols();
    var anObject2 = requireAnObject();
    var concat = uncurryThis([].concat);
    ownKeys = getBuiltIn2("Reflect", "ownKeys") || function ownKeys2(it) {
      var keys = getOwnPropertyNamesModule.f(anObject2(it));
      var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
      return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;
    };
    return ownKeys;
  }
  var copyConstructorProperties;
  var hasRequiredCopyConstructorProperties;
  function requireCopyConstructorProperties() {
    if (hasRequiredCopyConstructorProperties) return copyConstructorProperties;
    hasRequiredCopyConstructorProperties = 1;
    var hasOwn = requireHasOwnProperty();
    var ownKeys2 = requireOwnKeys();
    var getOwnPropertyDescriptorModule = requireObjectGetOwnPropertyDescriptor();
    var definePropertyModule = requireObjectDefineProperty();
    copyConstructorProperties = function(target, source, exceptions) {
      var keys = ownKeys2(source);
      var defineProperty = definePropertyModule.f;
      var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
      for (var i = 0; i < keys.length; i++) {
        var key = keys[i];
        if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {
          defineProperty(target, key, getOwnPropertyDescriptor(source, key));
        }
      }
    };
    return copyConstructorProperties;
  }
  var isForced_1;
  var hasRequiredIsForced;
  function requireIsForced() {
    if (hasRequiredIsForced) return isForced_1;
    hasRequiredIsForced = 1;
    var fails2 = requireFails();
    var isCallable2 = requireIsCallable();
    var replacement = /#|\.prototype\./;
    var isForced = function(feature, detection) {
      var value = data[normalize(feature)];
      return value === POLYFILL ? true : value === NATIVE ? false : isCallable2(detection) ? fails2(detection) : !!detection;
    };
    var normalize = isForced.normalize = function(string) {
      return String(string).replace(replacement, ".").toLowerCase();
    };
    var data = isForced.data = {};
    var NATIVE = isForced.NATIVE = "N";
    var POLYFILL = isForced.POLYFILL = "P";
    isForced_1 = isForced;
    return isForced_1;
  }
  var _export;
  var hasRequired_export;
  function require_export() {
    if (hasRequired_export) return _export;
    hasRequired_export = 1;
    var globalThis2 = requireGlobalThis();
    var getOwnPropertyDescriptor = requireObjectGetOwnPropertyDescriptor().f;
    var createNonEnumerableProperty2 = requireCreateNonEnumerableProperty();
    var defineBuiltIn2 = requireDefineBuiltIn();
    var defineGlobalProperty2 = requireDefineGlobalProperty();
    var copyConstructorProperties2 = requireCopyConstructorProperties();
    var isForced = requireIsForced();
    _export = function(options, source) {
      var TARGET = options.target;
      var GLOBAL = options.global;
      var STATIC = options.stat;
      var FORCED, target, key, targetProperty, sourceProperty, descriptor;
      if (GLOBAL) {
        target = globalThis2;
      } else if (STATIC) {
        target = globalThis2[TARGET] || defineGlobalProperty2(TARGET, {});
      } else {
        target = globalThis2[TARGET] && globalThis2[TARGET].prototype;
      }
      if (target) for (key in source) {
        sourceProperty = source[key];
        if (options.dontCallGetSet) {
          descriptor = getOwnPropertyDescriptor(target, key);
          targetProperty = descriptor && descriptor.value;
        } else targetProperty = target[key];
        FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? "." : "#") + key, options.forced);
        if (!FORCED && targetProperty !== void 0) {
          if (typeof sourceProperty == typeof targetProperty) continue;
          copyConstructorProperties2(sourceProperty, targetProperty);
        }
        if (options.sham || targetProperty && targetProperty.sham) {
          createNonEnumerableProperty2(sourceProperty, "sham", true);
        }
        defineBuiltIn2(target, key, sourceProperty, options);
      }
    };
    return _export;
  }
  var isArray;
  var hasRequiredIsArray;
  function requireIsArray() {
    if (hasRequiredIsArray) return isArray;
    hasRequiredIsArray = 1;
    var classof2 = requireClassofRaw();
    isArray = Array.isArray || function isArray2(argument) {
      return classof2(argument) === "Array";
    };
    return isArray;
  }
  var doesNotExceedSafeInteger;
  var hasRequiredDoesNotExceedSafeInteger;
  function requireDoesNotExceedSafeInteger() {
    if (hasRequiredDoesNotExceedSafeInteger) return doesNotExceedSafeInteger;
    hasRequiredDoesNotExceedSafeInteger = 1;
    var $TypeError = TypeError;
    var MAX_SAFE_INTEGER = 9007199254740991;
    doesNotExceedSafeInteger = function(it) {
      if (it > MAX_SAFE_INTEGER) throw new $TypeError("Maximum allowed index exceeded");
      return it;
    };
    return doesNotExceedSafeInteger;
  }
  var createProperty;
  var hasRequiredCreateProperty;
  function requireCreateProperty() {
    if (hasRequiredCreateProperty) return createProperty;
    hasRequiredCreateProperty = 1;
    var DESCRIPTORS = requireDescriptors();
    var definePropertyModule = requireObjectDefineProperty();
    var createPropertyDescriptor2 = requireCreatePropertyDescriptor();
    createProperty = function(object, key, value) {
      if (DESCRIPTORS) definePropertyModule.f(object, key, createPropertyDescriptor2(0, value));
      else object[key] = value;
    };
    return createProperty;
  }
  var arraySetLength;
  var hasRequiredArraySetLength;
  function requireArraySetLength() {
    if (hasRequiredArraySetLength) return arraySetLength;
    hasRequiredArraySetLength = 1;
    var DESCRIPTORS = requireDescriptors();
    var isArray2 = requireIsArray();
    var $TypeError = TypeError;
    var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
    var SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function() {
      if (this !== void 0) return true;
      try {
        Object.defineProperty([], "length", { writable: false }).length = 1;
      } catch (error) {
        return error instanceof TypeError;
      }
    }();
    arraySetLength = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function(O, length) {
      if (isArray2(O) && !getOwnPropertyDescriptor(O, "length").writable) {
        throw new $TypeError("Cannot set read only .length");
      }
      return O.length = length;
    } : function(O, length) {
      return O.length = length;
    };
    return arraySetLength;
  }
  var toStringTagSupport;
  var hasRequiredToStringTagSupport;
  function requireToStringTagSupport() {
    if (hasRequiredToStringTagSupport) return toStringTagSupport;
    hasRequiredToStringTagSupport = 1;
    var wellKnownSymbol2 = requireWellKnownSymbol();
    var TO_STRING_TAG = wellKnownSymbol2("toStringTag");
    var test = {};
    test[TO_STRING_TAG] = "z";
    toStringTagSupport = String(test) === "[object z]";
    return toStringTagSupport;
  }
  var classof;
  var hasRequiredClassof;
  function requireClassof() {
    if (hasRequiredClassof) return classof;
    hasRequiredClassof = 1;
    var TO_STRING_TAG_SUPPORT = requireToStringTagSupport();
    var isCallable2 = requireIsCallable();
    var classofRaw2 = requireClassofRaw();
    var wellKnownSymbol2 = requireWellKnownSymbol();
    var TO_STRING_TAG = wellKnownSymbol2("toStringTag");
    var $Object = Object;
    var CORRECT_ARGUMENTS = classofRaw2(/* @__PURE__ */ function() {
      return arguments;
    }()) === "Arguments";
    var tryGet = function(it, key) {
      try {
        return it[key];
      } catch (error) {
      }
    };
    classof = TO_STRING_TAG_SUPPORT ? classofRaw2 : function(it) {
      var O, tag, result;
      return it === void 0 ? "Undefined" : it === null ? "Null" : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == "string" ? tag : CORRECT_ARGUMENTS ? classofRaw2(O) : (result = classofRaw2(O)) === "Object" && isCallable2(O.callee) ? "Arguments" : result;
    };
    return classof;
  }
  var isConstructor;
  var hasRequiredIsConstructor;
  function requireIsConstructor() {
    if (hasRequiredIsConstructor) return isConstructor;
    hasRequiredIsConstructor = 1;
    var uncurryThis = requireFunctionUncurryThis();
    var fails2 = requireFails();
    var isCallable2 = requireIsCallable();
    var classof2 = requireClassof();
    var getBuiltIn2 = requireGetBuiltIn();
    var inspectSource2 = requireInspectSource();
    var noop2 = function() {
    };
    var construct = getBuiltIn2("Reflect", "construct");
    var constructorRegExp = /^\s*(?:class|function)\b/;
    var exec = uncurryThis(constructorRegExp.exec);
    var INCORRECT_TO_STRING = !constructorRegExp.test(noop2);
    var isConstructorModern = function isConstructor2(argument) {
      if (!isCallable2(argument)) return false;
      try {
        construct(noop2, [], argument);
        return true;
      } catch (error) {
        return false;
      }
    };
    var isConstructorLegacy = function isConstructor2(argument) {
      if (!isCallable2(argument)) return false;
      switch (classof2(argument)) {
        case "AsyncFunction":
        case "GeneratorFunction":
        case "AsyncGeneratorFunction":
          return false;
      }
      try {
        return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource2(argument));
      } catch (error) {
        return true;
      }
    };
    isConstructorLegacy.sham = true;
    isConstructor = !construct || fails2(function() {
      var called;
      return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function() {
        called = true;
      }) || called;
    }) ? isConstructorLegacy : isConstructorModern;
    return isConstructor;
  }
  var arraySpeciesConstructor;
  var hasRequiredArraySpeciesConstructor;
  function requireArraySpeciesConstructor() {
    if (hasRequiredArraySpeciesConstructor) return arraySpeciesConstructor;
    hasRequiredArraySpeciesConstructor = 1;
    var isArray2 = requireIsArray();
    var isConstructor2 = requireIsConstructor();
    var isObject2 = requireIsObject();
    var wellKnownSymbol2 = requireWellKnownSymbol();
    var SPECIES = wellKnownSymbol2("species");
    var $Array = Array;
    arraySpeciesConstructor = function(originalArray) {
      var C;
      if (isArray2(originalArray)) {
        C = originalArray.constructor;
        if (isConstructor2(C) && (C === $Array || isArray2(C.prototype))) C = void 0;
        else if (isObject2(C)) {
          C = C[SPECIES];
          if (C === null) C = void 0;
        }
      }
      return C === void 0 ? $Array : C;
    };
    return arraySpeciesConstructor;
  }
  var arraySpeciesCreate;
  var hasRequiredArraySpeciesCreate;
  function requireArraySpeciesCreate() {
    if (hasRequiredArraySpeciesCreate) return arraySpeciesCreate;
    hasRequiredArraySpeciesCreate = 1;
    var arraySpeciesConstructor2 = requireArraySpeciesConstructor();
    arraySpeciesCreate = function(originalArray, length) {
      return new (arraySpeciesConstructor2(originalArray))(length === 0 ? 0 : length);
    };
    return arraySpeciesCreate;
  }
  var arrayMethodHasSpeciesSupport;
  var hasRequiredArrayMethodHasSpeciesSupport;
  function requireArrayMethodHasSpeciesSupport() {
    if (hasRequiredArrayMethodHasSpeciesSupport) return arrayMethodHasSpeciesSupport;
    hasRequiredArrayMethodHasSpeciesSupport = 1;
    var fails2 = requireFails();
    var wellKnownSymbol2 = requireWellKnownSymbol();
    var V8_VERSION = requireEnvironmentV8Version();
    var SPECIES = wellKnownSymbol2("species");
    arrayMethodHasSpeciesSupport = function(METHOD_NAME) {
      return V8_VERSION >= 51 || !fails2(function() {
        var array = [];
        var constructor = array.constructor = {};
        constructor[SPECIES] = function() {
          return { foo: 1 };
        };
        return array[METHOD_NAME](Boolean).foo !== 1;
      });
    };
    return arrayMethodHasSpeciesSupport;
  }
  var hasRequiredEs_array_concat;
  function requireEs_array_concat() {
    if (hasRequiredEs_array_concat) return es_array_concat;
    hasRequiredEs_array_concat = 1;
    var $ = require_export();
    var fails2 = requireFails();
    var isArray2 = requireIsArray();
    var isObject2 = requireIsObject();
    var toObject2 = requireToObject();
    var lengthOfArrayLike2 = requireLengthOfArrayLike();
    var doesNotExceedSafeInteger2 = requireDoesNotExceedSafeInteger();
    var createProperty2 = requireCreateProperty();
    var setArrayLength = requireArraySetLength();
    var arraySpeciesCreate2 = requireArraySpeciesCreate();
    var arrayMethodHasSpeciesSupport2 = requireArrayMethodHasSpeciesSupport();
    var wellKnownSymbol2 = requireWellKnownSymbol();
    var V8_VERSION = requireEnvironmentV8Version();
    var IS_CONCAT_SPREADABLE = wellKnownSymbol2("isConcatSpreadable");
    var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails2(function() {
      var array = [];
      array[IS_CONCAT_SPREADABLE] = false;
      return array.concat()[0] !== array;
    });
    var isConcatSpreadable = function(O) {
      if (!isObject2(O)) return false;
      var spreadable = O[IS_CONCAT_SPREADABLE];
      return spreadable !== void 0 ? !!spreadable : isArray2(O);
    };
    var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !arrayMethodHasSpeciesSupport2("concat");
    $({ target: "Array", proto: true, arity: 1, forced: FORCED }, {
      // eslint-disable-next-line no-unused-vars -- required for `.length`
      concat: function concat(arg) {
        var O = toObject2(this);
        var A = arraySpeciesCreate2(O, 0);
        var n = 0;
        var i, k, length, len, E;
        for (i = -1, length = arguments.length; i < length; i++) {
          E = i === -1 ? O : arguments[i];
          if (isConcatSpreadable(E)) {
            len = lengthOfArrayLike2(E);
            doesNotExceedSafeInteger2(n + len);
            for (k = 0; k < len; k++, n++) if (k in E) createProperty2(A, n, E[k]);
          } else {
            doesNotExceedSafeInteger2(n + 1);
            createProperty2(A, n++, E);
          }
        }
        setArrayLength(A, n);
        return A;
      }
    });
    return es_array_concat;
  }
  requireEs_array_concat();
  var es_error_cause = {};
  var functionApply;
  var hasRequiredFunctionApply;
  function requireFunctionApply() {
    if (hasRequiredFunctionApply) return functionApply;
    hasRequiredFunctionApply = 1;
    var NATIVE_BIND = requireFunctionBindNative();
    var FunctionPrototype = Function.prototype;
    var apply = FunctionPrototype.apply;
    var call = FunctionPrototype.call;
    functionApply = typeof Reflect == "object" && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function() {
      return call.apply(apply, arguments);
    });
    return functionApply;
  }
  var functionUncurryThisAccessor;
  var hasRequiredFunctionUncurryThisAccessor;
  function requireFunctionUncurryThisAccessor() {
    if (hasRequiredFunctionUncurryThisAccessor) return functionUncurryThisAccessor;
    hasRequiredFunctionUncurryThisAccessor = 1;
    var uncurryThis = requireFunctionUncurryThis();
    var aCallable2 = requireACallable();
    functionUncurryThisAccessor = function(object, key, method) {
      try {
        return uncurryThis(aCallable2(Object.getOwnPropertyDescriptor(object, key)[method]));
      } catch (error) {
      }
    };
    return functionUncurryThisAccessor;
  }
  var isPossiblePrototype;
  var hasRequiredIsPossiblePrototype;
  function requireIsPossiblePrototype() {
    if (hasRequiredIsPossiblePrototype) return isPossiblePrototype;
    hasRequiredIsPossiblePrototype = 1;
    var isObject2 = requireIsObject();
    isPossiblePrototype = function(argument) {
      return isObject2(argument) || argument === null;
    };
    return isPossiblePrototype;
  }
  var aPossiblePrototype;
  var hasRequiredAPossiblePrototype;
  function requireAPossiblePrototype() {
    if (hasRequiredAPossiblePrototype) return aPossiblePrototype;
    hasRequiredAPossiblePrototype = 1;
    var isPossiblePrototype2 = requireIsPossiblePrototype();
    var $String = String;
    var $TypeError = TypeError;
    aPossiblePrototype = function(argument) {
      if (isPossiblePrototype2(argument)) return argument;
      throw new $TypeError("Can't set " + $String(argument) + " as a prototype");
    };
    return aPossiblePrototype;
  }
  var objectSetPrototypeOf;
  var hasRequiredObjectSetPrototypeOf;
  function requireObjectSetPrototypeOf() {
    if (hasRequiredObjectSetPrototypeOf) return objectSetPrototypeOf;
    hasRequiredObjectSetPrototypeOf = 1;
    var uncurryThisAccessor = requireFunctionUncurryThisAccessor();
    var isObject2 = requireIsObject();
    var requireObjectCoercible2 = requireRequireObjectCoercible();
    var aPossiblePrototype2 = requireAPossiblePrototype();
    objectSetPrototypeOf = Object.setPrototypeOf || ("__proto__" in {} ? function() {
      var CORRECT_SETTER = false;
      var test = {};
      var setter;
      try {
        setter = uncurryThisAccessor(Object.prototype, "__proto__", "set");
        setter(test, []);
        CORRECT_SETTER = test instanceof Array;
      } catch (error) {
      }
      return function setPrototypeOf(O, proto) {
        requireObjectCoercible2(O);
        aPossiblePrototype2(proto);
        if (!isObject2(O)) return O;
        if (CORRECT_SETTER) setter(O, proto);
        else O.__proto__ = proto;
        return O;
      };
    }() : void 0);
    return objectSetPrototypeOf;
  }
  var proxyAccessor;
  var hasRequiredProxyAccessor;
  function requireProxyAccessor() {
    if (hasRequiredProxyAccessor) return proxyAccessor;
    hasRequiredProxyAccessor = 1;
    var defineProperty = requireObjectDefineProperty().f;
    proxyAccessor = function(Target, Source, key) {
      key in Target || defineProperty(Target, key, {
        configurable: true,
        get: function() {
          return Source[key];
        },
        set: function(it) {
          Source[key] = it;
        }
      });
    };
    return proxyAccessor;
  }
  var inheritIfRequired;
  var hasRequiredInheritIfRequired;
  function requireInheritIfRequired() {
    if (hasRequiredInheritIfRequired) return inheritIfRequired;
    hasRequiredInheritIfRequired = 1;
    var isCallable2 = requireIsCallable();
    var isObject2 = requireIsObject();
    var setPrototypeOf = requireObjectSetPrototypeOf();
    inheritIfRequired = function($this, dummy, Wrapper) {
      var NewTarget, NewTargetPrototype;
      if (
        // it can work only with native `setPrototypeOf`
        setPrototypeOf && // we haven't completely correct pre-ES6 way for getting `new.target`, so use this
        isCallable2(NewTarget = dummy.constructor) && NewTarget !== Wrapper && isObject2(NewTargetPrototype = NewTarget.prototype) && NewTargetPrototype !== Wrapper.prototype
      ) setPrototypeOf($this, NewTargetPrototype);
      return $this;
    };
    return inheritIfRequired;
  }
  var toString;
  var hasRequiredToString;
  function requireToString() {
    if (hasRequiredToString) return toString;
    hasRequiredToString = 1;
    var classof2 = requireClassof();
    var $String = String;
    toString = function(argument) {
      if (classof2(argument) === "Symbol") throw new TypeError("Cannot convert a Symbol value to a string");
      return $String(argument);
    };
    return toString;
  }
  var normalizeStringArgument;
  var hasRequiredNormalizeStringArgument;
  function requireNormalizeStringArgument() {
    if (hasRequiredNormalizeStringArgument) return normalizeStringArgument;
    hasRequiredNormalizeStringArgument = 1;
    var toString2 = requireToString();
    normalizeStringArgument = function(argument, $default) {
      return argument === void 0 ? arguments.length < 2 ? "" : $default : toString2(argument);
    };
    return normalizeStringArgument;
  }
  var installErrorCause;
  var hasRequiredInstallErrorCause;
  function requireInstallErrorCause() {
    if (hasRequiredInstallErrorCause) return installErrorCause;
    hasRequiredInstallErrorCause = 1;
    var isObject2 = requireIsObject();
    var createNonEnumerableProperty2 = requireCreateNonEnumerableProperty();
    installErrorCause = function(O, options) {
      if (isObject2(options) && "cause" in options) {
        createNonEnumerableProperty2(O, "cause", options.cause);
      }
    };
    return installErrorCause;
  }
  var errorStackClear;
  var hasRequiredErrorStackClear;
  function requireErrorStackClear() {
    if (hasRequiredErrorStackClear) return errorStackClear;
    hasRequiredErrorStackClear = 1;
    var uncurryThis = requireFunctionUncurryThis();
    var $Error = Error;
    var replace = uncurryThis("".replace);
    var TEST = function(arg) {
      return String(new $Error(arg).stack);
    }("zxcasd");
    var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/;
    var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);
    errorStackClear = function(stack, dropEntries) {
      if (IS_V8_OR_CHAKRA_STACK && typeof stack == "string" && !$Error.prepareStackTrace) {
        while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, "");
      }
      return stack;
    };
    return errorStackClear;
  }
  var errorStackInstallable;
  var hasRequiredErrorStackInstallable;
  function requireErrorStackInstallable() {
    if (hasRequiredErrorStackInstallable) return errorStackInstallable;
    hasRequiredErrorStackInstallable = 1;
    var fails2 = requireFails();
    var createPropertyDescriptor2 = requireCreatePropertyDescriptor();
    errorStackInstallable = !fails2(function() {
      var error = new Error("a");
      if (!("stack" in error)) return true;
      Object.defineProperty(error, "stack", createPropertyDescriptor2(1, 7));
      return error.stack !== 7;
    });
    return errorStackInstallable;
  }
  var errorStackInstall;
  var hasRequiredErrorStackInstall;
  function requireErrorStackInstall() {
    if (hasRequiredErrorStackInstall) return errorStackInstall;
    hasRequiredErrorStackInstall = 1;
    var createNonEnumerableProperty2 = requireCreateNonEnumerableProperty();
    var clearErrorStack = requireErrorStackClear();
    var ERROR_STACK_INSTALLABLE = requireErrorStackInstallable();
    var captureStackTrace = Error.captureStackTrace;
    errorStackInstall = function(error, C, stack, dropEntries) {
      if (ERROR_STACK_INSTALLABLE) {
        if (captureStackTrace) captureStackTrace(error, C);
        else createNonEnumerableProperty2(error, "stack", clearErrorStack(stack, dropEntries));
      }
    };
    return errorStackInstall;
  }
  var wrapErrorConstructorWithCause;
  var hasRequiredWrapErrorConstructorWithCause;
  function requireWrapErrorConstructorWithCause() {
    if (hasRequiredWrapErrorConstructorWithCause) return wrapErrorConstructorWithCause;
    hasRequiredWrapErrorConstructorWithCause = 1;
    var getBuiltIn2 = requireGetBuiltIn();
    var hasOwn = requireHasOwnProperty();
    var createNonEnumerableProperty2 = requireCreateNonEnumerableProperty();
    var isPrototypeOf = requireObjectIsPrototypeOf();
    var setPrototypeOf = requireObjectSetPrototypeOf();
    var copyConstructorProperties2 = requireCopyConstructorProperties();
    var proxyAccessor2 = requireProxyAccessor();
    var inheritIfRequired2 = requireInheritIfRequired();
    var normalizeStringArgument2 = requireNormalizeStringArgument();
    var installErrorCause2 = requireInstallErrorCause();
    var installErrorStack = requireErrorStackInstall();
    var DESCRIPTORS = requireDescriptors();
    var IS_PURE = requireIsPure();
    wrapErrorConstructorWithCause = function(FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) {
      var STACK_TRACE_LIMIT = "stackTraceLimit";
      var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1;
      var path = FULL_NAME.split(".");
      var ERROR_NAME = path[path.length - 1];
      var OriginalError = getBuiltIn2.apply(null, path);
      if (!OriginalError) return;
      var OriginalErrorPrototype = OriginalError.prototype;
      if (!IS_PURE && hasOwn(OriginalErrorPrototype, "cause")) delete OriginalErrorPrototype.cause;
      if (!FORCED) return OriginalError;
      var BaseError = getBuiltIn2("Error");
      var WrappedError = wrapper(function(a, b) {
        var message = normalizeStringArgument2(IS_AGGREGATE_ERROR ? b : a, void 0);
        var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError();
        if (message !== void 0) createNonEnumerableProperty2(result, "message", message);
        installErrorStack(result, WrappedError, result.stack, 2);
        if (this && isPrototypeOf(OriginalErrorPrototype, this)) inheritIfRequired2(result, this, WrappedError);
        if (arguments.length > OPTIONS_POSITION) installErrorCause2(result, arguments[OPTIONS_POSITION]);
        return result;
      });
      WrappedError.prototype = OriginalErrorPrototype;
      if (ERROR_NAME !== "Error") {
        if (setPrototypeOf) setPrototypeOf(WrappedError, BaseError);
        else copyConstructorProperties2(WrappedError, BaseError, { name: true });
      } else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) {
        proxyAccessor2(WrappedError, OriginalError, STACK_TRACE_LIMIT);
        proxyAccessor2(WrappedError, OriginalError, "prepareStackTrace");
      }
      copyConstructorProperties2(WrappedError, OriginalError);
      if (!IS_PURE) try {
        if (OriginalErrorPrototype.name !== ERROR_NAME) {
          createNonEnumerableProperty2(OriginalErrorPrototype, "name", ERROR_NAME);
        }
        OriginalErrorPrototype.constructor = WrappedError;
      } catch (error) {
      }
      return WrappedError;
    };
    return wrapErrorConstructorWithCause;
  }
  var hasRequiredEs_error_cause;
  function requireEs_error_cause() {
    if (hasRequiredEs_error_cause) return es_error_cause;
    hasRequiredEs_error_cause = 1;
    var $ = require_export();
    var globalThis2 = requireGlobalThis();
    var apply = requireFunctionApply();
    var wrapErrorConstructorWithCause2 = requireWrapErrorConstructorWithCause();
    var WEB_ASSEMBLY = "WebAssembly";
    var WebAssembly = globalThis2[WEB_ASSEMBLY];
    var FORCED = new Error("e", { cause: 7 }).cause !== 7;
    var exportGlobalErrorCauseWrapper = function(ERROR_NAME, wrapper) {
      var O = {};
      O[ERROR_NAME] = wrapErrorConstructorWithCause2(ERROR_NAME, wrapper, FORCED);
      $({ global: true, constructor: true, arity: 1, forced: FORCED }, O);
    };
    var exportWebAssemblyErrorCauseWrapper = function(ERROR_NAME, wrapper) {
      if (WebAssembly && WebAssembly[ERROR_NAME]) {
        var O = {};
        O[ERROR_NAME] = wrapErrorConstructorWithCause2(WEB_ASSEMBLY + "." + ERROR_NAME, wrapper, FORCED);
        $({ target: WEB_ASSEMBLY, stat: true, constructor: true, arity: 1, forced: FORCED }, O);
      }
    };
    exportGlobalErrorCauseWrapper("Error", function(init2) {
      return function Error2(message) {
        return apply(init2, this, arguments);
      };
    });
    exportGlobalErrorCauseWrapper("EvalError", function(init2) {
      return function EvalError(message) {
        return apply(init2, this, arguments);
      };
    });
    exportGlobalErrorCauseWrapper("RangeError", function(init2) {
      return function RangeError2(message) {
        return apply(init2, this, arguments);
      };
    });
    exportGlobalErrorCauseWrapper("ReferenceError", function(init2) {
      return function ReferenceError(message) {
        return apply(init2, this, arguments);
      };
    });
    exportGlobalErrorCauseWrapper("SyntaxError", function(init2) {
      return function SyntaxError(message) {
        return apply(init2, this, arguments);
      };
    });
    exportGlobalErrorCauseWrapper("TypeError", function(init2) {
      return function TypeError2(message) {
        return apply(init2, this, arguments);
      };
    });
    exportGlobalErrorCauseWrapper("URIError", function(init2) {
      return function URIError(message) {
        return apply(init2, this, arguments);
      };
    });
    exportWebAssemblyErrorCauseWrapper("CompileError", function(init2) {
      return function CompileError(message) {
        return apply(init2, this, arguments);
      };
    });
    exportWebAssemblyErrorCauseWrapper("LinkError", function(init2) {
      return function LinkError(message) {
        return apply(init2, this, arguments);
      };
    });
    exportWebAssemblyErrorCauseWrapper("RuntimeError", function(init2) {
      return function RuntimeError(message) {
        return apply(init2, this, arguments);
      };
    });
    return es_error_cause;
  }
  requireEs_error_cause();
  var es_object_toString = {};
  var objectToString;
  var hasRequiredObjectToString;
  function requireObjectToString() {
    if (hasRequiredObjectToString) return objectToString;
    hasRequiredObjectToString = 1;
    var TO_STRING_TAG_SUPPORT = requireToStringTagSupport();
    var classof2 = requireClassof();
    objectToString = TO_STRING_TAG_SUPPORT ? {}.toString : function toString2() {
      return "[object " + classof2(this) + "]";
    };
    return objectToString;
  }
  var hasRequiredEs_object_toString;
  function requireEs_object_toString() {
    if (hasRequiredEs_object_toString) return es_object_toString;
    hasRequiredEs_object_toString = 1;
    var TO_STRING_TAG_SUPPORT = requireToStringTagSupport();
    var defineBuiltIn2 = requireDefineBuiltIn();
    var toString2 = requireObjectToString();
    if (!TO_STRING_TAG_SUPPORT) {
      defineBuiltIn2(Object.prototype, "toString", toString2, { unsafe: true });
    }
    return es_object_toString;
  }
  requireEs_object_toString();
  var web_domCollections_forEach = {};
  var domIterables;
  var hasRequiredDomIterables;
  function requireDomIterables() {
    if (hasRequiredDomIterables) return domIterables;
    hasRequiredDomIterables = 1;
    domIterables = {
      CSSRuleList: 0,
      CSSStyleDeclaration: 0,
      CSSValueList: 0,
      ClientRectList: 0,
      DOMRectList: 0,
      DOMStringList: 0,
      DOMTokenList: 1,
      DataTransferItemList: 0,
      FileList: 0,
      HTMLAllCollection: 0,
      HTMLCollection: 0,
      HTMLFormElement: 0,
      HTMLSelectElement: 0,
      MediaList: 0,
      MimeTypeArray: 0,
      NamedNodeMap: 0,
      NodeList: 1,
      PaintRequestList: 0,
      Plugin: 0,
      PluginArray: 0,
      SVGLengthList: 0,
      SVGNumberList: 0,
      SVGPathSegList: 0,
      SVGPointList: 0,
      SVGStringList: 0,
      SVGTransformList: 0,
      SourceBufferList: 0,
      StyleSheetList: 0,
      TextTrackCueList: 0,
      TextTrackList: 0,
      TouchList: 0
    };
    return domIterables;
  }
  var domTokenListPrototype;
  var hasRequiredDomTokenListPrototype;
  function requireDomTokenListPrototype() {
    if (hasRequiredDomTokenListPrototype) return domTokenListPrototype;
    hasRequiredDomTokenListPrototype = 1;
    var documentCreateElement2 = requireDocumentCreateElement();
    var classList = documentCreateElement2("span").classList;
    var DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;
    domTokenListPrototype = DOMTokenListPrototype === Object.prototype ? void 0 : DOMTokenListPrototype;
    return domTokenListPrototype;
  }
  var functionUncurryThisClause;
  var hasRequiredFunctionUncurryThisClause;
  function requireFunctionUncurryThisClause() {
    if (hasRequiredFunctionUncurryThisClause) return functionUncurryThisClause;
    hasRequiredFunctionUncurryThisClause = 1;
    var classofRaw2 = requireClassofRaw();
    var uncurryThis = requireFunctionUncurryThis();
    functionUncurryThisClause = function(fn) {
      if (classofRaw2(fn) === "Function") return uncurryThis(fn);
    };
    return functionUncurryThisClause;
  }
  var functionBindContext;
  var hasRequiredFunctionBindContext;
  function requireFunctionBindContext() {
    if (hasRequiredFunctionBindContext) return functionBindContext;
    hasRequiredFunctionBindContext = 1;
    var uncurryThis = requireFunctionUncurryThisClause();
    var aCallable2 = requireACallable();
    var NATIVE_BIND = requireFunctionBindNative();
    var bind = uncurryThis(uncurryThis.bind);
    functionBindContext = function(fn, that) {
      aCallable2(fn);
      return that === void 0 ? fn : NATIVE_BIND ? bind(fn, that) : function() {
        return fn.apply(that, arguments);
      };
    };
    return functionBindContext;
  }
  var arrayIteration;
  var hasRequiredArrayIteration;
  function requireArrayIteration() {
    if (hasRequiredArrayIteration) return arrayIteration;
    hasRequiredArrayIteration = 1;
    var bind = requireFunctionBindContext();
    var IndexedObject = requireIndexedObject();
    var toObject2 = requireToObject();
    var lengthOfArrayLike2 = requireLengthOfArrayLike();
    var arraySpeciesCreate2 = requireArraySpeciesCreate();
    var createProperty2 = requireCreateProperty();
    var createMethod = function(TYPE) {
      var IS_MAP = TYPE === 1;
      var IS_FILTER = TYPE === 2;
      var IS_SOME = TYPE === 3;
      var IS_EVERY = TYPE === 4;
      var IS_FIND_INDEX = TYPE === 6;
      var IS_FILTER_REJECT = TYPE === 7;
      var NO_HOLES = TYPE === 5 || IS_FIND_INDEX;
      return function($this, callbackfn, that) {
        var O = toObject2($this);
        var self2 = IndexedObject(O);
        var length = lengthOfArrayLike2(self2);
        var boundFunction = bind(callbackfn, that);
        var index = 0;
        var resIndex = 0;
        var target = IS_MAP ? arraySpeciesCreate2($this, length) : IS_FILTER || IS_FILTER_REJECT ? arraySpeciesCreate2($this, 0) : void 0;
        var value, result;
        for (; length > index; index++) if (NO_HOLES || index in self2) {
          value = self2[index];
          result = boundFunction(value, index, O);
          if (TYPE) {
            if (IS_MAP) createProperty2(target, index, result);
            else if (result) switch (TYPE) {
              case 3:
                return true;
              // some
              case 5:
                return value;
              // find
              case 6:
                return index;
              // findIndex
              case 2:
                createProperty2(target, resIndex++, value);
            }
            else switch (TYPE) {
              case 4:
                return false;
              // every
              case 7:
                createProperty2(target, resIndex++, value);
            }
          }
        }
        return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
      };
    };
    arrayIteration = {
      // `Array.prototype.forEach` method
      // https://tc39.es/ecma262/#sec-array.prototype.foreach
      forEach: createMethod(0),
      // `Array.prototype.map` method
      // https://tc39.es/ecma262/#sec-array.prototype.map
      map: createMethod(1),
      // `Array.prototype.filter` method
      // https://tc39.es/ecma262/#sec-array.prototype.filter
      filter: createMethod(2),
      // `Array.prototype.some` method
      // https://tc39.es/ecma262/#sec-array.prototype.some
      some: createMethod(3),
      // `Array.prototype.every` method
      // https://tc39.es/ecma262/#sec-array.prototype.every
      every: createMethod(4),
      // `Array.prototype.find` method
      // https://tc39.es/ecma262/#sec-array.prototype.find
      find: createMethod(5),
      // `Array.prototype.findIndex` method
      // https://tc39.es/ecma262/#sec-array.prototype.findIndex
      findIndex: createMethod(6),
      // `Array.prototype.filterReject` method
      // https://github.com/tc39/proposal-array-filtering
      filterReject: createMethod(7)
    };
    return arrayIteration;
  }
  var arrayMethodIsStrict;
  var hasRequiredArrayMethodIsStrict;
  function requireArrayMethodIsStrict() {
    if (hasRequiredArrayMethodIsStrict) return arrayMethodIsStrict;
    hasRequiredArrayMethodIsStrict = 1;
    var fails2 = requireFails();
    arrayMethodIsStrict = function(METHOD_NAME, argument) {
      var method = [][METHOD_NAME];
      return !!method && fails2(function() {
        method.call(null, argument || function() {
          return 1;
        }, 1);
      });
    };
    return arrayMethodIsStrict;
  }
  var arrayForEach;
  var hasRequiredArrayForEach;
  function requireArrayForEach() {
    if (hasRequiredArrayForEach) return arrayForEach;
    hasRequiredArrayForEach = 1;
    var $forEach = requireArrayIteration().forEach;
    var arrayMethodIsStrict2 = requireArrayMethodIsStrict();
    var STRICT_METHOD = arrayMethodIsStrict2("forEach");
    arrayForEach = !STRICT_METHOD ? function forEach(callbackfn) {
      return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0);
    } : [].forEach;
    return arrayForEach;
  }
  var hasRequiredWeb_domCollections_forEach;
  function requireWeb_domCollections_forEach() {
    if (hasRequiredWeb_domCollections_forEach) return web_domCollections_forEach;
    hasRequiredWeb_domCollections_forEach = 1;
    var globalThis2 = requireGlobalThis();
    var DOMIterables = requireDomIterables();
    var DOMTokenListPrototype = requireDomTokenListPrototype();
    var forEach = requireArrayForEach();
    var createNonEnumerableProperty2 = requireCreateNonEnumerableProperty();
    var handlePrototype = function(CollectionPrototype) {
      if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {
        createNonEnumerableProperty2(CollectionPrototype, "forEach", forEach);
      } catch (error) {
        CollectionPrototype.forEach = forEach;
      }
    };
    for (var COLLECTION_NAME in DOMIterables) {
      if (DOMIterables[COLLECTION_NAME]) {
        handlePrototype(globalThis2[COLLECTION_NAME] && globalThis2[COLLECTION_NAME].prototype);
      }
    }
    handlePrototype(DOMTokenListPrototype);
    return web_domCollections_forEach;
  }
  requireWeb_domCollections_forEach();
  /*!
   * el-table-infinite-scroll v3.0.8
   * (c) 2019-2025 yujinpan
   */
  function syncAttrs(sourceElem, targetElem, attrsKeys) {
    var value;
    attrsKeys.forEach(function(name) {
      value = sourceElem.getAttribute(name);
      if (value !== null) {
        targetElem.setAttribute(name, value);
      } else {
        targetElem.removeAttribute(name);
      }
    });
  }
  /*!
   * el-table-infinite-scroll v3.0.8
   * (c) 2019-2025 yujinpan
   */
  var msgTitle = "[el-table-infinite-scroll]: ";
  var ElTableInfiniteScroll$1 = {
    mounted: function mounted(el, binding, VNode, oldVNode) {
      var _useScrollElem = useScrollElem(el), scrollElem = _useScrollElem.scrollElem;
      scrollElem.style.overflowY = "auto";
      setTimeout(function() {
        if (!el.style.height) {
          scrollElem.style.height = "400px";
          console.warn("".concat(msgTitle, "el-table height required, otherwise will set scrollbar default height: 400px"));
        }
        syncOptions(el, scrollElem);
        ElementPlus.ElInfiniteScroll.mounted(scrollElem, binding, VNode, oldVNode);
      }, 0);
    },
    updated: function updated(el) {
      var _useScrollElem2 = useScrollElem(el), scrollElem = _useScrollElem2.scrollElem;
      syncOptions(el, scrollElem);
    },
    unmounted: function unmounted(el) {
      var _useScrollElem3 = useScrollElem(el), scrollElem = _useScrollElem3.scrollElem;
      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
        args[_key - 1] = arguments[_key];
      }
      ElementPlus.ElInfiniteScroll.unmounted.apply(ElementPlus.ElInfiniteScroll, [scrollElem].concat(args));
    }
  };
  function useScrollElem(el) {
    var _config$value;
    var config = ElementPlus.useGlobalConfig();
    var elTableScrollWrapperClass = ".".concat(((_config$value = config.value) === null || _config$value === void 0 ? void 0 : _config$value.namespace) || "el", "-scrollbar__wrap");
    var scrollElem = el.querySelector(elTableScrollWrapperClass);
    if (!scrollElem) {
      throw new Error("".concat(msgTitle).concat(elTableScrollWrapperClass, " element not found."));
    }
    return {
      scrollElem
    };
  }
  function syncOptions(sourceElem, targetElem) {
    syncAttrs(sourceElem, targetElem, ["infinite-scroll-disabled", "infinite-scroll-delay", "infinite-scroll-immediate", "infinite-scroll-distance"]);
    var name = "infinite-scroll-distance";
    var value = +(sourceElem.getAttribute(name) || 0);
    targetElem.setAttribute(name, (value < 1 ? 1 : value) + "");
  }
  /*!
   * el-table-infinite-scroll v3.0.8
   * (c) 2019-2025 yujinpan
   */
  var ElTableInfiniteScroll = Object.assign(ElTableInfiniteScroll$1, {
    install: function install(vue) {
      vue.directive("el-table-infinite-scroll", ElTableInfiniteScroll);
    }
  });
  const pinia = createPinia();
  const settings = useSettingsStore(pinia);
  const originalFetch = _unsafeWindow.fetch;
  var authorizationCache = null;
  var contextCache = null;
  var trueLoaded = false;
  var db = null;
  const checkingCommentIdSet = /* @__PURE__ */ new Set();
  const continuationWhitelist = /* @__PURE__ */ new Set();
  const hotCommentIdSet = /* @__PURE__ */ new Set();
  function getAuthorization() {
    return authorizationCache;
  }
  function getContext() {
    return contextCache;
  }
  function waitForElement(observeSelector, targetSelector) {
    return new Promise((resolve) => {
      const parent = document.querySelector(observeSelector);
      if (!parent) return;
      const found = parent.querySelector(targetSelector);
      if (found) {
        resolve(found);
        return;
      }
      const observer = new MutationObserver(() => {
        const el = parent.querySelector(targetSelector);
        if (el) {
          observer.disconnect();
          resolve(el);
        }
      });
      observer.observe(parent, { childList: true, subtree: true });
    });
  }
  async function findComment(commentRecord, isLogin = true) {
    let continuation;
    let requestUrl;
    if (commentRecord.webPageType == "WEB_PAGE_TYPE_WATCH") {
      let payload = {
        uField3: 6,
        commentAreaWrapper: {
          videoId: commentRecord.commentAreaInfo.videoId
        },
        mainCommentRequest: {
          sectionIdentifier: "comments-section",
          commentParameters: {
            videoId: commentRecord.commentAreaInfo.videoId,
            targetCommentId: commentRecord.commentId
          }
        }
      };
      let encoded = NextContinuation.encode(payload);
      continuation = u8ArrayToBase64(encoded.finish());
      requestUrl = "https://www.youtube.com/youtubei/v1/next?prettyPrint=false";
    } else if (commentRecord.webPageType == "WEB_PAGE_TYPE_BROWSE") {
      let payload = {
        description: "community",
        mainCommentRequest: {
          sectionIdentifier: "comments-section",
          commentParameters: {
            channelId: commentRecord.commentAreaInfo.channelId,
            postId: commentRecord.commentAreaInfo.postId,
            targetCommentId: commentRecord.commentId
          }
        }
      };
      let encoded = BrowserCommentListContinuation.encode(payload);
      let buffer = encoded.finish();
      continuation = u8ArrayToBase64(buffer);
      payload = {
        request: {
          description: "FEcomment_post_detail_page_web_top_level",
          continuationBase64: continuation
        }
      };
      encoded = BrowserContinuation.encode(payload);
      buffer = encoded.finish();
      continuation = u8ArrayToBase64(buffer);
      requestUrl = "https://www.youtube.com/youtubei/v1/browse?prettyPrint=false";
    } else {
      throw new Error("Unsupported webPageType : " + commentRecord.webPageType);
    }
    let data = {
      context: contextCache,
      continuation
    };
    let headers = {};
    if (isLogin) {
      headers.authorization = authorizationCache;
    }
    let options = {
      method: "POST",
      body: JSON.stringify(data),
      headers
    };
    let response = await (await originalFetch(requestUrl, options)).json();
    let loggedOut = response.responseContext.mainAppWebResponseContext.loggedOut;
    if (loggedOut == isLogin) {
      console.warn("登录状态不符,需要的:" + isLogin + " API返回的:" + !loggedOut);
    }
    if (!response.frameworkUpdates) {
      throw new Error("COMMENT_AREA_CLOSED");
    }
    let mutations = response.frameworkUpdates.entityBatchUpdate.mutations;
    for (let i = 0; i < mutations.length; i++) {
      let mutation = mutations[i];
      if (mutation.payload.commentEntityPayload) {
        let entity = mutation.payload.commentEntityPayload;
        let commentId = entity.properties.commentId;
        if (commentId == commentRecord.commentId) {
          let likeCount = parseInt(entity.toolbar.likeCountNotliked);
          likeCount = likeCount ? likeCount : 0;
          let replyCount = parseInt(entity.toolbar.replyCount);
          replyCount = replyCount ? replyCount : 0;
          return {
            content: entity.properties.content.content,
            commentId,
            likeCount,
            replyCount
          };
        }
      }
    }
  }
  async function insertComment() {
  }
  async function updateComment() {
  }
  async function selectComment() {
  }
  async function deleteComment() {
  }
  function appendHistory(commentRecord) {
    let histories = commentRecord.histories;
    let needPush = false;
    if (histories.length == 0) {
      needPush = true;
    } else {
      let lastHistory = histories[histories.length - 1];
      needPush = lastHistory.state != commentRecord.currentState || lastHistory.content != commentRecord.content || lastHistory.hotBan != commentRecord.hotBan;
    }
    if (needPush) {
      histories.push({
        time: commentRecord.updatedTime,
        content: commentRecord.content,
        state: commentRecord.currentState,
        hotBan: commentRecord.hotBan
      });
    }
  }
  function updateRecord(commentRecord, state, result) {
    commentRecord.updatedTime = Date.now();
    if (state) {
      commentRecord.currentState = state;
    }
    if (result) {
      commentRecord.likeCount = result.likeCount;
      commentRecord.replyCount = result.replyCount;
      commentRecord.content = result.content;
    }
    appendHistory(commentRecord);
    updateComment(commentRecord);
  }
  async function check(commentRecord) {
    let loggedOutResult = await findComment(commentRecord, false);
    if (loggedOutResult) {
      updateRecord(commentRecord, "NORMAL", loggedOutResult);
      return;
    }
    let loggedInResult = await findComment(commentRecord, true);
    if (loggedInResult) {
      updateRecord(commentRecord, "SHADOW_BAN", loggedInResult);
    } else {
      updateRecord(commentRecord, "DELETED");
    }
  }
  async function toCheck(commentRecord) {
    checkingCommentIdSet.add(commentRecord.commentId);
    let selector;
    let pathname = window.location.pathname;
    if (pathname.startsWith("/post") || pathname.startsWith("/channel")) {
      selector = "ytd-item-section-renderer#sections";
    } else {
      selector = "#comments";
    }
    let element = (await waitForElement(selector, `a[href='${commentRecord.url}']`)).parentNode.parentNode.parentNode.parentNode;
    let div = document.createElement("div");
    div.style.marginTop = "8px";
    div.id = "checker";
    element.append(div);
    let app = vue.createApp(CommentChecker);
    app.use(ElementPlus);
    app.provide("check", check);
    app.provide("hotBanCheck", hotBanCheck);
    app.provide("commentRecord", commentRecord);
    app.provide("interval", 5);
    app.provide("unsafeWindow", _unsafeWindow);
    app.provide("settings", settings);
    app.provide("onUnblock", (commentRecord2) => {
      checkingCommentIdSet.delete(commentRecord2.commentId);
    });
    app.provide("onClose", (commentRecord2) => {
      checkingCommentIdSet.delete(commentRecord2.commentId);
      console.log("评论检查完成", commentRecord2);
      div.remove();
    });
    app.mount(div);
  }
  function createCommentListRequest(commentRecord, isLatestSort) {
    let api;
    let continuation;
    let isReply = false;
    if (commentRecord.webPageType == "WEB_PAGE_TYPE_WATCH") {
      api = "https://www.youtube.com/youtubei/v1/next?prettyPrint=false";
      if (commentRecord.commentId.indexOf(".") != -1) {
        isReply = true;
        let rootCommentId = commentRecord.commentId.split(".")[0];
        continuation = createVideoReplyCommentListContinuation(
          commentRecord.commentAreaInfo.channelId,
          commentRecord.commentAreaInfo.videoId,
          rootCommentId
        );
      } else {
        continuation = createVideoRootCommentListContinuation(
          commentRecord.commentAreaInfo.channelId,
          commentRecord.commentAreaInfo.videoId,
          isLatestSort
        );
      }
    } else if (commentRecord.webPageType == "WEB_PAGE_TYPE_BROWSE") {
      api = "https://www.youtube.com/youtubei/v1/browse?prettyPrint=false";
      if (commentRecord.commentId.indexOf(".") != -1) {
        isReply = true;
        let rootCommentId = commentRecord.commentId.split(".")[0];
        continuation = createPostReplyCommentListContinuation(
          commentRecord.commentAreaInfo.channelId,
          commentRecord.commentAreaInfo.postId,
          rootCommentId
        );
      } else {
        continuation = createPostRootCommentListContinuation(
          commentRecord.commentAreaInfo.channelId,
          commentRecord.commentAreaInfo.postId,
          isLatestSort
        );
      }
    }
    return { api, continuation, isReply };
  }
  async function loadSubTreeMutations(api, mutations, onResponseReceivedEndpoints) {
    var _a;
    if (!onResponseReceivedEndpoints) return;
    for (const endpoint of onResponseReceivedEndpoints) {
      const items = (_a = endpoint.appendContinuationItemsAction) == null ? void 0 : _a.continuationItems;
      if (!items) continue;
      for (let item of items) {
        let replies = item.commentThreadRenderer.replies;
        if (!replies) continue;
        for (let th of replies.commentRepliesRenderer.subThreads) {
          for (let thh of th.commentThreadRenderer.replies.commentRepliesRenderer.subThreads) {
            let token = thh.continuationItemRenderer.button.buttonRenderer.command.continuationCommand.token;
            while (token) {
              let options = {
                method: "POST",
                body: JSON.stringify({
                  context: contextCache,
                  continuation: token
                })
              };
              let response = await (await originalFetch(api, options)).json();
              if (response.frameworkUpdates) {
                mutations.push(...response.frameworkUpdates.entityBatchUpdate.mutations);
              }
              await loadSubTreeMutations(api, mutations, response.onResponseReceivedEndpoints);
              token = findNextContinuation(response);
            }
          }
        }
      }
    }
  }
  async function hotBanCheck(commentRecord, observer, controller) {
    if (!observer) {
      observer = {
        onCountChange(c, p) {
        }
      };
    }
    if (!controller) {
      controller = {
        isCancelled: false
      };
    }
    let pageCpunt = 0;
    let commentCount = 0;
    let { api, continuation, isReply } = createCommentListRequest(commentRecord);
    while (continuation) {
      if (controller.isCancelled) {
        return false;
      }
      let data = {
        context: contextCache,
        continuation
      };
      let options = {
        method: "POST",
        body: JSON.stringify(data)
      };
      let response = await (await originalFetch(api, options)).json();
      pageCpunt++;
      if (!response.frameworkUpdates) {
        commentRecord.hotBan = true;
        updateRecord(commentRecord);
        return true;
      }
      let mutations = response.frameworkUpdates.entityBatchUpdate.mutations;
      if (isReply) {
        await loadSubTreeMutations(api, mutations, response.onResponseReceivedEndpoints);
      }
      for (let mutation of response.frameworkUpdates.entityBatchUpdate.mutations) {
        let entity = mutation.payload.commentEntityPayload;
        if (entity) {
          let commentId = entity.properties.commentId;
          commentCount++;
          observer.onCountChange(commentCount, pageCpunt);
          if (commentId == commentRecord.commentId) {
            commentRecord.hotBan = false;
            updateRecord(commentRecord);
            return true;
          }
        }
      }
      continuation = findNextContinuation(response);
    }
    commentRecord.hotBan = true;
    updateRecord(commentRecord);
    return true;
  }
  async function handlerYoutubei(request) {
    var _a;
    let requsetClone = await autoDecompressRequest(request.clone());
    let requestBody = await requsetClone.json();
    if (requestBody && requestBody.context) {
      contextCache = requestBody.context;
      if (!trueLoaded) {
        console.log("fetch已成功劫持");
        _GM_registerMenuCommand("✅ 脚本已完全加载");
        trueLoaded = true;
      }
    }
    if (request.url.startsWith("https://www.youtube.com/youtubei/v1/get_watch")) {
      let response = await originalFetch(request);
      if (response.status != 200) {
        return response;
      }
      let json = await response.clone().json();
      let btnUnlocked = false;
      try {
        btnUnlocked = fuckCoppa(json[1].watchNextResponse.contents.twoColumnWatchNextResults.results.results.contents[0].videoPrimaryInfoRenderer.videoActions.menuRenderer.flexibleItems);
      } catch (e) {
        console.error("解锁爱童TV收藏按钮失败", e);
      }
      if (btnUnlocked) {
        return new Response(JSON.stringify(json), {
          status: response.status,
          headers: response.headers
        });
      }
      return response;
    } else if (request.url.startsWith("https://www.youtube.com/youtubei/v1/comment/create_comment")) {
      let response = await originalFetch(request);
      if (response.status != 200) {
        return response;
      }
      let responseClone = response.clone();
      try {
        let json = await responseClone.json();
        if (json.frameworkUpdates.entityBatchUpdate.mutations.length == 1) {
          return response;
        }
        let entity = json.frameworkUpdates.entityBatchUpdate.mutations[0].payload.commentEntityPayload;
        let innertubeCommand = json.frameworkUpdates.entityBatchUpdate.mutations[1].payload.commentSurfaceEntityPayload.publishedTimeCommand.innertubeCommand;
        let webCommandMetadata = innertubeCommand.commandMetadata.webCommandMetadata;
        let webPageType = webCommandMetadata.webPageType;
        let url = webCommandMetadata.url;
        let commentAreaInfo = {};
        commentAreaInfo.channelId = findValueInSingleEntryArray(json.actions[0].runAttestationCommand.ids, "externalChannelId");
        if (webPageType == "WEB_PAGE_TYPE_WATCH") {
          commentAreaInfo.videoId = innertubeCommand.watchEndpoint.videoId;
        } else if (webPageType == "WEB_PAGE_TYPE_BROWSE") {
          commentAreaInfo.postId = createUrl(url).pathname.split("/")[2];
        }
        let author = entity.author;
        let properties = entity.properties;
        let content = properties.content.content;
        let recordedTime = Date.now();
        let commentRecord = {
          //评论ID
          commentId: properties.commentId,
          //@发送者
          displayName: author.displayName,
          //频道ID,类似UID
          channelId: author.channelId,
          //评论内容
          content,
          //webPageType 评论区类型 视频 or 帖子
          webPageType,
          //URL 点击可跳转“所要查看的评论” 例如 /watch?v=${视频ID}&lc=${评论ID}
          url,
          //评论区信息,视频{视频ID},帖子{频道ID,帖子ID}
          commentAreaInfo,
          //当前状态 默认从SHADOW_BAN开始,到NORMAL或DELETED
          currentState: "NOT_CHECK",
          //是否在热门排序中被禁止显示(搜索整个热门评论区来检查),前提条件currentState = "NORMAL",值:null | false | true
          //此状态不会因为修改评论内容而解除,但会因为修改评论内容而赋予
          hotBan: null,
          //历史记录,时间 内容 状态 是否热门屏蔽
          histories: [],
          //{ time: recordedTime, state: "SHADOW_BAN", content, hotBan: null }
          //点赞与回复数,不记录历史
          likeCount: 0,
          replyCount: 0,
          //记录的时间,用的是系统当前时间,约等于评论的发布时间,API里的publishedTime距离发布时间戳多久的Shit不是时间戳(PS:YouTube开放API可查询具体发布时间戳)
          recordedTime,
          //更新时间
          updatedTime: recordedTime,
          //是否是用户自己执行的删除?用于区分是被系统删的还是自己删除。state为"DELETED"时该属性为才有意义。(劫持删除评论请求时记录)
          isUserDelete: false
        };
        console.log(commentRecord);
        insertComment(commentRecord);
        console.log(createUrl(url).href);
        toCheck(commentRecord);
      } catch (err) {
        console.error(err);
        throw err;
      }
      return response;
    } else if (request.url.startsWith("https://www.youtube.com/youtubei/v1/comment/perform_comment_action")) {
      let actionInfo = CommentAction.decode(base64ToU8Array(requestBody.actions[0]));
      if (actionInfo.action == 6) {
        if (checkingCommentIdSet.has(actionInfo.commentId)) {
          alert("现在不能删除该评论,因为评论还未完成检查,请先完成检查!");
          const responseBody = {
            "error": {
              "code": 403,
              "message": "Can't delete comment now",
              "errors": [
                {
                  "message": "Can't delete comment now",
                  "domain": "global",
                  "reason": "forbidden"
                }
              ],
              "status": "FORBIDDEN"
            }
          };
          return new Response(JSON.stringify(responseBody), {
            status: 403,
            headers: {
              "Content-Type": "application/json"
            }
          });
        } else {
          let response = await originalFetch(request);
          let responseBody = await response.clone().json();
          if (responseBody.actions && responseBody.actions[0].removeCommentAction.actionResult.status == "STATUS_SUCCEEDED") {
            let commentRecord = await selectComment(actionInfo.commentId);
            if (commentRecord) {
              commentRecord.isUserDelete = true;
              updateRecord(commentRecord, "DELETED");
            }
          }
          return response;
        }
      }
    } else if (request.url.startsWith("https://www.youtube.com/youtubei/v1/comment/update_comment")) {
      let updateCommentParams = requestBody.updateCommentParams;
      let decodedParams = UpdateCommentParams.decode(base64ToU8Array(updateCommentParams));
      if (checkingCommentIdSet.has(decodedParams.commentId)) {
        alert("现在不能修改该评论,因为评论还未完成检查,请先完成检查!");
        const responseBody2 = {
          "error": {
            "code": 403,
            "message": "Can't edit comment now",
            "errors": [
              {
                "message": "Can't edit comment now",
                "domain": "global",
                "reason": "forbidden"
              }
            ],
            "status": "FORBIDDEN"
          }
        };
        return new Response(JSON.stringify(responseBody2), {
          status: 403,
          headers: {
            "Content-Type": "application/json"
          }
        });
      }
      let response = await originalFetch(request);
      let responseBody = await response.clone().json();
      if (responseBody.actions && responseBody.actions[0].updateCommentAction.actionResult.status == "STATUS_SUCCEEDED") {
        let commentRecord = await selectComment(decodedParams.commentId);
        if (commentRecord) {
          commentRecord.content = requestBody.commentText;
          commentRecord.currentState = "NOT_CHECK";
          commentRecord.hotBan = null;
          updateRecord(commentRecord);
        }
      }
      return response;
    } else if (request.url.startsWith("https://www.youtube.com/youtubei/v1/next") || request.url.startsWith("https://www.youtube.com/youtubei/v1/browse")) {
      let apiUrl = request.url;
      if (!settings.forceTimeSort) {
        return await originalFetch(request);
      }
      let continuation = requestBody.continuation;
      if (!continuation) {
        return await originalFetch(request);
      }
      let response;
      let hotSearchContinuation;
      if (!continuationWhitelist.has(requestBody.continuation)) {
        if (apiUrl.startsWith("https://www.youtube.com/youtubei/v1/next")) {
          let decodedNextContinuation = NextContinuation.decode(base64ToU8Array(continuation));
          if (!((_a = decodedNextContinuation.mainCommentRequest) == null ? void 0 : _a.commentReplyParameters)) {
            return await originalFetch(request);
          }
          requestBody.continuation = generateVideoAreaReqContinuation(decodedNextContinuation, 2);
          hotSearchContinuation = generateVideoAreaReqContinuation(decodedNextContinuation, 1);
        } else {
          let decodedBrowserContinuation = BrowserContinuation.decode(base64ToU8Array(continuation));
          if (decodedBrowserContinuation.request.description != "FEcomment_post_detail_page_web_replies_page") {
            return await originalFetch(request);
          }
          requestBody.continuation = generatePostAreaReqContinuation(decodedBrowserContinuation, 2);
          hotSearchContinuation = generatePostAreaReqContinuation(decodedBrowserContinuation, 1);
        }
        request = new Request(request.url, {
          method: request.method,
          headers: request.headers,
          body: JSON.stringify(requestBody)
        });
        response = await originalFetch(request);
        if (response.ok) {
          let responseJson = await response.clone().json();
          let nextContinuation = findNextContinuation(responseJson);
          if (nextContinuation) {
            continuationWhitelist.add(nextContinuation);
          }
          if (settings.showBlockedHotComments) {
            await loadAllHotReplyId(hotSearchContinuation, apiUrl);
            addHotBannedTip(responseJson);
            response = changeResponseBody(response, responseJson);
          }
        }
      } else {
        continuationWhitelist.delete(requestBody.continuation);
        response = await originalFetch(request);
        let responseJson = await response.clone().json();
        let nextContinuation = findNextContinuation(responseJson);
        if (nextContinuation) {
          continuationWhitelist.add(nextContinuation);
        }
        if (settings.showBlockedHotComments) {
          addHotBannedTip(responseJson);
          response = changeResponseBody(response, responseJson);
        }
      }
      return response;
    }
    return await originalFetch(request);
  }
  function generateVideoAreaReqContinuation(decodedNextContinuation, sortType) {
    decodedNextContinuation.mainCommentRequest.commentReplyParameters.sortParam.sortType = sortType;
    return u8ArrayToBase64(NextContinuation.encode(decodedNextContinuation).finish());
  }
  function generatePostAreaReqContinuation(decodedBrowserContinuation, sortType) {
    let decodedBrowserCommentListContinuation = BrowserCommentListContinuation.decode(base64ToU8Array(decodedBrowserContinuation.request.continuationBase64));
    decodedBrowserCommentListContinuation.mainCommentRequest.commentReplyParameters.sortParam.sortType = sortType;
    decodedBrowserContinuation.request.continuationBase64 = u8ArrayToBase64(
      BrowserCommentListContinuation.encode(decodedBrowserCommentListContinuation).finish()
    );
    return u8ArrayToBase64(BrowserContinuation.encode(decodedBrowserContinuation).finish());
  }
  async function loadAllHotReplyId(continuation, api) {
    let count = 0;
    while (continuation) {
      let data = {
        context: contextCache,
        continuation
      };
      let options = {
        method: "POST",
        body: JSON.stringify(data),
        headers: {
          authorization: authorizationCache
        }
      };
      let response;
      try {
        response = await (await originalFetch(api, options)).json();
      } catch (err) {
        return;
      }
      let mutations = response.frameworkUpdates.entityBatchUpdate.mutations;
      loadSubTreeMutations(api, mutations, response.onResponseReceivedEndpoints);
      for (let mutation of mutations) {
        if (mutation.payload.commentEntityPayload) {
          hotCommentIdSet.add(mutation.payload.commentEntityPayload.properties.commentId);
          count++;
        }
      }
      continuation = findNextContinuation(response);
    }
    console.log(`已获取 ${count} 个热门回复评论……`);
  }
  function addHotBannedTip(response) {
    if (!response.frameworkUpdates) {
      return;
    }
    for (let mutation of response.frameworkUpdates.entityBatchUpdate.mutations) {
      let entity = mutation.payload.commentEntityPayload;
      if (entity) {
        let properties = entity.properties;
        if (!hotCommentIdSet.has(properties.commentId)) {
          properties.publishedTime = properties.publishedTime + "(热门屏蔽的)";
        }
      }
    }
  }
  function changeResponseBody(originalResponse, bodyJson) {
    return new Response(JSON.stringify(bodyJson), {
      status: originalResponse.status,
      headers: originalResponse.headers
    });
  }
  const fetchProxy = function(resource, options) {
    if (typeof resource == "string") {
      return originalFetch(resource, options);
    }
    if (!resource.url.startsWith("https://www.youtube.com/youtubei/")) {
      return originalFetch(resource, options);
    }
    let auth = resource.headers.get("Authorization");
    if (auth) {
      authorizationCache = auth;
      if (resource.method != "POST") {
        return originalFetch(resource);
      } else {
        return handlerYoutubeiReq(resource);
      }
    }
    return originalFetch(resource, options);
  };
  async function handlerYoutubeiReq(resource) {
    try {
      return handlerYoutubei(resource);
    } catch (error) {
      console.error(error);
      throw error;
    }
  }
  try {
    _unsafeWindow.fetch = fetchProxy;
  } catch (err) {
    console.warn("替换 unsafeWindow.fetch 失败!相关信息:", err, Object.getOwnPropertyDescriptor(_unsafeWindow, "fetch"));
    if (confirm("fetch已被提前锁定,替换失败,YouTube发评反诈可能无法正常工作。\n你可以安装本项目的 Define property blocker 插件来反制锁定。\n\n点击“确定”前往项目地址,点击“取消”忽略。")) {
      window.location.href = "https://github.com/freedom-introvert/youtube-comment-censor-detector";
    }
  }
  const _createElement = Document.prototype.createElement;
  Document.prototype.createElement = function(tagName, ...args) {
    const el = _createElement.call(this, tagName, ...args);
    if (tagName.toLowerCase() === "iframe") {
      el.addEventListener("load", () => {
        var _a;
        try {
          const fetchFromIframe = (_a = el.contentWindow) == null ? void 0 : _a.fetch;
          if (fetchFromIframe) {
            el.contentWindow.fetch = fetchProxy;
            console.log("已替换iframe window的fetch", el);
          }
        } catch (e) {
          console.log("未替换该iframe的fetch", el, e);
        }
      });
    }
    return el;
  };
  function openDB() {
    return new Promise((resolve, reject) => {
      let request = indexedDB.open("YT-CCD", 2);
      request.onerror = (event) => {
        reject(event);
      };
      request.onsuccess = (event) => {
        console.log(event.target.result);
        resolve(event.target.result);
      };
      request.onupgradeneeded = (event) => {
        debugger;
        let db2 = event.target.result;
        let oldVersion = event.oldVersion;
        if (oldVersion == 0) {
          let comments = db2.createObjectStore("comments", { keyPath: "commentId" });
          comments.createIndex("recordedTime", "recordedTime", { unique: false });
          let hotBanCommentCollect = db2.createObjectStore("hotBanCommentCollect", { keyPath: "commentId" });
          hotBanCommentCollect.createIndex("recordedTime", "recordedTime", { unique: false });
        }
        switch (oldVersion) {
          case 1: {
            let hotBanCommentCollect = db2.createObjectStore("hotBanCommentCollect", { keyPath: "commentId" });
            hotBanCommentCollect.createIndex("recordedTime", "recordedTime", { unique: false });
          }
        }
      };
    });
  }
  async function init() {
    try {
      db = await openDB();
      insertComment = function(comment) {
        return new Promise((resolve, reject) => {
          let request = db.transaction("comments", "readwrite").objectStore("comments").add(comment);
          request.onsuccess = (event) => {
            resolve(event);
          };
          request.onerror = (event) => {
            reject(event.target.error);
          };
        });
      };
      updateComment = function(comment) {
        return new Promise((resolve, reject) => {
          let request = db.transaction("comments", "readwrite").objectStore("comments").put(vue.toRaw(comment));
          request.onsuccess = (event) => {
            resolve(event);
          };
          request.onerror = (event) => {
            reject(event.target);
          };
        });
      };
      selectComment = function(commentId) {
        return new Promise((resolve, reject) => {
          let request = db.transaction("comments").objectStore("comments").get(commentId);
          request.onsuccess = (event) => {
            resolve(request.result);
          };
          request.onerror = (event) => {
            reject(event);
          };
        });
      };
      deleteComment = function(commentId) {
        return new Promise((resolve, reject) => {
          if (checkingCommentIdSet.has(commentId)) {
            reject(new Error("checking-now"));
            return;
          }
          let request = db.transaction("comments", "readwrite").objectStore("comments").delete(commentId);
          request.onsuccess = (event) => {
            resolve(request.result);
          };
          request.onerror = (event) => {
            reject(event.target.error);
          };
        });
      };
    } catch (err) {
      console.log("indexedDB数据库打开失败,评论历史记录相关功能已禁用,错误信息:", err);
    }
    const menuListener = {
      onOpenHistory: () => {
        alert("脚本正在初始化,请稍后……");
      }
    };
    _GM_registerMenuCommand("🧾 历史评论记录", () => {
      menuListener.onOpenHistory();
    });
    _GM_registerMenuCommand("🔍 搜索热门屏蔽评论", () => {
      menuListener.onSearchHotBan();
    });
    _GM_registerMenuCommand("⭐ 热门屏蔽评论收藏", () => {
      menuListener.onOpenHotBanCollect();
    });
    _GM_registerMenuCommand("⚙️ 设置", () => {
      menuListener.onOpenSettings();
    });
    const div = document.createElement("div");
    div.id = "yt-ccd";
    div.style.position = "absolute";
    document.body.append(div);
    let app = vue.createApp(App);
    app.use(ElementPlus, { zIndex: 3e3, locale: zh_cn_default });
    app.use(ElTableInfiniteScroll);
    app.use(pinia);
    app.provide("menuListener", menuListener);
    app.provide("db", db);
    app.provide("check", check);
    app.provide("hotBanCheck", hotBanCheck);
    app.provide("deleteComment", deleteComment);
    app.provide("insertComment", insertComment);
    app.provide("updateComment", updateComment);
    app.provide("getAuthorization", getAuthorization);
    app.provide("getContext", getContext);
    app.provide("originalFetch", originalFetch);
    app.mount(div);
  }
  window.addEventListener("load", () => {
    init().then(() => {
      console.log("YouTube反诈加载完成");
    }).catch((err) => {
      console.error("YouTube反诈加载失败", err);
    });
  });
  async function autoDecompressRequest(request) {
    if (!["POST", "PUT", "PATCH"].includes(request.method) || !request.body) {
      return request;
    }
    try {
      const contentEncoding = request.headers.get("content-encoding");
      const isGzipHeader = contentEncoding && contentEncoding.toLowerCase().includes("gzip");
      const reader2 = request.clone().body.getReader();
      const { value } = await reader2.read();
      reader2.releaseLock();
      const isGzipMagic = value && value[0] === 31 && value[1] === 139;
      if (isGzipHeader || isGzipMagic) {
        const fullBuffer = await request.clone().arrayBuffer();
        const ds = new DecompressionStream("gzip");
        const decompressedStream = new Blob([fullBuffer]).stream().pipeThrough(ds);
        const decompressedText = await new Response(decompressedStream).text();
        const newHeaders = new Headers(request.headers);
        newHeaders.delete("Content-Encoding");
        newHeaders.delete("Content-Length");
        return new Request(request.url, {
          method: request.method,
          headers: newHeaders,
          body: decompressedText,
          // 继承原请求的所有关键属性
          referrer: request.referrer,
          referrerPolicy: request.referrerPolicy,
          mode: request.mode,
          credentials: request.credentials,
          cache: request.cache,
          redirect: request.redirect,
          integrity: request.integrity,
          keepalive: request.keepalive,
          signal: request.signal
        });
      }
    } catch (err) {
      console.warn("自动解压判断逻辑出错(可能是流已关闭或非压缩数据):", err);
    }
    return request;
  }
  let ytInitialData_;
  Object.defineProperty(_unsafeWindow, "ytInitialData", {
    configurable: true,
    enumerable: true,
    set(v) {
      try {
        if ("/watch" == createUrl().pathname) {
          fuckCoppa(v.contents.twoColumnWatchNextResults.results.results.contents[0].videoPrimaryInfoRenderer.videoActions.menuRenderer.flexibleItems);
        }
      } catch (e) {
        console.error("解锁爱童TV收藏按钮失败", e);
      }
      ytInitialData_ = v;
    },
    get() {
      return ytInitialData_;
    }
  });
  function fuckCoppa(flexibleItems) {
    if (!settings.unlockKidsVideoSaveButton) {
      return false;
    }
    let targetRenderer = null;
    for (let item of flexibleItems) {
      if (item.menuFlexibleItemRenderer.topLevelButton.buttonViewModel.iconName == "PLAYLIST_ADD") {
        targetRenderer = item.menuFlexibleItemRenderer;
        break;
      }
    }
    if (!targetRenderer) return false;
    if (targetRenderer.topLevelButton.buttonViewModel.onDisabledTap) {
      let buttonViewModel = targetRenderer.topLevelButton.buttonViewModel;
      delete buttonViewModel.state;
      delete buttonViewModel.onDisabledTap;
      let innertubeCommand;
      for (let command of buttonViewModel.onTap.serialCommand.commands) {
        if (command.innertubeCommand) {
          innertubeCommand = command.innertubeCommand;
          break;
        }
      }
      let encoded = GetPanelRequest.encode({
        params: {
          videoId: createUrl().searchParams.get("v"),
          uField5: 2
        }
      });
      let params = u8ArrayToBase64(encoded.finish());
      let showSheetCommand = {
        panelLoadingStrategy: {
          requestTemplate: {
            panelId: "PAadd_to_playlist",
            params
          },
          screenVe: 264491
        },
        contextualSheetPresentationConfig: {
          expandToFullWidth: true
        }
      };
      innertubeCommand.showSheetCommand = showSheetCommand;
      let serviceEndpoint = targetRenderer.menuItem.menuServiceItemRenderer.serviceEndpoint;
      delete serviceEndpoint.signalServiceEndpoint;
      serviceEndpoint.showSheetCommand = showSheetCommand;
      console.log("已解锁爱童TV的收藏按钮");
      return true;
    }
  }

})(Vue, ElementPlus);