UNPKG

wemy-monitoring

Version:

一个前端监控

3,706 lines 106 kB
var kt = Object.defineProperty;
var yt = (r, e, t) => e in r ? kt(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t;
var x = (r, e, t) => yt(r, typeof e != "symbol" ? e + "" : e, t);
var st = /* @__PURE__ */ ((r) => (r.version = "1.0.0", r))(st || {}), V = /* @__PURE__ */ ((r) => (r.FCP = "FCP", r.LCP = "LCP", r.INP = "INP", r.CLS = "CLS", r.NT = "navigationTiming", r.RF = "resource-flow", r.CD = "cache-data", r))(V || {}), P = /* @__PURE__ */ ((r) => (r.PI = "page-information", r.OI = "origin-information", r.RCR = "router-change-record", r.DBR = "dom-behavior-record", r.HT = "http-record", r))(P || {}), A = /* @__PURE__ */ ((r) => (r.JS = "js", r.RS = "resource", r.PM = "promise", r.HP = "http", r.CS = "cors", r))(A || {});
function Ee(r) {
  return r instanceof ErrorEvent ? r.message === "Script error." ? A.CS : A.JS : A.RS;
}
const te = (r) => window.btoa(r), Tt = /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i, Mt = 10;
function Et(r) {
  const e = r.match(Tt);
  if (!e) return {};
  const t = e[2], i = e[1] || "", s = parseInt(e[3], 10) || void 0, l = parseInt(e[4], 10) || void 0;
  return {
    fileName: t,
    functionName: i,
    row: s,
    col: l
  };
}
function Ge(r) {
  const { stack: e } = r;
  if (!e) return [];
  const t = [];
  for (const i of e.split(`
`).slice(1)) {
    const s = Et(i);
    s && t.push(s);
  }
  return t.slice(0, Mt);
}
function xt(r) {
  return r && r.__esModule && Object.prototype.hasOwnProperty.call(r, "default") ? r.default : r;
}
var re = { exports: {} }, Rt = re.exports, Je;
function At() {
  return Je || (Je = 1, function(r, e) {
    (function(t, i) {
      var s = "1.0.40", l = "", h = "?", m = "function", p = "undefined", S = "object", k = "string", F = "major", n = "model", d = "name", o = "type", c = "vendor", u = "version", L = "architecture", K = "console", b = "mobile", g = "tablet", C = "smarttv", q = "wearable", be = "embedded", ge = 500, ne = "Amazon", Q = "Apple", Oe = "ASUS", Le = "BlackBerry", oe = "Browser", ae = "Chrome", bt = "Edge", ce = "Firefox", Z = "Google", Ne = "Huawei", ve = "LG", Se = "Microsoft", _e = "Motorola", Y = "Opera", $ = "Samsung", Ie = "Sharp", de = "Sony", ke = "Xiaomi", ye = "Zebra", De = "Facebook", qe = "Chromium OS", He = "Mac OS", ze = " Browser", gt = function(v, y) {
        var w = {};
        for (var E in v)
          y[E] && y[E].length % 2 === 0 ? w[E] = y[E].concat(v[E]) : w[E] = v[E];
        return w;
      }, ue = function(v) {
        for (var y = {}, w = 0; w < v.length; w++)
          y[v[w].toUpperCase()] = v[w];
        return y;
      }, Ve = function(v, y) {
        return typeof v === k ? G(y).indexOf(G(v)) !== -1 : !1;
      }, G = function(v) {
        return v.toLowerCase();
      }, vt = function(v) {
        return typeof v === k ? v.replace(/[^\d\.]/g, l).split(".")[0] : i;
      }, Te = function(v, y) {
        if (typeof v === k)
          return v = v.replace(/^\s\s*/, l), typeof y === p ? v : v.substring(0, ge);
      }, ee = function(v, y) {
        for (var w = 0, E, H, _, T, f, I; w < y.length && !f; ) {
          var Me = y[w], We = y[w + 1];
          for (E = H = 0; E < Me.length && !f && Me[E]; )
            if (f = Me[E++].exec(v), f)
              for (_ = 0; _ < We.length; _++)
                I = f[++H], T = We[_], typeof T === S && T.length > 0 ? T.length === 2 ? typeof T[1] == m ? this[T[0]] = T[1].call(this, I) : this[T[0]] = T[1] : T.length === 3 ? typeof T[1] === m && !(T[1].exec && T[1].test) ? this[T[0]] = I ? T[1].call(this, I, T[2]) : i : this[T[0]] = I ? I.replace(T[1], T[2]) : i : T.length === 4 && (this[T[0]] = I ? T[3].call(this, I.replace(T[1], T[2])) : i) : this[T] = I || i;
          w += 2;
        }
      }, le = function(v, y) {
        for (var w in y)
          if (typeof y[w] === S && y[w].length > 0) {
            for (var E = 0; E < y[w].length; E++)
              if (Ve(y[w][E], v))
                return w === h ? i : w;
          } else if (Ve(y[w], v))
            return w === h ? i : w;
        return y.hasOwnProperty("*") ? y["*"] : v;
      }, St = {
        "1.0": "/8",
        "1.2": "/1",
        "1.3": "/3",
        "2.0": "/412",
        "2.0.2": "/416",
        "2.0.3": "/417",
        "2.0.4": "/419",
        "?": "/"
      }, Ue = {
        ME: "4.90",
        "NT 3.11": "NT3.51",
        "NT 4.0": "NT4.0",
        2e3: "NT 5.0",
        XP: ["NT 5.1", "NT 5.2"],
        Vista: "NT 6.0",
        7: "NT 6.1",
        8: "NT 6.2",
        "8.1": "NT 6.3",
        10: ["NT 6.4", "NT 10.0"],
        RT: "ARM"
      }, je = {
        browser: [
          [
            /\b(?:crmo|crios)\/([\w\.]+)/i
            // Chrome for Android/iOS
          ],
          [u, [d, "Chrome"]],
          [
            /edg(?:e|ios|a)?\/([\w\.]+)/i
            // Microsoft Edge
          ],
          [u, [d, "Edge"]],
          [
            // Presto based
            /(opera mini)\/([-\w\.]+)/i,
            // Opera Mini
            /(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,
            // Opera Mobi/Tablet
            /(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i
            // Opera
          ],
          [d, u],
          [
            /opios[\/ ]+([\w\.]+)/i
            // Opera mini on iphone >= 8.0
          ],
          [u, [d, Y + " Mini"]],
          [
            /\bop(?:rg)?x\/([\w\.]+)/i
            // Opera GX
          ],
          [u, [d, Y + " GX"]],
          [
            /\bopr\/([\w\.]+)/i
            // Opera Webkit
          ],
          [u, [d, Y]],
          [
            // Mixed
            /\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i
            // Baidu
          ],
          [u, [d, "Baidu"]],
          [
            /\b(?:mxbrowser|mxios|myie2)\/?([-\w\.]*)\b/i
            // Maxthon
          ],
          [u, [d, "Maxthon"]],
          [
            /(kindle)\/([\w\.]+)/i,
            // Kindle
            /(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\/ ]?([\w\.]*)/i,
            // Lunascape/Maxthon/Netfront/Jasmine/Blazer/Sleipnir
            // Trident based
            /(avant|iemobile|slim(?:browser|boat|jet))[\/ ]?([\d\.]*)/i,
            // Avant/IEMobile/SlimBrowser/SlimBoat/Slimjet
            /(?:ms|\()(ie) ([\w\.]+)/i,
            // Internet Explorer
            // Blink/Webkit/KHTML based                                         // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
            /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon)\/([-\w\.]+)/i,
            // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon
            /(heytap|ovi|115)browser\/([\d\.]+)/i,
            // HeyTap/Ovi/115
            /(weibo)__([\d\.]+)/i
            // Weibo
          ],
          [d, u],
          [
            /quark(?:pc)?\/([-\w\.]+)/i
            // Quark
          ],
          [u, [d, "Quark"]],
          [
            /\bddg\/([\w\.]+)/i
            // DuckDuckGo
          ],
          [u, [d, "DuckDuckGo"]],
          [
            /(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i
            // UCBrowser
          ],
          [u, [d, "UC" + oe]],
          [
            /microm.+\bqbcore\/([\w\.]+)/i,
            // WeChat Desktop for Windows Built-in Browser
            /\bqbcore\/([\w\.]+).+microm/i,
            /micromessenger\/([\w\.]+)/i
            // WeChat
          ],
          [u, [d, "WeChat"]],
          [
            /konqueror\/([\w\.]+)/i
            // Konqueror
          ],
          [u, [d, "Konqueror"]],
          [
            /trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i
            // IE11
          ],
          [u, [d, "IE"]],
          [
            /ya(?:search)?browser\/([\w\.]+)/i
            // Yandex
          ],
          [u, [d, "Yandex"]],
          [
            /slbrowser\/([\w\.]+)/i
            // Smart Lenovo Browser
          ],
          [u, [d, "Smart Lenovo " + oe]],
          [
            /(avast|avg)\/([\w\.]+)/i
            // Avast/AVG Secure Browser
          ],
          [[d, /(.+)/, "$1 Secure " + oe], u],
          [
            /\bfocus\/([\w\.]+)/i
            // Firefox Focus
          ],
          [u, [d, ce + " Focus"]],
          [
            /\bopt\/([\w\.]+)/i
            // Opera Touch
          ],
          [u, [d, Y + " Touch"]],
          [
            /coc_coc\w+\/([\w\.]+)/i
            // Coc Coc Browser
          ],
          [u, [d, "Coc Coc"]],
          [
            /dolfin\/([\w\.]+)/i
            // Dolphin
          ],
          [u, [d, "Dolphin"]],
          [
            /coast\/([\w\.]+)/i
            // Opera Coast
          ],
          [u, [d, Y + " Coast"]],
          [
            /miuibrowser\/([\w\.]+)/i
            // MIUI Browser
          ],
          [u, [d, "MIUI" + ze]],
          [
            /fxios\/([\w\.-]+)/i
            // Firefox for iOS
          ],
          [u, [d, ce]],
          [
            /\bqihoobrowser\/?([\w\.]*)/i
            // 360
          ],
          [u, [d, "360"]],
          [
            /\b(qq)\/([\w\.]+)/i
            // QQ
          ],
          [[d, /(.+)/, "$1Browser"], u],
          [
            /(oculus|sailfish|huawei|vivo|pico)browser\/([\w\.]+)/i
          ],
          [[d, /(.+)/, "$1" + ze], u],
          [
            // Oculus/Sailfish/HuaweiBrowser/VivoBrowser/PicoBrowser
            /samsungbrowser\/([\w\.]+)/i
            // Samsung Internet
          ],
          [u, [d, $ + " Internet"]],
          [
            /metasr[\/ ]?([\d\.]+)/i
            // Sogou Explorer
          ],
          [u, [d, "Sogou Explorer"]],
          [
            /(sogou)mo\w+\/([\d\.]+)/i
            // Sogou Mobile
          ],
          [[d, "Sogou Mobile"], u],
          [
            /(electron)\/([\w\.]+) safari/i,
            // Electron-based App
            /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,
            // Tesla
            /m?(qqbrowser|2345(?=browser|chrome|explorer))\w*[\/ ]?v?([\w\.]+)/i
            // QQ/2345
          ],
          [d, u],
          [
            /(lbbrowser|rekonq)/i,
            // LieBao Browser/Rekonq
            /\[(linkedin)app\]/i
            // LinkedIn App for iOS & Android
          ],
          [d],
          [
            /ome\/([\w\.]+) \w* ?(iron) saf/i,
            // Iron
            /ome\/([\w\.]+).+qihu (360)[es]e/i
            // 360
          ],
          [u, d],
          [
            // WebView
            /((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i
            // Facebook App for iOS & Android
          ],
          [[d, De], u],
          [
            /(Klarna)\/([\w\.]+)/i,
            // Klarna Shopping Browser for iOS & Android
            /(kakao(?:talk|story))[\/ ]([\w\.]+)/i,
            // Kakao App
            /(naver)\(.*?(\d+\.[\w\.]+).*\)/i,
            // Naver InApp
            /safari (line)\/([\w\.]+)/i,
            // Line App for iOS
            /\b(line)\/([\w\.]+)\/iab/i,
            // Line App for Android
            /(alipay)client\/([\w\.]+)/i,
            // Alipay
            /(twitter)(?:and| f.+e\/([\w\.]+))/i,
            // Twitter
            /(chromium|instagram|snapchat)[\/ ]([-\w\.]+)/i
            // Chromium/Instagram/Snapchat
          ],
          [d, u],
          [
            /\bgsa\/([\w\.]+) .*safari\//i
            // Google Search Appliance on iOS
          ],
          [u, [d, "GSA"]],
          [
            /musical_ly(?:.+app_?version\/|_)([\w\.]+)/i
            // TikTok
          ],
          [u, [d, "TikTok"]],
          [
            /headlesschrome(?:\/([\w\.]+)| )/i
            // Chrome Headless
          ],
          [u, [d, ae + " Headless"]],
          [
            / wv\).+(chrome)\/([\w\.]+)/i
            // Chrome WebView
          ],
          [[d, ae + " WebView"], u],
          [
            /droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i
            // Android Browser
          ],
          [u, [d, "Android " + oe]],
          [
            /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i
            // Chrome/OmniWeb/Arora/Tizen/Nokia
          ],
          [d, u],
          [
            /version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i
            // Mobile Safari
          ],
          [u, [d, "Mobile Safari"]],
          [
            /version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i
            // Safari & Safari Mobile
          ],
          [u, d],
          [
            /webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i
            // Safari < 3.0
          ],
          [d, [u, le, St]],
          [
            /(webkit|khtml)\/([\w\.]+)/i
          ],
          [d, u],
          [
            // Gecko based
            /(navigator|netscape\d?)\/([-\w\.]+)/i
            // Netscape
          ],
          [[d, "Netscape"], u],
          [
            /(wolvic|librewolf)\/([\w\.]+)/i
            // Wolvic/LibreWolf
          ],
          [d, u],
          [
            /mobile vr; rv:([\w\.]+)\).+firefox/i
            // Firefox Reality
          ],
          [u, [d, ce + " Reality"]],
          [
            /ekiohf.+(flow)\/([\w\.]+)/i,
            // Flow
            /(swiftfox)/i,
            // Swiftfox
            /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\/ ]?([\w\.\+]+)/i,
            // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
            /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,
            // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
            /(firefox)\/([\w\.]+)/i,
            // Other Firefox-based
            /(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,
            // Mozilla
            // Other
            /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
            // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser
            /(links) \(([\w\.]+)/i
            // Links
          ],
          [d, [u, /_/g, "."]],
          [
            /(cobalt)\/([\w\.]+)/i
            // Cobalt
          ],
          [d, [u, /master.|lts./, ""]]
        ],
        cpu: [
          [
            /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i
            // AMD64 (x64)
          ],
          [[L, "amd64"]],
          [
            /(ia32(?=;))/i
            // IA32 (quicktime)
          ],
          [[L, G]],
          [
            /((?:i[346]|x)86)[;\)]/i
            // IA32 (x86)
          ],
          [[L, "ia32"]],
          [
            /\b(aarch64|arm(v?8e?l?|_?64))\b/i
            // ARM64
          ],
          [[L, "arm64"]],
          [
            /\b(arm(?:v[67])?ht?n?[fl]p?)\b/i
            // ARMHF
          ],
          [[L, "armhf"]],
          [
            // PocketPC mistakenly identified as PowerPC
            /windows (ce|mobile); ppc;/i
          ],
          [[L, "arm"]],
          [
            /((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i
            // PowerPC
          ],
          [[L, /ower/, l, G]],
          [
            /(sun4\w)[;\)]/i
            // SPARC
          ],
          [[L, "sparc"]],
          [
            /((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i
            // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
          ],
          [[L, G]]
        ],
        device: [
          [
            //////////////////////////
            // MOBILES & TABLETS
            /////////////////////////
            // Samsung
            /\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i
          ],
          [n, [c, $], [o, g]],
          [
            /\b((?:s[cgp]h|gt|sm)-(?![lr])\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
            /samsung[- ]((?!sm-[lr])[-\w]+)/i,
            /sec-(sgh\w+)/i
          ],
          [n, [c, $], [o, b]],
          [
            // Apple
            /(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i
            // iPod/iPhone
          ],
          [n, [c, Q], [o, b]],
          [
            /\((ipad);[-\w\),; ]+apple/i,
            // iPad
            /applecoremedia\/[\w\.]+ \((ipad)/i,
            /\b(ipad)\d\d?,\d\d?[;\]].+ios/i
          ],
          [n, [c, Q], [o, g]],
          [
            /(macintosh);/i
          ],
          [n, [c, Q]],
          [
            // Sharp
            /\b(sh-?[altvz]?\d\d[a-ekm]?)/i
          ],
          [n, [c, Ie], [o, b]],
          [
            // Honor
            /(?:honor)([-\w ]+)[;\)]/i
          ],
          [n, [c, "Honor"], [o, b]],
          [
            // Huawei
            /\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i
          ],
          [n, [c, Ne], [o, g]],
          [
            /(?:huawei)([-\w ]+)[;\)]/i,
            /\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i
          ],
          [n, [c, Ne], [o, b]],
          [
            // Xiaomi
            /\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i,
            // Xiaomi POCO
            /\b; (\w+) build\/hm\1/i,
            // Xiaomi Hongmi 'numeric' models
            /\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,
            // Xiaomi Hongmi
            /\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,
            // Xiaomi Redmi
            /oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i,
            // Xiaomi Redmi 'numeric' models
            /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\))/i
            // Xiaomi Mi
          ],
          [[n, /_/g, " "], [c, ke], [o, b]],
          [
            /oid[^\)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i,
            // Redmi Pad
            /\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i
            // Mi Pad tablets
          ],
          [[n, /_/g, " "], [c, ke], [o, g]],
          [
            // OPPO
            /; (\w+) bui.+ oppo/i,
            /\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i
          ],
          [n, [c, "OPPO"], [o, b]],
          [
            /\b(opd2\d{3}a?) bui/i
          ],
          [n, [c, "OPPO"], [o, g]],
          [
            // Vivo
            /vivo (\w+)(?: bui|\))/i,
            /\b(v[12]\d{3}\w?[at])(?: bui|;)/i
          ],
          [n, [c, "Vivo"], [o, b]],
          [
            // Realme
            /\b(rmx[1-3]\d{3})(?: bui|;|\))/i
          ],
          [n, [c, "Realme"], [o, b]],
          [
            // Motorola
            /\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
            /\bmot(?:orola)?[- ](\w*)/i,
            /((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i
          ],
          [n, [c, _e], [o, b]],
          [
            /\b(mz60\d|xoom[2 ]{0,2}) build\//i
          ],
          [n, [c, _e], [o, g]],
          [
            // LG
            /((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
          ],
          [n, [c, ve], [o, g]],
          [
            /(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
            /\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,
            /\blg-?([\d\w]+) bui/i
          ],
          [n, [c, ve], [o, b]],
          [
            // Lenovo
            /(ideatab[-\w ]+)/i,
            /lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i
          ],
          [n, [c, "Lenovo"], [o, g]],
          [
            // Nokia
            /(?:maemo|nokia).*(n900|lumia \d+)/i,
            /nokia[-_ ]?([-\w\.]*)/i
          ],
          [[n, /_/g, " "], [c, "Nokia"], [o, b]],
          [
            // Google
            /(pixel c)\b/i
            // Google Pixel C
          ],
          [n, [c, Z], [o, g]],
          [
            /droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i
            // Google Pixel
          ],
          [n, [c, Z], [o, b]],
          [
            // Sony
            /droid.+; (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i
          ],
          [n, [c, de], [o, b]],
          [
            /sony tablet [ps]/i,
            /\b(?:sony)?sgp\w+(?: bui|\))/i
          ],
          [[n, "Xperia Tablet"], [c, de], [o, g]],
          [
            // OnePlus
            / (kb2005|in20[12]5|be20[12][59])\b/i,
            /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i
          ],
          [n, [c, "OnePlus"], [o, b]],
          [
            // Amazon
            /(alexa)webm/i,
            /(kf[a-z]{2}wi|aeo(?!bc)\w\w)( bui|\))/i,
            // Kindle Fire without Silk / Echo Show
            /(kf[a-z]+)( bui|\)).+silk\//i
            // Kindle Fire HD
          ],
          [n, [c, ne], [o, g]],
          [
            /((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i
            // Fire Phone
          ],
          [[n, /(.+)/g, "Fire Phone $1"], [c, ne], [o, b]],
          [
            // BlackBerry
            /(playbook);[-\w\),; ]+(rim)/i
            // BlackBerry PlayBook
          ],
          [n, c, [o, g]],
          [
            /\b((?:bb[a-f]|st[hv])100-\d)/i,
            /\(bb10; (\w+)/i
            // BlackBerry 10
          ],
          [n, [c, Le], [o, b]],
          [
            // Asus
            /(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i
          ],
          [n, [c, Oe], [o, g]],
          [
            / (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i
          ],
          [n, [c, Oe], [o, b]],
          [
            // HTC
            /(nexus 9)/i
            // HTC Nexus 9
          ],
          [n, [c, "HTC"], [o, g]],
          [
            /(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,
            // HTC
            // ZTE
            /(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,
            /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i
            // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
          ],
          [c, [n, /_/g, " "], [o, b]],
          [
            // TCL
            /droid [\w\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])\w*(\)| bui)/i
          ],
          [n, [c, "TCL"], [o, g]],
          [
            // itel
            /(itel) ((\w+))/i
          ],
          [[c, G], n, [o, le, { tablet: ["p10001l", "w7001"], "*": "mobile" }]],
          [
            // Acer
            /droid.+; ([ab][1-7]-?[0178a]\d\d?)/i
          ],
          [n, [c, "Acer"], [o, g]],
          [
            // Meizu
            /droid.+; (m[1-5] note) bui/i,
            /\bmz-([-\w]{2,})/i
          ],
          [n, [c, "Meizu"], [o, b]],
          [
            // Ulefone
            /; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i
          ],
          [n, [c, "Ulefone"], [o, b]],
          [
            // Energizer
            /; (energy ?\w+)(?: bui|\))/i,
            /; energizer ([\w ]+)(?: bui|\))/i
          ],
          [n, [c, "Energizer"], [o, b]],
          [
            // Cat
            /; cat (b35);/i,
            /; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\))/i
          ],
          [n, [c, "Cat"], [o, b]],
          [
            // Smartfren
            /((?:new )?andromax[\w- ]+)(?: bui|\))/i
          ],
          [n, [c, "Smartfren"], [o, b]],
          [
            // Nothing
            /droid.+; (a(?:015|06[35]|142p?))/i
          ],
          [n, [c, "Nothing"], [o, b]],
          [
            // MIXED
            /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
            // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Infinix/Tecno/Micromax/Advan
            /; (imo) ((?!tab)[\w ]+?)(?: bui|\))/i,
            // IMO
            /(hp) ([\w ]+\w)/i,
            // HP iPAQ
            /(asus)-?(\w+)/i,
            // Asus
            /(microsoft); (lumia[\w ]+)/i,
            // Microsoft Lumia
            /(lenovo)[-_ ]?([-\w]+)/i,
            // Lenovo
            /(jolla)/i,
            // Jolla
            /(oppo) ?([\w ]+) bui/i
            // OPPO
          ],
          [c, n, [o, b]],
          [
            /(imo) (tab \w+)/i,
            // IMO
            /(kobo)\s(ereader|touch)/i,
            // Kobo
            /(archos) (gamepad2?)/i,
            // Archos
            /(hp).+(touchpad(?!.+tablet)|tablet)/i,
            // HP TouchPad
            /(kindle)\/([\w\.]+)/i,
            // Kindle
            /(nook)[\w ]+build\/(\w+)/i,
            // Nook
            /(dell) (strea[kpr\d ]*[\dko])/i,
            // Dell Streak
            /(le[- ]+pan)[- ]+(\w{1,9}) bui/i,
            // Le Pan Tablets
            /(trinity)[- ]*(t\d{3}) bui/i,
            // Trinity Tablets
            /(gigaset)[- ]+(q\w{1,9}) bui/i,
            // Gigaset Tablets
            /(vodafone) ([\w ]+)(?:\)| bui)/i
            // Vodafone
          ],
          [c, n, [o, g]],
          [
            /(surface duo)/i
            // Surface Duo
          ],
          [n, [c, Se], [o, g]],
          [
            /droid [\d\.]+; (fp\du?)(?: b|\))/i
            // Fairphone
          ],
          [n, [c, "Fairphone"], [o, b]],
          [
            /(u304aa)/i
            // AT&T
          ],
          [n, [c, "AT&T"], [o, b]],
          [
            /\bsie-(\w*)/i
            // Siemens
          ],
          [n, [c, "Siemens"], [o, b]],
          [
            /\b(rct\w+) b/i
            // RCA Tablets
          ],
          [n, [c, "RCA"], [o, g]],
          [
            /\b(venue[\d ]{2,7}) b/i
            // Dell Venue Tablets
          ],
          [n, [c, "Dell"], [o, g]],
          [
            /\b(q(?:mv|ta)\w+) b/i
            // Verizon Tablet
          ],
          [n, [c, "Verizon"], [o, g]],
          [
            /\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i
            // Barnes & Noble Tablet
          ],
          [n, [c, "Barnes & Noble"], [o, g]],
          [
            /\b(tm\d{3}\w+) b/i
          ],
          [n, [c, "NuVision"], [o, g]],
          [
            /\b(k88) b/i
            // ZTE K Series Tablet
          ],
          [n, [c, "ZTE"], [o, g]],
          [
            /\b(nx\d{3}j) b/i
            // ZTE Nubia
          ],
          [n, [c, "ZTE"], [o, b]],
          [
            /\b(gen\d{3}) b.+49h/i
            // Swiss GEN Mobile
          ],
          [n, [c, "Swiss"], [o, b]],
          [
            /\b(zur\d{3}) b/i
            // Swiss ZUR Tablet
          ],
          [n, [c, "Swiss"], [o, g]],
          [
            /\b((zeki)?tb.*\b) b/i
            // Zeki Tablets
          ],
          [n, [c, "Zeki"], [o, g]],
          [
            /\b([yr]\d{2}) b/i,
            /\b(dragon[- ]+touch |dt)(\w{5}) b/i
            // Dragon Touch Tablet
          ],
          [[c, "Dragon Touch"], n, [o, g]],
          [
            /\b(ns-?\w{0,9}) b/i
            // Insignia Tablets
          ],
          [n, [c, "Insignia"], [o, g]],
          [
            /\b((nxa|next)-?\w{0,9}) b/i
            // NextBook Tablets
          ],
          [n, [c, "NextBook"], [o, g]],
          [
            /\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i
            // Voice Xtreme Phones
          ],
          [[c, "Voice"], n, [o, b]],
          [
            /\b(lvtel\-)?(v1[12]) b/i
            // LvTel Phones
          ],
          [[c, "LvTel"], n, [o, b]],
          [
            /\b(ph-1) /i
            // Essential PH-1
          ],
          [n, [c, "Essential"], [o, b]],
          [
            /\b(v(100md|700na|7011|917g).*\b) b/i
            // Envizen Tablets
          ],
          [n, [c, "Envizen"], [o, g]],
          [
            /\b(trio[-\w\. ]+) b/i
            // MachSpeed Tablets
          ],
          [n, [c, "MachSpeed"], [o, g]],
          [
            /\btu_(1491) b/i
            // Rotor Tablets
          ],
          [n, [c, "Rotor"], [o, g]],
          [
            /(shield[\w ]+) b/i
            // Nvidia Shield Tablets
          ],
          [n, [c, "Nvidia"], [o, g]],
          [
            /(sprint) (\w+)/i
            // Sprint Phones
          ],
          [c, n, [o, b]],
          [
            /(kin\.[onetw]{3})/i
            // Microsoft Kin
          ],
          [[n, /\./g, " "], [c, Se], [o, b]],
          [
            /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i
            // Zebra
          ],
          [n, [c, ye], [o, g]],
          [
            /droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i
          ],
          [n, [c, ye], [o, b]],
          [
            ///////////////////
            // SMARTTVS
            ///////////////////
            /smart-tv.+(samsung)/i
            // Samsung
          ],
          [c, [o, C]],
          [
            /hbbtv.+maple;(\d+)/i
          ],
          [[n, /^/, "SmartTV"], [c, $], [o, C]],
          [
            /(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i
            // LG SmartTV
          ],
          [[c, ve], [o, C]],
          [
            /(apple) ?tv/i
            // Apple TV
          ],
          [c, [n, Q + " TV"], [o, C]],
          [
            /crkey/i
            // Google Chromecast
          ],
          [[n, ae + "cast"], [c, Z], [o, C]],
          [
            /droid.+aft(\w+)( bui|\))/i
            // Fire TV
          ],
          [n, [c, ne], [o, C]],
          [
            /\(dtv[\);].+(aquos)/i,
            /(aquos-tv[\w ]+)\)/i
            // Sharp
          ],
          [n, [c, Ie], [o, C]],
          [
            /(bravia[\w ]+)( bui|\))/i
            // Sony
          ],
          [n, [c, de], [o, C]],
          [
            /(mitv-\w{5}) bui/i
            // Xiaomi
          ],
          [n, [c, ke], [o, C]],
          [
            /Hbbtv.*(technisat) (.*);/i
            // TechniSAT
          ],
          [c, n, [o, C]],
          [
            /\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,
            // Roku
            /hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i
            // HbbTV devices
          ],
          [[c, Te], [n, Te], [o, C]],
          [
            /\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i
            // SmartTV from Unidentified Vendors
          ],
          [[o, C]],
          [
            ///////////////////
            // CONSOLES
            ///////////////////
            /(ouya)/i,
            // Ouya
            /(nintendo) ([wids3utch]+)/i
            // Nintendo
          ],
          [c, n, [o, K]],
          [
            /droid.+; (shield) bui/i
            // Nvidia
          ],
          [n, [c, "Nvidia"], [o, K]],
          [
            /(playstation [345portablevi]+)/i
            // Playstation
          ],
          [n, [c, de], [o, K]],
          [
            /\b(xbox(?: one)?(?!; xbox))[\); ]/i
            // Microsoft Xbox
          ],
          [n, [c, Se], [o, K]],
          [
            ///////////////////
            // WEARABLES
            ///////////////////
            /\b(sm-[lr]\d\d[05][fnuw]?s?)\b/i
            // Samsung Galaxy Watch
          ],
          [n, [c, $], [o, q]],
          [
            /((pebble))app/i
            // Pebble
          ],
          [c, n, [o, q]],
          [
            /(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i
            // Apple Watch
          ],
          [n, [c, Q], [o, q]],
          [
            /droid.+; (glass) \d/i
            // Google Glass
          ],
          [n, [c, Z], [o, q]],
          [
            /droid.+; (wt63?0{2,3})\)/i
          ],
          [n, [c, ye], [o, q]],
          [
            ///////////////////
            // XR
            ///////////////////
            /droid.+; (glass) \d/i
            // Google Glass
          ],
          [n, [c, Z], [o, q]],
          [
            /(pico) (4|neo3(?: link|pro)?)/i
            // Pico
          ],
          [c, n, [o, q]],
          [
            /; (quest( \d| pro)?)/i
            // Oculus Quest
          ],
          [n, [c, De], [o, q]],
          [
            ///////////////////
            // EMBEDDED
            ///////////////////
            /(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i
            // Tesla
          ],
          [c, [o, be]],
          [
            /(aeobc)\b/i
            // Echo Dot
          ],
          [n, [c, ne], [o, be]],
          [
            ////////////////////
            // MIXED (GENERIC)
            ///////////////////
            /droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+? mobile safari/i
            // Android Phones from Unidentified Vendors
          ],
          [n, [o, b]],
          [
            /droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i
            // Android Tablets from Unidentified Vendors
          ],
          [n, [o, g]],
          [
            /\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i
            // Unidentifiable Tablet
          ],
          [[o, g]],
          [
            /(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i
            // Unidentifiable Mobile
          ],
          [[o, b]],
          [
            /(android[-\w\. ]{0,9});.+buil/i
            // Generic Android Device
          ],
          [n, [c, "Generic"]]
        ],
        engine: [
          [
            /windows.+ edge\/([\w\.]+)/i
            // EdgeHTML
          ],
          [u, [d, bt + "HTML"]],
          [
            /(arkweb)\/([\w\.]+)/i
            // ArkWeb
          ],
          [d, u],
          [
            /webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i
            // Blink
          ],
          [u, [d, "Blink"]],
          [
            /(presto)\/([\w\.]+)/i,
            // Presto
            /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\/([\w\.]+)/i,
            // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna/Servo
            /ekioh(flow)\/([\w\.]+)/i,
            // Flow
            /(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,
            // KHTML/Tasman/Links
            /(icab)[\/ ]([23]\.[\d\.]+)/i,
            // iCab
            /\b(libweb)/i
          ],
          [d, u],
          [
            /rv\:([\w\.]{1,9})\b.+(gecko)/i
            // Gecko
          ],
          [u, d]
        ],
        os: [
          [
            // Windows
            /microsoft (windows) (vista|xp)/i
            // Windows (iTunes)
          ],
          [d, u],
          [
            /(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i
            // Windows Phone
          ],
          [d, [u, le, Ue]],
          [
            /windows nt 6\.2; (arm)/i,
            // Windows RT
            /windows[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i,
            /(?:win(?=3|9|n)|win 9x )([nt\d\.]+)/i
          ],
          [[u, le, Ue], [d, "Windows"]],
          [
            // iOS/macOS
            /ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,
            // iOS
            /(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i,
            /cfnetwork\/.+darwin/i
          ],
          [[u, /_/g, "."], [d, "iOS"]],
          [
            /(mac os x) ?([\w\. ]*)/i,
            /(macintosh|mac_powerpc\b)(?!.+haiku)/i
            // Mac OS
          ],
          [[d, He], [u, /_/g, "."]],
          [
            // Mobile OSes
            /droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i
            // Android-x86/HarmonyOS
          ],
          [u, d],
          [
            // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS/OpenHarmony
            /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish|openharmony)[-\/ ]?([\w\.]*)/i,
            /(blackberry)\w*\/([\w\.]*)/i,
            // Blackberry
            /(tizen|kaios)[\/ ]([\w\.]+)/i,
            // Tizen/KaiOS
            /\((series40);/i
            // Series 40
          ],
          [d, u],
          [
            /\(bb(10);/i
            // BlackBerry 10
          ],
          [u, [d, Le]],
          [
            /(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i
            // Symbian
          ],
          [u, [d, "Symbian"]],
          [
            /mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i
            // Firefox OS
          ],
          [u, [d, ce + " OS"]],
          [
            /web0s;.+rt(tv)/i,
            /\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i
            // WebOS
          ],
          [u, [d, "webOS"]],
          [
            /watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i
            // watchOS
          ],
          [u, [d, "watchOS"]],
          [
            // Google Chromecast
            /crkey\/([\d\.]+)/i
            // Google Chromecast
          ],
          [u, [d, ae + "cast"]],
          [
            /(cros) [\w]+(?:\)| ([\w\.]+)\b)/i
            // Chromium OS
          ],
          [[d, qe], u],
          [
            // Smart TVs
            /panasonic;(viera)/i,
            // Panasonic Viera
            /(netrange)mmh/i,
            // Netrange
            /(nettv)\/(\d+\.[\w\.]+)/i,
            // NetTV
            // Console
            /(nintendo|playstation) ([wids345portablevuch]+)/i,
            // Nintendo/Playstation
            /(xbox); +xbox ([^\);]+)/i,
            // Microsoft Xbox (360, One, X, S, Series X, Series S)
            // Other
            /\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,
            // Joli/Palm
            /(mint)[\/\(\) ]?(\w*)/i,
            // Mint
            /(mageia|vectorlinux)[; ]/i,
            // Mageia/VectorLinux
            /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,
            // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire
            /(hurd|linux) ?([\w\.]*)/i,
            // Hurd/Linux
            /(gnu) ?([\w\.]*)/i,
            // GNU
            /\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,
            // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly
            /(haiku) (\w+)/i
            // Haiku
          ],
          [d, u],
          [
            /(sunos) ?([\w\.\d]*)/i
            // Solaris
          ],
          [[d, "Solaris"], u],
          [
            /((?:open)?solaris)[-\/ ]?([\w\.]*)/i,
            // Solaris
            /(aix) ((\d)(?=\.|\)| )[\w\.])*/i,
            // AIX
            /\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,
            // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS
            /(unix) ?([\w\.]*)/i
            // UNIX
          ],
          [d, u]
        ]
      }, N = function(v, y) {
        if (typeof v === S && (y = v, v = i), !(this instanceof N))
          return new N(v, y).getResult();
        var w = typeof t !== p && t.navigator ? t.navigator : i, E = v || (w && w.userAgent ? w.userAgent : l), H = w && w.userAgentData ? w.userAgentData : i, _ = y ? gt(je, y) : je, T = w && w.userAgent == E;
        return this.getBrowser = function() {
          var f = {};
          return f[d] = i, f[u] = i, ee.call(f, E, _.browser), f[F] = vt(f[u]), T && w && w.brave && typeof w.brave.isBrave == m && (f[d] = "Brave"), f;
        }, this.getCPU = function() {
          var f = {};
          return f[L] = i, ee.call(f, E, _.cpu), f;
        }, this.getDevice = function() {
          var f = {};
          return f[c] = i, f[n] = i, f[o] = i, ee.call(f, E, _.device), T && !f[o] && H && H.mobile && (f[o] = b), T && f[n] == "Macintosh" && w && typeof w.standalone !== p && w.maxTouchPoints && w.maxTouchPoints > 2 && (f[n] = "iPad", f[o] = g), f;
        }, this.getEngine = function() {
          var f = {};
          return f[d] = i, f[u] = i, ee.call(f, E, _.engine), f;
        }, this.getOS = function() {
          var f = {};
          return f[d] = i, f[u] = i, ee.call(f, E, _.os), T && !f[d] && H && H.platform && H.platform != "Unknown" && (f[d] = H.platform.replace(/chrome os/i, qe).replace(/macos/i, He)), f;
        }, this.getResult = function() {
          return {
            ua: this.getUA(),
            browser: this.getBrowser(),
            engine: this.getEngine(),
            os: this.getOS(),
            device: this.getDevice(),
            cpu: this.getCPU()
          };
        }, this.getUA = function() {
          return E;
        }, this.setUA = function(f) {
          return E = typeof f === k && f.length > ge ? Te(f, ge) : f, this;
        }, this.setUA(E), this;
      };
      N.VERSION = s, N.BROWSER = ue([d, u, F]), N.CPU = ue([L]), N.DEVICE = ue([n, c, o, K, b, C, g, q, be]), N.ENGINE = N.OS = ue([d, u]), r.exports && (e = r.exports = N), e.UAParser = N;
      var J = typeof t !== p && (t.jQuery || t.Zepto);
      if (J && !J.ua) {
        var he = new N();
        J.ua = he.getResult(), J.ua.get = function() {
          return he.getUA();
        }, J.ua.set = function(v) {
          he.setUA(v);
          var y = he.getResult();
          for (var w in y)
            J.ua[w] = y[w];
        };
      }
    })(typeof window == "object" ? window : Rt);
  }(re, re.exports)), re.exports;
}
var Ft = At();
const Pt = /* @__PURE__ */ xt(Ft), Bt = {
  "Amazon Silk": "amazon_silk",
  "Android Browser": "android",
  Bada: "bada",
  BlackBerry: "blackberry",
  Chrome: "chrome",
  Chromium: "chromium",
  Electron: "electron",
  Epiphany: "epiphany",
  Firefox: "firefox",
  Focus: "focus",
  Generic: "generic",
  "Google Search": "google_search",
  Googlebot: "googlebot",
  "Internet Explorer": "ie",
  "K-Meleon": "k_meleon",
  Maxthon: "maxthon",
  "Microsoft Edge": "edge",
  "MZ Browser": "mz",
  "NAVER Whale Browser": "naver",
  Opera: "opera",
  "Opera Coast": "opera_coast",
  PhantomJS: "phantomjs",
  Puffin: "puffin",
  QupZilla: "qupzilla",
  QQ: "qq",
  QQLite: "qqlite",
  Safari: "safari",
  Sailfish: "sailfish",
  "Samsung Internet for Android": "samsung_internet",
  SeaMonkey: "seamonkey",
  Sleipnir: "sleipnir",
  Swing: "swing",
  Tizen: "tizen",
  "UC Browser": "uc",
  Vivaldi: "vivaldi",
  "WebOS Browser": "webos",
  WeChat: "wechat",
  "Yandex Browser": "yandex",
  Roku: "roku"
}, nt = {
  amazon_silk: "Amazon Silk",
  android: "Android Browser",
  bada: "Bada",
  blackberry: "BlackBerry",
  chrome: "Chrome",
  chromium: "Chromium",
  electron: "Electron",
  epiphany: "Epiphany",
  firefox: "Firefox",
  focus: "Focus",
  generic: "Generic",
  googlebot: "Googlebot",
  google_search: "Google Search",
  ie: "Internet Explorer",
  k_meleon: "K-Meleon",
  maxthon: "Maxthon",
  edge: "Microsoft Edge",
  mz: "MZ Browser",
  naver: "NAVER Whale Browser",
  opera: "Opera",
  opera_coast: "Opera Coast",
  phantomjs: "PhantomJS",
  puffin: "Puffin",
  qupzilla: "QupZilla",
  qq: "QQ Browser",
  qqlite: "QQ Browser Lite",
  safari: "Safari",
  sailfish: "Sailfish",
  samsung_internet: "Samsung Internet for Android",
  seamonkey: "SeaMonkey",
  sleipnir: "Sleipnir",
  swing: "Swing",
  tizen: "Tizen",
  uc: "UC Browser",
  vivaldi: "Vivaldi",
  webos: "WebOS Browser",
  wechat: "WeChat",
  yandex: "Yandex Browser"
}, R = {
  tablet: "tablet",
  mobile: "mobile",
  desktop: "desktop",
  tv: "tv"
}, B = {
  WindowsPhone: "Windows Phone",
  Windows: "Windows",
  MacOS: "macOS",
  iOS: "iOS",
  Android: "Android",
  WebOS: "WebOS",
  BlackBerry: "BlackBerry",
  Bada: "Bada",
  Tizen: "Tizen",
  Linux: "Linux",
  ChromeOS: "Chrome OS",
  PlayStation4: "PlayStation 4",
  Roku: "Roku"
}, U = {
  EdgeHTML: "EdgeHTML",
  Blink: "Blink",
  Trident: "Trident",
  Presto: "Presto",
  Gecko: "Gecko",
  WebKit: "WebKit"
};
class a {
  /**
   * Get first matched item for a string
   * @param {RegExp} regexp
   * @param {String} ua
   * @return {Array|{index: number, input: string}|*|boolean|string}
   */
  static getFirstMatch(e, t) {
    const i = t.match(e);
    return i && i.length > 0 && i[1] || "";
  }
  /**
   * Get second matched item for a string
   * @param regexp
   * @param {String} ua
   * @return {Array|{index: number, input: string}|*|boolean|string}
   */
  static getSecondMatch(e, t) {
    const i = t.match(e);
    return i && i.length > 1 && i[2] || "";
  }
  /**
   * Match a regexp and return a constant or undefined
   * @param {RegExp} regexp
   * @param {String} ua
   * @param {*} _const Any const that will be returned if regexp matches the string
   * @return {*}
   */
  static matchAndReturnConst(e, t, i) {
    if (e.test(t))
      return i;
  }
  static getWindowsVersionName(e) {
    switch (e) {
      case "NT":
        return "NT";
      case "XP":
        return "XP";
      case "NT 5.0":
        return "2000";
      case "NT 5.1":
        return "XP";
      case "NT 5.2":
        return "2003";
      case "NT 6.0":
        return "Vista";
      case "NT 6.1":
        return "7";
      case "NT 6.2":
        return "8";
      case "NT 6.3":
        return "8.1";
      case "NT 10.0":
        return "10";
      default:
        return;
    }
  }
  /**
   * Get macOS version name
   *    10.5 - Leopard
   *    10.6 - Snow Leopard
   *    10.7 - Lion
   *    10.8 - Mountain Lion
   *    10.9 - Mavericks
   *    10.10 - Yosemite
   *    10.11 - El Capitan
   *    10.12 - Sierra
   *    10.13 - High Sierra
   *    10.14 - Mojave
   *    10.15 - Catalina
   *
   * @example
   *   getMacOSVersionName("10.14") // 'Mojave'
   *
   * @param  {string} version
   * @return {string} versionName
   */
  static getMacOSVersionName(e) {
    const t = e.split(".").splice(0, 2).map((i) => parseInt(i, 10) || 0);
    if (t.push(0), t[0] === 10)
      switch (t[1]) {
        case 5:
          return "Leopard";
        case 6:
          return "Snow Leopard";
        case 7:
          return "Lion";
        case 8:
          return "Mountain Lion";
        case 9:
          return "Mavericks";
        case 10:
          return "Yosemite";
        case 11:
          return "El Capitan";
        case 12:
          return "Sierra";
        case 13:
          return "High Sierra";
        case 14:
          return "Mojave";
        case 15:
          return "Catalina";
        default:
          return;
      }
  }
  /**
   * Get Android version name
   *    1.5 - Cupcake
   *    1.6 - Donut
   *    2.0 - Eclair
   *    2.1 - Eclair
   *    2.2 - Froyo
   *    2.x - Gingerbread
   *    3.x - Honeycomb
   *    4.0 - Ice Cream Sandwich
   *    4.1 - Jelly Bean
   *    4.4 - KitKat
   *    5.x - Lollipop
   *    6.x - Marshmallow
   *    7.x - Nougat
   *    8.x - Oreo
   *    9.x - Pie
   *
   * @example
   *   getAndroidVersionName("7.0") // 'Nougat'
   *
   * @param  {string} version
   * @return {string} versionName
   */
  static getAndroidVersionName(e) {
    const t = e.split(".").splice(0, 2).map((i) => parseInt(i, 10) || 0);
    if (t.push(0), !(t[0] === 1 && t[1] < 5)) {
      if (t[0] === 1 && t[1] < 6) return "Cupcake";
      if (t[0] === 1 && t[1] >= 6) return "Donut";
      if (t[0] === 2 && t[1] < 2) return "Eclair";
      if (t[0] === 2 && t[1] === 2) return "Froyo";
      if (t[0] === 2 && t[1] > 2) return "Gingerbread";
      if (t[0] === 3) return "Honeycomb";
      if (t[0] === 4 && t[1] < 1) return "Ice Cream Sandwich";
      if (t[0] === 4 && t[1] < 4) return "Jelly Bean";
      if (t[0] === 4 && t[1] >= 4) return "KitKat";
      if (t[0] === 5) return "Lollipop";
      if (t[0] === 6) return "Marshmallow";
      if (t[0] === 7) return "Nougat";
      if (t[0] === 8) return "Oreo";
      if (t[0] === 9) return "Pie";
    }
  }
  /**
   * Get version precisions count
   *
   * @example
   *   getVersionPrecision("1.10.3") // 3
   *
   * @param  {string} version
   * @return {number}
   */
  static getVersionPrecision(e) {
    return e.split(".").length;
  }
  /**
   * Calculate browser version weight
   *
   * @example
   *   compareVersions('1.10.2.1',  '1.8.2.1.90')    // 1
   *   compareVersions('1.010.2.1', '1.09.2.1.90');  // 1
   *   compareVersions('1.10.2.1',  '1.10.2.1');     // 0
   *   compareVersions('1.10.2.1',  '1.0800.2');     // -1
   *   compareVersions('1.10.2.1',  '1.10',  true);  // 0
   *
   * @param {String} versionA versions versions to compare
   * @param {String} versionB versions versions to compare
   * @param {boolean} [isLoose] enable loose comparison
   * @return {Number} comparison result: -1 when versionA is lower,
   * 1 when versionA is bigger, 0 when both equal
   */
  /* eslint consistent-return: 1 */
  static compareVersions(e, t, i = !1) {
    const s = a.getVersionPrecision(e), l = a.getVersionPrecision(t);
    let h = Math.max(s, l), m = 0;
    const p = a.map([e, t], (S) => {
      const k = h - a.getVersionPrecision(S), F = S + new Array(k + 1).join(".0");
      return a.map(F.split("."), (n) => new Array(20 - n.length).join("0") + n).reverse();
    });
    for (i && (m = h - Math.min(s, l)), h -= 1; h >= m; ) {
      if (p[0][h] > p[1][h])
        return 1;
      if (p[0][h] === p[1][h]) {
        if (h === m)
          return 0;
        h -= 1;
      } else if (p[0][h] < p[1][h])
        return -1;
    }
  }
  /**
   * Array::map polyfill
   *
   * @param  {Array} arr
   * @param  {Function} iterator
   * @return {Array}
   */
  static map(e, t) {
    const i = [];
    let s;
    if (Array.prototype.map)
      return Array.prototype.map.call(e, t);
    for (s = 0; s < e.length; s += 1)
      i.push(t(e[s]));
    return i;
  }
  /**
   * Array::find polyfill
   *
   * @param  {Array} arr
   * @param  {Function} predicate
   * @return {Array}
   */
  static find(e, t) {
    let i, s;
    if (Array.prototype.find)
      return Array.prototype.find.call(e, t);
    for (i = 0, s = e.length; i < s; i += 1) {
      const l = e[i];
      if (t(l, i))
        return l;
    }
  }
  /**
   * Object::assign polyfill
   *
   * @param  {Object} obj
   * @param  {Object} ...objs
   * @return {Object}
   */
  static assign(e, ...t) {
    const i = e;
    let s, l;
    if (Object.assign)
      return Object.assign(e, ...t);
    for (s = 0, l = t.length; s < l; s += 1) {
      const h = t[s];
      typeof h == "object" && h !== null && Object.keys(h).forEach((p) => {
        i[p] = h[p];
      });
    }
    return e;
  }
  /**
   * Get short version/alias for a browser name
   *
   * @example
   *   getBrowserAlias('Microsoft Edge') // edge
   *
   * @param  {string} browserName
   * @return {string}
   */
  static getBrowserAlias(e) {
    return Bt[e];
  }
  /**
   * Get short version/alias for a browser name
   *
   * @example
   *   getBrowserAlias('edge') // Microsoft Edge
   *
   * @param  {string} browserAlias
   * @return {string}
   */
  static getBrowserTypeByAlias(e) {
    return nt[e] || "";
  }
}
const M = /version\/(\d+(\.?_?\d+)+)/i, Ct = [
  /* Googlebot */
  {
    test: [/googlebot/i],
    describe(r) {
      const e = {
        name: "Googlebot"
      }, t = a.getFirstMatch(/googlebot\/(\d+(\.\d+))/i, r) || a.getFirstMatch(M, r);
      return t && (e.version = t), e;
    }
  },
  /* Opera < 13.0 */
  {
    test: [/opera/i],
    describe(r) {
      const e = {
        name: "Opera"
      }, t = a.getFirstMatch(M, r) || a.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  /* Opera > 13.0 */
  {
    test: [/opr\/|opios/i],
    describe(r) {
      const e = {
        name: "Opera"
      }, t = a.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i, r) || a.getFirstMatch(M, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/SamsungBrowser/i],
    describe(r) {
      const e = {
        name: "Samsung Internet for Android"
      }, t = a.getFirstMatch(M, r) || a.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/Whale/i],
    describe(r) {
      const e = {
        name: "NAVER Whale Browser"
      }, t = a.getFirstMatch(M, r) || a.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/MZBrowser/i],
    describe(r) {
      const e = {
        name: "MZ Browser"
      }, t = a.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i, r) || a.getFirstMatch(M, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/focus/i],
    describe(r) {
      const e = {
        name: "Focus"
      }, t = a.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i, r) || a.getFirstMatch(M, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/swing/i],
    describe(r) {
      const e = {
        name: "Swing"
      }, t = a.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i, r) || a.getFirstMatch(M, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/coast/i],
    describe(r) {
      const e = {
        name: "Opera Coast"
      }, t = a.getFirstMatch(M, r) || a.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/opt\/\d+(?:.?_?\d+)+/i],
    describe(r) {
      const e = {
        name: "Opera Touch"
      }, t = a.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i, r) || a.getFirstMatch(M, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/yabrowser/i],
    describe(r) {
      const e = {
        name: "Yandex Browser"
      }, t = a.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i, r) || a.getFirstMatch(M, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/ucbrowser/i],
    describe(r) {
      const e = {
        name: "UC Browser"
      }, t = a.getFirstMatch(M, r) || a.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/Maxthon|mxios/i],
    describe(r) {
      const e = {
        name: "Maxthon"
      }, t = a.getFirstMatch(M, r) || a.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/epiphany/i],
    describe(r) {
      const e = {
        name: "Epiphany"
      }, t = a.getFirstMatch(M, r) || a.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/puffin/i],
    describe(r) {
      const e = {
        name: "Puffin"
      }, t = a.getFirstMatch(M, r) || a.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/sleipnir/i],
    describe(r) {
      const e = {
        name: "Sleipnir"
      }, t = a.getFirstMatch(M, r) || a.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/k-meleon/i],
    describe(r) {
      const e = {
        name: "K-Meleon"
      }, t = a.getFirstMatch(M, r) || a.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/micromessenger/i],
    describe(r) {
      const e = {
        name: "WeChat"
      }, t = a.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i, r) || a.getFirstMatch(M, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/qqbrowser/i],
    describe(r) {
      const e = {
        name: /qqbrowserlite/i.test(r) ? "QQ Browser Lite" : "QQ Browser"
      }, t = a.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i, r) || a.getFirstMatch(M, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/msie|trident/i],
    describe(r) {
      const e = {
        name: "Internet Explorer"
      }, t = a.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/\sedg\//i],
    describe(r) {
      const e = {
        name: "Microsoft Edge"
      }, t = a.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/edg([ea]|ios)/i],
    describe(r) {
      const e = {
        name: "Microsoft Edge"
      }, t = a.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/vivaldi/i],
    describe(r) {
      const e = {
        name: "Vivaldi"
      }, t = a.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/seamonkey/i],
    describe(r) {
      const e = {
        name: "SeaMonkey"
      }, t = a.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/sailfish/i],
    describe(r) {
      const e = {
        name: "Sailfish"
      }, t = a.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/silk/i],
    describe(r) {
      const e = {
        name: "Amazon Silk"
      }, t = a.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/phantom/i],
    describe(r) {
      const e = {
        name: "PhantomJS"
      }, t = a.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/slimerjs/i],
    describe(r) {
      const e = {
        name: "SlimerJS"
      }, t = a.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/blackberry|\bbb\d+/i, /rim\stablet/i],
    describe(r) {
      const e = {
        name: "BlackBerry"
      }, t = a.getFirstMatch(M, r) || a.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/(web|hpw)[o0]s/i],
    describe(r) {
      const e = {
        name: "WebOS Browser"
      }, t = a.getFirstMatch(M, r) || a.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/bada/i],
    describe(r) {
      const e = {
        name: "Bada"
      }, t = a.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/tizen/i],
    describe(r) {
      const e = {
        name: "Tizen"
      }, t = a.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i, r) || a.getFirstMatch(M, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/qupzilla/i],
    describe(r) {
      const e = {
        name: "QupZilla"
      }, t = a.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i, r) || a.getFirstMatch(M, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/firefox|iceweasel|fxios/i],
    describe(r) {
      const e = {
        name: "Firefox"
      }, t = a.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/electron/i],
    describe(r) {
      const e = {
        name: "Electron"
      }, t = a.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/MiuiBrowser/i],
    describe(r) {
      const e = {
        name: "Miui"
      }, t = a.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/chromium/i],
    describe(r) {
      const e = {
        name: "Chromium"
      }, t = a.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i, r) || a.getFirstMatch(M, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/chrome|crios|crmo/i],
    describe(r) {
      const e = {
        name: "Chrome"
      }, t = a.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  {
    test: [/GSA/i],
    describe(r) {
      const e = {
        name: "Google Search"
      }, t = a.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  /* Android Browser */
  {
    test(r) {
      const e = !r.test(/like android/i), t = r.test(/android/i);
      return e && t;
    },
    describe(r) {
      const e = {
        name: "Android Browser"
      }, t = a.getFirstMatch(M, r);
      return t && (e.version = t), e;
    }
  },
  /* PlayStation 4 */
  {
    test: [/playstation 4/i],
    describe(r) {
      const e = {
        name: "PlayStation 4"
      }, t = a.getFirstMatch(M, r);
      return t && (e.version = t), e;
    }
  },
  /* Safari */
  {
    test: [/safari|applewebkit/i],
    describe(r) {
      const e = {
        name: "Safari"
      }, t = a.getFirstMatch(M, r);
      return t && (e.version = t), e;
    }
  },
  /* Something else */
  {
    test: [/.*/i],
    describe(r) {
      const e = /^(.*)\/(.*) /, t = /^(.*)\/(.*)[ \t]\((.*)/, s = r.search("\\(") !== -1 ? t : e;
      return {
        name: a.getFirstMatch(s, r),
        version: a.getSecondMatch(s, r)
      };
    }
  }
], Ot = [
  /* Roku */
  {
    test: [/Roku\/DVP/],
    describe(r) {
      const e = a.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i, r);
      return {
        name: B.Roku,
        version: e
      };
    }
  },
  /* Windows Phone */
  {
    test: [/windows phone/i],
    describe(r) {
      const e = a.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i, r);
      return {
        name: B.WindowsPhone,
        version: e
      };
    }
  },
  /* Windows */
  {
    test: [/windows /i],
    describe(r) {
      const e = a.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i, r), t = a.getWindowsVersionName(e);
      return {
        name: B.Windows,
        version: e,
        versionName: t
      };
    }
  },
  /* Firefox on iPad */
  {
    test: [/Macintosh(.*?) FxiOS(.*?)\//],
    describe(r) {
      const e = {
        name: B.iOS
      }, t = a.getSecondMatch(/(Version\/)(\d[\d.]+)/, r);
      return t && (e.version = t), e;
    }
  },
  /* macOS */
  {
    test: [/macintosh/i],
    describe(r) {
      const e = a.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i, r).replace(/[_\s]/g, "."), t = a.getMacOSVersionName(e), i = {
        name: B.MacOS,
        version: e
      };
      return t && (i.versionName = t), i;
    }
  },
  /* iOS */
  {
    test: [/(ipod|iphone|ipad)/i],
    describe(r) {
      const e = a.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i, r).replace(/[_\s]/g, ".");
      return {
        name: B.iOS,
        version: e
      };
    }
  },
  /* Android */
  {
    test(r) {
      const e = !r.test(/like android/i), t = r.test(/android/i);
      return e && t;
    },
    describe(r) {
      const e = a.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i, r), t = a.getAndroidVersionName(e), i = {
        name: B.Android,
        version: e
      };
      return t && (i.versionName = t), i;
    }
  },
  /* WebOS */
  {
    test: [/(web|hpw)[o0]s/i],
    describe(r) {
      const e = a.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i, r), t = {
        name: B.WebOS
      };
      return e && e.length && (t.version = e), t;
    }
  },
  /* BlackBerry */
  {
    test: [/blackberry|\bbb\d+/i, /rim\stablet/i],
    describe(r) {
      const e = a.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i, r) || a.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i, r) || a.getFirstMatch(/\bbb(\d+)/i, r);
      return {
        name: B.BlackBerry,
        version: e
      };
    }
  },
  /* Bada */
  {
    test: [/bada/i],
    describe(r) {
      const e = a.getFirstMatch(/bada\/(\d+(\.\d+)*)/i, r);
      return {
        name: B.Bada,
        version: e
      };
    }
  },
  /* Tizen */
  {
    test: [/tizen/i],
    describe(r) {
      const e = a.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i, r);
      return {
        name: B.Tizen,
        version: e
      };
    }
  },
  /* Linux */
  {
    test: [/linux/i],
    describe() {
      return {
        name: B.Linux
      };
    }
  },
  /* Chrome OS */
  {
    test: [/CrOS/],
    describe() {
      return {
        name: B.ChromeOS
      };
    }
  },
  /* Playstation 4 */
  {
    test: [/PlayStation 4/],
    describe(r) {
      const e = a.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i, r);
      return {
        name: B.PlayStation4,
        version: e
      };
    }
  }
], Lt = [
  /* Googlebot */
  {
    test: [/googlebot/i],
    describe() {
      return {
        type: "bot",
        vendor: "Google"
      };
    }
  },
  /* Huawei */
  {
    test: [/huawei/i],
    describe(r) {
      const e = a.getFirstMatch(/(can-l01)/i, r) && "Nova", t = {
        type: R.mobile,
        vendor: "Huawei"
      };
      return e && (t.model = e), t;
    }
  },
  /* Nexus Tablet */
  {
    test: [/nexus\s*(?:7|8|9|10).*/i],
    describe() {
      return {
        type: R.tablet,
        vendor: "Nexus"
      };
    }
  },
  /* iPad */
  {
    test: [/ipad/i],
    describe() {
      return {
        type: R.tablet,
        vendor: "Apple",
        model: "iPad"
      };
    }
  },
  /* Firefox on iPad */
  {
    test: [/Macintosh(.*?) FxiOS(.*?)\//],
    describe() {
      return {
        type: R.tablet,
        vendor: "Apple",
        model: "iPad"
      };
    }
  },
  /* Amazon Kindle Fire */
  {
    test: [/kftt build/i],
    describe() {
      return {
        type: R.tablet,
        vendor: "Amazon",
        model: "Kindle Fire HD 7"
      };
    }
  },
  /* Another Amazon Tablet with Silk */
  {
    test: [/silk/i],
    describe() {
      return {
        type: R.tablet,
        vendor: "Amazon"
      };
    }
  },
  /* Tablet */
  {
    test: [/tablet(?! pc)/i],
    describe() {
      return {
        type: R.tablet
      };
    }
  },
  /* iPod/iPhone */
  {
    test(r) {
      const e = r.test(/ipod|iphone/i), t = r.test(/like (ipod|iphone)/i);
      return e && !t;
    },
    describe(r) {
      const e = a.getFirstMatch(/(ipod|iphone)/i, r);
      return {
        type: R.mobile,
        vendor: "Apple",
        model: e
      };
    }
  },
  /* Nexus Mobile */
  {
    test: [/nexus\s*[0-6].*/i, /galaxy nexus/i],
    describe() {
      return {
        type: R.mobile,
        vendor: "Nexus"
      };
    }
  },
  /* Mobile */
  {
    test: [/[^-]mobi/i],
    describe() {
      return {
        type: R.mobile
      };
    }
  },
  /* BlackBerry */
  {
    test(r) {
      return r.getBrowserName(!0) === "blackberry";
    },
    describe() {
      return {
        type: R.mobile,
        vendor: "BlackBerry"
      };
    }
  },
  /* Bada */
  {
    test(r) {
      return r.getBrowserName(!0) === "bada";
    },
    describe() {
      return {
        type: R.mobile
      };
    }
  },
  /* Windows Phone */
  {
    test(r) {
      return r.getBrowserName() === "windows phone";
    },
    describe() {
      return {
        type: R.mobile,
        vendor: "Microsoft"
      };
    }
  },
  /* Android Tablet */
  {
    test(r) {
      const e = Number(String(r.getOSVersion()).split(".")[0]);
      return r.getOSName(!0) === "android" && e >= 3;
    },
    describe() {
      return {
        type: R.tablet
      };
    }
  },
  /* Android Mobile */
  {
    test(r) {
      return r.getOSName(!0) === "android";
    },
    describe() {
      return {
        type: R.mobile
      };
    }
  },
  /* desktop */
  {
    test(r) {
      return r.getOSName(!0) === "macos";
    },
    describe() {
      return {
        type: R.desktop,
        vendor: "Apple"
      };
    }
  },
  /* Windows */
  {
    test(r) {
      return r.getOSName(!0) === "windows";
    },
    describe() {
      return {
        type: R.desktop
      };
    }
  },
  /* Linux */
  {
    test(r) {
      return r.getOSName(!0) === "linux";
    },
    describe() {
      return {
        type: R.desktop
      };
    }
  },
  /* PlayStation 4 */
  {
    test(r) {
      return r.getOSName(!0) === "playstation 4";
    },
    describe() {
      return {
        type: R.tv
      };
    }
  },
  /* Roku */
  {
    test(r) {
      return r.getOSName(!0) === "roku";
    },
    describe() {
      return {
        type: R.tv
      };
    }
  }
], Nt = [
  /* EdgeHTML */
  {
    test(r) {
      return r.getBrowserName(!0) === "microsoft edge";
    },
    describe(r) {
      if (/\sedg\//i.test(r))
        return {
          name: U.Blink
        };
      const t = a.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i, r);
      return {
        name: U.EdgeHTML,
        version: t
      };
    }
  },
  /* Trident */
  {
    test: [/trident/i],
    describe(r) {
      const e = {
        name: U.Trident
      }, t = a.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  /* Presto */
  {
    test(r) {
      return r.test(/presto/i);
    },
    describe(r) {
      const e = {
        name: U.Presto
      }, t = a.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  /* Gecko */
  {
    test(r) {
      const e = r.test(/gecko/i), t = r.test(/like gecko/i);
      return e && !t;
    },
    describe(r) {
      const e = {
        name: U.Gecko
      }, t = a.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  },
  /* Blink */
  {
    test: [/(apple)?webkit\/537\.36/i],
    describe() {
      return {
        name: U.Blink
      };
    }
  },
  /* WebKit */
  {
    test: [/(apple)?webkit/i],
    describe(r) {
      const e = {
        name: U.WebKit
      }, t = a.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i, r);
      return t && (e.version = t), e;
    }
  }
];
class Xe {
  /**
   * Create instance of Parser
   *
   * @param {String} UA User-Agent string
   * @param {Boolean} [skipParsing=false] parser can skip parsing in purpose of performance
   * improvements if you need to make a more particular parsing
   * like {@link Parser#parseBrowser} or {@link Parser#parsePlatform}
   *
   * @throw {Error} in case of empty UA String
   *
   * @constructor
   */
  constructor(e, t = !1) {
    if (e == null || e === "")
      throw new Error("UserAgent parameter can't be empty");
    this._ua = e, this.parsedResult = {}, t !== !0 && this.parse();
  }
  /**
   * Get UserAgent string of current Parser instance
   * @return {String} User-Agent String of the current <Parser> object
   *
   * @public
   */
  getUA() {
    return this._ua;
  }
  /**
   * Test a UA string for a regexp
   * @param {RegExp} regex
   * @return {Boolean}
   */
  test(e) {
    return e.test(this._ua);
  }
  /**
   * Get parsed browser object
   * @return {Object}
   */
  parseBrowser() {
    this.parsedResult.browser = {};
    const e = a.find(Ct, (t) => {
      if (typeof t.test == "function")
        return t.test(this);
      if (t.test instanceof Array)
        return t.test.some((i) => this.test(i));
      throw new Error("Browser's test function is not valid");
    });
    return e && (this.parsedResult.browser = e.describe(this.getUA())), this.parsedResult.browser;
  }
  /**
   * Get parsed browser object
   * @return {Object}
   *
   * @public
   */
  getBrowser() {
    return this.parsedResult.browser ? this.parsedResult.browser : this.parseBrowser();
  }
  /**
   * Get browser's name
   * @return {String} Browser's name or an empty string
   *
   * @public
   */
  getBrowserName(e) {
    return e ? String(this.getBrowser().name).toLowerCase() || "" : this.getBrowser().name || "";
  }
  /**
   * Get browser's version
   * @return {String} version of browser
   *
   * @public
   */
  getBrowserVersion() {
    return this.getBrowser().version;
  }
  /**
   * Get OS
   * @return {Object}
   *
   * @example
   * this.getOS();
   * {
   *   name: 'macOS',
   *   version: '10.11.12'
   * }
   */
  getOS() {
    return this.parsedResult.os ? this.parsedResult.os : this.parseOS();
  }
  /**
   * Parse OS and save it to this.parsedResult.os
   * @return {*|{}}
   */
  parseOS() {
    this.parsedResult.os = {};
    const e = a.find(Ot, (t) => {
      if (typeof t.test == "function")
        return t.test(this);
      if (t.test instanceof Array)
        return t.test.some((i) => this.test(i));
      throw new Error("Browser's test function is not valid");
    });
    return e && (this.parsedResult.os = e.describe(this.getUA())), this.parsedResult.os;
  }
  /**
   * Get OS name
   * @param {Boolean} [toLowerCase] return lower-cased value
   * @return {String} name of the OS — macOS, Windows, Linux, etc.
   */
  getOSName(e) {
    const { name: t } = this.getOS();
    return e ? String(t).toLowerCase() || "" : t || "";
  }
  /**
   * Get OS version
   * @return {String} full version with dots ('10.11.12', '5.6', etc)
   */
  getOSVersion() {
    return this.getOS().version;
  }
  /**
   * Get parsed platform
   * @return {{}}
   */
  getPlatform() {
    return this.parsedResult.platform ? this.parsedResult.platform : this.parsePlatform();
  }
  /**
   * Get platform name
   * @param {Boolean} [toLowerCase=false]
   * @return {*}
   */
  getPlatformType(e = !1) {
    const { type: t } = this.getPlatform();
    return e ? String(t).toLowerCase() || "" : t || "";
  }
  /**
   * Get parsed platform
   * @return {{}}
   */
  parsePlatform() {
    this.parsedResult.platform = {};
    const e = a.find(Lt, (t) => {
      if (typeof t.test == "function")
        return t.test(this);
      if (t.test instanceof Array)
        return t.test.some((i) => this.test(i));
      throw new Error("Browser's test function is not valid");
    });
    return e && (this.parsedResult.platform = e.describe(this.getUA())), this.parsedResult.platform;
  }
  /**
   * Get parsed engine
   * @return {{}}
   */
  getEngine() {
    return this.parsedResult.engine ? this.parsedResult.engine : this.parseEngine();
  }
  /**
   * Get engines's name
   * @return {String} Engines's name or an empty string
   *
   * @public
   */
  getEngineName(e) {
    return e ? String(this.getEngine().name).toLowerCase() || "" : this.getEngine().name || "";
  }
  /**
   * Get parsed platform
   * @return {{}}
   */
  parseEngine() {
    this.parsedResult.engine = {};
    const e = a.find(Nt, (t) => {
      if (typeof t.test == "function")
        return t.test(this);
      if (t.test instanceof Array)
        return t.test.some((i) => this.test(i));
      throw new Error("Browser's test function is not valid");
    });
    return e && (this.parsedResult.engine = e.describe(this.getUA())), this.parsedResult.engine;
  }
  /**
   * Parse full information about the browser
   * @returns {Parser}
   */
  parse() {
    return this.parseBrowser(), this.parseOS(), this.parsePlatform(), this.parseEngine(), this;
  }
  /**
   * Get parsed result
   * @return {ParsedResult}
   */
  getResult() {
    return a.assign({}, this.parsedResult);
  }
  /**
   * Check if parsed browser matches certain conditions
   *
   * @param {Object} checkTree It's one or two layered object,
   * which can include a platform or an OS on the first layer
   * and should have browsers specs on the bottom-laying layer
   *
   * @returns {Boolean|undefined} Whether the browser satisfies the set conditions or not.
   * Returns `undefined` when the browser is no described in the checkTree object.
   *
   * @example
   * const browser = Bowser.getParser(window.navigator.userAgent);
   * if (browser.satisfies({chrome: '>118.01.1322' }))
   * // or with os
   * if (browser.satisfies({windows: { chrome: '>118.01.1322' } }))
   * // or with platforms
   * if (browser.satisfies({desktop: { chrome: '>118.01.1322' } }))
   */
  satisfies(e) {
    const t = {};
    let i = 0;
    const s = {};
    let l = 0;
    if (Object.keys(e).forEach((m) => {
      const p = e[m];
      typeof p == "string" ? (s[m] = p, l += 1) : typeof p == "object" && (t[m] = p, i += 1);
    }), i > 0) {
      const m = Object.keys(t), p = a.find(m, (k) => this.isOS(k));
      if (p) {
        const k = this.satisfies(t[p]);
        if (k !== void 0)
          return k;
      }
      const S = a.find(
        m,
        (k) => this.isPlatform(k)
      );
      if (S) {
        const k = this.satisfies(t[S]);
        if (k !== void 0)
          return k;
      }
    }
    if (l > 0) {
      const m = Object.keys(s), p = a.find(m, (S) => this.isBrowser(S, !0));
      if (p !== void 0)
        return this.compareVersion(s[p]);
    }
  }
  /**
   * Check if the browser name equals the passed string
   * @param browserName The string to compare with the browser name
   * @param [includingAlias=false] The flag showing whether alias will be included into comparison
   * @returns {boolean}
   */
  isBrowser(e, t = !1) {
    const i = this.getBrowserName().toLowerCase();
    let s = e.toLowerCase();
    const l = a.getBrowserTypeByAlias(s);
    return t && l && (s = l.toLowerCase()), s === i;
  }
  compareVersion(e) {
    let t = [0], i = e, s = !1;
    const l = this.getBrowserVersion();
    if (typeof l == "string")
      return e[0] === ">" || e[0] === "<" ? (i = e.substr(1), e[1] === "=" ? (s = !0, i = e.substr(2)) : t = [], e[0] === ">" ? t.push(1) : t.push(-1)) : e[0] === "=" ? i = e.substr(1) : e[0] === "~" && (s = !0, i = e.substr(1)), t.indexOf(
        a.compareVersions(l, i, s)
      ) > -1;
  }
  isOS(e) {
    return this.getOSName(!0) === String(e).toLowerCase();
  }
  isPlatform(e) {
    return this.getPlatformType(!0) === String(e).toLowerCase();
  }
  isEngine(e) {
    return this.getEngineName(!0) === String(e).toLowerCase();
  }
  /**
   * Is anything? Check if the browser is called "anything",
   * the OS called "anything" or the platform called "anything"
   * @param {String} anything
   * @param [includingAlias=false] The flag showing whether alias will be included into comparison
   * @returns {Boolean}
   */
  is(e, t = !1) {
    return this.isBrowser(e, t) || this.isOS(e) || this.isPlatform(e);
  }
  /**
   * Check if any of the given values satisfies this.is(anything)
   * @param {String[]} anythings
   * @returns {Boolean}
   */
  some(e = []) {
    return e.some((t) => this.is(t));
  }
}
/*!
 * Bowser - a browser detector
 * https://github.com/lancedikson/bowser
 * MIT License | (c) Dustin Diaz 2012-2015
 * MIT License | (c) Denis Demchenko 2015-2019
 */
class _t {
  /**
   * Creates a {@link Parser} instance
   *
   * @param {String} UA UserAgent string
   * @param {Boolean} [skipParsing=false] Will make the Parser postpone parsing until you ask it
   * explicitly. Same as `skipParsing` for {@link Parser}.
   * @returns {Parser}
   * @throws {Error} when UA is not a String
   *
   * @example
   * const parser = Bowser.getParser(window.navigator.userAgent);
   * const result = parser.getResult();
   */
  static getParser(e, t = !1) {
    if (typeof e != "string")
      throw new Error("UserAgent should be a string");
    return new Xe(e, t);
  }
  /**
   * Creates a {@link Parser} instance and runs {@link Parser.getResult} immediately
   *
   * @param UA
   * @return {ParsedResult}
   *
   * @example
   * const result = Bowser.parse(window.navigator.userAgent);
   */
  static parse(e) {
    return new Xe(e).getResult();
  }
  static get BROWSER_MAP() {
    return nt;
  }
  static get ENGINE_MAP() {
    return U;
  }
  static get OS_MAP() {
    return B;
  }
  static get PLATFORMS_MAP() {
    return R;
  }
}
function O() {
  const { host: r, hostname: e, href: t, protocol: i, origin: s, port: l, pathname: h, search: m, hash: p } = window.location, { width: S, height: k } = window.screen, { language: F, userAgent: n } = navigator;
  return {
    host: r,
    hostname: e,
    href: t,
    protocol: i,
    origin: s,
    port: l,
    pathname: h,
    search: m,
    hash: p,
    title: document.title,
    language: F.substr(0, 2),
    userAgent: It(n),
    winScreen: `${S}x${k}`,
    docScreen: `${document.documentElement.clientWidth ?? document.body.clientWidth}x${document.documentElement.clientHeight ?? document.body.clientHeight}`
  };
}
function It(r) {
  const e = _t.parse(r), t = Pt(r), i = e.browser.name ?? t.browser.name, s = e.browser.version ?? t.browser.version, l = e.os.name ?? t.os.name, h = t.os.version ?? e.os.version, m = e.platform.type ?? t.device.type, p = e.platform.vendor ?? t.device.vendor ?? "", S = e.platform.model ?? t.device.model ?? "", k = e.engine.name ?? t.engine.name, F = e.engine.version ?? t.engine.version;
  return {
    browserName: i,
    browserVersion: s,
    osName: l,
    osVersion: h,
    deviceType: m,
    deviceVendor: p,
    deviceModel: S,
    engineName: k,
    engineVersion: F
  };
}
function z(r) {
  const e = r.getFullYear(), t = (r.getMonth() + 1).toString().padStart(2, "0"), i = r.getDate().toString().padStart(2, "0"), s = r.getHours().toString().padStart(2, "0"), l = r.getMinutes().toString().padStart(2, "0"), h = r.getSeconds().toString().padStart(2, "0");
  return `${e}年${t}月${i}日${s}时${l}分${h}秒`;
}
function ot(r) {
  document.readyState === "complete" ? setTimeout(r) : window.addEventListener("load", r, { once: !0, capture: !0 });
}
function at(r) {
  if ("XMLHttpRequest" in window && typeof window.XMLHttpRequest == "function") {
    const e = window.XMLHttpRequest;
    window.oXMLHttpRequest || (window.oXMLHttpRequest = e), window.XMLHttpRequest = function() {
      const t = new e(), { open: i, send: s } = t;
      let l = {};
      return t.open = (h, m) => {
        l.method = h, l.url = m, i.call(t, h, m, !0);
      }, t.send = (h) => {
        l.body = h ?? "", l.requestTime = (/* @__PURE__ */ new Date()).getTime(), l.requestTimeFormat = z(/* @__PURE__ */ new Date()), s.call(t, h);
      }, t.addEventListener("loadend", () => {
        const { status: h, statusText: m, response: p } = t;
        l = {
          ...l,
          status: h,
          statusText: m,
          response: p && JSON.parse(p),
          responseTime: (/* @__PURE__ */ new Date()).getTime(),
          responseTimeFormat: z(/* @__PURE__ */ new Date())
        }, typeof r == "function" && r(l);
      }), t;
    };
  }
}
function ct(r) {
  if ("fetch" in window && typeof window.fetch == "function") {
    const e = window.fetch;
    window.oFetch || (window.oFetch = e), window.fetch = async (t, i) => {
      let s = {};
      return s.method = (i == null ? void 0 : i.method) ?? "", s.url = (t && typeof t != "string" ? t == null ? void 0 : t.url : t) || "", s.body = (i == null ? void 0 : i.body) ?? "", s.requestTime = (/* @__PURE__ */ new Date()).getTime(), s.responseTimeFormat = z(/* @__PURE__ */ new Date()), e.call(window, t, i).then(async (l) => {
        const h = l.clone();
        return s = {
          ...s,
          status: h.status,
          statusText: h.statusText,
          response: h.text() ?? JSON.parse(await h.text()),
          responseTime: (/* @__PURE__ */ new Date()).getTime()
        }, typeof r == "function" && r(s), l;
      });
    };
  }
}
class Dt {
  constructor(e, t, i) {
    x(this, "options");
    x(this, "submitErrorUids");
    x(this, "report");
    x(this, "trackerInstance");
    this.options = Object.assign(
      {
        js: !0,
        resource: !0,
        promise: !0,
        cors: !0,
        http: !0
      },
      e
    ), this.submitErrorUids = [], this.report = t, this.trackerInstance = i, this.installErrorInnerTracker();
  }
  initJSError() {
    window.addEventListener(
      "error",
      (e) => {
        var i, s;
        if (Ee(e) !== A.JS) return;
        const t = {
          errorUid: te(`${A.JS}-${e.message}-${e.filename}`),
          mechanismType: A.JS,
          type: ((i = e.error) == null ? void 0 : i.name) ?? "UnKnowun",
          errorMessage: e.message,
          meta: {
            file: e.filename,
            row: e.lineno,
            col: e.colno
          },
          errorStack: Ge(e.error),
          hehaviorStack: (s = this.trackerInstance.userActionTracker) == null ? void 0 : s.hehaviorStack.get(),
          pageInformation: O()
        };
        this.errorDataReportHandler(t);
      },
      !0
    );
  }
  initResourceError() {
    window.addEventListener(
      "error",
      (e) => {
        var s;
        if (Ee(e) !== A.RS) return;
        const t = e.target, i = {
          errorUid: te(`${A.RS}-${t.src}-${t.tagName}`),
          mechanismType: A.RS,
          type: "RessourceError",
          errorMessage: "",
          meta: {
            url: t.src,
            html: t.outerHTML,
            type: t.tagName
          },
          hehaviorStack: (s = this.trackerInstance.userActionTracker) == null ? void 0 : s.hehaviorStack.get(),
          pageInformation: O()
        };
        this.errorDataReportHandler(i);
      },
      !0
    );
  }
  initPromiseError() {
    window.addEventListener(
      "unhandledrejection",
      (e) => {
        var i, s, l;
        const t = {
          errorUid: te(
            `${A.PM}-${e.reason.message ?? e.reason}-${e.reason.name ?? "UnKnown"}`
          ),
          mechanismType: A.PM,
          type: ((i = e.reason) == null ? void 0 : i.name) ?? "UnKnown",
          errorMessage: ((s = e.reason) == null ? void 0 : s.message) ?? e.reason,
          meta: {},
          errorStack: Ge(e.reason),
          hehaviorStack: (l = this.trackerInstance.userActionTracker) == null ? void 0 : l.hehaviorStack.get(),
          pageInformation: O()
        };
        this.errorDataReportHandler(t);
      },
      !0
    );
  }
  initHttpError() {
    const e = (t) => {
      var s;
      if (t.status < 400) return;
      const i = {
        errorUid: te(`${A.HP}-${t.response}-${t.statusText}`),
        mechanismType: A.HP,
        type: "HTTPError",
        errorMessage: t.response,
        meta: {
          ...t
        },
        hehaviorStack: (s = this.trackerInstance.userActionTracker) == null ? void 0 : s.hehaviorStack.get(),
        pageInformation: O()
      };
      this.errorDataReportHandler(i);
    };
    at(e), ct(e);
  }
  initCorsError() {
    window.addEventListener(
      "error",
      (e) => {
        var i;
        if (Ee(e) !== A.CS) return;
        const t = {
          errorUid: te(`${A.CS}-${e.message}`),
          mechanismType: A.CS,
          type: "CorsError",
          errorMessage: e.message,
          meta: {},
          hehaviorStack: (i = this.trackerInstance.userActionTracker) == null ? void 0 : i.hehaviorStack.get(),
          pageInformation: O()
        };
        this.errorDataReportHandler(t);
      },
      !0
    );
  }
  installErrorInnerTracker() {
    this.options.js && this.initJSError(), this.options.resource && this.initResourceError(), this.options.promise && this.initPromiseError(), this.options.http && this.initHttpError(), this.options.cors && this.initCorsError();
  }
  errorDataReportHandler(e) {
    this.submitErrorUids.includes(e.errorUid) || (this.submitErrorUids.push(e.errorUid), this.report(e, "error"));
  }
}
var Ae, dt = -1, ie = function(r) {
  addEventListener("pageshow", function(e) {
    e.persisted && (dt = e.timeStamp, r(e));
  }, !0);
}, ut = function() {
  var r = self.performance && performance.getEntriesByType && performance.getEntriesByType("navigation")[0];
  if (r && r.responseStart > 0 && r.responseStart < performance.now()) return r;
}, Fe = function() {
  var r = ut();
  return r && r.activationStart || 0;
}, j = function(r, e) {
  var t = ut(), i = "navigate";
  return dt >= 0 ? i = "back-forward-cache" : t && (document.prerendering || Fe() > 0 ? i = "prerender" : document.wasDiscarded ? i = "restore" : t.type && (i = t.type.replace(/_/g, "-"))), { name: r, value: e === void 0 ? -1 : e, rating: "good", delta: 0, entries: [], id: "v4-".concat(Date.now(), "-").concat(Math.floor(8999999999999 * Math.random()) + 1e12), navigationType: i };
}, se = function(r, e, t) {
  try {
    if (PerformanceObserver.supportedEntryTypes.includes(r)) {
      var i = new PerformanceObserver(function(s) {
        Promise.resolve().then(function() {
          e(s.getEntries());
        });
      });
      return i.observe(Object.assign({ type: r, buffered: !0 }, t || {})), i;
    }
  } catch {
  }
}, W = function(r, e, t, i) {
  var s, l;
  return function(h) {
    e.value >= 0 && (h || i) && ((l = e.value - (s || 0)) || s === void 0) && (s = e.value, e.delta = l, e.rating = function(m, p) {
      return m > p[1] ? "poor" : m > p[0] ? "needs-improvement" : "good";
    }(e.value, t), r(e));
  };
}, Pe = function(r) {
  requestAnimationFrame(function() {
    return requestAnimationFrame(function() {
      return r();
    });
  });
}, we = function(r) {
  document.addEventListener("visibilitychange", function() {
    document.visibilityState === "hidden" && r();
  });
}, Be = function(r) {
  var e = !1;
  return function() {
    e || (r(), e = !0);
  };
}, X = -1, Ke = function() {
  return document.visibilityState !== "hidden" || document.prerendering ? 1 / 0 : 0;
}, fe = function(r) {
  document.visibilityState === "hidden" && X > -1 && (X = r.type === "visibilitychange" ? r.timeStamp : 0, qt());
}, Qe = function() {
  addEventListener("visibilitychange", fe, !0), addEventListener("prerenderingchange", fe, !0);
}, qt = function() {
  removeEventListener("visibilitychange", fe, !0), removeEventListener("prerenderingchange", fe, !0);
}, lt = function() {
  return X < 0 && (X = Ke(), Qe(), ie(function() {
    setTimeout(function() {
      X = Ke(), Qe();
    }, 0);
  })), { get firstHiddenTime() {
    return X;
  } };
}, Ce = function(r) {
  document.prerendering ? addEventListener("prerenderingchange", function() {
    return r();
  }, !0) : r();
}, Ze = [1800, 3e3], ht = function(r, e) {
  e = e || {}, Ce(function() {
    var t, i = lt(), s = j("FCP"), l = se("paint", function(h) {
      h.forEach(function(m) {
        m.name === "first-contentful-paint" && (l.disconnect(), m.startTime < i.firstHiddenTime && (s.value = Math.max(m.startTime - Fe(), 0), s.entries.push(m), t(!0)));
      });
    });
    l && (t = W(r, s, Ze, e.reportAllChanges), ie(function(h) {
      s = j("FCP"), t = W(r, s, Ze, e.reportAllChanges), Pe(function() {
        s.value = performance.now() - h.timeStamp, t(!0);
      });
    }));
  });
}, Ye = [0.1, 0.25], Ht = function(r, e) {
  e = e || {}, ht(Be(function() {
    var t, i = j("CLS", 0), s = 0, l = [], h = function(p) {
      p.forEach(function(S) {
        if (!S.hadRecentInput) {
          var k = l[0], F = l[l.length - 1];
          s && S.startTime - F.startTime < 1e3 && S.startTime - k.startTime < 5e3 ? (s += S.value, l.push(S)) : (s = S.value, l = [S]);
        }
      }), s > i.value && (i.value = s, i.entries = l, t());
    }, m = se("layout-shift", h);
    m && (t = W(r, i, Ye, e.reportAllChanges), we(function() {
      h(m.takeRecords()), t(!0);
    }), ie(function() {
      s = 0, i = j("CLS", 0), t = W(r, i, Ye, e.reportAllChanges), Pe(function() {
        return t();
      });
    }), setTimeout(t, 0));
  }));
}, pt = 0, xe = 1 / 0, pe = 0, zt = function(r) {
  r.forEach(function(e) {
    e.interactionId && (xe = Math.min(xe, e.interactionId), pe = Math.max(pe, e.interactionId), pt = pe ? (pe - xe) / 7 + 1 : 0);
  });
}, mt = function() {
  return Ae ? pt : performance.interactionCount || 0;
}, Vt = function() {
  "interactionCount" in performance || Ae || (Ae = se("event", zt, { type: "event", buffered: !0, durationThreshold: 0 }));
}, D = [], me = /* @__PURE__ */ new Map(), ft = 0, Ut = function() {
  var r = Math.min(D.length - 1, Math.floor((mt() - ft) / 50));
  return D[r];
}, jt = [], Wt = function(r) {
  if (jt.forEach(function(s) {
    return s(r);
  }), r.interactionId || r.entryType === "first-input") {
    var e = D[D.length - 1], t = me.get(r.interactionId);
    if (t || D.length < 10 || r.duration > e.latency) {
      if (t) r.duration > t.latency ? (t.entries = [r], t.latency = r.duration) : r.duration === t.latency && r.startTime === t.entries[0].startTime && t.entries.push(r);
      else {
        var i = { id: r.interactionId, latency: r.duration, entries: [r] };
        me.set(i.id, i), D.push(i);
      }
      D.sort(function(s, l) {
        return l.latency - s.latency;
      }), D.length > 10 && D.splice(10).forEach(function(s) {
        return me.delete(s.id);
      });
    }
  }
}, wt = function(r) {
  var e = self.requestIdleCallback || self.setTimeout, t = -1;
  return r = Be(r), document.visibilityState === "hidden" ? r() : (t = e(r), we(r)), t;
}, $e = [200, 500], Gt = function(r, e) {
  "PerformanceEventTiming" in self && "interactionId" in PerformanceEventTiming.prototype && (e = e || {}, Ce(function() {
    var t;
    Vt();
    var i, s = j("INP"), l = function(m) {
      wt(function() {
        m.forEach(Wt);
        var p = Ut();
        p && p.latency !== s.value && (s.value = p.latency, s.entries = p.entries, i());
      });
    }, h = se("event", l, { durationThreshold: (t = e.durationThreshold) !== null && t !== void 0 ? t : 40 });
    i = W(r, s, $e, e.reportAllChanges), h && (h.observe({ type: "first-input", buffered: !0 }), we(function() {
      l(h.takeRecords()), i(!0);
    }), ie(function() {
      ft = mt(), D.length = 0, me.clear(), s = j("INP"), i = W(r, s, $e, e.reportAllChanges);
    }));
  }));
}, et = [2500, 4e3], Re = {}, Jt = function(r, e) {
  e = e || {}, Ce(function() {
    var t, i = lt(), s = j("LCP"), l = function(p) {
      e.reportAllChanges || (p = p.slice(-1)), p.forEach(function(S) {
        S.startTime < i.firstHiddenTime && (s.value = Math.max(S.startTime - Fe(), 0), s.entries = [S], t());
      });
    }, h = se("largest-contentful-paint", l);
    if (h) {
      t = W(r, s, et, e.reportAllChanges);
      var m = Be(function() {
        Re[s.id] || (l(h.takeRecords()), h.disconnect(), Re[s.id] = !0, t(!0));
      });
      ["keydown", "click"].forEach(function(p) {
        addEventListener(p, function() {
          return wt(m);
        }, { once: !0, capture: !0 });
      }), we(m), ie(function(p) {
        s = j("LCP"), t = W(r, s, et, e.reportAllChanges), Pe(function() {
          s.value = performance.now() - p.timeStamp, Re[s.id] = !0, t(!0);
        });
      });
    }
  });
};
function Xt() {
  const r = window.location.origin, {
    domainLookupStart: e,
    domainLookupEnd: t,
    connectStart: i,
    connectEnd: s,
    secureConnectionStart: l,
    requestStart: h,
    responseStart: m,
    responseEnd: p,
    domInteractive: S,
    loadEventStart: k,
    domComplete: F,
    fetchStart: n,
    redirectCount: d,
    redirectStart: o,
    redirectEnd: c
  } = performance.getEntriesByType("navigation")[0];
  return {
    DNS: {
      start: e,
      end: t,
      value: t - e
    },
    TCP: {
      start: i,
      end: s,
      value: l ? l - i : s - i
    },
    SSL: {
      start: l ?? 0,
      end: l ? s : 0,
      value: l ? s - l : 0
    },
    TTFB: {
      start: h,
      end: m,
      value: m - h
    },
    Trans: {
      start: m,
      end: p,
      value: p - m
    },
    DomParse: {
      start: p,
      end: S,
      value: S - p
    },
    DomReady: {
      start: n,
      end: F,
      value: F - n
    },
    Res: {
      start: p,
      end: k,
      value: k - p
    },
    Load: {
      start: n,
      end: k,
      value: k - n
    },
    Redirect: {
      start: o,
      end: c,
      value: c - o
    },
    RedirectCount: d,
    navigationUrl: r
  };
}
function Kt() {
  return performance.getEntriesByType("resource").map((e) => {
    const t = window.location.origin, {
      name: i,
      transferSize: s,
      initiatorType: l,
      startTime: h,
      responseEnd: m,
      domainLookupEnd: p,
      domainLookupStart: S,
      connectStart: k,
      connectEnd: F,
      secureConnectionStart: n,
      responseStart: d,
      requestStart: o,
      redirectStart: c,
      redirectEnd: u
    } = e;
    return {
      resorceUrl: t,
      name: i,
      initiatorType: l,
      transferSize: s,
      start: h,
      end: m,
      DNS: p - S,
      TCP: n ? n - k : F - k,
      SSL: n ? F - n : 0,
      TTFB: d - o,
      Trans: m - o,
      Redirect: u - c
    };
  });
}
function Qt() {
  const r = window.location.origin, e = performance.getEntriesByType("resource");
  let t = 0;
  return e.forEach((i) => {
    (i.deliveryType === "cache" || i.duration === 0 && i.transferSize !== 0) && t++;
  }), {
    cacheUrl: r,
    cacheHitQuantity: t,
    noCacheHitQuantity: e.length - t,
    cacheHitRate: (t / e.length).toFixed(2)
  };
}
class Zt {
  constructor(e, t) {
    x(this, "data");
    x(this, "options");
    x(this, "report");
    this.data = {}, this.options = Object.assign(
      {
        FCP: !0,
        LCP: !0,
        CLS: !0,
        INP: !0,
        navigationTiming: !0,
        resourceFlow: !0,
        cacheData: !0
      },
      e
    ), this.report = t, this.installPerformanceInnerTracker(), this.performanceDataReportHandler();
  }
  initFCP() {
    ht((e) => {
      this.data[V.FCP] = {
        name: e.name,
        value: e.value,
        rating: e.rating
      };
    });
  }
  initLCP() {
    Jt((e) => {
      this.data[V.LCP] = {
        name: e.name,
        value: e.value,
        rating: e.rating
      };
    });
  }
  initINP() {
    Gt((e) => {
      this.data[V.INP] = {
        name: e.name,
        value: e.value,
        rating: e.rating
      };
    });
  }
  initCLS() {
    Ht((e) => {
      this.data[V.CLS] = {
        name: e.name,
        value: e.value,
        rating: e.rating
      };
    });
  }
  initNavigationTiming() {
    const e = Xt();
    this.data[V.NT] = e;
  }
  initResourceFlow() {
    const e = Kt();
    this.data[V.RF] = e;
  }
  initCacheData() {
    const e = Qt();
    this.data[V.CD] = e;
  }
  installPerformanceInnerTracker() {
    this.options.FCP && this.initFCP(), this.options.LCP && this.initLCP(), this.options.FID && this.initINP(), this.options.CLS && this.initCLS(), ot(() => {
      this.options.navigationTiming && this.initNavigationTiming(), this.options.resourceFlow && this.initResourceFlow(), this.options.cacheData && this.initCacheData();
    });
  }
  performanceDataReportHandler() {
    window.addEventListener("beforeunload", () => {
      JSON.stringify(this.data) !== "{}" && (this.data.pageUrl = window.location.origin, this.report(this.data, "performance"));
    });
  }
}
function tt(r) {
  window.addEventListener("pushState", (e) => r(e), !0), window.addEventListener("replaceState", (e) => r(e), !0), window.addEventListener("popstate", (e) => r(e), !0);
}
function Yt() {
  history.pushState = rt("pushState"), history.replaceState = rt("replaceState");
}
function rt(r) {
  const e = history[r];
  return function(...t) {
    const i = e.apply(history, t), s = new Event(r);
    return window.dispatchEvent(s), i;
  };
}
class $t {
  constructor(e) {
    x(this, "data");
    x(this, "maxBehaviorRecords");
    const { maxBehaviorRecords: t } = e;
    this.maxBehaviorRecords = t, this.data = [];
  }
  push(e) {
    this.length() === this.maxBehaviorRecords && this.shift(), this.data.push(e);
  }
  shift() {
    return this.data.shift();
  }
  length() {
    return this.data.length;
  }
  get() {
    return this.data;
  }
  clear() {
    this.data = [];
  }
}
function it() {
  return {
    referrer: document.referrer,
    type: performance.getEntriesByType("navigation")[0].type
  };
}
function er(r, e) {
  let t = r.target;
  if (t.classList.contains(e))
    return t;
  {
    let i = 2;
    for (; t && i; ) {
      if (t.classList && t.classList.contains(e))
        return t;
      t = t.parentNode, i--;
    }
  }
  return !1;
}
class tr {
  constructor(e, t) {
    x(this, "data");
    x(this, "options");
    x(this, "elementTrackedList");
    x(this, "classTrackedList");
    x(this, "eventTrackedList");
    x(this, "hehaviorStack");
    x(this, "customActions");
    x(this, "customActionsAcount");
    x(this, "report");
    this.data = {}, this.options = Object.assign(
      {
        PI: !0,
        OI: !0,
        RCR: !0,
        DBR: !0,
        HT: !0,
        BS: !0,
        PV: !0,
        elementTrackedList: ["button", "div"],
        classTrackedList: ["tracked"],
        eventTrackedList: ["click"],
        maxBehaviorRecords: 100
      },
      e
    ), this.elementTrackedList = this.options.elementTrackedList, this.classTrackedList = this.options.classTrackedList, this.eventTrackedList = this.options.eventTrackedList, this.hehaviorStack = new $t({
      maxBehaviorRecords: this.options.maxBehaviorRecords
    }), this.customActionsAcount = this.options.customAcount || 5, this.customActions = [], this.report = t, Yt(), window.sendData = this.sendDataCustom.bind(this), this.installUserActionInnerTracker(), this.userActionDataReportHandler();
  }
  initPageInformation() {
    const e = O();
    this.data[P.PI] = e;
  }
  initOriginInformation() {
    const e = it();
    this.data[P.OI] = e;
  }
  initRouterChange() {
    tt((e) => {
      const t = {
        jumpType: e.type,
        pageInfo: O(),
        time: (/* @__PURE__ */ new Date()).getTime(),
        timeFormat: z(/* @__PURE__ */ new Date())
      };
      this.data[P.RCR] ? this.data[P.RCR].push(t) : this.data[P.RCR] = [t];
      const i = {
        name: P.RCR,
        page: O().pathname,
        value: {
          jumpType: e.type
        },
        time: (/* @__PURE__ */ new Date()).getTime(),
        timeFormat: z(/* @__PURE__ */ new Date())
      };
      this.hehaviorStack.push(i);
    });
  }
  initPV() {
    const e = () => {
      const t = {
        pageInfo: O(),
        originInformation: it()
      };
      this.report(t, "PV");
    };
    ot(e), tt(e);
  }
  initDomHandler() {
    this.eventTrackedList.forEach((e) => {
      window.addEventListener(
        e,
        (t) => {
          var h, m, p;
          let i = this.elementTrackedList.includes((m = (h = t.target) == null ? void 0 : h.tagName) == null ? void 0 : m.toLocaleLowerCase()) ? t.target : void 0;
          if (i = i ?? Array.from((p = t.target) == null ? void 0 : p.classList).find((S) => {
            const k = er(t, S);
            return k ? this.classTrackedList.includes(k.className) : !1;
          }) ? t.target : void 0, !i) return;
          const s = {
            tagInfo: {
              id: i.id,
              classList: Array.from(i.classList),
              tagName: i.tagName,
              text: i.textContent
            },
            pageInfo: O(),
            time: (/* @__PURE__ */ new Date()).getTime(),
            timeFormat: z(/* @__PURE__ */ new Date())
          };
          this.data[P.DBR] ? this.data[P.DBR][e] ? this.data[P.DBR][e].push(s) : this.data[P.DBR][e] = [s] : this.data[P.DBR] = { [e]: [s] };
          const l = {
            name: e,
            page: O().pathname,
            value: {
              tagInfo: {
                id: i.id,
                classList: Array.from(i.classList),
                tagName: i.tagName,
                text: i.textContent
              },
              pageInfo: O()
            },
            time: (/* @__PURE__ */ new Date()).getTime(),
            timeFormat: z(/* @__PURE__ */ new Date())
          };
          this.hehaviorStack.push(l);
        },
        !0
      );
    });
  }
  initHttpHandler() {
    const e = (t) => {
      this.data[P.HT] ? this.data[P.HT].push(t) : this.data[P.HT] = [t];
    };
    at(e), ct(e);
  }
  sendDataCustom(e) {
    this.customActions.length === this.customActionsAcount ? (this.report(this.customActions, "custom") && (this.customActions.length = 0), this.customActions.length = 0) : this.customActions.push(e), this.hehaviorStack.push({
      name: "custom",
      page: O().pathname,
      value: e,
      time: (/* @__PURE__ */ new Date()).getTime(),
      timeFormat: z(/* @__PURE__ */ new Date())
    });
  }
  installUserActionInnerTracker() {
    this.options.PI && this.initPageInformation(), this.options.OI && this.initOriginInformation(), this.options.RCR && this.initRouterChange(), this.options.DBR && this.initDomHandler(), this.options.PV && this.initPV(), this.options.HT && this.initHttpHandler();
  }
  userActionDataReportHandler() {
    window.addEventListener("beforeunload", () => {
      JSON.stringify(this.data) !== "{}" && this.report(this.data, "userAction"), this.options.BS && this.report(this.hehaviorStack.get(), "behaviorStack");
    });
  }
}
class ir {
  constructor(e, t) {
    x(this, "appId");
    x(this, "uid");
    x(this, "extra");
    x(this, "options");
    x(this, "performanceTracker");
    x(this, "userActionTracker");
    x(this, "errorTracker");
    this.appId = e, this.options = Object.assign(
      {
        sdkVersion: st.version,
        requestUrl: "http://localhost:3000",
        performanceTracker: !0,
        userActionTracker: !0,
        errorTracker: !0
      },
      t
    ), window.userId = this.setUserId.bind(this), window.extra = this.setExtra.bind(this), this.installInnerTracker();
  }
  installInnerTracker() {
    this.options.performanceTracker && (this.performanceTracker = new Zt(this.options.performanceTracker, this.report.bind(this))), this.options.userActionTracker && (this.userActionTracker = new tr(this.options.userActionTracker, this.report.bind(this))), this.options.errorTracker && (this.errorTracker = new Dt(this.options.errorTracker, this.report.bind(this), this));
  }
  report(e, t) {
    const i = Object.assign(
      { data: e, type: t },
      {
        appId: this.appId,
        uid: this.uid,
        extra: this.extra,
        time: (/* @__PURE__ */ new Date()).getTime(),
        timeFormat: z(/* @__PURE__ */ new Date())
      }
    ), s = new Blob([JSON.stringify(i)]);
    return navigator.sendBeacon(this.options.requestUrl, s);
  }
  setUserId(e) {
    this.uid = e;
  }
  setExtra(e) {
    this.extra = e;
  }
}
export {
  ir as Tracker
};