seo-crawl-audit 0.13.0 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bundle/cli.js CHANGED
@@ -1,20 +1,28 @@
1
- import{createHash as _a}from"node:crypto";var Ra="https://github.com/MelnixDev/seo-crawl-audit/blob/main/docs/rules.md",La=[{id:"page-unreachable",severity:"error",owner:"developer",scope:"page",remediation:"Restore the page or remove references to it."},{id:"http-error",severity:"error",owner:"developer",scope:"page",remediation:"Return a successful response or a deliberate redirect."},{id:"noindex",severity:"info",owner:"seo",scope:"page",remediation:"Remove noindex when the page should appear in search."},{id:"x-robots-noindex",severity:"error",owner:"developer",scope:"page",remediation:"Remove the noindex X-Robots-Tag when indexing is intended."},{id:"robots-blocked",severity:"error",owner:"developer",scope:"page",remediation:"Allow the URL in robots.txt when it should be crawled."},{id:"missing-canonical",severity:"warning",owner:"seo",scope:"page",remediation:"Declare the preferred canonical URL when duplicate URL variants are possible."},{id:"invalid-canonical",severity:"error",owner:"developer",scope:"page",remediation:"Use an absolute or valid relative HTTP(S) canonical URL."},{id:"cross-domain-canonical",severity:"error",owner:"seo",scope:"page",remediation:"Confirm the external canonical or point it to the intended same-site URL."},{id:"canonical-target-error",severity:"error",owner:"developer",scope:"page",remediation:"Point the canonical to an accessible, indexable URL."},{id:"redirect-loop",severity:"error",owner:"developer",scope:"page",remediation:"Remove the circular redirect path."},{id:"long-redirect-chain",severity:"warning",owner:"developer",scope:"page",remediation:"Redirect directly to the final destination."},{id:"sitemap-unavailable",severity:"error",owner:"developer",scope:"site",remediation:"Restore a valid, reachable XML sitemap."},{id:"noindex-in-sitemap",severity:"error",owner:"seo",scope:"page",remediation:"Remove the URL from the sitemap or make it indexable."},{id:"redirect-in-sitemap",severity:"error",owner:"seo",scope:"page",remediation:"Replace the sitemap URL with its final canonical destination."},{id:"missing-title",severity:"error",owner:"content",scope:"page",remediation:"Add a unique, descriptive HTML title."},{id:"duplicate-title",severity:"warning",owner:"content",scope:"page",remediation:"Write a title that uniquely describes this page."},{id:"title-length",severity:"warning",owner:"content",scope:"page",remediation:"Keep the title concise and descriptive, usually 10\u201360 characters."},{id:"missing-description",severity:"warning",owner:"content",scope:"page",remediation:"Add a useful meta description."},{id:"duplicate-description",severity:"warning",owner:"content",scope:"page",remediation:"Write a unique meta description for this page."},{id:"description-length",severity:"warning",owner:"content",scope:"page",remediation:"Keep the description useful and usually between 50 and 160 characters."},{id:"missing-h1",severity:"warning",owner:"content",scope:"page",remediation:"Add one clear primary heading."},{id:"broken-internal-link",severity:"error",owner:"developer",scope:"page",remediation:"Update or remove the internal link, or restore its target."},{id:"orphan-sitemap-page",severity:"warning",owner:"seo",scope:"page",remediation:"Add meaningful internal links to the sitemap page."},{id:"crawlable-not-in-sitemap",severity:"warning",owner:"seo",scope:"page",remediation:"Add the indexable page to the sitemap or intentionally exclude it."},{id:"invalid-hreflang",severity:"warning",owner:"seo",scope:"page",remediation:"Use valid language tags and resolvable HTTP(S) alternate URLs."},{id:"malformed-json-ld",severity:"warning",owner:"developer",scope:"page",remediation:"Fix JSON syntax in the structured-data block."},{id:"http-on-https-site",severity:"warning",owner:"developer",scope:"page",remediation:"Use HTTPS for internal URLs and metadata references."},{id:"invalid-language",severity:"warning",owner:"developer",scope:"page",remediation:"Set a valid BCP 47 language tag on the html element."},{id:"duplicate-content",severity:"warning",owner:"content",scope:"page",remediation:"Consolidate duplicate pages or differentiate their main content."},{id:"multiple-h1",severity:"info",owner:"content",scope:"page",remediation:"Review whether one primary H1 would make the hierarchy clearer."},{id:"missing-open-graph",severity:"info",owner:"content",scope:"page",remediation:"Add Open Graph title, description, and image for social sharing."},{id:"missing-twitter-metadata",severity:"info",owner:"content",scope:"page",remediation:"Add Twitter card metadata when social previews matter."},{id:"image-missing-alt",severity:"info",owner:"content",scope:"page",remediation:"Add meaningful alt text, or an empty alt for decorative images."},{id:"low-word-count",severity:"info",owner:"content",scope:"page",remediation:"Review whether the page provides enough useful primary content."},{id:"robots-changed",severity:"warning",owner:"developer",scope:"site",remediation:"Review the robots.txt change and confirm that crawl access is intentional."},{id:"page-missing",severity:"error",owner:"developer",scope:"page",remediation:"Include the page in the scan or confirm that its removal is intentional."},{id:"status-regression",severity:"error",owner:"developer",scope:"page",remediation:"Restore the previous successful HTTP response."},{id:"new-noindex",severity:"error",owner:"seo",scope:"page",remediation:"Remove the newly introduced noindex unless it is intentional."},{id:"title-removed",severity:"error",owner:"content",scope:"page",remediation:"Restore a descriptive title."},{id:"title-changed",severity:"warning",owner:"content",scope:"page",remediation:"Review and approve the changed title."},{id:"description-removed",severity:"warning",owner:"content",scope:"page",remediation:"Restore a useful meta description."},{id:"canonical-removed",severity:"error",owner:"seo",scope:"page",remediation:"Restore the canonical declaration."},{id:"canonical-changed",severity:"warning",owner:"seo",scope:"page",remediation:"Confirm the new canonical target is deliberate and valid."},{id:"h1-removed",severity:"warning",owner:"content",scope:"page",remediation:"Restore a clear primary heading."},{id:"redirect-changed",severity:"warning",owner:"developer",scope:"page",remediation:"Confirm the new redirect destination is intentional."},{id:"sitemap-url-count-drop",severity:"error",owner:"seo",scope:"site",remediation:"Investigate the sitemap URL loss and restore omitted indexable pages."}],Wn=Object.freeze(La.map(e=>Object.freeze({...e}))),Oa=new Map(Wn.map(e=>[e.id,e]));function Pr(e){return Array.isArray(e)?`[${e.map(Pr).join(",")}]`:e&&typeof e=="object"?`{${Object.entries(e).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>`${t}:${Pr(r)}`).join(",")}}`:JSON.stringify(e)}function Kn(e,t,r,n){return _a("sha256").update(`${e}
1
+ import{createHash as Ya}from"node:crypto";var Ga="https://github.com/MelnixDev/seo-crawl-audit/blob/main/docs/rules.md",Wa=[{id:"page-unreachable",severity:"error",owner:"developer",scope:"page",remediation:"Restore the page or remove references to it."},{id:"http-error",severity:"error",owner:"developer",scope:"page",remediation:"Return a successful response or a deliberate redirect."},{id:"noindex",severity:"info",owner:"seo",scope:"page",remediation:"Remove noindex when the page should appear in search."},{id:"x-robots-noindex",severity:"error",owner:"developer",scope:"page",remediation:"Remove the noindex X-Robots-Tag when indexing is intended."},{id:"robots-blocked",severity:"error",owner:"developer",scope:"page",remediation:"Allow the URL in robots.txt when it should be crawled."},{id:"missing-canonical",severity:"warning",owner:"seo",scope:"page",remediation:"Declare the preferred canonical URL when duplicate URL variants are possible."},{id:"invalid-canonical",severity:"error",owner:"developer",scope:"page",remediation:"Use an absolute or valid relative HTTP(S) canonical URL."},{id:"cross-domain-canonical",severity:"error",owner:"seo",scope:"page",remediation:"Confirm the external canonical or point it to the intended same-site URL."},{id:"canonical-target-error",severity:"error",owner:"developer",scope:"page",remediation:"Point the canonical to an accessible, indexable URL."},{id:"redirect-loop",severity:"error",owner:"developer",scope:"page",remediation:"Remove the circular redirect path."},{id:"long-redirect-chain",severity:"warning",owner:"developer",scope:"page",remediation:"Redirect directly to the final destination."},{id:"sitemap-unavailable",severity:"error",owner:"developer",scope:"site",remediation:"Restore a valid, reachable XML sitemap."},{id:"noindex-in-sitemap",severity:"error",owner:"seo",scope:"page",remediation:"Remove the URL from the sitemap or make it indexable."},{id:"redirect-in-sitemap",severity:"error",owner:"seo",scope:"page",remediation:"Replace the sitemap URL with its final canonical destination."},{id:"missing-title",severity:"error",owner:"content",scope:"page",remediation:"Add a unique, descriptive HTML title."},{id:"duplicate-title",severity:"warning",owner:"content",scope:"page",remediation:"Write a title that uniquely describes this page."},{id:"title-length",severity:"warning",owner:"content",scope:"page",remediation:"Keep the title concise and descriptive, usually 10\u201360 characters."},{id:"missing-description",severity:"warning",owner:"content",scope:"page",remediation:"Add a useful meta description."},{id:"duplicate-description",severity:"warning",owner:"content",scope:"page",remediation:"Write a unique meta description for this page."},{id:"description-length",severity:"warning",owner:"content",scope:"page",remediation:"Keep the description useful and usually between 50 and 160 characters."},{id:"missing-h1",severity:"warning",owner:"content",scope:"page",remediation:"Add one clear primary heading."},{id:"broken-internal-link",severity:"error",owner:"developer",scope:"page",remediation:"Update or remove the internal link, or restore its target."},{id:"orphan-sitemap-page",severity:"warning",owner:"seo",scope:"page",remediation:"Add meaningful internal links to the sitemap page."},{id:"crawlable-not-in-sitemap",severity:"warning",owner:"seo",scope:"page",remediation:"Add the indexable page to the sitemap or intentionally exclude it."},{id:"invalid-hreflang",severity:"warning",owner:"seo",scope:"page",remediation:"Use valid language tags and resolvable HTTP(S) alternate URLs."},{id:"malformed-json-ld",severity:"warning",owner:"developer",scope:"page",remediation:"Fix JSON syntax in the structured-data block."},{id:"http-on-https-site",severity:"warning",owner:"developer",scope:"page",remediation:"Use HTTPS for internal URLs and metadata references."},{id:"invalid-language",severity:"warning",owner:"developer",scope:"page",remediation:"Set a valid BCP 47 language tag on the html element."},{id:"duplicate-content",severity:"warning",owner:"content",scope:"page",remediation:"Consolidate duplicate pages or differentiate their main content."},{id:"multiple-h1",severity:"info",owner:"content",scope:"page",remediation:"Review whether one primary H1 would make the hierarchy clearer."},{id:"missing-open-graph",severity:"info",owner:"content",scope:"page",remediation:"Add Open Graph title, description, and image for social sharing."},{id:"missing-twitter-metadata",severity:"info",owner:"content",scope:"page",remediation:"Add Twitter card metadata when social previews matter."},{id:"image-missing-alt",severity:"info",owner:"content",scope:"page",remediation:"Add meaningful alt text, or an empty alt for decorative images."},{id:"low-word-count",severity:"info",owner:"content",scope:"page",remediation:"Review whether the page provides enough useful primary content."},{id:"robots-changed",severity:"warning",owner:"developer",scope:"site",remediation:"Review the robots.txt change and confirm that crawl access is intentional."},{id:"page-missing",severity:"error",owner:"developer",scope:"page",remediation:"Include the page in the scan or confirm that its removal is intentional."},{id:"status-regression",severity:"error",owner:"developer",scope:"page",remediation:"Restore the previous successful HTTP response."},{id:"new-noindex",severity:"error",owner:"seo",scope:"page",remediation:"Remove the newly introduced noindex unless it is intentional."},{id:"title-removed",severity:"error",owner:"content",scope:"page",remediation:"Restore a descriptive title."},{id:"title-changed",severity:"warning",owner:"content",scope:"page",remediation:"Review and approve the changed title."},{id:"description-removed",severity:"warning",owner:"content",scope:"page",remediation:"Restore a useful meta description."},{id:"canonical-removed",severity:"error",owner:"seo",scope:"page",remediation:"Restore the canonical declaration."},{id:"canonical-changed",severity:"warning",owner:"seo",scope:"page",remediation:"Confirm the new canonical target is deliberate and valid."},{id:"h1-removed",severity:"warning",owner:"content",scope:"page",remediation:"Restore a clear primary heading."},{id:"redirect-changed",severity:"warning",owner:"developer",scope:"page",remediation:"Confirm the new redirect destination is intentional."},{id:"sitemap-url-count-drop",severity:"error",owner:"seo",scope:"site",remediation:"Investigate the sitemap URL loss and restore omitted indexable pages."}],qn=Object.freeze(Wa.map(e=>Object.freeze({...e}))),Ka=new Map(qn.map(e=>[e.id,e]));function Hr(e){return Array.isArray(e)?`[${e.map(Hr).join(",")}]`:e&&typeof e=="object"?`{${Object.entries(e).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>`${t}:${Hr(r)}`).join(",")}}`:JSON.stringify(e)}function es(e,t,r,n){return Ya("sha256").update(`${e}
2
2
  ${t}
3
3
  ${r}
4
- ${Pr(n??null)}`).digest("hex").slice(0,24)}function R(e,t,r,n={},s){let a=Oa.get(e);if(!a)throw new Error(`unknown rule: ${e}`);return{fingerprint:Kn(e,a.scope,t,s),ruleId:e,rule:e,severity:a.severity,scope:a.scope,url:t,message:r,evidence:n,owner:a.owner,remediation:a.remediation,documentationUrl:`${Ra}#${e}`,after:n.actual}}function rt(e,t){return new RegExp(`(^|[\\s,])${t}($|[\\s,])`,"i").test(e??"")}function Jn(e){if(e.toLowerCase()==="x-default")return!0;try{return new Intl.Locale(e),!0}catch{return!1}}function Mr(e,t){let r=new Map;for(let n of e){let s=t(n)?.trim().toLowerCase();if(!s)continue;let a=r.get(s)??[];a.push(n.url),r.set(s,a)}return new Map([...r].filter(([,n])=>n.length>1))}function jn(e){let t=[],r=o=>{t.push(o)},n=new Map(e.pages.map(o=>[o.url,o])),s=new Set(e.sitemap?.urls??[]),a=Mr(e.pages,o=>o.title),c=Mr(e.pages,o=>o.description),l=Mr(e.pages,o=>o.contentHash);e.sitemap?.error&&r(R("sitemap-unavailable",e.sitemap.url,"The configured sitemap could not be loaded",{actual:e.sitemap.error}));for(let o of e.pages){if(o.blockedByRobots){r(R("robots-blocked",o.url,"Page is blocked by robots.txt",{actual:!0}));continue}if(o.error){r(R(o.error.includes("redirect loop")?"redirect-loop":"page-unreachable",o.url,`Page request failed: ${o.error}`,{actual:o.error,redirectChain:o.redirectChain}));continue}if((o.status===null||o.status>=400)&&r(R("http-error",o.url,`Page returned HTTP ${o.status??"unknown"}`,{actual:o.status})),rt(o.robots,"noindex")&&r(R("noindex",o.url,"Page contains a noindex meta directive",{actual:o.robots})),rt(o.xRobotsTag,"noindex")&&r(R("x-robots-noindex",o.url,"Page contains a noindex X-Robots-Tag",{actual:o.xRobotsTag})),!o.canonicalRaw&&!o.canonical&&r(R("missing-canonical",o.url,"Page does not declare a canonical URL",{actual:null})),o.canonicalRaw&&!o.canonical&&r(R("invalid-canonical",o.url,"Canonical URL is invalid",{actual:o.canonicalRaw})),o.canonical&&new URL(o.canonical).origin!==new URL(e.siteUrl).origin&&r(R("cross-domain-canonical",o.url,"Canonical points to another origin",{actual:o.canonical})),o.canonical){let p=n.get(o.canonical);p&&(p.error||(p.status??500)>=400)&&r(R("canonical-target-error",o.url,"Canonical target is unavailable",{target:o.canonical,actual:p.status??p.error},o.canonical))}o.redirectChain.length>3&&r(R("long-redirect-chain",o.url,`Page uses ${o.redirectChain.length} redirects`,{actual:o.redirectChain.length,redirectChain:o.redirectChain})),s.has(o.url)&&(rt(o.robots,"noindex")||rt(o.xRobotsTag,"noindex"))&&r(R("noindex-in-sitemap",o.url,"Sitemap URL is marked noindex",{actual:o.robots??o.xRobotsTag})),s.has(o.url)&&o.redirectChain.length>0&&r(R("redirect-in-sitemap",o.url,"Sitemap URL redirects",{actual:o.finalUrl,redirectChain:o.redirectChain})),o.title?(a.get(o.title.trim().toLowerCase())&&r(R("duplicate-title",o.url,"Title is shared by multiple pages",{actual:o.title,urls:a.get(o.title.trim().toLowerCase())},o.title.trim().toLowerCase())),(o.title.length<10||o.title.length>60)&&r(R("title-length",o.url,`Title length is ${o.title.length} characters`,{actual:o.title.length,value:o.title}))):r(R("missing-title",o.url,"Page does not have a title",{actual:null})),o.description?(c.get(o.description.trim().toLowerCase())&&r(R("duplicate-description",o.url,"Meta description is shared by multiple pages",{actual:o.description,urls:c.get(o.description.trim().toLowerCase())},o.description.trim().toLowerCase())),(o.description.length<50||o.description.length>160)&&r(R("description-length",o.url,`Description length is ${o.description.length} characters`,{actual:o.description.length,value:o.description}))):r(R("missing-description",o.url,"Page does not have a meta description",{actual:null})),o.h1Count===0?r(R("missing-h1",o.url,"Page does not contain an H1 heading",{actual:0})):o.h1Count>1&&r(R("multiple-h1",o.url,`Page contains ${o.h1Count} H1 headings`,{actual:o.h1Count}));for(let p of o.internalLinks){let m=n.get(p);m&&(m.error||(m.status??500)>=400)&&r(R("broken-internal-link",o.url,"Internal link points to an unavailable page",{target:p,actual:m.status??m.error},p))}s.has(o.url)&&o.url!==e.siteUrl&&e.linkGraph.orphanUrls.includes(o.url)&&r(R("orphan-sitemap-page",o.url,"Sitemap page has no discovered internal links",{actual:!0})),e.sitemap&&!s.has(o.url)&&!rt(o.robots,"noindex")&&(o.status??500)<400&&r(R("crawlable-not-in-sitemap",o.url,"Crawlable page is absent from the sitemap",{actual:!1}));for(let p of o.hreflang)(!Jn(p.lang)||!p.url)&&r(R("invalid-hreflang",o.url,"Hreflang declaration is invalid",{actual:p},p));for(let[p,m]of o.jsonLd.entries())m.valid||r(R("malformed-json-ld",o.url,"JSON-LD block contains invalid JSON",{actual:m.error,index:p},p));e.siteUrl.startsWith("https:")&&[o.url,o.canonical,...o.internalLinks].some(p=>p?.startsWith("http:"))&&r(R("http-on-https-site",o.url,"HTTPS site references an internal HTTP URL",{actual:[o.url,o.canonical,...o.internalLinks].filter(p=>p?.startsWith("http:"))})),o.lang&&!Jn(o.lang)&&r(R("invalid-language",o.url,"HTML language declaration is invalid",{actual:o.lang})),o.contentHash&&l.get(o.contentHash)&&r(R("duplicate-content",o.url,"Main text is an exact duplicate of another page",{urls:l.get(o.contentHash)},o.contentHash)),(!o.openGraph.title||!o.openGraph.description||!o.openGraph.image)&&r(R("missing-open-graph",o.url,"Open Graph metadata is incomplete",{actual:o.openGraph})),(!o.twitter.card||!o.twitter.title||!o.twitter.description||!o.twitter.image)&&r(R("missing-twitter-metadata",o.url,"Twitter card metadata is incomplete",{actual:o.twitter}));let d=o.images.filter(p=>p.alt===null).map(p=>p.src);d.length>0&&r(R("image-missing-alt",o.url,`${d.length} image(s) do not have an alt attribute`,{actual:d})),o.wordCount<200&&r(R("low-word-count",o.url,`Page contains approximately ${o.wordCount} visible words`,{actual:o.wordCount}))}return t}var Vn={error:0,warning:1,info:2};function Da(e,t){let r=(()=>{try{return new URL(e).pathname}catch{return e}})(),n=t.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replaceAll("**","\0").replaceAll("*","[^/]*").replaceAll("\0",".*"),s=new RegExp(`^${n}$`);return s.test(r)||s.test(e)}function Ba(e,t,r){return t.find(n=>n.rule!==e.ruleId||!Da(e.url,n.urlPattern)?!1:n.expiresAt?new Date(`${n.expiresAt}T23:59:59.999Z`).getTime()>=r.getTime():!0)??null}function Fe(e){return e.sort((t,r)=>Vn[t.severity]-Vn[r.severity]||t.url.localeCompare(r.url)||t.ruleId.localeCompare(r.ruleId)||t.fingerprint.localeCompare(r.fingerprint))}function nt(e,t,r={}){let n=r.enabledRules??t.config.enabledRules,s=n?new Set(n):null,a={...t.config.severityOverrides,...r.severityOverrides??{}},c=r.suppressions??t.config.suppressions,l=new Date(r.now??Date.now());return Fe(e.filter(o=>!s||s.has(o.ruleId)).map(o=>({...o,severity:a[o.ruleId]??o.severity})).filter(o=>!Ba(o,c,l)))}import{createHash as va}from"node:crypto";var V="0.13.0",st="1.1.0",ka="seo-crawl-audit",xe=`${ka}/${V}`;var Pa={title:null,description:null,image:null},Ma={card:null,title:null,description:null,image:null};function Xn(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("snapshot must be an object");return e}function Ua(e){if(!e||typeof e!="object"||typeof e.url!="string")throw new Error("snapshot page URL must be a string");return e}function Ur(e){return Array.isArray(e)?`[${e.map(Ur).join(",")}]`:e&&typeof e=="object"?`{${Object.entries(e).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>`${JSON.stringify(t)}:${Ur(r)}`).join(",")}}`:JSON.stringify(e)}function Fa(e){return va("sha256").update(Ur(e)).digest("hex")}function Ha(e){return{url:e.url,finalUrl:e.finalUrl??null,status:e.status??null,contentType:e.contentType??null,blockedByRobots:e.blockedByRobots??!1,error:e.error??null,title:e.title??null,description:e.description??null,canonical:e.canonical??null,canonicalRaw:e.canonicalRaw??e.canonical??null,robots:e.robots??null,xRobotsTag:e.xRobotsTag??null,lang:e.lang??null,h1Count:e.h1Count??0,openGraph:e.openGraph??Pa,twitter:e.twitter??Ma,hreflang:e.hreflang??[],jsonLd:e.jsonLd??[],images:e.images??[],links:[...e.links??[]].sort(),internalLinks:[...e.internalLinks??[]].sort(),externalLinks:[...e.externalLinks??[]].sort(),wordCount:e.wordCount??0,contentHash:e.contentHash??null,depth:e.depth??0,redirectChain:e.redirectChain??[],responseBytes:e.responseBytes??0}}function Qa(e){let t=e.source??{},r=e.options??{},n=e.pages?.[0],s=n&&typeof n=="object"?n.url:void 0,a=e.siteUrl??e.startUrl??t.startUrl??(typeof s=="string"?s:void 0);if(!a)throw new Error("snapshot site URL must be a string");return{schemaVersion:1,url:a,sitemap:r.sitemap??t.sitemap??"auto",maxPages:r.maxPages??t.maxPages??100,concurrency:r.concurrency??5,delay:r.requestDelay??t.requestDelay??100,timeout:r.timeout??1e4,respectRobots:r.respectRobots??t.respectRobots??!0,includeQuery:r.includeQuery??t.includeQuery??!1,maxRedirects:r.maxRedirects??10,maxResponseBytes:r.maxResponseBytes??5*1024*1024,enabledRules:r.enabledRules??null,severityOverrides:r.severityOverrides??{},suppressions:r.suppressions??[],regressionBudgets:r.regressionBudgets??{},report:r.report??{}}}function Ya(e,t){let r=new Set(e.map(a=>a.url)),n=new Set(e.flatMap(a=>a.internalLinks)),s=new Set;for(let a of e)(a.error||a.blockedByRobots||(a.status??500)>=400)&&s.add(a.url);return{internalEdges:e.reduce((a,c)=>a+c.internalLinks.length,0),externalEdges:e.reduce((a,c)=>a+c.externalLinks.length,0),orphanUrls:t.filter(a=>r.has(a)&&!n.has(a)),brokenInternalUrls:[...s].sort()}}function Ga(e,t){let r=t.filter(s=>s.blockedByRobots).length,n=t.filter(s=>s.error||(s.status??500)>=400).length;return{requested:e.requested??t.length,completed:t.length,succeeded:t.length-n-r,failed:n,blockedByRobots:r,redirected:t.filter(s=>s.redirectChain.length>0||s.url!==s.finalUrl).length,durationMs:e.durationMs??0,truncated:e.truncated??!1,partial:e.partial??!1}}function be(e){let t=Xn(e),r=Qa(t),n=(t.pages??[]).map(o=>Ha(Ua(o))).sort((o,d)=>o.url.localeCompare(d.url)),s=t.sitemap?.urls??[];if(t.sitemap&&!t.sitemap.url)throw new Error("snapshot sitemap URL must be a string");let a=t.sitemap?{url:t.sitemap.url,urls:[...s].sort(),sitemapCount:t.sitemap.sitemapCount??0,truncated:t.sitemap.truncated??!1,error:t.sitemap.error??null}:null,c=t.startUrl??r.url,l=t.truncated??!1;return{schemaVersion:2,engineVersion:V,ruleSetVersion:st,generatedAt:t.generatedAt??new Date().toISOString(),siteUrl:c,configurationHash:Fa(r),config:r,robots:{url:t.robots?.url??new URL("/robots.txt",c).href,status:t.robots?.status??null,sha256:t.robots?.sha256??null,error:t.robots?.error??null,denyAll:t.robots?.denyAll??!1},sitemap:a,pages:n,linkGraph:t.linkGraph??Ya(n,s),statistics:t.statistics??Ga(t,n),partial:t.partial??!1,source:{startUrl:c,maxPages:r.maxPages,requestDelay:r.delay,includeQuery:r.includeQuery,respectRobots:r.respectRobots,sitemap:typeof r.sitemap=="string"&&!["auto","none"].includes(r.sitemap)?r.sitemap:null},truncated:l}}function Ne(e){let t=Xn(e);if(!Array.isArray(t.pages))throw new Error("snapshot pages must be an array");if(t.schemaVersion===2)return be({...t,startUrl:t.siteUrl,options:t.config,pages:t.pages,generatedAt:t.generatedAt,partial:t.partial,statistics:t.statistics,linkGraph:t.linkGraph});if(t.schemaVersion===1)return be(t);throw new Error(`unsupported snapshot schema version: ${String(t.schemaVersion)}`)}function Se(e){if(e.schemaVersion===2)return e;let t=e,r=t.pages?.[0],n=r&&typeof r=="object"?r.url:void 0,s=typeof n=="string"?n:t.source?.startUrl??"https://invalid.local/";return be({...t,startUrl:t.siteUrl??t.source?.startUrl??s,robots:t.robots??{url:new URL("/robots.txt",s).href,status:null,sha256:null,error:null},options:t.config??t.options??{}})}function _e(e,t={}){let r=Se(e);return nt(jn(r),r,t)}function Zn(e,t){return new RegExp(`(^|[\\s,])${t}($|[\\s,])`,"i").test(e??"")}function z(e,t,r,n,s){let a=R(e,t,r,{before:n,after:s,actual:s});return a.before=n,a.after=s,a}function $n(e,t){let r=!t.partial&&!t.truncated,n=[],s=new Map(t.pages.map(o=>[o.url,o]));e.robots.sha256&&t.robots.sha256&&e.robots.sha256!==t.robots.sha256&&n.push(z("robots-changed",t.robots.url,"robots.txt content changed",e.robots.sha256,t.robots.sha256));let a=e.sitemap?.urls.length??0,c=t.sitemap?.urls.length??0,l=a-c;r&&a>0&&l>=Math.max(5,Math.ceil(a*.2))&&n.push(z("sitemap-url-count-drop",t.sitemap?.url??e.sitemap?.url??t.siteUrl,`Sitemap URL count dropped by ${l}`,a,c));for(let o of e.pages){let d=s.get(o.url);if(!d){r&&n.push(z("page-missing",o.url,"Page was not checked",o.status,null));continue}if(d.blockedByRobots&&!o.blockedByRobots){n.push(z("robots-blocked",o.url,"Page is now blocked by robots.txt",!1,!0));continue}if(d.error&&!o.error){n.push(z(d.error.includes("redirect loop")?"redirect-loop":"page-unreachable",o.url,`Page request failed: ${d.error}`,o.error,d.error));continue}o.status!==null&&o.status<400&&(d.status===null||d.status>=400)&&n.push(z("status-regression",o.url,`HTTP status regressed from ${o.status} to ${d.status??"none"}`,o.status,d.status));let p=`${o.robots??""},${o.xRobotsTag??""}`,m=`${d.robots??""},${d.xRobotsTag??""}`;if(!Zn(p,"noindex")&&Zn(m,"noindex")&&n.push(z("new-noindex",o.url,"Page now contains a noindex directive",p,m)),o.title&&!d.title?n.push(z("title-removed",o.url,"Page title was removed",o.title,d.title)):o.title&&d.title&&o.title!==d.title&&n.push(z("title-changed",o.url,"Page title changed",o.title,d.title)),o.description&&!d.description&&n.push(z("description-removed",o.url,"Meta description was removed",o.description,d.description)),o.canonical&&!d.canonical)n.push(z("canonical-removed",o.url,"Canonical URL was removed",o.canonical,d.canonical));else if(o.canonical&&d.canonical&&o.canonical!==d.canonical){let f=z("canonical-changed",o.url,"Canonical URL changed",o.canonical,d.canonical);new URL(d.canonical).origin!==new URL(o.url).origin&&(f.severity="error"),n.push(f)}if(o.h1Count>0&&d.h1Count===0&&n.push(z("h1-removed",o.url,"All H1 headings were removed",o.h1Count,d.h1Count)),o.finalUrl&&d.finalUrl&&o.finalUrl!==d.finalUrl){let f=z("redirect-changed",o.url,"Final redirect URL changed",o.finalUrl,d.finalUrl);new URL(d.finalUrl).origin!==new URL(o.url).origin&&(f.severity="error"),n.push(f)}}return n}function Ka(e,t,r={}){let n=Se(e),s=Se(t);return nt($n(n,s),s,r)}function it(e,t){return{...e,lifecycle:t}}function Ut(e,t,r={}){let n=Se(e),s=Se(t),a=!s.partial&&!s.truncated,c=new Set(s.pages.map(I=>I.url)),l=new Map(_e(n,r).map(I=>[I.fingerprint,I])),o=new Map(_e(s,r).map(I=>[I.fingerprint,I])),d=[],p=[],m=[],f=[];for(let[I,_]of o){let x=l.get(I);x?JSON.stringify(x.evidence)===JSON.stringify(_.evidence)?m.push(it(_,"unchanged")):p.push(it({..._,before:x.evidence,after:_.evidence},"ongoing")):d.push(it(_,"new"))}for(let[I,_]of l)(_.scope==="page"?c.has(_.url):a)&&!o.has(I)&&f.push(it(_,"resolved"));let g=new Set(d.map(I=>I.fingerprint));for(let I of Ka(n,s,r))g.has(I.fingerprint)||d.push(it(I,"new"));let y={...n.config.regressionBudgets,...s.config.regressionBudgets},w=Object.entries(y).flatMap(([I,_])=>{let x=d.filter(L=>L.severity===I||L.ruleId===I).length;return x>_?[{budget:I,allowed:_,actual:x}]:[]});return Fe(d),Fe(p),Fe(m),Fe(f),{complete:a,newIssues:d,ongoingIssues:p,resolvedIssues:f,unchangedIssues:m,issues:[...d,...p],budgetExceeded:w}}var Fr="seo-audit.config.json",qn=Object.freeze({schemaVersion:1,url:"",sitemap:"auto",maxPages:100,concurrency:5,delay:100,timeout:1e4,respectRobots:!0,includeQuery:!1,maxRedirects:10,maxResponseBytes:5242880,enabledRules:null,severityOverrides:{},suppressions:[],regressionBudgets:{},report:{}});function at(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${t} must be an object`);return e}function Re(e,t,r,n=Number.MAX_SAFE_INTEGER){if(!Number.isInteger(e)||e<r||e>n)throw new Error(`${t} must be an integer between ${r} and ${n}`);return e}function ot(e,t){if(e!==void 0){if(typeof e!="string")throw new Error(`${t} must be a string`);return e}}function Hr(e){let t=at(e,"config"),r=new Set(["$schema","schemaVersion","url","sitemap","maxPages","concurrency","delay","timeout","respectRobots","includeQuery","maxRedirects","maxResponseBytes","enabledRules","severityOverrides","suppressions","regressionBudgets","report"]);for(let s of Object.keys(t))if(!r.has(s))throw new Error(`unknown config property: ${s}`);let n={};if(t.schemaVersion!==void 0&&t.schemaVersion!==1)throw new Error("schemaVersion must be 1");if(t.url!==void 0){let s=ot(t.url,"url");if(!/^https?:\/\//i.test(s))throw new Error("url must be an HTTP(S) URL");n.url=s}if(t.sitemap!==void 0){let s=ot(t.sitemap,"sitemap");if(!["auto","none"].includes(s)&&!/^https?:\/\//i.test(s))throw new Error("sitemap must be auto, none, or an HTTP(S) URL");n.sitemap=s}t.maxPages!==void 0&&(n.maxPages=Re(t.maxPages,"maxPages",1)),t.concurrency!==void 0&&(n.concurrency=Re(t.concurrency,"concurrency",1,50)),t.delay!==void 0&&(n.delay=Re(t.delay,"delay",0)),t.timeout!==void 0&&(n.timeout=Re(t.timeout,"timeout",1)),t.maxRedirects!==void 0&&(n.maxRedirects=Re(t.maxRedirects,"maxRedirects",0,50)),t.maxResponseBytes!==void 0&&(n.maxResponseBytes=Re(t.maxResponseBytes,"maxResponseBytes",1024));for(let s of["respectRobots","includeQuery"])if(t[s]!==void 0){if(typeof t[s]!="boolean")throw new Error(`${s} must be a boolean`);n[s]=t[s]}if(t.enabledRules!==void 0){if(t.enabledRules!==null&&(!Array.isArray(t.enabledRules)||t.enabledRules.some(s=>typeof s!="string")))throw new Error("enabledRules must be null or an array of rule IDs");n.enabledRules=t.enabledRules}if(t.severityOverrides!==void 0){let s=at(t.severityOverrides,"severityOverrides");for(let[a,c]of Object.entries(s))if(!["error","warning","info"].includes(c))throw new Error(`severityOverrides.${a} must be error, warning, or info`);n.severityOverrides=s}if(t.suppressions!==void 0){if(!Array.isArray(t.suppressions))throw new Error("suppressions must be an array");n.suppressions=t.suppressions.map((s,a)=>{let c=at(s,`suppressions[${a}]`);for(let l of["rule","urlPattern","reason"])if(typeof c[l]!="string"||c[l]==="")throw new Error(`suppressions[${a}].${l} must be a non-empty string`);if(c.expiresAt!==void 0&&!/^\d{4}-\d{2}-\d{2}$/.test(String(c.expiresAt)))throw new Error(`suppressions[${a}].expiresAt must use YYYY-MM-DD`);return c})}if(t.regressionBudgets!==void 0){let s=at(t.regressionBudgets,"regressionBudgets");n.regressionBudgets=Object.fromEntries(Object.entries(s).map(([a,c])=>[a,Re(c,`regressionBudgets.${a}`,0)]))}if(t.report!==void 0){let s=at(t.report,"report"),a={},c=ot(s.agencyName,"report.agencyName"),l=ot(s.logo,"report.logo"),o=ot(s.primaryColor,"report.primaryColor");if(c!==void 0&&(a.agencyName=c),l!==void 0&&(a.logo=l),o!==void 0&&(a.primaryColor=o),a.primaryColor&&!/^#[0-9a-f]{6}$/i.test(a.primaryColor))throw new Error("report.primaryColor must be a six-digit hex color");n.report=Object.fromEntries(Object.entries(a).filter(([,d])=>d!==void 0))}return n}function fe(e,t={},r={}){return{...{...qn,...r,...t,...e},schemaVersion:1,severityOverrides:{...r.severityOverrides??{},...t.severityOverrides??{},...e.severityOverrides??{}},regressionBudgets:{...r.regressionBudgets??{},...t.regressionBudgets??{},...e.regressionBudgets??{}},report:{...r.report??{},...t.report??{},...e.report??{}},suppressions:e.suppressions??t.suppressions??r.suppressions??[]}}function Ft(){}var Ht=Object.freeze({debug:Ft,info:Ft,warn:Ft,error:Ft});import{setTimeout as Ja}from"node:timers/promises";function ja(e=0,{now:t=Date.now,wait:r=Ja}={}){let n=Math.max(0,e),s=0,a=Promise.resolve();return function(){if(n===0)return Promise.resolve();let l=a.then(async()=>{let o=Math.max(0,s-t());o>0&&await r(o),s=t()+n});return a=l.catch(()=>{}),l}}function He(e=0,t=ja){let r=new Map;return n=>{let s=new URL(n).origin,a=r.get(s);return a||(a=t(e),r.set(s,a)),a()}}import{createHash as eo}from"node:crypto";import{setTimeout as zn}from"node:timers/promises";var me=class extends Error{redirectChain;constructor(t,r=[],n){super(t,n),this.name="RequestFailure",this.redirectChain=r}};function Va(e){return e===429||e===500||e===502||e===503||e===504}function Xa(e,t=Date.now()){if(!e)return null;let r=Number(e);if(Number.isFinite(r)&&r>=0)return Math.min(r*1e3,3e4);let n=Date.parse(e);return Number.isNaN(n)?null:Math.min(Math.max(0,n-t),3e4)}function Za(e,t){let r=AbortSignal.timeout(e);return t?AbortSignal.any([t,r]):r}async function $a(e,t,r){let n=[],s=new Set([e]),a=e;for(;;){r.signal?.throwIfAborted(),await r.gate?.(a);let c=await r.fetch(a,{...t,redirect:"manual",signal:Za(r.timeout,r.signal)}),l=c.headers.get("location");if(c.status<300||c.status>=400||!l)return{response:c,redirectChain:n};let o=new URL(l,a).href;if(n.push({url:a,status:c.status,location:o}),await c.body?.cancel(),s.has(o))throw new me(`redirect loop detected at ${o}`,n);if(n.length>r.maxRedirects)throw new me(`redirect limit of ${r.maxRedirects} exceeded`,n);s.add(o),a=o}}async function Le(e,t,r){let n;for(let s=0;s<=r.retries;s+=1)try{let a=await $a(e,t,r);if(!Va(a.response.status)||s===r.retries)return a;let c=Xa(a.response.headers.get("retry-after"));await a.response.body?.cancel();let l=Math.floor((r.random??Math.random)()*100),o=c??Math.min(250*2**s+l,3e4);await r.onEvent?.({type:"retry",url:e,attempt:s+1,delayMs:o}),await zn(o,void 0,{signal:r.signal})}catch(a){if(r.signal?.aborted)throw r.signal.reason??a;if(n=a,a instanceof me||s===r.retries)break;let c=Math.floor((r.random??Math.random)()*100),l=Math.min(250*2**s+c,3e4);await r.onEvent?.({type:"retry",url:e,attempt:s+1,delayMs:l}),await zn(l,void 0,{signal:r.signal})}throw n instanceof me?n:new me(n instanceof Error?n.message:String(n),[],{cause:n})}async function Oe(e,t){if(!e.body)return{text:"",bytes:0,buffer:Buffer.alloc(0)};let r=e.body.getReader(),n=[],s=0;for(;;){let{done:c,value:l}=await r.read();if(c)break;if(s+=l.byteLength,s>t)throw await r.cancel(),new me(`response exceeds ${t} bytes`);n.push(Buffer.from(l))}let a=Buffer.concat(n);return{text:a.toString("utf8"),bytes:s,buffer:a}}function qa(e,t){if(!t)return!1;let r=t.endsWith("$"),s=(r?t.slice(0,-1):t).replace(/[.+?^${}()|[\]\\]/g,"\\$&").replaceAll("*",".*");return new RegExp(`^${s}${r?"$":""}`).test(e)}function za(e,t){let r=[],n=null;for(let l of e.replace(/^\uFEFF/,"").split(/\r?\n/)){let o=l.replace(/#.*$/,"").trim(),d=o.indexOf(":");if(!o||d<0)continue;let p=o.slice(0,d).trim().toLowerCase(),m=o.slice(d+1).trim();if(p==="user-agent"){(!n||n.hasRules)&&(n={agents:[],rules:[],hasRules:!1},r.push(n)),m&&n.agents.push(m.toLowerCase());continue}n&&(p==="allow"||p==="disallow")&&m&&(n.rules.push({type:p,path:m}),n.hasRules=!0)}let s=t.toLowerCase(),a=r.filter(l=>l.agents.some(o=>o!=="*"&&s.includes(o)));return(a.length>0?a:r.filter(l=>l.agents.includes("*"))).flatMap(l=>l.rules)}function es(e,t){if(t.denyAll)return!1;let r=new URL(e),n=`${r.pathname}${r.search}`,s=(t.rules??[]).filter(a=>qa(n,a.path)).sort((a,c)=>c.path.length-a.path.length||(a.type==="allow"?-1:1));return s.length===0||s[0]?.type==="allow"}async function Qt(e,t){let r=new URL("/robots.txt",e).href;try{let{response:n}=await Le(r,{headers:{accept:"text/plain,*/*;q=0.1","user-agent":t.userAgent}},{fetch:t.fetch,timeout:t.timeout,maxRedirects:t.maxRedirects,retries:t.retries,signal:t.signal,gate:t.requestGate,onEvent:t.onEvent}),{text:s}=await Oe(n,to);return{url:r,status:n.status,body:s,sha256:eo("sha256").update(s).digest("hex"),rules:n.ok?za(s,t.userAgent):[],denyAll:n.status===401||n.status===403,error:null}}catch(n){if(t.signal?.aborted)throw n;return{url:r,status:null,body:"",sha256:null,rules:[],denyAll:!1,error:n instanceof Error?n.message:String(n)}}}var to=512*1024;import{gunzipSync as Tc}from"node:zlib";var ts=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",ro=ts+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040",no="["+ts+"]["+ro+"]*",so=new RegExp("^"+no+"$");function Yt(e,t){let r=[],n=t.exec(e);for(;n;){let s=[];s.startIndex=t.lastIndex-n[0].length;let a=n.length;for(let c=0;c<a;c++)s.push(n[c]);r.push(s),n=t.exec(e)}return r}var Qr=function(e){let t=so.exec(e);return!(t===null||typeof t>"u")};function rs(e){return typeof e<"u"}var ct=["hasOwnProperty","toString","valueOf","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__"],Gt=["__proto__","constructor","prototype"];var io={allowBooleanAttributes:!1,unpairedTags:[]};function Wt(e,t){t=Object.assign({},io,t);let r=[],n=!1,s=!1;e[0]==="\uFEFF"&&(e=e.substr(1));for(let a=0;a<e.length;a++)if(e[a]==="<"&&e[a+1]==="?"){if(a+=2,a=ss(e,a),a.err)return a}else if(e[a]==="<"){let c=a;if(a++,e[a]==="!"){a=is(e,a);continue}else{let l=!1;e[a]==="/"&&(l=!0,a++);let o="";for(;a<e.length&&e[a]!==">"&&e[a]!==" "&&e[a]!==" "&&e[a]!==`
5
- `&&e[a]!=="\r";a++)o+=e[a];if(o=o.trim(),o[o.length-1]==="/"&&(o=o.substring(0,o.length-1),a--),!ho(o)){let m;return o.trim().length===0?m="Invalid space after '<'.":m="Tag '"+o+"' is an invalid name.",H("InvalidTag",m,X(e,a))}let d=co(e,a);if(d===!1)return H("InvalidAttr","Attributes for '"+o+"' have open quote.",X(e,a));let p=d.value;if(a=d.index,p[p.length-1]==="/"){let m=a-p.length;p=p.substring(0,p.length-1);let f=as(p,t);if(f===!0)n=!0;else return H(f.err.code,f.err.msg,X(e,m+f.err.line))}else if(l)if(d.tagClosed){if(p.trim().length>0)return H("InvalidTag","Closing tag '"+o+"' can't have attributes or invalid starting.",X(e,c));if(r.length===0)return H("InvalidTag","Closing tag '"+o+"' has not been opened.",X(e,c));{let m=r.pop();if(o!==m.tagName){let f=X(e,m.tagStartPos);return H("InvalidTag","Expected closing tag '"+m.tagName+"' (opened in line "+f.line+", col "+f.col+") instead of closing tag '"+o+"'.",X(e,c))}r.length==0&&(s=!0)}}else return H("InvalidTag","Closing tag '"+o+"' doesn't have proper closing.",X(e,a));else{let m=as(p,t);if(m!==!0)return H(m.err.code,m.err.msg,X(e,a-p.length+m.err.line));if(s===!0)return H("InvalidXml","Multiple possible root nodes found.",X(e,a));t.unpairedTags.indexOf(o)!==-1||r.push({tagName:o,tagStartPos:c}),n=!0}for(a++;a<e.length;a++)if(e[a]==="<")if(e[a+1]==="!"){a++,a=is(e,a);continue}else if(e[a+1]==="?"){if(a=ss(e,++a),a.err)return a}else break;else if(e[a]==="&"){let m=Ao(e,a);if(m==-1)return H("InvalidChar","char '&' is not expected.",X(e,a));a=m}else if(s===!0&&!ns(e[a]))return H("InvalidXml","Extra text at the end",X(e,a));e[a]==="<"&&a--}}else{if(ns(e[a]))continue;return H("InvalidChar","char '"+e[a]+"' is not expected.",X(e,a))}if(n){if(r.length==1)return H("InvalidTag","Unclosed tag '"+r[0].tagName+"'.",X(e,r[0].tagStartPos));if(r.length>0)return H("InvalidXml","Invalid '"+JSON.stringify(r.map(a=>a.tagName),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1})}else return H("InvalidXml","Start tag expected.",1);return!0}function ns(e){return e===" "||e===" "||e===`
6
- `||e==="\r"}function ss(e,t){let r=t;for(;t<e.length;t++)if(e[t]=="?"||e[t]==" "){let n=e.substr(r,t-r);if(t>5&&n==="xml")return H("InvalidXml","XML declaration allowed only at the start of the document.",X(e,t));if(e[t]=="?"&&e[t+1]==">"){t++;break}else continue}return t}function is(e,t){if(e.length>t+5&&e[t+1]==="-"&&e[t+2]==="-"){for(t+=3;t<e.length;t++)if(e[t]==="-"&&e[t+1]==="-"&&e[t+2]===">"){t+=2;break}}else if(e.length>t+8&&e[t+1]==="D"&&e[t+2]==="O"&&e[t+3]==="C"&&e[t+4]==="T"&&e[t+5]==="Y"&&e[t+6]==="P"&&e[t+7]==="E"){let r=1;for(t+=8;t<e.length;t++)if(e[t]==="<")r++;else if(e[t]===">"&&(r--,r===0))break}else if(e.length>t+9&&e[t+1]==="["&&e[t+2]==="C"&&e[t+3]==="D"&&e[t+4]==="A"&&e[t+5]==="T"&&e[t+6]==="A"&&e[t+7]==="["){for(t+=8;t<e.length;t++)if(e[t]==="]"&&e[t+1]==="]"&&e[t+2]===">"){t+=2;break}}return t}var ao='"',oo="'";function co(e,t){let r="",n="",s=!1;for(;t<e.length;t++){if(e[t]===ao||e[t]===oo)n===""?n=e[t]:n!==e[t]||(n="");else if(e[t]===">"&&n===""){s=!0;break}r+=e[t]}return n!==""?!1:{value:r,index:t,tagClosed:s}}var lo=new RegExp(`(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['"])(([\\s\\S])*?)\\5)?`,"g");function as(e,t){let r=Yt(e,lo),n={};for(let s=0;s<r.length;s++){if(r[s][1].length===0)return H("InvalidAttr","Attribute '"+r[s][2]+"' has no space in starting.",lt(r[s]));if(r[s][3]!==void 0&&r[s][4]===void 0)return H("InvalidAttr","Attribute '"+r[s][2]+"' is without value.",lt(r[s]));if(r[s][3]===void 0&&!t.allowBooleanAttributes)return H("InvalidAttr","boolean attribute '"+r[s][2]+"' is not allowed.",lt(r[s]));let a=r[s][2];if(!po(a))return H("InvalidAttr","Attribute '"+a+"' is an invalid name.",lt(r[s]));if(!Object.prototype.hasOwnProperty.call(n,a))n[a]=1;else return H("InvalidAttr","Attribute '"+a+"' is repeated.",lt(r[s]))}return!0}function uo(e,t){let r=/\d/;for(e[t]==="x"&&(t++,r=/[\da-fA-F]/);t<e.length;t++){if(e[t]===";")return t;if(!e[t].match(r))break}return-1}function Ao(e,t){if(t++,e[t]===";")return-1;if(e[t]==="#")return t++,uo(e,t);let r=0;for(;t<e.length;t++,r++)if(!(e[t].match(/\w/)&&r<20)){if(e[t]===";")break;return-1}return t}function H(e,t,r){return{err:{code:e,msg:t,line:r.line||r,col:r.col}}}function po(e){return Qr(e)}function ho(e){return Qr(e)}function X(e,t){let r=e.substring(0,t).split(/\r?\n/);return{line:r.length,col:r[r.length-1].length+1}}function lt(e){return e.startIndex+e[1].length}var Yr={cent:"\xA2",pound:"\xA3",curren:"\xA4",yen:"\xA5",euro:"\u20AC",dollar:"$",fnof:"\u0192",inr:"\u20B9",af:"\u060B",birr:"\u1265\u122D",peso:"\u20B1",rub:"\u20BD",won:"\u20A9",yuan:"\xA5",cedil:"\xB8"};var dt={amp:"&",apos:"'",gt:">",lt:"<",quot:'"'},Gr={nbsp:"\xA0",copy:"\xA9",reg:"\xAE",trade:"\u2122",mdash:"\u2014",ndash:"\u2013",hellip:"\u2026",laquo:"\xAB",raquo:"\xBB",lsquo:"\u2018",rsquo:"\u2019",ldquo:"\u201C",rdquo:"\u201D",bull:"\u2022",para:"\xB6",sect:"\xA7",deg:"\xB0",frac12:"\xBD",frac14:"\xBC",frac34:"\xBE"};var Qe=Object.freeze({ALLOW:"allow",BLOCK:"block",THROW:"throw"}),mo=new Set("!?\\\\/[]$%{}^&*()<>|+");function os(e){if(e[0]==="#")throw new Error(`[EntityReplacer] Invalid character '#' in entity name: "${e}"`);for(let t of e)if(mo.has(t))throw new Error(`[EntityReplacer] Invalid character '${t}' in entity name: "${e}"`);return e}function ut(...e){let t=Object.create(null);for(let r of e)if(r)for(let n of Object.keys(r)){let s=r[n];if(typeof s=="string")t[n]=s;else if(s&&typeof s=="object"&&s.val!==void 0){let a=s.val;typeof a=="string"&&(t[n]=a)}}return t}var De="external",Kt="base",Wr="all";function go(e){return!e||e===De?new Set([De]):e===Wr?new Set([Wr]):e===Kt?new Set([Kt]):Array.isArray(e)?new Set(e):new Set([De])}var ee=Object.freeze({allow:0,leave:1,remove:2,throw:3}),fo=new Set([9,10,13]);function Eo(e){if(!e)return{xmlVersion:1,onLevel:ee.allow,nullLevel:ee.remove};let t=e.xmlVersion===1.1?1.1:1,r=ee[e.onNCR]??ee.allow,n=ee[e.nullNCR]??ee.remove,s=Math.max(n,ee.remove);return{xmlVersion:t,onLevel:r,nullLevel:s}}var Ye=class{constructor(t={}){this._limit=t.limit||{},this._maxTotalExpansions=this._limit.maxTotalExpansions||0,this._maxExpandedLength=this._limit.maxExpandedLength||0,this._postCheck=typeof t.postCheck=="function"?t.postCheck:n=>n,this._limitTiers=go(this._limit.applyLimitsTo??De),this._numericAllowed=t.numericAllowed??!0,this._baseMap=ut(dt,t.namedEntities||null),this._externalMap=Object.create(null),this._inputMap=Object.create(null),this._totalExpansions=0,this._expandedLength=0,this._removeSet=new Set(t.remove&&Array.isArray(t.remove)?t.remove:[]),this._leaveSet=new Set(t.leave&&Array.isArray(t.leave)?t.leave:[]);let r=Eo(t.ncr);this._ncrXmlVersion=r.xmlVersion,this._ncrOnLevel=r.onLevel,this._ncrNullLevel=r.nullLevel,this._onExternalEntity=typeof t.onExternalEntity=="function"?t.onExternalEntity:null,this._onInputEntity=typeof t.onInputEntity=="function"?t.onInputEntity:null}_applyRegistrationHook(t,r,n,s){if(!t)return!0;let a=t(r,n);if(a===Qe.BLOCK)return!1;if(a===Qe.THROW)throw new Error(`[EntityDecoder] Registration of ${s} entity "&${r};" was rejected by hook`);return!0}setExternalEntities(t){if(t)for(let s of Object.keys(t))os(s);if(!this._onExternalEntity){this._externalMap=ut(t);return}let r=ut(t),n=Object.create(null);for(let[s,a]of Object.entries(r))this._applyRegistrationHook(this._onExternalEntity,s,a,"external")&&(n[s]=a);this._externalMap=n}addExternalEntity(t,r){os(t),typeof r=="string"&&r.indexOf("&")===-1&&this._applyRegistrationHook(this._onExternalEntity,t,r,"external")&&(this._externalMap[t]=r)}addInputEntities(t){if(this._totalExpansions=0,this._expandedLength=0,!this._onInputEntity){this._inputMap=ut(t);return}let r=ut(t),n=Object.create(null);for(let[s,a]of Object.entries(r))this._applyRegistrationHook(this._onInputEntity,s,a,"input")&&(n[s]=a);this._inputMap=n}reset(){return this._inputMap=Object.create(null),this._totalExpansions=0,this._expandedLength=0,this}setXmlVersion(t){this._ncrXmlVersion=t===1.1?1.1:1}decode(t){if(typeof t!="string"||t.length===0||t.indexOf("&")===-1)return t;let r=t,n=[],s=t.length,a=0,c=0,l=this._maxTotalExpansions>0,o=this._maxExpandedLength>0,d=l||o;for(;c<s;){if(t.charCodeAt(c)!==38){c++;continue}let m=c+1;for(;m<s&&t.charCodeAt(m)!==59&&m-c<=32;)m++;if(m>=s||t.charCodeAt(m)!==59){c++;continue}let f=t.slice(c+1,m);if(f.length===0){c++;continue}let g,y;if(this._removeSet.has(f))g="",y===void 0&&(y=De);else if(this._leaveSet.has(f)){c++;continue}else if(f.charCodeAt(0)===35){let w=this._resolveNCR(f);if(w===void 0){c++;continue}g=w,y=Kt}else{let w=this._resolveName(f);g=w?.value,y=w?.tier}if(g===void 0){c++;continue}if(c>a&&n.push(t.slice(a,c)),n.push(g),a=m+1,c=a,d&&this._tierCounts(y)){if(l&&(this._totalExpansions++,this._totalExpansions>this._maxTotalExpansions))throw new Error(`[EntityReplacer] Entity expansion count limit exceeded: ${this._totalExpansions} > ${this._maxTotalExpansions}`);if(o){let w=g.length-(f.length+2);if(w>0&&(this._expandedLength+=w,this._expandedLength>this._maxExpandedLength))throw new Error(`[EntityReplacer] Expanded content length limit exceeded: ${this._expandedLength} > ${this._maxExpandedLength}`)}}}a<s&&n.push(t.slice(a));let p=n.length===0?t:n.join("");return this._postCheck(p,r)}_tierCounts(t){return this._limitTiers.has(Wr)?!0:this._limitTiers.has(t)}_resolveName(t){if(t in this._inputMap)return{value:this._inputMap[t],tier:De};if(t in this._externalMap)return{value:this._externalMap[t],tier:De};if(t in this._baseMap)return{value:this._baseMap[t],tier:Kt}}_classifyNCR(t){return t===0?this._ncrNullLevel:t>=55296&&t<=57343||this._ncrXmlVersion===1&&t>=1&&t<=31&&!fo.has(t)?ee.remove:-1}_applyNCRAction(t,r,n){switch(t){case ee.allow:return String.fromCodePoint(n);case ee.remove:return"";case ee.leave:return;case ee.throw:throw new Error(`[EntityDecoder] Prohibited numeric character reference &${r}; (U+${n.toString(16).toUpperCase().padStart(4,"0")})`);default:return String.fromCodePoint(n)}}_resolveNCR(t){let r=t.charCodeAt(1),n;if(r===120||r===88?n=parseInt(t.slice(2),16):n=parseInt(t.slice(1),10),Number.isNaN(n)||n<0||n>1114111)return;let s=this._classifyNCR(n);if(!this._numericAllowed&&s<ee.remove)return;let a=s===-1?this._ncrOnLevel:Math.max(this._ncrOnLevel,s);return this._applyNCRAction(a,t,n)}};var cs=e=>ct.includes(e)?"__"+e:e,To={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0,unicode:!1},tagValueProcessor:function(e,t){return t},attributeValueProcessor:function(e,t){return t},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,entityDecoder:null,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(e,t,r){return e},captureMetaData:!1,maxNestedTags:100,strictReservedNames:!0,jPath:!0,onDangerousProperty:cs};function bo(e,t){if(typeof e!="string")return;let r=e.toLowerCase();if(ct.some(n=>r===n.toLowerCase()))throw new Error(`[SECURITY] Invalid ${t}: "${e}" is a reserved JavaScript keyword that could cause prototype pollution`);if(Gt.some(n=>r===n.toLowerCase()))throw new Error(`[SECURITY] Invalid ${t}: "${e}" is a reserved JavaScript keyword that could cause prototype pollution`)}function ls(e,t){return typeof e=="boolean"?{enabled:e,maxEntitySize:1e4,maxExpansionDepth:1e4,maxTotalExpansions:1/0,maxExpandedLength:1e5,maxEntityCount:1e3,allowedTags:null,tagFilter:null,appliesTo:"all"}:typeof e=="object"&&e!==null?{enabled:e.enabled!==!1,maxEntitySize:Math.max(1,e.maxEntitySize??1e4),maxExpansionDepth:Math.max(1,e.maxExpansionDepth??1e4),maxTotalExpansions:Math.max(1,e.maxTotalExpansions??1/0),maxExpandedLength:Math.max(1,e.maxExpandedLength??1e5),maxEntityCount:Math.max(1,e.maxEntityCount??1e3),allowedTags:e.allowedTags??null,tagFilter:e.tagFilter??null,appliesTo:e.appliesTo??"all"}:ls(!0)}var ds=function(e){let t=Object.assign({},To,e),r=[{value:t.attributeNamePrefix,name:"attributeNamePrefix"},{value:t.attributesGroupName,name:"attributesGroupName"},{value:t.textNodeName,name:"textNodeName"},{value:t.cdataPropName,name:"cdataPropName"},{value:t.commentPropName,name:"commentPropName"}];for(let{value:n,name:s}of r)n&&bo(n,s);return t.onDangerousProperty===null&&(t.onDangerousProperty=cs),t.processEntities=ls(t.processEntities,t.htmlEntities),t.unpairedTagsSet=new Set(t.unpairedTags),t.stopNodes&&Array.isArray(t.stopNodes)&&(t.stopNodes=t.stopNodes.map(n=>typeof n=="string"&&n.startsWith("*.")?".."+n.substring(2):n)),t};var Jt;typeof Symbol!="function"?Jt="@@xmlMetadata":Jt=Symbol("XML Node Metadata");var te=class{constructor(t){this.tagname=t,this.child=[],this[":@"]=Object.create(null)}add(t,r){t==="__proto__"&&(t="#__proto__"),this.child.push({[t]:r})}addChild(t,r){t.tagname==="__proto__"&&(t.tagname="#__proto__"),t[":@"]&&Object.keys(t[":@"]).length>0?this.child.push({[t.tagname]:t.child,":@":t[":@"]}):this.child.push({[t.tagname]:t.child}),r!==void 0&&(this.child[this.child.length-1][Jt]={startIndex:r})}static getMetaDataSymbol(){return Jt}};var us=":A-Za-z_\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u0486\u0488-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD",Co=us+"\\-\\.\\d\xB7\u0300-\u036F\u203F-\u2040",As=":A-Za-z_\xC0-\u02FF\u0370-\u037D\u037F-\u0486\u0488-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u{10000}-\u{EFFFF}",Io=As+"\\-\\.\\d\xB7\u0300-\u036F\u0487\u203F-\u2040",Kr=(e,t,r="")=>{let n=e.replace(":",""),s=t.replace(":",""),a=`[${n}][${s}]*`;return{name:new RegExp(`^[${e}][${t}]*$`,r),ncName:new RegExp(`^${a}$`,r),qName:new RegExp(`^${a}(?::${a})?$`,r),nmToken:new RegExp(`^[${t}]+$`,r),nmTokens:new RegExp(`^[${t}]+(?:\\s+[${t}]+)*$`,r)}},yo=Kr(us,Co),wo=Kr(As,Io,"u"),ps=":A-Za-z_",xo=ps+"\\-\\.\\d",No=Kr(ps,xo),So=(e="1.0",t=!1)=>t?No:e==="1.1"?wo:yo;var Jr=(e,{xmlVersion:t="1.0",asciiOnly:r=!1}={})=>So(t,r).qName.test(e);var pt=class{constructor(t,r){this.suppressValidationErr=!t,this.options=t,this.xmlVersion=r||1}setXmlVersion(t=1){this.xmlVersion=t}readDocType(t,r){let n=Object.create(null),s=0;if(t[r+3]==="O"&&t[r+4]==="C"&&t[r+5]==="T"&&t[r+6]==="Y"&&t[r+7]==="P"&&t[r+8]==="E"){r=r+9;let a=1,c=!1,l=!1,o="";for(;r<t.length;r++)if(t[r]==="<"&&!l){if(c&&Be(t,"!ENTITY",r)){r+=7;let d,p;if([d,p,r]=this.readEntityExp(t,r+1,this.suppressValidationErr),p.indexOf("&")===-1){if(this.options.enabled!==!1&&this.options.maxEntityCount!=null&&s>=this.options.maxEntityCount)throw new Error(`Entity count (${s+1}) exceeds maximum allowed (${this.options.maxEntityCount})`);n[d]=p,s++}}else if(c&&Be(t,"!ELEMENT",r)){r+=8;let{index:d}=this.readElementExp(t,r+1);r=d}else if(c&&Be(t,"!ATTLIST",r))r+=8;else if(c&&Be(t,"!NOTATION",r)){r+=9;let{index:d}=this.readNotationExp(t,r+1,this.suppressValidationErr);r=d}else if(Be(t,"!--",r))l=!0;else throw new Error("Invalid DOCTYPE");a++,o=""}else if(t[r]===">"){if(l?t[r-1]==="-"&&t[r-2]==="-"&&(l=!1,a--):a--,a===0)break}else t[r]==="["?c=!0:o+=t[r];if(a!==0)throw new Error("Unclosed DOCTYPE")}else throw new Error("Invalid Tag instead of DOCTYPE");return{entities:n,i:r}}readEntityExp(t,r){r=re(t,r);let n=r;for(;r<t.length&&!/\s/.test(t[r])&&t[r]!=='"'&&t[r]!=="'";)r++;let s=t.substring(n,r);if(At(s,{xmlVersion:this.xmlVersion}),r=re(t,r),!this.suppressValidationErr){if(t.substring(r,r+6).toUpperCase()==="SYSTEM")throw new Error("External entities are not supported");if(t[r]==="%")throw new Error("Parameter entities are not supported")}let a="";if([r,a]=this.readIdentifierVal(t,r,"entity"),this.options.enabled!==!1&&this.options.maxEntitySize!=null&&a.length>this.options.maxEntitySize)throw new Error(`Entity "${s}" size (${a.length}) exceeds maximum allowed size (${this.options.maxEntitySize})`);return r--,[s,a,r]}readNotationExp(t,r){r=re(t,r);let n=r;for(;r<t.length&&!/\s/.test(t[r]);)r++;let s=t.substring(n,r);!this.suppressValidationErr&&At(s,{xmlVersion:this.xmlVersion}),r=re(t,r);let a=t.substring(r,r+6).toUpperCase();if(!this.suppressValidationErr&&a!=="SYSTEM"&&a!=="PUBLIC")throw new Error(`Expected SYSTEM or PUBLIC, found "${a}"`);r+=a.length,r=re(t,r);let c=null,l=null;if(a==="PUBLIC")[r,c]=this.readIdentifierVal(t,r,"publicIdentifier"),r=re(t,r),(t[r]==='"'||t[r]==="'")&&([r,l]=this.readIdentifierVal(t,r,"systemIdentifier"));else if(a==="SYSTEM"&&([r,l]=this.readIdentifierVal(t,r,"systemIdentifier"),!this.suppressValidationErr&&!l))throw new Error("Missing mandatory system identifier for SYSTEM notation");return{notationName:s,publicIdentifier:c,systemIdentifier:l,index:--r}}readIdentifierVal(t,r,n){let s="",a=t[r];if(a!=='"'&&a!=="'")throw new Error(`Expected quoted string, found "${a}"`);r++;let c=r;for(;r<t.length&&t[r]!==a;)r++;if(s=t.substring(c,r),t[r]!==a)throw new Error(`Unterminated ${n} value`);return r++,[r,s]}readElementExp(t,r){r=re(t,r);let n=r;for(;r<t.length&&!/\s/.test(t[r]);)r++;let s=t.substring(n,r);if(!this.suppressValidationErr&&!Jr(s,{xmlVersion:this.xmlVersion}))throw new Error(`Invalid element name: "${s}"`);r=re(t,r);let a="";if(t[r]==="E"&&Be(t,"MPTY",r))r+=4;else if(t[r]==="A"&&Be(t,"NY",r))r+=2;else if(t[r]==="("){r++;let c=r;for(;r<t.length&&t[r]!==")";)r++;if(a=t.substring(c,r),t[r]!==")")throw new Error("Unterminated content model")}else if(!this.suppressValidationErr)throw new Error(`Invalid Element Expression, found "${t[r]}"`);return{elementName:s,contentModel:a.trim(),index:r}}readAttlistExp(t,r){r=re(t,r);let n=r;for(;r<t.length&&!/\s/.test(t[r]);)r++;let s=t.substring(n,r);for(At(s,{xmlVersion:this.xmlVersion}),r=re(t,r),n=r;r<t.length&&!/\s/.test(t[r]);)r++;let a=t.substring(n,r);if(!At(a,{xmlVersion:this.xmlVersion}))throw new Error(`Invalid attribute name: "${a}"`);r=re(t,r);let c="";if(t.substring(r,r+8).toUpperCase()==="NOTATION"){if(c="NOTATION",r+=8,r=re(t,r),t[r]!=="(")throw new Error(`Expected '(', found "${t[r]}"`);r++;let o=[];for(;r<t.length&&t[r]!==")";){let d=r;for(;r<t.length&&t[r]!=="|"&&t[r]!==")";)r++;let p=t.substring(d,r);if(p=p.trim(),!At(p,{xmlVersion:this.xmlVersion}))throw new Error(`Invalid notation name: "${p}"`);o.push(p),t[r]==="|"&&(r++,r=re(t,r))}if(t[r]!==")")throw new Error("Unterminated list of notations");r++,c+=" ("+o.join("|")+")"}else{let o=r;for(;r<t.length&&!/\s/.test(t[r]);)r++;c+=t.substring(o,r);let d=["CDATA","ID","IDREF","IDREFS","ENTITY","ENTITIES","NMTOKEN","NMTOKENS"];if(!this.suppressValidationErr&&!d.includes(c.toUpperCase()))throw new Error(`Invalid attribute type: "${c}"`)}r=re(t,r);let l="";return t.substring(r,r+8).toUpperCase()==="#REQUIRED"?(l="#REQUIRED",r+=8):t.substring(r,r+7).toUpperCase()==="#IMPLIED"?(l="#IMPLIED",r+=7):[r,l]=this.readIdentifierVal(t,r,"ATTLIST"),{elementName:s,attributeName:a,attributeType:c,defaultValue:l,index:r}}},re=(e,t)=>{for(;t<e.length&&/\s/.test(e[t]);)t++;return t};function Be(e,t,r){for(let n=0;n<t.length;n++)if(t[n]!==e[r+n+1])return!1;return!0}function At(e,t){if(Jr(e,{xmlVersion:t}))return e;throw new Error(`Invalid entity name ${e}`)}var _o=[48,1632,1776,2406,2534,2662,2790,2918,3046,3174,3302,3430,3558,3664,3792,3872,4160,4240,6112,6160,6470,6608,6784,6800,6992,7088,7232,7248,65296,120782,120792,120802,120812,120822,66720,68912,69734,69872,69942,70096,70384,70736,70864,71248,71360,71472,71904,72016,72688,72784,73040,73120,73552,92768,92864,93008,123200,123632,124144,125264,130032],jt=255,Vt=new Map,hs=65535,ms=1632,Ge=ms,Ro=hs-ms+1,Xt=new Uint8Array(Ro).fill(jt);for(let e of _o)for(let t=0;t<10;t++){let r=e+t;r<=hs?Xt[r-Ge]=t:Vt.set(r,t)}var gs=48,fs=57,Es=45,Zt=new Set([8722,65293,65123]);function Lo(e){if(typeof e!="string")return e;let t=e.length;if(t===0)return e;let r=-1;for(let s=0;s<t;s++){let a=e.charCodeAt(s);if(!(a>=gs&&a<=fs||a===Es)){if(a<Ge){if(Zt.has(a)){r=s;break}continue}if(a>=55296&&a<=56319){if(s+1<t){let c=e.charCodeAt(s+1);if(c>=56320&&c<=57343){let l=65536+(a-55296<<10)+(c-56320);if(Vt.has(l)){r=s;break}}}continue}if(Xt[a-Ge]!==jt||Zt.has(a)){r=s;break}}}if(r===-1)return e;let n=[];r>0&&n.push(e.slice(0,r));for(let s=r;s<t;s++){let a=e.charCodeAt(s);if(a>=gs&&a<=fs||a===Es){n.push(e[s]);continue}if(a<Ge){n.push(Zt.has(a)?"-":e[s]);continue}if(a>=55296&&a<=56319){if(s+1<t){let l=e.charCodeAt(s+1);if(l>=56320&&l<=57343){let o=65536+(a-55296<<10)+(l-56320),d=Vt.get(o);if(d!==void 0){n.push(String.fromCharCode(d+48)),s++;continue}}}n.push(e[s]);continue}if(Zt.has(a)){n.push("-");continue}let c=Xt[a-Ge];n.push(c!==jt?String.fromCharCode(c+48):e[s])}return n.join("")}var Ts=Lo;var Oo=/^[-+]?0x[a-fA-F0-9]+$/,Do=/^0b[01]+$/,Bo=/^0o[0-7]+$/,ko=/^([\-\+])?(0*)([0-9]*(\.[0-9]*)?)$/,vo={hex:!0,binary:!1,octal:!1,leadingZeros:!0,decimalPoint:".",eNotation:!0,infinity:"original",unicode:!1};function Vr(e,t={}){if(t=Object.assign({},vo,t),!e||typeof e!="string")return e;let r=e.trim();if(r.length===0)return e;if(t.skipLike!==void 0&&t.skipLike.test(r))return e;if(r==="0"||t.unicode&&(r=Ts(r),r==="0"))return 0;if(t.hex&&Oo.test(r))return jr(r,16);if(t.binary&&Do.test(r))return jr(r,2);if(t.octal&&Bo.test(r))return jr(r,8);if(isFinite(r)){if(r.includes("e")||r.includes("E"))return Mo(e,r,t);{let n=ko.exec(r);if(n){let s=n[1]||"",a=n[2],c=Uo(n[3]),l=s?e[a.length+1]===".":e[a.length]===".";if(!t.leadingZeros&&(a.length>1||a.length===1&&!l))return e;{let o=Number(r),d=String(o);if(o===0)return o;if(d.search(/[eE]/)!==-1)return t.eNotation?o:e;if(r.indexOf(".")!==-1)return d==="0"||d===c||d===`${s}${c}`?o:e;let p=a?c:r;return a?p===d||s+p===d?o:e:p===d||p===s+d?o:e}}else return e}}else return Fo(e,Number(r),t)}var Po=/^([-+])?(0*)(\d*(\.\d*)?[eE][-\+]?\d+)$/;function Mo(e,t,r){if(!r.eNotation)return e;let n=t.match(Po);if(n){let s=n[1]||"",a=n[3].indexOf("e")===-1?"E":"e",c=n[2],l=s?e[c.length+1]===a:e[c.length]===a;return c.length>1&&l?e:c.length===1&&(n[3].startsWith(`.${a}`)||n[3][0]===a)?Number(t):c.length>0?r.leadingZeros&&!l?(t=(n[1]||"")+n[3],Number(t)):e:Number(t)}else return e}function Uo(e){return e&&e.indexOf(".")!==-1&&(e=e.replace(/0+$/,""),e==="."?e="0":e[0]==="."?e="0"+e:e[e.length-1]==="."&&(e=e.substring(0,e.length-1))),e}function jr(e,t){let r=e.trim();if((t===2||t===8)&&(e=r.substring(2)),parseInt)return parseInt(e,t);if(Number.parseInt)return Number.parseInt(e,t);if(window&&window.parseInt)return window.parseInt(e,t);throw new Error("parseInt, Number.parseInt, window.parseInt are not supported")}function Fo(e,t,r){let n=t===1/0;switch(r.infinity.toLowerCase()){case"null":return null;case"infinity":return t;case"string":return n?"Infinity":"-Infinity";case"original":default:return e}}function Xr(e){return typeof e=="function"?e:Array.isArray(e)?t=>{for(let r of e)if(typeof r=="string"&&t===r||r instanceof RegExp&&r.test(t))return!0}:()=>!1}var ke=class{constructor(t,r={},n){this.pattern=t,this.separator=r.separator||".",this.segments=this._parse(t),this.data=n,this._hasDeepWildcard=this.segments.some(s=>s.type==="deep-wildcard"),this._hasAttributeCondition=this.segments.some(s=>s.attrName!==void 0),this._hasPositionSelector=this.segments.some(s=>s.position!==void 0)}_parse(t){let r=[],n=0,s="";for(;n<t.length;)t[n]===this.separator?n+1<t.length&&t[n+1]===this.separator?(s.trim()&&(r.push(this._parseSegment(s.trim())),s=""),r.push({type:"deep-wildcard"}),n+=2):(s.trim()&&r.push(this._parseSegment(s.trim())),s="",n++):(s+=t[n],n++);return s.trim()&&r.push(this._parseSegment(s.trim())),r}_parseSegment(t){let r={type:"tag"},n=null,s=t,a=t.match(/^([^\[]+)(\[[^\]]*\])(.*)$/);if(a&&(s=a[1]+a[3],a[2])){let p=a[2].slice(1,-1);p&&(n=p)}let c,l=s;if(s.includes("::")){let p=s.indexOf("::");if(c=s.substring(0,p).trim(),l=s.substring(p+2).trim(),!c)throw new Error(`Invalid namespace in pattern: ${t}`)}let o,d=null;if(l.includes(":")){let p=l.lastIndexOf(":"),m=l.substring(0,p).trim(),f=l.substring(p+1).trim();["first","last","odd","even"].includes(f)||/^nth\(\d+\)$/.test(f)?(o=m,d=f):o=l}else o=l;if(!o)throw new Error(`Invalid segment pattern: ${t}`);if(r.tag=o,c&&(r.namespace=c),n)if(n.includes("=")){let p=n.indexOf("=");r.attrName=n.substring(0,p).trim(),r.attrValue=n.substring(p+1).trim()}else r.attrName=n.trim();if(d){let p=d.match(/^nth\((\d+)\)$/);p?(r.position="nth",r.positionValue=parseInt(p[1],10)):r.position=d}return r}get length(){return this.segments.length}hasDeepWildcard(){return this._hasDeepWildcard}hasAttributeCondition(){return this._hasAttributeCondition}hasPositionSelector(){return this._hasPositionSelector}toString(){return this.pattern}};var We=class{constructor(){this._byDepthAndTag=new Map,this._wildcardByDepth=new Map,this._deepWildcards=[],this._deepByTerminalTag=new Map,this._patterns=new Set,this._sealed=!1}add(t){if(this._sealed)throw new TypeError("ExpressionSet is sealed. Create a new ExpressionSet to add more expressions.");if(this._patterns.has(t.pattern))return this;if(this._patterns.add(t.pattern),t.hasDeepWildcard()){let a=t.segments[t.segments.length-1];if(a&&a.type!=="deep-wildcard"&&a.tag!=="*"){let c=a.tag;this._deepByTerminalTag.has(c)||this._deepByTerminalTag.set(c,[]),this._deepByTerminalTag.get(c).push(t)}else this._deepWildcards.push(t);return this}let r=t.length,s=t.segments[t.segments.length-1]?.tag;if(!s||s==="*")this._wildcardByDepth.has(r)||this._wildcardByDepth.set(r,[]),this._wildcardByDepth.get(r).push(t);else{let a=`${r}:${s}`;this._byDepthAndTag.has(a)||this._byDepthAndTag.set(a,[]),this._byDepthAndTag.get(a).push(t)}return this}addAll(t){for(let r of t)this.add(r);return this}has(t){return this._patterns.has(t.pattern)}get size(){return this._patterns.size}seal(){return this._sealed=!0,this}get isSealed(){return this._sealed}matchesAny(t){return this.findMatch(t)!==null}findMatch(t){let r=t.getDepth(),n=t.getCurrentTag(),s=`${r}:${n}`,a=this._byDepthAndTag.get(s);if(a){for(let o=0;o<a.length;o++)if(t.matches(a[o]))return a[o]}let c=this._wildcardByDepth.get(r);if(c){for(let o=0;o<c.length;o++)if(t.matches(c[o]))return c[o]}let l=this._deepByTerminalTag.get(n);if(l){for(let o=0;o<l.length;o++)if(t.matches(l[o]))return l[o]}for(let o=0;o<this._deepWildcards.length;o++)if(t.matches(this._deepWildcards[o]))return this._deepWildcards[o];return null}};var Zr=class{constructor(t){this._matcher=t}get separator(){return this._matcher.separator}getCurrentTag(){let t=this._matcher.path;return t.length>0?t[t.length-1].tag:void 0}getCurrentNamespace(){let t=this._matcher.path;return t.length>0?t[t.length-1].namespace:void 0}getAttrValue(t){let r=this._matcher.path;if(r.length!==0)return r[r.length-1].values?.[t]}hasAttr(t){let r=this._matcher.path;if(r.length===0)return!1;let n=r[r.length-1];return n.values!==void 0&&t in n.values}getAnyParentAttr(t){return this._matcher.getAnyParentAttr(t)}hasAnyParentAttr(t){return this._matcher.hasAnyParentAttr(t)}getPosition(){let t=this._matcher.path;return t.length===0?-1:t[t.length-1].position??0}getCounter(){let t=this._matcher.path;return t.length===0?-1:t[t.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this._matcher.path.length}toString(t,r=!0){return this._matcher.toString(t,r)}toArray(){return this._matcher.path.map(t=>t.tag)}matches(t){return this._matcher.matches(t)}matchesAny(t){return t.matchesAny(this._matcher)}},Ke=class{constructor(t={}){this.separator=t.separator||".",this.path=[],this.siblingStacks=[],this._pathStringCache=null,this._view=new Zr(this),this._keptAttrs=[]}push(t,r=null,n=null,s=null){this._pathStringCache=null,this.path.length>0&&(this.path[this.path.length-1].values=void 0);let a=this.path.length,c=this.siblingStacks[a];c||(c={counts:new Map,total:0},this.siblingStacks[a]=c);let l=n?`${n}:${t}`:t,o=c.counts.get(l)||0,d=c.total;c.counts.set(l,o+1),c.total++;let p={tag:t,position:d,counter:o};n!=null&&(p.namespace=n),r!=null&&(p.values=r),this.path.push(p);let m=this.path.length,f=s!==null?s.keep:null;if(f!=null&&f.length>0&&r)for(let g=0;g<f.length;g++){let y=f[g];r[y]!==void 0&&this._keptAttrs.push({depth:m,name:y,value:r[y]})}}pop(){if(this.path.length===0)return;this._pathStringCache=null;let t=this.path.pop();this.siblingStacks.length>this.path.length+1&&(this.siblingStacks.length=this.path.length+1);let r=this.path.length+1;for(;this._keptAttrs.length>0&&this._keptAttrs[this._keptAttrs.length-1].depth>=r;)this._keptAttrs.pop();return t}updateCurrent(t){if(this.path.length>0){let r=this.path[this.path.length-1];t!=null&&(r.values=t)}}getCurrentTag(){return this.path.length>0?this.path[this.path.length-1].tag:void 0}getCurrentNamespace(){return this.path.length>0?this.path[this.path.length-1].namespace:void 0}getAttrValue(t){if(this.path.length!==0)return this.path[this.path.length-1].values?.[t]}hasAttr(t){if(this.path.length===0)return!1;let r=this.path[this.path.length-1];return r.values!==void 0&&t in r.values}getAnyParentAttr(t){let r=this._keptAttrs;for(let n=r.length-1;n>=0;n--)if(r[n].name===t)return r[n].value}hasAnyParentAttr(t){let r=this._keptAttrs;for(let n=r.length-1;n>=0;n--)if(r[n].name===t)return!0;return!1}getPosition(){return this.path.length===0?-1:this.path[this.path.length-1].position??0}getCounter(){return this.path.length===0?-1:this.path[this.path.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this.path.length}toString(t,r=!0){let n=t||this.separator;if(n===this.separator&&r===!0){if(this._pathStringCache!==null)return this._pathStringCache;let a=this.path.map(c=>c.namespace?`${c.namespace}:${c.tag}`:c.tag).join(n);return this._pathStringCache=a,a}return this.path.map(a=>r&&a.namespace?`${a.namespace}:${a.tag}`:a.tag).join(n)}toArray(){return this.path.map(t=>t.tag)}reset(){this._pathStringCache=null,this.path=[],this.siblingStacks=[],this._keptAttrs=[]}matches(t){let r=t.segments;return r.length===0?!1:t.hasDeepWildcard()?this._matchWithDeepWildcard(r):this._matchSimple(r)}_matchSimple(t){if(this.path.length!==t.length)return!1;for(let r=0;r<t.length;r++)if(!this._matchSegment(t[r],this.path[r],r===this.path.length-1))return!1;return!0}_matchWithDeepWildcard(t){let r=this.path.length-1,n=t.length-1;for(;n>=0&&r>=0;){let s=t[n];if(s.type==="deep-wildcard"){if(n--,n<0)return!0;let a=t[n],c=!1;for(let l=r;l>=0;l--)if(this._matchSegment(a,this.path[l],l===this.path.length-1)){r=l-1,n--,c=!0;break}if(!c)return!1}else{if(!this._matchSegment(s,this.path[r],r===this.path.length-1))return!1;r--,n--}}return n<0}_matchSegment(t,r,n){if(t.tag!=="*"&&t.tag!==r.tag||t.namespace!==void 0&&t.namespace!=="*"&&t.namespace!==r.namespace||t.attrName!==void 0&&(!n||!r.values||!(t.attrName in r.values)||t.attrValue!==void 0&&String(r.values[t.attrName])!==String(t.attrValue)))return!1;if(t.position!==void 0){if(!n)return!1;let s=r.counter??0;if(t.position==="first"&&s!==0)return!1;if(t.position==="odd"&&s%2!==1)return!1;if(t.position==="even"&&s%2!==0)return!1;if(t.position==="nth"&&s!==t.positionValue)return!1}return!0}matchesAny(t){return t.matchesAny(this)}snapshot(){return{path:this.path.map(t=>({...t})),siblingStacks:this.siblingStacks.map(t=>t&&{counts:new Map(t.counts),total:t.total}),keptAttrs:this._keptAttrs.map(t=>({...t}))}}restore(t){this._pathStringCache=null,this.path=t.path.map(r=>({...r})),this.siblingStacks=t.siblingStacks.map(r=>r&&{counts:new Map(r.counts),total:r.total}),this._keptAttrs=(t.keptAttrs||[]).map(r=>({...r}))}readOnly(){return this._view}};var Ho=[{id:"html-script-open",description:"<script opening tag",pattern:/<script[\s>/]/i},{id:"html-script-close",description:"</script closing tag",pattern:/<\/script[\s>]/i},{id:"html-javascript-protocol",description:"javascript: URI scheme (with optional whitespace/encoding)",pattern:/j[\t\n\r ]*a[\t\n\r ]*v[\t\n\r ]*a[\t\n\r ]*s[\t\n\r ]*c[\t\n\r ]*r[\t\n\r ]*i[\t\n\r ]*p[\t\n\r ]*t[\t\n\r ]*:/i},{id:"html-vbscript-protocol",description:"vbscript: URI scheme",pattern:/vbscript[\t\n\r ]*:/i},{id:"html-data-html",description:"data:text/html URI \u2014 can execute scripts in browsers",pattern:/data[\t\n\r ]*:[\t\n\r ]*text\/html/i},{id:"html-data-xhtml",description:"data:application/xhtml+xml URI",pattern:/data[\t\n\r ]*:[\t\n\r ]*application\/xhtml/i},{id:"html-data-svg",description:"data:image/svg+xml URI \u2014 can execute scripts",pattern:/data[\t\n\r ]*:[\t\n\r ]*image\/svg\+xml/i},{id:"html-inline-event-handler",description:"Inline event handler attributes: onclick=, onerror=, onload=, etc.",pattern:/\bon\w{1,30}\s*=/i},{id:"html-entity-obfuscated-script",description:"HTML-entity-encoded <script (e.g. &#x3C;script or &lt;script)",pattern:/(?:&#x0*3[Cc];?|&#0*60;?|&lt;)\s*script/i},{id:"html-entity-obfuscated-javascript",description:'HTML-entity-encoded javascript: (partial \u2014 catches common &#106; or &#x6a; for "j")',pattern:/(?:&#x0*6[Aa];?|&#0*106;?)\s*(?:&#x0*61;?|a)[\s\S]{0,80}script\s*:/i},{id:"html-style-expression",description:"CSS expression() \u2014 IE-era code execution in style attributes",pattern:/style[\s\S]{0,20}expression\s*\(/i},{id:"html-object-embed",description:"<object or <embed tags that can load active content",pattern:/<(?:object|embed)[\s>/]/i},{id:"html-base-tag",description:"<base href= \u2014 can hijack all relative URLs on a page",pattern:/<base[\s>]/i},{id:"html-meta-refresh",description:'<meta http-equiv="refresh" \u2014 can redirect users',pattern:/<meta[\s\S]{0,40}http-equiv[\s\S]{0,20}refresh/i},{id:"html-srcdoc",description:"srcdoc= attribute on iframes \u2014 embeds HTML that can run scripts",pattern:/srcdoc\s*=/i},{id:"html-iframe",description:"<iframe tag",pattern:/<iframe[\s>/]/i},{id:"html-form",description:"<form tag \u2014 can be used for phishing / credential harvesting injection",pattern:/<form[\s>/]/i}],Je=Ho;var Qo=[{id:"xml-cdata-injection",description:"CDATA section injection: <![CDATA[ breaks out of text node context",pattern:/<!\[CDATA\[/i},{id:"xml-cdata-close",description:"CDATA close sequence: ]]> can terminate an enclosing CDATA section",pattern:/\]\]>/},{id:"xml-processing-instruction",description:"XML processing instruction: <?xml-stylesheet or <?php etc.",pattern:/<\?(?:xml[\- ]|php|asp)/i},{id:"xml-doctype-injection",description:"DOCTYPE declaration embedded in content \u2014 can define entities",pattern:/<!DOCTYPE(?:[\s[]|$)/i},{id:"xml-entity-system",description:"SYSTEM keyword \u2014 used in external entity declarations (XXE)",pattern:/\bSYSTEM\s+["']/i},{id:"xml-entity-public",description:"PUBLIC keyword \u2014 used in external entity declarations (XXE)",pattern:/\bPUBLIC\s+["']/i},{id:"xml-entity-declaration",description:"<!ENTITY declaration \u2014 defines entities, potential XXE or entity expansion",pattern:/<!ENTITY[\s%]/i},{id:"xml-billion-laughs",description:"Entity reference chaining / billion laughs: repeated &eX; style references",pattern:/(?:&\w{1,20};){3,}/},{id:"xml-namespace-confusion",description:"xmlns: attribute injection \u2014 can redefine namespaces to confuse parsers",pattern:/\bxmlns\s*(?::\w{1,40})?\s*=/i},{id:"xml-comment-injection",description:"<!-- comment injection \u2014 can hide content from some parsers",pattern:/<!--/},{id:"xml-comment-close",description:"--> closes an enclosing XML comment",pattern:/-->/},{id:"xml-pi-close",description:"?> closes an enclosing processing instruction",pattern:/\?>/}],je=Qo;var Yo=[{id:"svg-script-element",description:"<script element inside SVG executes JavaScript",pattern:/<script[\s>/]/i},{id:"svg-xlink-href-javascript",description:"xlink:href with javascript: \u2014 classic SVG XSS via <a> or <use>",pattern:/xlink\s*:\s*href\s*=\s*["']?\s*javascript\s*:/i},{id:"svg-href-javascript",description:"href= with javascript: in SVG context (<a>, <animate>, etc.)",pattern:/href\s*=\s*["']?\s*javascript\s*:/i},{id:"svg-foreignobject",description:"<foreignObject embeds HTML inside SVG \u2014 can execute scripts",pattern:/<foreignObject[\s>/]/i},{id:"svg-use-external",description:"<use xlink:href or href pointing to external resource (non-fragment URL)",pattern:/<use[\s\S]{0,60}(?:xlink\s*:\s*)?href\s*=\s*(?:["'][^#]|[^"'#\s>])/i},{id:"svg-animate-href",description:'<animate attributeName="href" \u2014 can dynamically change href to javascript:',pattern:/<animate[\s\S]{0,80}attributeName\s*=\s*["'][\s]*href["']/i},{id:"svg-animate-xlinkhref",description:'<animate attributeName="xlink:href"',pattern:/<animate[\s\S]{0,80}attributeName\s*=\s*["'][\s]*xlink\s*:\s*href["']/i},{id:"svg-set-javascript",description:'<set to="javascript:..." \u2014 sets an attribute to a javascript: URI',pattern:/<set[\s\S]{0,80}to\s*=\s*["']?\s*javascript\s*:/i},{id:"svg-event-handler",description:"SVG-specific event handler attributes: onload=, onerror=, onactivate=, etc.",pattern:/\bon(?:load|error|activate|begin|end|repeat|focus|blur|click|mouse\w{1,20}|key\w{1,20})\s*=/i},{id:"svg-handler-generic",description:"Generic on* handler catch-all for SVG attributes",pattern:/\bon\w{1,30}\s*=/i},{id:"svg-filter-feimage",description:"<feImage href= \u2014 filter primitive that can load external resources",pattern:/<feImage[\s\S]{0,80}(?:xlink\s*:\s*)?href\s*=/i},{id:"svg-image-external",description:"<image xlink:href with http/https or javascript protocol",pattern:/<image[\s\S]{0,80}(?:xlink\s*:\s*)?href\s*=\s*["']?\s*(?:https?|javascript)\s*:/i},{id:"svg-style-javascript",description:"style= attribute containing javascript: (e.g. background:url(javascript:...))",pattern:/style\s*=[\s\S]{0,60}javascript\s*:/i}],$r=Yo;var Go=[{id:"sql-block-comment-open",description:"SQL block comment open: /* ... */ \u2014 unusual in legitimate user text",pattern:/\/\*/},{id:"sql-union-select",description:"UNION SELECT \u2014 most common SQL injection aggregation attack",pattern:/\bUNION\s{1,20}(?:ALL\s{1,20})?SELECT\b/i},{id:"sql-drop-table",description:"DROP TABLE \u2014 destructive DDL injection",pattern:/\bDROP\s{1,20}TABLE\b/i},{id:"sql-drop-database",description:"DROP DATABASE \u2014 destructive DDL injection",pattern:/\bDROP\s{1,20}DATABASE\b/i},{id:"sql-insert-into",description:"INSERT INTO \u2014 data injection",pattern:/\bINSERT\s{1,20}INTO\b/i},{id:"sql-delete-from",description:"DELETE FROM \u2014 data deletion injection",pattern:/\bDELETE\s{1,20}FROM\b/i},{id:"sql-update-set",description:"UPDATE ... SET \u2014 data modification injection",pattern:/\bUPDATE\b[\s\S]{1,60}\bSET\b/i},{id:"sql-exec-xp",description:"EXEC xp_ \u2014 MSSQL extended stored procedure execution",pattern:/\bEXEC(?:UTE)?\s{1,20}xp_/i},{id:"sql-tautology-string",description:`Classic string tautology: ' OR '1'='1 or " OR "1"="1"`,pattern:/'\s{0,10}OR\s{0,10}'[^']{0,20}'\s*=\s*'[^']{0,20}/i},{id:"sql-tautology-numeric",description:"Numeric tautology: OR 1=1",pattern:/\bOR\s{1,10}1\s*=\s*1\b/i},{id:"sql-always-true-zero",description:"Numeric tautology: OR 0=0",pattern:/\bOR\s{1,10}0\s*=\s*0\b/i},{id:"sql-sleep-benchmark",description:"Time-based blind injection: SLEEP() or BENCHMARK()",pattern:/\b(?:SLEEP|BENCHMARK)\s*\(/i},{id:"sql-waitfor-delay",description:"MSSQL time-based blind injection: WAITFOR DELAY",pattern:/\bWAITFOR\s{1,20}DELAY\b/i},{id:"sql-char-function",description:"CHAR() function \u2014 used to obfuscate injected strings",pattern:/\bCHAR\s*\(\s*\d{1,3}/i},{id:"sql-information-schema",description:"INFORMATION_SCHEMA \u2014 reconnaissance query for table/column enumeration",pattern:/\bINFORMATION_SCHEMA\b/i}],ht=Go;var Wo=[{id:"shell-path-traversal-unix",description:"Unix path traversal: ../ \u2014 climbing the directory tree",pattern:/\.\.\//},{id:"shell-path-traversal-windows",description:"Windows path traversal: ..\\ \u2014 climbing the directory tree",pattern:/\.\.\\/},{id:"shell-path-traversal-encoded",description:"URL-encoded path traversal: %2e%2e or %2f variants",pattern:/%2e%2e|%2f\.\.|\.\.%2f/i},{id:"shell-null-byte",description:"Null byte injection: \\x00 or %00 \u2014 truncates strings in C-backed functions",pattern:/\x00|%00/},{id:"shell-semicolon",description:"Semicolon command separator: cmd1; cmd2",pattern:/;/},{id:"shell-pipe",description:"Pipe operator: cmd1 | cmd2",pattern:/\|/},{id:"shell-and-operator",description:"AND operator: cmd1 && cmd2",pattern:/&&/},{id:"shell-or-operator",description:"OR operator: cmd1 || cmd2",pattern:/\|\|/},{id:"shell-backtick",description:"Backtick command substitution: `cmd`",pattern:/`/},{id:"shell-dollar-paren",description:"Dollar-paren command substitution: $(cmd)",pattern:/\$\(/},{id:"shell-dollar-brace",description:"Dollar-brace variable expansion: ${var} \u2014 can be abused for injection",pattern:/\$\{/},{id:"shell-redirect-out",description:"Output redirection: cmd > file or cmd >> file",pattern:/>{1,2}/},{id:"shell-redirect-in",description:"Input redirection: cmd < file",pattern:/</},{id:"shell-newline-injection",description:"Newline injection: \\n or \\r \u2014 can inject new shell commands",pattern:/[\n\r]/},{id:"shell-glob-star",description:"Glob expansion: * or ? \u2014 can expand to unintended files",pattern:/[/\\][*?]/},{id:"shell-absolute-root",description:"Absolute root path injection: string starting with / or \\ (Windows UNC)",pattern:/^(?:\/|\\\\)/},{id:"shell-windows-drive",description:"Windows drive letter path injection: C:\\ or D:/",pattern:/^[a-zA-Z]:[/\\]/},{id:"shell-curl-wget",description:"curl/wget with URL or flags \u2014 can exfiltrate data or download payloads",pattern:/\b(?:curl|wget)\s+(?:https?:\/\/|ftp:\/\/|-)/i}],qr=Wo;var Ko=[{id:"redos-nested-quantifier-plus",description:"Nested + quantifier inside a group with outer quantifier: (a+)+, (.+b)*, etc.",pattern:/\([^)]*\+[^)]*\)[+*]/},{id:"redos-nested-quantifier-star",description:"Nested * quantifier: (a*)* or (a*)+ \u2014 catastrophic backtracking",pattern:/\([^)]*\*[^)]*\)[*+]/},{id:"redos-nested-groups",description:"Doubly nested quantified groups: ((a+)+) \u2014 guaranteed catastrophic",pattern:/\(\([^)]{0,40}\)[+*]\)[+*]/},{id:"redos-alternation-overlap",description:"Overlapping alternation under quantifier: (a|a)+ \u2014 ambiguous NFA paths",pattern:/\(([^|()]{1,20})\|(?:\1)(?:\|[^|()]{1,20}){0,5}\)[+*?]{1,2}/},{id:"redos-star-plus-concat",description:"(x*x)+ pattern \u2014 triggers super-linear backtracking",pattern:/\([^)]{0,10}\*[^)]{0,10}\)[+*]/},{id:"redos-dot-star-greedy",description:"(.*){n,} or (.+){n,} \u2014 repeated greedy dot quantifiers",pattern:/\(\.[*+]\)\{?\d/},{id:"redos-large-repetition",description:"Very large fixed or range repetition count {1000,} or {1000,n} \u2014 denial of service via backtracking",pattern:/\{\d{4,}(?:,\d*)?\}/},{id:"redos-catastrophic-alternation",description:"Long alternation with many similar branches \u2014 polynomial backtracking risk",pattern:/\([^)]{0,200}(?:\|[^|)]{0,50}){9,}\)/}],zr=Ko;var ie=`["'\\s]*:`,Jo=[{id:"nosql-where-operator",description:"$where \u2014 executes arbitrary JavaScript server-side in MongoDB",pattern:new RegExp(`\\$where${ie}`,"i")},{id:"nosql-ne-operator",description:'$ne \u2014 "not equal" operator used to bypass equality checks',pattern:new RegExp(`\\$ne${ie}`,"i")},{id:"nosql-gt-operator",description:'$gt \u2014 "greater than" used to bypass password/value checks',pattern:new RegExp(`\\$gte?${ie}`,"i")},{id:"nosql-lt-operator",description:'$lt / $lte \u2014 "less than" bypass variants',pattern:new RegExp(`\\$lte?${ie}`,"i")},{id:"nosql-regex-operator",description:"$regex \u2014 can be used to extract data character by character (blind injection)",pattern:new RegExp(`\\$regex${ie}`,"i")},{id:"nosql-or-operator",description:"$or \u2014 logical OR; used to create always-true conditions",pattern:new RegExp(`\\$or${ie}\\s*\\[`,"i")},{id:"nosql-and-operator",description:"$and \u2014 logical AND operator injection",pattern:new RegExp(`\\$and${ie}\\s*\\[`,"i")},{id:"nosql-nor-operator",description:"$nor \u2014 logical NOR operator injection",pattern:new RegExp(`\\$nor${ie}\\s*\\[`,"i")},{id:"nosql-exists-operator",description:"$exists \u2014 can enumerate fields to determine schema",pattern:new RegExp(`\\$exists${ie}`,"i")},{id:"nosql-in-operator",description:"$in \u2014 matches any value in a list; can enumerate values",pattern:new RegExp(`\\$in${ie}\\s*\\[`,"i")},{id:"nosql-expr-operator",description:"$expr \u2014 allows aggregation expressions in queries (MongoDB 3.6+)",pattern:new RegExp(`\\$expr${ie}`,"i")},{id:"nosql-function-operator",description:"$function \u2014 executes arbitrary JavaScript in MongoDB 4.4+",pattern:new RegExp(`\\$function${ie}`,"i")},{id:"nosql-accumulator-operator",description:"$accumulator \u2014 custom aggregation with arbitrary JS execution",pattern:new RegExp(`\\$accumulator${ie}`,"i")},{id:"nosql-proto-pollution",description:"__proto__ \u2014 prototype pollution via object key injection",pattern:/__proto__/},{id:"nosql-constructor-prototype",description:"constructor.prototype \u2014 alternative prototype pollution vector (dot notation or JSON key)",pattern:/constructor[\s"':.,{\[]*prototype/i},{id:"nosql-proto-bracket",description:'["__proto__"] \u2014 bracket-notation prototype pollution',pattern:/\[["']__proto__["']\]/}],en=Jo;var jo=[{id:"log-crlf-injection",description:"CRLF injection: literal \\r or \\n embeds fake log lines",pattern:/[\r\n]/},{id:"log-url-encoded-crlf",description:"URL-encoded CRLF: %0d, %0a, %0D, %0A \u2014 decoded by some log parsers",pattern:/%0[dDaA]/},{id:"log-unicode-newline",description:"Unicode newline variants: U+2028 (line separator), U+2029 (paragraph separator)",pattern:/[\u2028\u2029]/},{id:"log-log4shell-jndi",description:"Log4Shell: ${jndi:...} triggers remote code execution in Apache Log4j",pattern:/\$\{jndi\s*:/i},{id:"log-log4shell-obfuscated",description:"Obfuscated Log4Shell: ${::-j}... lookup-bypass prefix used to evade WAF detection",pattern:/\$\{::-/},{id:"log-log4j-lookup",description:"Log4j lookup syntax: ${env:...}, ${sys:...}, ${ctx:...} \u2014 data exfiltration",pattern:/\$\{(?:env|sys|ctx|main|map|sd|web|docker|k8s|spring)\s*:/i},{id:"log-ssti-double-brace",description:"SSTI double-brace: {{expression}} \u2014 Jinja2, Twig, Handlebars, etc.",pattern:/\{\{[\s\S]{0,80}\}\}/},{id:"log-ssti-hash-brace",description:"SSTI hash-brace: #{expression} \u2014 Thymeleaf, Velocity, Ruby ERB",pattern:/#\{[\s\S]{0,80}\}/},{id:"log-ssti-dollar-brace",description:"SSTI/EL injection: ${expression with operators or method calls} \u2014 JSP EL, Freemarker, SpEL",pattern:/\$\{[^}]*(?:\.|\(|\*|\+|\bclass\b|\bruntime\b|\bprocess\b|\bexec\b)[^}]{0,80}\}/i},{id:"log-ssti-percent-tag",description:"SSTI ERB/ASP tag: <%= expression %> \u2014 Ruby ERB, ASP",pattern:/<%=[\s\S]{0,80}%>/},{id:"log-null-byte",description:"Null byte: \\x00 or %00 \u2014 can truncate log entries in C-backed loggers",pattern:/\x00|%00/},{id:"log-ansi-escape",description:"ANSI escape sequence: ESC[ \u2014 can manipulate terminal output when logs are tailed",pattern:/\x1b\[/}],tn=jo;var Vo=[{id:"sql-line-comment",description:"SQL line comment: -- followed by whitespace or end of string",pattern:/--(?:\s|$)/},{id:"sql-stacked-query",description:"Stacked queries: semicolon immediately followed by a SQL keyword",pattern:/;\s{0,10}(?:SELECT|INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|EXEC)\b/i},{id:"sql-hex-encoding",description:"Hex-encoded string injection: 0x41414141 style (MySQL)",pattern:/\b0x[0-9a-f]{4,}/i}],Xo=[...ht,...Vo],rn=Xo;Je.label="HTML";je.label="XML";$r.label="SVG";ht.label="SQL";rn.label="SQL-STRICT";qr.label="SHELL";zr.label="REDOS";en.label="NOSQL";tn.label="LOG";var ih=Object.freeze({HTML:Je,XML:je,SVG:$r,SQL:ht,"SQL-STRICT":rn,SHELL:qr,REDOS:zr,NOSQL:en,LOG:tn});function Zo(e){if(typeof e!="string")throw new TypeError(`is-unsafe: first argument must be a string, got ${typeof e}`)}function $o(e){if(!(e instanceof RegExp)){if(Array.isArray(e)){if(e.length===0)throw new TypeError("is-unsafe: context must not be an empty array");if(Array.isArray(e[0])){for(let t of e)if(!Array.isArray(t)||t.length===0)throw new TypeError("is-unsafe: each context in the array must be a non-empty pattern array (PatternList)")}return}throw new TypeError(`is-unsafe: second argument must be a PatternList (e.g. HTML), an array of PatternLists (e.g. [HTML, XML]), or a RegExp. Got: ${typeof e}`)}}function qo(e){return e instanceof RegExp?{lists:null,regex:e}:Array.isArray(e[0])?{lists:e,regex:null}:{lists:[e],regex:null}}function zo(e,t){let r=t.label??"CUSTOM";for(let n of t)if(n.pattern.test(e))return{context:r,id:n.id,description:n.description,pattern:n.pattern};return null}function bs(e,t){Zo(e),$o(t);let{lists:r,regex:n}=qo(t);if(n)return n.test(e);for(let s of r)if(zo(e,s)!==null)return!0;return!1}function ec(e,t){if(!e)return{};let r=t.attributesGroupName?e[t.attributesGroupName]:e;if(!r)return{};let n={};for(let s in r)if(s.startsWith(t.attributeNamePrefix)){let a=s.substring(t.attributeNamePrefix.length);n[a]=r[s]}else n[s]=r[s];return n}function tc(e){if(!e||typeof e!="string")return;let t=e.indexOf(":");if(t!==-1&&t>0){let r=e.substring(0,t);if(r!=="xmlns")return r}}var mt=class{constructor(t,r){this.options=t,this.currentNode=null,this.tagsNodeStack=[],this.parseXml=ac,this.parseTextData=rc,this.resolveNameSpace=nc,this.buildAttributesMap=ic,this.isItStopNode=dc,this.replaceEntitiesValue=cc,this.readStopNodeData=pc,this.saveTextToParentTag=lc,this.addChild=oc,this.ignoreAttributesFn=Xr(this.options.ignoreAttributes),this.entityExpansionCount=0,this.currentExpandedLength=0,this.doctypefound=!1;let n={...dt};this.options.entityDecoder?this.entityDecoder=this.options.entityDecoder:(typeof this.options.htmlEntities=="object"?n=this.options.htmlEntities:this.options.htmlEntities===!0&&(n={...Gr,...Yr}),this.entityDecoder=new Ye({namedEntities:{...n,...r},numericAllowed:this.options.htmlEntities,limit:{maxTotalExpansions:this.options.processEntities.maxTotalExpansions,maxExpandedLength:this.options.processEntities.maxExpandedLength,applyLimitsTo:this.options.processEntities.appliesTo},onInputEntity:(a,c)=>bs(c,[Je,je])?Qe.BLOCK:Qe.ALLOW})),this.matcher=new Ke,this.readonlyMatcher=this.matcher.readOnly(),this.isCurrentNodeStopNode=!1,this.stopNodeExpressionsSet=new We;let s=this.options.stopNodes;if(s&&s.length>0){for(let a=0;a<s.length;a++){let c=s[a];typeof c=="string"?this.stopNodeExpressionsSet.add(new ke(c)):c instanceof ke&&this.stopNodeExpressionsSet.add(c)}this.stopNodeExpressionsSet.seal()}}};function rc(e,t,r,n,s,a,c){let l=this.options;if(e!==void 0&&(l.trimValues&&!n&&(e=e.trim()),e.length>0)){c||(e=this.replaceEntitiesValue(e,t,r));let o=l.jPath?r.toString():r,d=l.tagValueProcessor(t,e,o,s,a);return d==null?e:typeof d!=typeof e||d!==e?d:l.trimValues||e.trim()===e?an(e,l.parseTagValue,l.numberParseOptions):e}}function nc(e){if(this.options.removeNSPrefix){let t=e.split(":"),r=e.charAt(0)==="/"?"/":"";if(t[0]==="xmlns")return"";t.length===2&&(e=r+t[1])}return e}var sc=new RegExp(`([^\\s=]+)\\s*(=\\s*(['"])([\\s\\S]*?)\\3)?`,"gm");function ic(e,t,r,n=!1){let s=this.options;if(n===!0||s.ignoreAttributes!==!0&&typeof e=="string"){let a=Yt(e,sc),c=a.length,l={},o=new Array(c),d=!1,p={};for(let g=0;g<c;g++){let y=this.resolveNameSpace(a[g][1]),w=a[g][4];if(y.length&&w!==void 0){let I=w;s.trimValues&&(I=I.trim()),I=this.replaceEntitiesValue(I,r,this.readonlyMatcher),o[g]=I,p[y]=I,d=!0}}d&&typeof t=="object"&&t.updateCurrent&&t.updateCurrent(p);let m=s.jPath?t.toString():this.readonlyMatcher,f=!1;for(let g=0;g<c;g++){let y=this.resolveNameSpace(a[g][1]);if(this.ignoreAttributesFn(y,m))continue;let w=s.attributeNamePrefix+y;if(y.length)if(s.transformAttributeName&&(w=s.transformAttributeName(w)),w=Cs(w,s),a[g][4]!==void 0){let I=o[g],_=s.attributeValueProcessor(y,I,m);_==null?l[w]=I:typeof _!=typeof I||_!==I?l[w]=_:l[w]=an(I,s.parseAttributeValue,s.numberParseOptions),f=!0}else s.allowBooleanAttributes&&(l[w]=!0,f=!0)}if(!f)return;if(s.attributesGroupName&&!s.preserveOrder){let g={};return g[s.attributesGroupName]=l,g}return l}}var ac=function(e){e=e.replace(/\r\n?/g,`
7
- `);let t=new te("!xml"),r=t,n="";this.matcher.reset(),this.entityDecoder.reset(),this.entityExpansionCount=0,this.currentExpandedLength=0,this.doctypefound=!1;let s=this.options,a=new pt(s.processEntities),c=e.length;for(let l=0;l<c;l++)if(e[l]==="<"){let d=e.charCodeAt(l+1);if(d===47){let p=Ve(e,">",l,"Closing Tag is not closed."),m=e.substring(l+2,p).trim();if(s.removeNSPrefix){let g=m.indexOf(":");g!==-1&&(m=m.substr(g+1))}m=nn(s.transformTagName,m,"",s).tagName,r&&(n=this.saveTextToParentTag(n,r,this.readonlyMatcher));let f=this.matcher.getCurrentTag();if(m&&s.unpairedTagsSet.has(m))throw new Error(`Unpaired tag can not be used as closing tag: </${m}>`);f&&s.unpairedTagsSet.has(f)&&(this.matcher.pop(),this.tagsNodeStack.pop()),this.matcher.pop(),this.isCurrentNodeStopNode=!1,r=this.tagsNodeStack.pop(),n="",l=p}else if(d===63){let p=sn(e,l,!1,"?>");if(!p)throw new Error("Pi Tag is not closed.");n=this.saveTextToParentTag(n,r,this.readonlyMatcher);let m=this.buildAttributesMap(p.tagExp,this.matcher,p.tagName,!0);if(m){let f=m[this.options.attributeNamePrefix+"version"];this.entityDecoder.setXmlVersion(Number(f)||1),a.setXmlVersion(Number(f)||1)}if(!(s.ignoreDeclaration&&p.tagName==="?xml"||s.ignorePiTags)){let f=new te(p.tagName);f.add(s.textNodeName,""),p.tagName!==p.tagExp&&p.attrExpPresent&&s.ignoreAttributes!==!0&&(f[":@"]=m),this.addChild(r,f,this.readonlyMatcher,l)}l=p.closeIndex+1}else if(d===33&&e.charCodeAt(l+2)===45&&e.charCodeAt(l+3)===45){let p=Ve(e,"-->",l+4,"Comment is not closed.");if(s.commentPropName){let m=e.substring(l+4,p-2);n=this.saveTextToParentTag(n,r,this.readonlyMatcher),r.add(s.commentPropName,[{[s.textNodeName]:m}])}l=p}else if(d===33&&e.charCodeAt(l+2)===68){if(this.doctypefound)throw new Error("Multiple DOCTYPE declarations found.");this.doctypefound=!0;let p=a.readDocType(e,l);this.entityDecoder.addInputEntities(p.entities),l=p.i}else if(d===33&&e.charCodeAt(l+2)===91){let p=Ve(e,"]]>",l,"CDATA is not closed.")-2,m=e.substring(l+9,p);n=this.saveTextToParentTag(n,r,this.readonlyMatcher);let f=this.parseTextData(m,r.tagname,this.readonlyMatcher,!0,!1,!0,!0);f==null&&(f=""),s.cdataPropName?r.add(s.cdataPropName,[{[s.textNodeName]:m}]):r.add(s.textNodeName,f),l=p+2}else{let p=sn(e,l,s.removeNSPrefix);if(!p){let v=e.substring(Math.max(0,l-50),Math.min(c,l+50));throw new Error(`readTagExp returned undefined at position ${l}. Context: "${v}"`)}let m=p.tagName,f=p.rawTagName,g=p.tagExp,y=p.attrExpPresent,w=p.closeIndex;if({tagName:m,tagExp:g}=nn(s.transformTagName,m,g,s),s.strictReservedNames&&(m===s.commentPropName||m===s.cdataPropName||m===s.textNodeName||m===s.attributesGroupName))throw new Error(`Invalid tag name: ${m}`);r&&n&&r.tagname!=="!xml"&&(n=this.saveTextToParentTag(n,r,this.readonlyMatcher,!1));let I=r;I&&s.unpairedTagsSet.has(I.tagname)&&(r=this.tagsNodeStack.pop(),this.matcher.pop());let _=!1;g.length>0&&g.lastIndexOf("/")===g.length-1&&(_=!0,m[m.length-1]==="/"?(m=m.substr(0,m.length-1),g=m):g=g.substr(0,g.length-1),y=m!==g);let x=null,L={},D;D=tc(f),m!==t.tagname&&this.matcher.push(m,{},D),m!==g&&y&&(x=this.buildAttributesMap(g,this.matcher,m),x&&(L=ec(x,s))),m!==t.tagname&&(this.isCurrentNodeStopNode=this.isItStopNode());let S=l;if(this.isCurrentNodeStopNode){let v="";if(_)l=p.closeIndex;else if(s.unpairedTagsSet.has(m))l=p.closeIndex;else{let F=this.readStopNodeData(e,f,w+1);if(!F)throw new Error(`Unexpected end of ${f}`);l=F.i,v=F.tagContent}let Y=new te(m);x&&(Y[":@"]=x),Y.add(s.textNodeName,v),this.matcher.pop(),this.isCurrentNodeStopNode=!1,this.addChild(r,Y,this.readonlyMatcher,S)}else{if(_){({tagName:m,tagExp:g}=nn(s.transformTagName,m,g,s));let v=new te(m);x&&(v[":@"]=x),this.addChild(r,v,this.readonlyMatcher,S),this.matcher.pop(),this.isCurrentNodeStopNode=!1}else if(s.unpairedTagsSet.has(m)){let v=new te(m);x&&(v[":@"]=x),this.addChild(r,v,this.readonlyMatcher,S),this.matcher.pop(),this.isCurrentNodeStopNode=!1,l=p.closeIndex;continue}else{let v=new te(m);if(this.tagsNodeStack.length>s.maxNestedTags)throw new Error("Maximum nested tags exceeded");this.tagsNodeStack.push(r),x&&(v[":@"]=x),this.addChild(r,v,this.readonlyMatcher,S),r=v}n="",l=w}}}else n+=e[l];return t.child};function oc(e,t,r,n){this.options.captureMetaData||(n=void 0);let s=this.options.jPath?r.toString():r,a=this.options.updateTag(t.tagname,s,t[":@"]);a===!1||(typeof a=="string"&&(t.tagname=a),e.addChild(t,n))}function cc(e,t,r){let n=this.options.processEntities;if(!n||!n.enabled)return e;if(n.allowedTags){let s=this.options.jPath?r.toString():r;if(!(Array.isArray(n.allowedTags)?n.allowedTags.includes(t):n.allowedTags(t,s)))return e}if(n.tagFilter){let s=this.options.jPath?r.toString():r;if(!n.tagFilter(t,s))return e}return this.entityDecoder.decode(e)}function lc(e,t,r,n){return e&&(n===void 0&&(n=t.child.length===0),e=this.parseTextData(e,t.tagname,r,!1,t[":@"]?Object.keys(t[":@"]).length!==0:!1,n),e!==void 0&&e!==""&&t.add(this.options.textNodeName,e),e=""),e}function dc(){return this.stopNodeExpressionsSet.size===0?!1:this.matcher.matchesAny(this.stopNodeExpressionsSet)}function uc(e,t,r=">"){let n=0,s=e.length,a=r.charCodeAt(0),c=r.length>1?r.charCodeAt(1):-1,l="",o=t;for(let d=t;d<s;d++){let p=e.charCodeAt(d);if(n)p===n&&(n=0);else if(p===34||p===39)n=p;else if(p===a)if(c!==-1){if(e.charCodeAt(d+1)===c)return l+=e.substring(o,d),{data:l,index:d}}else return l+=e.substring(o,d),{data:l,index:d};else p===9&&!n&&(l+=e.substring(o,d)+" ",o=d+1)}}function Ve(e,t,r,n){let s=e.indexOf(t,r);if(s===-1)throw new Error(n);return s+t.length-1}function Ac(e,t,r,n){let s=e.indexOf(t,r);if(s===-1)throw new Error(n);return s}function sn(e,t,r,n=">"){let s=uc(e,t+1,n);if(!s)return;let a=s.data,c=s.index,l=a.search(/\s/),o=a,d=!0;l!==-1&&(o=a.substring(0,l),a=a.substring(l+1).trimStart());let p=o;if(r){let m=o.indexOf(":");m!==-1&&(o=o.substr(m+1),d=o!==s.data.substr(m+1))}return{tagName:o,tagExp:a,closeIndex:c,attrExpPresent:d,rawTagName:p}}function pc(e,t,r){let n=r,s=1,a=e.length;for(;r<a;r++)if(e[r]==="<"){let c=e.charCodeAt(r+1);if(c===47){let l=Ac(e,">",r,`${t} is not closed`);if(e.substring(r+2,l).trim()===t&&(s--,s===0))return{tagContent:e.substring(n,r),i:l};r=l}else if(c===63)r=Ve(e,"?>",r+1,"StopNode is not closed.");else if(c===33&&e.charCodeAt(r+2)===45&&e.charCodeAt(r+3)===45)r=Ve(e,"-->",r+3,"StopNode is not closed.");else if(c===33&&e.charCodeAt(r+2)===91)r=Ve(e,"]]>",r,"StopNode is not closed.")-2;else{let l=sn(e,r,!1);l&&((l&&l.tagName)===t&&l.tagExp[l.tagExp.length-1]!=="/"&&s++,r=l.closeIndex)}}}function an(e,t,r){if(t&&typeof e=="string"){let n=e.trim();return n==="true"?!0:n==="false"?!1:Vr(e,r)}else return rs(e)?e:""}function nn(e,t,r,n){if(e){let s=e(t);r===t&&(r=s),t=s}return t=Cs(t,n),{tagName:t,tagExp:r}}function Cs(e,t){if(Gt.includes(e))throw new Error(`[SECURITY] Invalid name: "${e}" is a reserved JavaScript keyword that could cause prototype pollution`);return ct.includes(e)?t.onDangerousProperty(e):e}var on=te.getMetaDataSymbol();function hc(e,t){if(!e||typeof e!="object")return{};if(!t)return e;let r={};for(let n in e)if(n.startsWith(t)){let s=n.substring(t.length);r[s]=e[n]}else r[n]=e[n];return r}function cn(e,t,r,n){return Is(e,t,r,n)}function Is(e,t,r,n){let s,a={};for(let c=0;c<e.length;c++){let l=e[c],o=mc(l);if(o!==void 0&&o!==t.textNodeName){let d=hc(l[":@"]||{},t.attributeNamePrefix);r.push(o,d)}if(o===t.textNodeName)s===void 0?s=l[o]:s+=""+l[o];else{if(o===void 0)continue;if(l[o]){let d=Is(l[o],t,r,n),p=fc(d,t);if(Object.keys(d).length===0&&t.alwaysCreateTextNode&&(d[t.textNodeName]=""),l[":@"]?gc(d,l[":@"],n,t):Object.keys(d).length===1&&d[t.textNodeName]!==void 0&&!t.alwaysCreateTextNode?d=d[t.textNodeName]:Object.keys(d).length===0&&(t.alwaysCreateTextNode?d[t.textNodeName]="":d=""),l[on]!==void 0&&typeof d=="object"&&d!==null&&(d[on]=l[on]),a[o]!==void 0&&Object.prototype.hasOwnProperty.call(a,o))Array.isArray(a[o])||(a[o]=[a[o]]),a[o].push(d);else{let m=t.jPath?n.toString():n;t.isArray(o,m,p)?a[o]=[d]:a[o]=d}o!==void 0&&o!==t.textNodeName&&r.pop()}}}return typeof s=="string"?s.length>0&&(a[t.textNodeName]=s):s!==void 0&&(a[t.textNodeName]=s),a}function mc(e){let t=Object.keys(e);for(let r=0;r<t.length;r++){let n=t[r];if(n!==":@")return n}}function gc(e,t,r,n){if(t){let s=Object.keys(t),a=s.length;for(let c=0;c<a;c++){let l=s[c],o=l.startsWith(n.attributeNamePrefix)?l.substring(n.attributeNamePrefix.length):l,d=n.jPath?r.toString()+"."+o:r;n.isArray(l,d,!0,!0)?e[l]=[t[l]]:e[l]=t[l]}}}function fc(e,t){let{textNodeName:r}=t,n=Object.keys(e).length;return!!(n===0||n===1&&(e[r]||typeof e[r]=="boolean"||e[r]===0))}var Xe=class{constructor(t){this.externalEntities={},this.options=ds(t)}parse(t,r){if(typeof t!="string"&&t.toString)t=t.toString();else if(typeof t!="string")throw new Error("XML data is accepted in String or Bytes[] form.");if(r){r===!0&&(r={});let a=Wt(t,r);if(a!==!0)throw Error(`${a.err.msg}:${a.err.line}:${a.err.col}`)}let n=new mt(this.options,this.externalEntities),s=n.parseXml(t);return this.options.preserveOrder||s===void 0?s:cn(s,this.options,n.matcher,n.readonlyMatcher)}addEntity(t,r){if(r.indexOf("&")!==-1)throw new Error("Entity value can't have '&'");if(t.indexOf("&")!==-1||t.indexOf(";")!==-1)throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for '&#xD;'");if(r==="&")throw new Error("An entity with value '&' is not permitted");this.externalEntities[t]=r}static getMetaDataSymbol(){return te.getMetaDataSymbol()}};var ys={validate:Wt};var Ec=/\.(?:avif|bmp|css|csv|docx?|eot|gif|gz|ico|jpe?g|js|json|map|mp3|mp4|mov|ogg|otf|pdf|png|pptx?|rar|rss|svg|tar|tiff?|ttf|txt|wav|webm|webp|woff2?|xlsx?|xml|zip)$/i;function Q(e,t,{includeQuery:r=!1}={}){let n;try{n=t?new URL(e,t):new URL(e)}catch{return null}return n.protocol!=="http:"&&n.protocol!=="https:"?null:(n.hash="",r||(n.search=""),n.pathname.length>1&&n.pathname.endsWith("/")&&(n.pathname=n.pathname.replace(/\/+$/,"")),n.href)}function le(e,t){try{return new URL(e).origin===t}catch{return!1}}function $t(e){try{let t=new URL(e);return!Ec.test(t.pathname)}catch{return!1}}var ln=10*1024*1024,ws=100,bc=5e4,Cc=new Xe({ignoreAttributes:!1,removeNSPrefix:!0,trimValues:!0});function qt(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function xs(e){return(e===void 0?[]:Array.isArray(e)?e:[e]).flatMap(r=>{let n=qt(r)?.loc;return typeof n=="string"?[n]:[]})}function Ic(e,t,r){let s=t.toLowerCase().endsWith(".gz")||r.includes("gzip")||e[0]===31&&e[1]===139?Tc(e):e;if(s.byteLength>ln)throw new Error(`sitemap exceeds ${ln} bytes after decompression: ${t}`);return s.toString("utf8").replace(/^\uFEFF/,"")}function Ns(e,t){let r=ys.validate(e);if(r!==!0)throw new Error(`invalid sitemap XML at ${t}: ${r.err.msg}`);let n=qt(Cc.parse(e)),s=qt(n?.sitemapindex);if(s)return{kind:"index",locations:xs(s.sitemap)};let a=qt(n?.urlset);if(a)return{kind:"urlset",locations:xs(a.url)};throw new Error(`XML is not a sitemap urlset or sitemapindex: ${t}`)}function Ss(e){return{fetch:e.fetch??globalThis.fetch,timeout:e.timeout,maxRedirects:e.maxRedirects??10,retries:e.retries??2,signal:e.signal,gate:e.requestGate?async t=>e.requestGate?.(t):void 0,onEvent:e.onEvent}}async function _s(e,t){let{response:r}=await Le(e,{headers:{accept:"application/xml,text/xml,application/gzip,text/plain;q=0.9,*/*;q=0.1","user-agent":t.userAgent}},Ss(t));if(!r.ok)throw await r.body?.cancel(),new Error(`sitemap returned HTTP ${r.status}: ${e}`);let{buffer:n}=await Oe(r,ln);return Ic(n,e,r.headers.get("content-type")?.toLowerCase()??"")}async function yc(e,t){try{let r=await _s(e,t);return Ns(r,e),!0}catch{return!1}}async function Rs(e,t){let r=Q(e,void 0);if(!r)throw new Error(`invalid start URL: ${e}`);let n=new URL(r).origin,s=new URL("/robots.txt",n).href;try{if(t.robotsBody!==void 0)for(let a of t.robotsBody.matchAll(/^sitemap:\s*(\S+)\s*$/gim)){let c=a[1];if(!c)continue;let l=Q(c,s,{includeQuery:!0});if(l&&le(l,n))return l}else{let{response:a}=await Le(s,{headers:{accept:"text/plain,*/*;q=0.1","user-agent":t.userAgent}},Ss({...t,siteOrigin:n}));if(a.ok){let{text:c}=await Oe(a,524288);for(let l of c.matchAll(/^sitemap:\s*(\S+)\s*$/gim)){let o=l[1];if(!o)continue;let d=Q(o,s,{includeQuery:!0});if(d&&le(d,n))return d}}else await a.body?.cancel()}}catch{}for(let a of["/sitemap.xml","/sitemap.xml.gz","/sitemap_index.xml"]){let c=new URL(a,n).href;if(await yc(c,{...t,siteOrigin:n}))return c}return null}async function zt(e,t){let r=Q(e,void 0,{includeQuery:!0});if(!r)throw new Error(`invalid sitemap URL: ${e}`);let n=new URL(r).origin,s=[r],a=new Set,c=[],l=new Set,o=t.maxUrls??bc,d=!1;for(;s.length>0&&a.size<ws&&c.length<o;){let p=s.shift();if(a.has(p))continue;a.add(p);let m=Ns(await _s(p,t),p);if(m.kind==="index"){for(let f of m.locations){let g=Q(f,p,{includeQuery:!0});g&&le(g,n)&&!a.has(g)&&!s.includes(g)&&s.push(g)}s.sort();continue}for(let f of m.locations){let g=Q(f,p,{includeQuery:t.includeQuery??!1});if(!(!g||l.has(g)||!le(g,t.siteOrigin)||!$t(g))&&(l.add(g),c.push(g),c.length>=o)){d=!0;break}}}return(s.length>0||a.size>=ws)&&(d=!0),{url:r,urls:c.sort(),sitemapCount:a.size,truncated:d,error:null}}async function dn(e,t){await e.onEvent?.(t)}async function de(e,t={}){let r=fe(e),n=Q(r.url,void 0,{includeQuery:r.includeQuery});if(!n)throw new Error(`invalid start URL: ${r.url}`);let s=new URL(n).origin,a=t.fetch??globalThis.fetch,c=He(r.delay),l=t.logger??Ht;await dn(t,{type:"plan-start",url:n});let o=await Qt(n,{userAgent:xe,timeout:r.timeout,maxRedirects:r.maxRedirects,retries:2,fetch:a,signal:t.signal,requestGate:c,onEvent:t.onEvent,logger:l});await dn(t,{type:"robots",robots:o});let d=null;r.sitemap==="auto"?d=await Rs(n,{timeout:r.timeout,maxRedirects:r.maxRedirects,userAgent:xe,fetch:a,signal:t.signal,requestGate:c,onEvent:t.onEvent,robotsBody:o.body}):r.sitemap!=="none"&&(d=r.sitemap);let p=null;if(d)try{p=await zt(d,{siteOrigin:s,includeQuery:r.includeQuery,maxUrls:5e4,timeout:r.timeout,maxRedirects:r.maxRedirects,retries:2,userAgent:xe,fetch:a,signal:t.signal,requestGate:c,onEvent:t.onEvent})}catch(g){p={url:d,urls:[],sitemapCount:0,truncated:!1,error:g instanceof Error?g.message:String(g)},l.warn(`Could not load sitemap ${d}: ${p.error}`)}let m=p?[...new Set([n,...p.urls])].sort((g,y)=>g===n?-1:y===n?1:g.localeCompare(y)):[n],f=p?m.length:null;return await dn(t,{type:"sitemap",sitemap:p,candidateCount:f}),{planVersion:1,config:r,startUrl:n,origin:s,userAgent:xe,robots:o,sitemap:p,candidateUrls:m,candidateCount:f,mode:p?"sitemap":"links"}}import{createHash as Ci}from"node:crypto";var wc=new Set([65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]),k="\uFFFD",u;(function(e){e[e.EOF=-1]="EOF",e[e.NULL=0]="NULL",e[e.TABULATION=9]="TABULATION",e[e.CARRIAGE_RETURN=13]="CARRIAGE_RETURN",e[e.LINE_FEED=10]="LINE_FEED",e[e.FORM_FEED=12]="FORM_FEED",e[e.SPACE=32]="SPACE",e[e.EXCLAMATION_MARK=33]="EXCLAMATION_MARK",e[e.QUOTATION_MARK=34]="QUOTATION_MARK",e[e.AMPERSAND=38]="AMPERSAND",e[e.APOSTROPHE=39]="APOSTROPHE",e[e.HYPHEN_MINUS=45]="HYPHEN_MINUS",e[e.SOLIDUS=47]="SOLIDUS",e[e.DIGIT_0=48]="DIGIT_0",e[e.DIGIT_9=57]="DIGIT_9",e[e.SEMICOLON=59]="SEMICOLON",e[e.LESS_THAN_SIGN=60]="LESS_THAN_SIGN",e[e.EQUALS_SIGN=61]="EQUALS_SIGN",e[e.GREATER_THAN_SIGN=62]="GREATER_THAN_SIGN",e[e.QUESTION_MARK=63]="QUESTION_MARK",e[e.LATIN_CAPITAL_A=65]="LATIN_CAPITAL_A",e[e.LATIN_CAPITAL_Z=90]="LATIN_CAPITAL_Z",e[e.RIGHT_SQUARE_BRACKET=93]="RIGHT_SQUARE_BRACKET",e[e.GRAVE_ACCENT=96]="GRAVE_ACCENT",e[e.LATIN_SMALL_A=97]="LATIN_SMALL_A",e[e.LATIN_SMALL_Z=122]="LATIN_SMALL_Z"})(u||(u={}));var Z={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function er(e){return e>=55296&&e<=57343}function Ls(e){return e>=56320&&e<=57343}function Os(e,t){return(e-55296)*1024+9216+t}function tr(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function rr(e){return e>=64976&&e<=65007||wc.has(e)}var T;(function(e){e.controlCharacterInInputStream="control-character-in-input-stream",e.noncharacterInInputStream="noncharacter-in-input-stream",e.surrogateInInputStream="surrogate-in-input-stream",e.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",e.endTagWithAttributes="end-tag-with-attributes",e.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",e.unexpectedSolidusInTag="unexpected-solidus-in-tag",e.unexpectedNullCharacter="unexpected-null-character",e.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",e.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",e.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",e.missingEndTagName="missing-end-tag-name",e.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",e.unknownNamedCharacterReference="unknown-named-character-reference",e.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",e.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",e.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",e.eofBeforeTagName="eof-before-tag-name",e.eofInTag="eof-in-tag",e.missingAttributeValue="missing-attribute-value",e.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",e.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",e.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",e.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",e.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",e.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",e.missingDoctypePublicIdentifier="missing-doctype-public-identifier",e.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",e.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",e.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",e.cdataInHtmlContent="cdata-in-html-content",e.incorrectlyOpenedComment="incorrectly-opened-comment",e.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",e.eofInDoctype="eof-in-doctype",e.nestedComment="nested-comment",e.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",e.eofInComment="eof-in-comment",e.incorrectlyClosedComment="incorrectly-closed-comment",e.eofInCdata="eof-in-cdata",e.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",e.nullCharacterReference="null-character-reference",e.surrogateCharacterReference="surrogate-character-reference",e.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",e.controlCharacterReference="control-character-reference",e.noncharacterCharacterReference="noncharacter-character-reference",e.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",e.missingDoctypeName="missing-doctype-name",e.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",e.duplicateAttribute="duplicate-attribute",e.nonConformingDoctype="non-conforming-doctype",e.missingDoctype="missing-doctype",e.misplacedDoctype="misplaced-doctype",e.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",e.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",e.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",e.openElementsLeftAfterEof="open-elements-left-after-eof",e.abandonedHeadElementChild="abandoned-head-element-child",e.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",e.nestedNoscriptInHead="nested-noscript-in-head",e.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"})(T||(T={}));var Nc=65536,nr=class{constructor(t){this.handler=t,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=Nc,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+ +(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(t,r){let{line:n,col:s,offset:a}=this,c=s+r,l=a+r;return{code:t,startLine:n,endLine:n,startCol:c,endCol:c,startOffset:l,endOffset:l}}_err(t){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(t,0)))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(t){if(this.pos!==this.html.length-1){let r=this.html.charCodeAt(this.pos+1);if(Ls(r))return this.pos++,this._addGap(),Os(t,r)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,u.EOF;return this._err(T.surrogateInInputStream),t}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}write(t,r){this.html.length>0?this.html+=t:this.html=t,this.endOfChunkHit=!1,this.lastChunkWritten=r}insertHtmlAtCurrentPos(t){this.html=this.html.substring(0,this.pos+1)+t+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(t,r){if(this.pos+t.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(r)return this.html.startsWith(t,this.pos);for(let n=0;n<t.length;n++)if((this.html.charCodeAt(this.pos+n)|32)!==t.charCodeAt(n))return!1;return!0}peek(t){let r=this.pos+t;if(r>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,u.EOF;let n=this.html.charCodeAt(r);return n===u.CARRIAGE_RETURN?u.LINE_FEED:n}advance(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,u.EOF;let t=this.html.charCodeAt(this.pos);return t===u.CARRIAGE_RETURN?(this.isEol=!0,this.skipNextNewLine=!0,u.LINE_FEED):t===u.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()):(this.skipNextNewLine=!1,er(t)&&(t=this._processSurrogate(t)),this.handler.onParseError===null||t>31&&t<127||t===u.LINE_FEED||t===u.CARRIAGE_RETURN||t>159&&t<64976||this._checkForProblematicCharacters(t),t)}_checkForProblematicCharacters(t){tr(t)?this._err(T.controlCharacterInInputStream):rr(t)&&this._err(T.noncharacterInInputStream)}retreat(t){for(this.pos-=t;this.pos<this.lastGapPos;)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=!1}};var O;(function(e){e[e.CHARACTER=0]="CHARACTER",e[e.NULL_CHARACTER=1]="NULL_CHARACTER",e[e.WHITESPACE_CHARACTER=2]="WHITESPACE_CHARACTER",e[e.START_TAG=3]="START_TAG",e[e.END_TAG=4]="END_TAG",e[e.COMMENT=5]="COMMENT",e[e.DOCTYPE=6]="DOCTYPE",e[e.EOF=7]="EOF",e[e.HIBERNATION=8]="HIBERNATION"})(O||(O={}));function sr(e,t){for(let r=e.attrs.length-1;r>=0;r--)if(e.attrs[r].name===t)return e.attrs[r].value;return null}var _c=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function Ds(e){return e>=55296&&e<=57343||e>1114111?65533:_c.get(e)??e}function Bs(e){let t=atob(e),r=t.length&-2,n=new Uint16Array(r/2);for(let s=0,a=0;s<r;s+=2){let c=t.charCodeAt(s),l=t.charCodeAt(s+1);n[a++]=c|l<<8}return n}var un=Bs("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");var K;(function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.FLAG13=8192]="FLAG13",e[e.BRANCH_LENGTH=8064]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE"})(K||(K={}));var U;(function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z"})(U||(U={}));var ks=32;function An(e){return e>=U.ZERO&&e<=U.NINE}function Rc(e){return e>=U.UPPER_A&&e<=U.UPPER_F||e>=U.LOWER_A&&e<=U.LOWER_F}function Lc(e){return e>=U.UPPER_A&&e<=U.UPPER_Z||e>=U.LOWER_A&&e<=U.LOWER_Z||An(e)}function Oc(e){return e===U.EQUALS||Lc(e)}var G;(function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity"})(G||(G={}));var ge;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute"})(ge||(ge={}));var ir=class{decodeTree;emitCodePoint;errors;constructor(t,r,n){this.decodeTree=t,this.emitCodePoint=r,this.errors=n}state=G.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=ge.Strict;runConsumed=0;startEntity(t){this.decodeMode=t,this.state=G.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(t,r){switch(this.state){case G.EntityStart:return t.charCodeAt(r)===U.NUM?(this.state=G.NumericStart,this.consumed+=1,this.stateNumericStart(t,r+1)):(this.state=G.NamedEntity,this.stateNamedEntity(t,r));case G.NumericStart:return this.stateNumericStart(t,r);case G.NumericDecimal:return this.stateNumericDecimal(t,r);case G.NumericHex:return this.stateNumericHex(t,r);case G.NamedEntity:return this.stateNamedEntity(t,r)}}stateNumericStart(t,r){return r>=t.length?-1:(t.charCodeAt(r)|ks)===U.LOWER_X?(this.state=G.NumericHex,this.consumed+=1,this.stateNumericHex(t,r+1)):(this.state=G.NumericDecimal,this.stateNumericDecimal(t,r))}stateNumericHex(t,r){for(;r<t.length;){let n=t.charCodeAt(r);if(An(n)||Rc(n)){let s=n<=U.NINE?n-U.ZERO:(n|ks)-U.LOWER_A+10;this.result=this.result*16+s,this.consumed++,r++}else return this.emitNumericEntity(n,3)}return-1}stateNumericDecimal(t,r){for(;r<t.length;){let n=t.charCodeAt(r);if(An(n))this.result=this.result*10+(n-U.ZERO),this.consumed++,r++;else return this.emitNumericEntity(n,2)}return-1}emitNumericEntity(t,r){if(this.consumed<=r)return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(t===U.SEMI)this.consumed+=1;else if(this.decodeMode===ge.Strict)return 0;return this.emitCodePoint(Ds(this.result),this.consumed),this.errors&&(t!==U.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(t,r){let{decodeTree:n}=this,s=n[this.treeIndex],a=(s&K.VALUE_LENGTH)>>14;for(;r<t.length;){if(a===0&&(s&K.FLAG13)!==0){let l=(s&K.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let o=s&K.JUMP_TABLE;if(t.charCodeAt(r)!==o)return this.result===0?0:this.emitNotTerminatedNamedEntity();r++,this.excess++,this.runConsumed++}for(;this.runConsumed<l;){if(r>=t.length)return-1;let o=this.runConsumed-1,d=n[this.treeIndex+1+(o>>1)],p=o%2===0?d&255:d>>8&255;if(t.charCodeAt(r)!==p)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();r++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(l>>1),s=n[this.treeIndex],a=(s&K.VALUE_LENGTH)>>14}if(r>=t.length)break;let c=t.charCodeAt(r);if(c===U.SEMI&&a!==0&&(s&K.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,a,this.consumed+this.excess);if(this.treeIndex=Dc(n,s,this.treeIndex+Math.max(1,a),c),this.treeIndex<0)return this.result===0||this.decodeMode===ge.Attribute&&(a===0||Oc(c))?0:this.emitNotTerminatedNamedEntity();if(s=n[this.treeIndex],a=(s&K.VALUE_LENGTH)>>14,a!==0){if(c===U.SEMI)return this.emitNamedEntityData(this.treeIndex,a,this.consumed+this.excess);this.decodeMode!==ge.Strict&&(s&K.FLAG13)===0&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}r++,this.excess++}return-1}emitNotTerminatedNamedEntity(){let{result:t,decodeTree:r}=this,n=(r[t]&K.VALUE_LENGTH)>>14;return this.emitNamedEntityData(t,n,this.consumed),this.errors?.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,r,n){let{decodeTree:s}=this;return this.emitCodePoint(r===1?s[t]&~(K.VALUE_LENGTH|K.FLAG13):s[t+1],n),r===3&&this.emitCodePoint(s[t+2],n),n}end(){switch(this.state){case G.NamedEntity:return this.result!==0&&(this.decodeMode!==ge.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case G.NumericDecimal:return this.emitNumericEntity(0,2);case G.NumericHex:return this.emitNumericEntity(0,3);case G.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case G.EntityStart:return 0}}};function Dc(e,t,r,n){let s=(t&K.BRANCH_LENGTH)>>7,a=t&K.JUMP_TABLE;if(s===0)return a!==0&&n===a?r:-1;if(a){let d=n-a;return d<0||d>=s?-1:e[r+d]-1}let c=s+1>>1,l=0,o=s-1;for(;l<=o;){let d=l+o>>>1,p=d>>1,f=e[r+p]>>(d&1)*8&255;if(f<n)l=d+1;else if(f>n)o=d-1;else return e[r+c+d]}return-1}var b;(function(e){e.HTML="http://www.w3.org/1999/xhtml",e.MATHML="http://www.w3.org/1998/Math/MathML",e.SVG="http://www.w3.org/2000/svg",e.XLINK="http://www.w3.org/1999/xlink",e.XML="http://www.w3.org/XML/1998/namespace",e.XMLNS="http://www.w3.org/2000/xmlns/"})(b||(b={}));var Ee;(function(e){e.TYPE="type",e.ACTION="action",e.ENCODING="encoding",e.PROMPT="prompt",e.NAME="name",e.COLOR="color",e.FACE="face",e.SIZE="size"})(Ee||(Ee={}));var $;(function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks"})($||($={}));var E;(function(e){e.A="a",e.ADDRESS="address",e.ANNOTATION_XML="annotation-xml",e.APPLET="applet",e.AREA="area",e.ARTICLE="article",e.ASIDE="aside",e.B="b",e.BASE="base",e.BASEFONT="basefont",e.BGSOUND="bgsound",e.BIG="big",e.BLOCKQUOTE="blockquote",e.BODY="body",e.BR="br",e.BUTTON="button",e.CAPTION="caption",e.CENTER="center",e.CODE="code",e.COL="col",e.COLGROUP="colgroup",e.DD="dd",e.DESC="desc",e.DETAILS="details",e.DIALOG="dialog",e.DIR="dir",e.DIV="div",e.DL="dl",e.DT="dt",e.EM="em",e.EMBED="embed",e.FIELDSET="fieldset",e.FIGCAPTION="figcaption",e.FIGURE="figure",e.FONT="font",e.FOOTER="footer",e.FOREIGN_OBJECT="foreignObject",e.FORM="form",e.FRAME="frame",e.FRAMESET="frameset",e.H1="h1",e.H2="h2",e.H3="h3",e.H4="h4",e.H5="h5",e.H6="h6",e.HEAD="head",e.HEADER="header",e.HGROUP="hgroup",e.HR="hr",e.HTML="html",e.I="i",e.IMG="img",e.IMAGE="image",e.INPUT="input",e.IFRAME="iframe",e.KEYGEN="keygen",e.LABEL="label",e.LI="li",e.LINK="link",e.LISTING="listing",e.MAIN="main",e.MALIGNMARK="malignmark",e.MARQUEE="marquee",e.MATH="math",e.MENU="menu",e.META="meta",e.MGLYPH="mglyph",e.MI="mi",e.MO="mo",e.MN="mn",e.MS="ms",e.MTEXT="mtext",e.NAV="nav",e.NOBR="nobr",e.NOFRAMES="noframes",e.NOEMBED="noembed",e.NOSCRIPT="noscript",e.OBJECT="object",e.OL="ol",e.OPTGROUP="optgroup",e.OPTION="option",e.P="p",e.PARAM="param",e.PLAINTEXT="plaintext",e.PRE="pre",e.RB="rb",e.RP="rp",e.RT="rt",e.RTC="rtc",e.RUBY="ruby",e.S="s",e.SCRIPT="script",e.SEARCH="search",e.SECTION="section",e.SELECT="select",e.SOURCE="source",e.SMALL="small",e.SPAN="span",e.STRIKE="strike",e.STRONG="strong",e.STYLE="style",e.SUB="sub",e.SUMMARY="summary",e.SUP="sup",e.TABLE="table",e.TBODY="tbody",e.TEMPLATE="template",e.TEXTAREA="textarea",e.TFOOT="tfoot",e.TD="td",e.TH="th",e.THEAD="thead",e.TITLE="title",e.TR="tr",e.TRACK="track",e.TT="tt",e.U="u",e.UL="ul",e.SVG="svg",e.VAR="var",e.WBR="wbr",e.XMP="xmp"})(E||(E={}));var i;(function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.A=1]="A",e[e.ADDRESS=2]="ADDRESS",e[e.ANNOTATION_XML=3]="ANNOTATION_XML",e[e.APPLET=4]="APPLET",e[e.AREA=5]="AREA",e[e.ARTICLE=6]="ARTICLE",e[e.ASIDE=7]="ASIDE",e[e.B=8]="B",e[e.BASE=9]="BASE",e[e.BASEFONT=10]="BASEFONT",e[e.BGSOUND=11]="BGSOUND",e[e.BIG=12]="BIG",e[e.BLOCKQUOTE=13]="BLOCKQUOTE",e[e.BODY=14]="BODY",e[e.BR=15]="BR",e[e.BUTTON=16]="BUTTON",e[e.CAPTION=17]="CAPTION",e[e.CENTER=18]="CENTER",e[e.CODE=19]="CODE",e[e.COL=20]="COL",e[e.COLGROUP=21]="COLGROUP",e[e.DD=22]="DD",e[e.DESC=23]="DESC",e[e.DETAILS=24]="DETAILS",e[e.DIALOG=25]="DIALOG",e[e.DIR=26]="DIR",e[e.DIV=27]="DIV",e[e.DL=28]="DL",e[e.DT=29]="DT",e[e.EM=30]="EM",e[e.EMBED=31]="EMBED",e[e.FIELDSET=32]="FIELDSET",e[e.FIGCAPTION=33]="FIGCAPTION",e[e.FIGURE=34]="FIGURE",e[e.FONT=35]="FONT",e[e.FOOTER=36]="FOOTER",e[e.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",e[e.FORM=38]="FORM",e[e.FRAME=39]="FRAME",e[e.FRAMESET=40]="FRAMESET",e[e.H1=41]="H1",e[e.H2=42]="H2",e[e.H3=43]="H3",e[e.H4=44]="H4",e[e.H5=45]="H5",e[e.H6=46]="H6",e[e.HEAD=47]="HEAD",e[e.HEADER=48]="HEADER",e[e.HGROUP=49]="HGROUP",e[e.HR=50]="HR",e[e.HTML=51]="HTML",e[e.I=52]="I",e[e.IMG=53]="IMG",e[e.IMAGE=54]="IMAGE",e[e.INPUT=55]="INPUT",e[e.IFRAME=56]="IFRAME",e[e.KEYGEN=57]="KEYGEN",e[e.LABEL=58]="LABEL",e[e.LI=59]="LI",e[e.LINK=60]="LINK",e[e.LISTING=61]="LISTING",e[e.MAIN=62]="MAIN",e[e.MALIGNMARK=63]="MALIGNMARK",e[e.MARQUEE=64]="MARQUEE",e[e.MATH=65]="MATH",e[e.MENU=66]="MENU",e[e.META=67]="META",e[e.MGLYPH=68]="MGLYPH",e[e.MI=69]="MI",e[e.MO=70]="MO",e[e.MN=71]="MN",e[e.MS=72]="MS",e[e.MTEXT=73]="MTEXT",e[e.NAV=74]="NAV",e[e.NOBR=75]="NOBR",e[e.NOFRAMES=76]="NOFRAMES",e[e.NOEMBED=77]="NOEMBED",e[e.NOSCRIPT=78]="NOSCRIPT",e[e.OBJECT=79]="OBJECT",e[e.OL=80]="OL",e[e.OPTGROUP=81]="OPTGROUP",e[e.OPTION=82]="OPTION",e[e.P=83]="P",e[e.PARAM=84]="PARAM",e[e.PLAINTEXT=85]="PLAINTEXT",e[e.PRE=86]="PRE",e[e.RB=87]="RB",e[e.RP=88]="RP",e[e.RT=89]="RT",e[e.RTC=90]="RTC",e[e.RUBY=91]="RUBY",e[e.S=92]="S",e[e.SCRIPT=93]="SCRIPT",e[e.SEARCH=94]="SEARCH",e[e.SECTION=95]="SECTION",e[e.SELECT=96]="SELECT",e[e.SOURCE=97]="SOURCE",e[e.SMALL=98]="SMALL",e[e.SPAN=99]="SPAN",e[e.STRIKE=100]="STRIKE",e[e.STRONG=101]="STRONG",e[e.STYLE=102]="STYLE",e[e.SUB=103]="SUB",e[e.SUMMARY=104]="SUMMARY",e[e.SUP=105]="SUP",e[e.TABLE=106]="TABLE",e[e.TBODY=107]="TBODY",e[e.TEMPLATE=108]="TEMPLATE",e[e.TEXTAREA=109]="TEXTAREA",e[e.TFOOT=110]="TFOOT",e[e.TD=111]="TD",e[e.TH=112]="TH",e[e.THEAD=113]="THEAD",e[e.TITLE=114]="TITLE",e[e.TR=115]="TR",e[e.TRACK=116]="TRACK",e[e.TT=117]="TT",e[e.U=118]="U",e[e.UL=119]="UL",e[e.SVG=120]="SVG",e[e.VAR=121]="VAR",e[e.WBR=122]="WBR",e[e.XMP=123]="XMP"})(i||(i={}));var Bc=new Map([[E.A,i.A],[E.ADDRESS,i.ADDRESS],[E.ANNOTATION_XML,i.ANNOTATION_XML],[E.APPLET,i.APPLET],[E.AREA,i.AREA],[E.ARTICLE,i.ARTICLE],[E.ASIDE,i.ASIDE],[E.B,i.B],[E.BASE,i.BASE],[E.BASEFONT,i.BASEFONT],[E.BGSOUND,i.BGSOUND],[E.BIG,i.BIG],[E.BLOCKQUOTE,i.BLOCKQUOTE],[E.BODY,i.BODY],[E.BR,i.BR],[E.BUTTON,i.BUTTON],[E.CAPTION,i.CAPTION],[E.CENTER,i.CENTER],[E.CODE,i.CODE],[E.COL,i.COL],[E.COLGROUP,i.COLGROUP],[E.DD,i.DD],[E.DESC,i.DESC],[E.DETAILS,i.DETAILS],[E.DIALOG,i.DIALOG],[E.DIR,i.DIR],[E.DIV,i.DIV],[E.DL,i.DL],[E.DT,i.DT],[E.EM,i.EM],[E.EMBED,i.EMBED],[E.FIELDSET,i.FIELDSET],[E.FIGCAPTION,i.FIGCAPTION],[E.FIGURE,i.FIGURE],[E.FONT,i.FONT],[E.FOOTER,i.FOOTER],[E.FOREIGN_OBJECT,i.FOREIGN_OBJECT],[E.FORM,i.FORM],[E.FRAME,i.FRAME],[E.FRAMESET,i.FRAMESET],[E.H1,i.H1],[E.H2,i.H2],[E.H3,i.H3],[E.H4,i.H4],[E.H5,i.H5],[E.H6,i.H6],[E.HEAD,i.HEAD],[E.HEADER,i.HEADER],[E.HGROUP,i.HGROUP],[E.HR,i.HR],[E.HTML,i.HTML],[E.I,i.I],[E.IMG,i.IMG],[E.IMAGE,i.IMAGE],[E.INPUT,i.INPUT],[E.IFRAME,i.IFRAME],[E.KEYGEN,i.KEYGEN],[E.LABEL,i.LABEL],[E.LI,i.LI],[E.LINK,i.LINK],[E.LISTING,i.LISTING],[E.MAIN,i.MAIN],[E.MALIGNMARK,i.MALIGNMARK],[E.MARQUEE,i.MARQUEE],[E.MATH,i.MATH],[E.MENU,i.MENU],[E.META,i.META],[E.MGLYPH,i.MGLYPH],[E.MI,i.MI],[E.MO,i.MO],[E.MN,i.MN],[E.MS,i.MS],[E.MTEXT,i.MTEXT],[E.NAV,i.NAV],[E.NOBR,i.NOBR],[E.NOFRAMES,i.NOFRAMES],[E.NOEMBED,i.NOEMBED],[E.NOSCRIPT,i.NOSCRIPT],[E.OBJECT,i.OBJECT],[E.OL,i.OL],[E.OPTGROUP,i.OPTGROUP],[E.OPTION,i.OPTION],[E.P,i.P],[E.PARAM,i.PARAM],[E.PLAINTEXT,i.PLAINTEXT],[E.PRE,i.PRE],[E.RB,i.RB],[E.RP,i.RP],[E.RT,i.RT],[E.RTC,i.RTC],[E.RUBY,i.RUBY],[E.S,i.S],[E.SCRIPT,i.SCRIPT],[E.SEARCH,i.SEARCH],[E.SECTION,i.SECTION],[E.SELECT,i.SELECT],[E.SOURCE,i.SOURCE],[E.SMALL,i.SMALL],[E.SPAN,i.SPAN],[E.STRIKE,i.STRIKE],[E.STRONG,i.STRONG],[E.STYLE,i.STYLE],[E.SUB,i.SUB],[E.SUMMARY,i.SUMMARY],[E.SUP,i.SUP],[E.TABLE,i.TABLE],[E.TBODY,i.TBODY],[E.TEMPLATE,i.TEMPLATE],[E.TEXTAREA,i.TEXTAREA],[E.TFOOT,i.TFOOT],[E.TD,i.TD],[E.TH,i.TH],[E.THEAD,i.THEAD],[E.TITLE,i.TITLE],[E.TR,i.TR],[E.TRACK,i.TRACK],[E.TT,i.TT],[E.U,i.U],[E.UL,i.UL],[E.SVG,i.SVG],[E.VAR,i.VAR],[E.WBR,i.WBR],[E.XMP,i.XMP]]);function ve(e){var t;return(t=Bc.get(e))!==null&&t!==void 0?t:i.UNKNOWN}var C=i,vs={[b.HTML]:new Set([C.ADDRESS,C.APPLET,C.AREA,C.ARTICLE,C.ASIDE,C.BASE,C.BASEFONT,C.BGSOUND,C.BLOCKQUOTE,C.BODY,C.BR,C.BUTTON,C.CAPTION,C.CENTER,C.COL,C.COLGROUP,C.DD,C.DETAILS,C.DIR,C.DIV,C.DL,C.DT,C.EMBED,C.FIELDSET,C.FIGCAPTION,C.FIGURE,C.FOOTER,C.FORM,C.FRAME,C.FRAMESET,C.H1,C.H2,C.H3,C.H4,C.H5,C.H6,C.HEAD,C.HEADER,C.HGROUP,C.HR,C.HTML,C.IFRAME,C.IMG,C.INPUT,C.LI,C.LINK,C.LISTING,C.MAIN,C.MARQUEE,C.MENU,C.META,C.NAV,C.NOEMBED,C.NOFRAMES,C.NOSCRIPT,C.OBJECT,C.OL,C.P,C.PARAM,C.PLAINTEXT,C.PRE,C.SCRIPT,C.SECTION,C.SELECT,C.SOURCE,C.STYLE,C.SUMMARY,C.TABLE,C.TBODY,C.TD,C.TEMPLATE,C.TEXTAREA,C.TFOOT,C.TH,C.THEAD,C.TITLE,C.TR,C.TRACK,C.UL,C.WBR,C.XMP]),[b.MATHML]:new Set([C.MI,C.MO,C.MN,C.MS,C.MTEXT,C.ANNOTATION_XML]),[b.SVG]:new Set([C.TITLE,C.FOREIGN_OBJECT,C.DESC]),[b.XLINK]:new Set,[b.XML]:new Set,[b.XMLNS]:new Set},gt=new Set([C.H1,C.H2,C.H3,C.H4,C.H5,C.H6]),nm=new Set([E.STYLE,E.SCRIPT,E.XMP,E.IFRAME,E.NOEMBED,E.NOFRAMES,E.PLAINTEXT]);var A;(function(e){e[e.DATA=0]="DATA",e[e.RCDATA=1]="RCDATA",e[e.RAWTEXT=2]="RAWTEXT",e[e.SCRIPT_DATA=3]="SCRIPT_DATA",e[e.PLAINTEXT=4]="PLAINTEXT",e[e.TAG_OPEN=5]="TAG_OPEN",e[e.END_TAG_OPEN=6]="END_TAG_OPEN",e[e.TAG_NAME=7]="TAG_NAME",e[e.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",e[e.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",e[e.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",e[e.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",e[e.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",e[e.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",e[e.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",e[e.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",e[e.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",e[e.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",e[e.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",e[e.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",e[e.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",e[e.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",e[e.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",e[e.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",e[e.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",e[e.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",e[e.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",e[e.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",e[e.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",e[e.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",e[e.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",e[e.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",e[e.BOGUS_COMMENT=40]="BOGUS_COMMENT",e[e.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",e[e.COMMENT_START=42]="COMMENT_START",e[e.COMMENT_START_DASH=43]="COMMENT_START_DASH",e[e.COMMENT=44]="COMMENT",e[e.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",e[e.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",e[e.COMMENT_END_DASH=49]="COMMENT_END_DASH",e[e.COMMENT_END=50]="COMMENT_END",e[e.COMMENT_END_BANG=51]="COMMENT_END_BANG",e[e.DOCTYPE=52]="DOCTYPE",e[e.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",e[e.DOCTYPE_NAME=54]="DOCTYPE_NAME",e[e.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",e[e.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",e[e.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",e[e.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",e[e.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",e[e.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",e[e.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",e[e.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",e[e.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",e[e.CDATA_SECTION=68]="CDATA_SECTION",e[e.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",e[e.CDATA_SECTION_END=70]="CDATA_SECTION_END",e[e.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",e[e.AMBIGUOUS_AMPERSAND=72]="AMBIGUOUS_AMPERSAND"})(A||(A={}));var J={DATA:A.DATA,RCDATA:A.RCDATA,RAWTEXT:A.RAWTEXT,SCRIPT_DATA:A.SCRIPT_DATA,PLAINTEXT:A.PLAINTEXT,CDATA_SECTION:A.CDATA_SECTION};function vc(e){return e>=u.DIGIT_0&&e<=u.DIGIT_9}function ft(e){return e>=u.LATIN_CAPITAL_A&&e<=u.LATIN_CAPITAL_Z}function Pc(e){return e>=u.LATIN_SMALL_A&&e<=u.LATIN_SMALL_Z}function Ce(e){return Pc(e)||ft(e)}function Ps(e){return Ce(e)||vc(e)}function ar(e){return e+32}function Us(e){return e===u.SPACE||e===u.LINE_FEED||e===u.TABULATION||e===u.FORM_FEED}function Ms(e){return Us(e)||e===u.SOLIDUS||e===u.GREATER_THAN_SIGN}function Mc(e){return e===u.NULL?T.nullCharacterReference:e>1114111?T.characterReferenceOutsideUnicodeRange:er(e)?T.surrogateCharacterReference:rr(e)?T.noncharacterCharacterReference:tr(e)||e===u.CARRIAGE_RETURN?T.controlCharacterReference:null}var Et=class{constructor(t,r){this.options=t,this.handler=r,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=A.DATA,this.returnState=A.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new nr(r),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new ir(un,(n,s)=>{this.preprocessor.pos=this.entityStartPos+s-1,this._flushCodePointConsumedAsCharacterReference(n)},r.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(T.missingSemicolonAfterCharacterReference,1)},absenceOfDigitsInNumericCharacterReference:n=>{this._err(T.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+n)},validateNumericCharacterReference:n=>{let s=Mc(n);s&&this._err(s,1)}}:void 0)}_err(t,r=0){var n,s;(s=(n=this.handler).onParseError)===null||s===void 0||s.call(n,this.preprocessor.getError(t,r))}getCurrentLocation(t){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-t,startOffset:this.preprocessor.offset-t,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;let t=this._consume();this._ensureHibernation()||this._callState(t)}this.inLoop=!1}}pause(){this.paused=!0}resume(t){if(!this.paused)throw new Error("Parser was already resumed");this.paused=!1,!this.inLoop&&(this._runParsingLoop(),this.paused||t?.())}write(t,r,n){this.active=!0,this.preprocessor.write(t,r),this._runParsingLoop(),this.paused||n?.()}insertHtmlAtCurrentPos(t){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(t),this._runParsingLoop()}_ensureHibernation(){return this.preprocessor.endOfChunkHit?(this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=!1,!0):!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(t){this.consumedAfterSnapshot+=t;for(let r=0;r<t;r++)this.preprocessor.advance()}_consumeSequenceIfMatch(t,r){return this.preprocessor.startsWith(t,r)?(this._advanceBy(t.length-1),!0):!1}_createStartTagToken(){this.currentToken={type:O.START_TAG,tagName:"",tagID:i.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(1)}}_createEndTagToken(){this.currentToken={type:O.END_TAG,tagName:"",tagID:i.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(2)}}_createCommentToken(t){this.currentToken={type:O.COMMENT,data:"",location:this.getCurrentLocation(t)}}_createDoctypeToken(t){this.currentToken={type:O.DOCTYPE,name:t,forceQuirks:!1,publicId:null,systemId:null,location:this.currentLocation}}_createCharacterToken(t,r){this.currentCharacterToken={type:t,chars:r,location:this.currentLocation}}_createAttr(t){this.currentAttr={name:t,value:""},this.currentLocation=this.getCurrentLocation(0)}_leaveAttrName(){var t,r;let n=this.currentToken;if(sr(n,this.currentAttr.name)===null){if(n.attrs.push(this.currentAttr),n.location&&this.currentLocation){let s=(t=(r=n.location).attrs)!==null&&t!==void 0?t:r.attrs=Object.create(null);s[this.currentAttr.name]=this.currentLocation,this._leaveAttrValue()}}else this._err(T.duplicateAttribute)}_leaveAttrValue(){this.currentLocation&&(this.currentLocation.endLine=this.preprocessor.line,this.currentLocation.endCol=this.preprocessor.col,this.currentLocation.endOffset=this.preprocessor.offset)}prepareToken(t){this._emitCurrentCharacterToken(t.location),this.currentToken=null,t.location&&(t.location.endLine=this.preprocessor.line,t.location.endCol=this.preprocessor.col+1,t.location.endOffset=this.preprocessor.offset+1),this.currentLocation=this.getCurrentLocation(-1)}emitCurrentTagToken(){let t=this.currentToken;this.prepareToken(t),t.tagID=ve(t.tagName),t.type===O.START_TAG?(this.lastStartTagName=t.tagName,this.handler.onStartTag(t)):(t.attrs.length>0&&this._err(T.endTagWithAttributes),t.selfClosing&&this._err(T.endTagWithTrailingSolidus),this.handler.onEndTag(t)),this.preprocessor.dropParsedChunk()}emitCurrentComment(t){this.prepareToken(t),this.handler.onComment(t),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(t){this.prepareToken(t),this.handler.onDoctype(t),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(t){if(this.currentCharacterToken){switch(t&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=t.startLine,this.currentCharacterToken.location.endCol=t.startCol,this.currentCharacterToken.location.endOffset=t.startOffset),this.currentCharacterToken.type){case O.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case O.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case O.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null}}_emitEOFToken(){let t=this.getCurrentLocation(0);t&&(t.endLine=t.startLine,t.endCol=t.startCol,t.endOffset=t.startOffset),this._emitCurrentCharacterToken(t),this.handler.onEof({type:O.EOF,location:t}),this.active=!1}_appendCharToCurrentCharacterToken(t,r){if(this.currentCharacterToken)if(this.currentCharacterToken.type===t){this.currentCharacterToken.chars+=r;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(t,r)}_emitCodePoint(t){let r=Us(t)?O.WHITESPACE_CHARACTER:t===u.NULL?O.NULL_CHARACTER:O.CHARACTER;this._appendCharToCurrentCharacterToken(r,t<65536?String.fromCharCode(t):String.fromCodePoint(t))}_emitChars(t){this._appendCharToCurrentCharacterToken(O.CHARACTER,t)}_startCharacterReference(){this.returnState=this.state,this.state=A.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?ge.Attribute:ge.Legacy)}_isCharacterReferenceInAttribute(){return this.returnState===A.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===A.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===A.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(t){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(t):this._emitCodePoint(t)}_callState(t){switch(this.state){case A.DATA:{this._stateData(t);break}case A.RCDATA:{this._stateRcdata(t);break}case A.RAWTEXT:{this._stateRawtext(t);break}case A.SCRIPT_DATA:{this._stateScriptData(t);break}case A.PLAINTEXT:{this._statePlaintext(t);break}case A.TAG_OPEN:{this._stateTagOpen(t);break}case A.END_TAG_OPEN:{this._stateEndTagOpen(t);break}case A.TAG_NAME:{this._stateTagName(t);break}case A.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(t);break}case A.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(t);break}case A.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(t);break}case A.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(t);break}case A.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(t);break}case A.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(t);break}case A.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(t);break}case A.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(t);break}case A.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(t);break}case A.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(t);break}case A.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(t);break}case A.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(t);break}case A.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(t);break}case A.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(t);break}case A.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(t);break}case A.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(t);break}case A.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(t);break}case A.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(t);break}case A.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(t);break}case A.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(t);break}case A.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(t);break}case A.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(t);break}case A.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(t);break}case A.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(t);break}case A.ATTRIBUTE_NAME:{this._stateAttributeName(t);break}case A.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(t);break}case A.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(t);break}case A.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(t);break}case A.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(t);break}case A.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(t);break}case A.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(t);break}case A.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(t);break}case A.BOGUS_COMMENT:{this._stateBogusComment(t);break}case A.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(t);break}case A.COMMENT_START:{this._stateCommentStart(t);break}case A.COMMENT_START_DASH:{this._stateCommentStartDash(t);break}case A.COMMENT:{this._stateComment(t);break}case A.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(t);break}case A.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(t);break}case A.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(t);break}case A.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(t);break}case A.COMMENT_END_DASH:{this._stateCommentEndDash(t);break}case A.COMMENT_END:{this._stateCommentEnd(t);break}case A.COMMENT_END_BANG:{this._stateCommentEndBang(t);break}case A.DOCTYPE:{this._stateDoctype(t);break}case A.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(t);break}case A.DOCTYPE_NAME:{this._stateDoctypeName(t);break}case A.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(t);break}case A.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(t);break}case A.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(t);break}case A.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(t);break}case A.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(t);break}case A.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(t);break}case A.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(t);break}case A.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(t);break}case A.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(t);break}case A.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(t);break}case A.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(t);break}case A.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(t);break}case A.BOGUS_DOCTYPE:{this._stateBogusDoctype(t);break}case A.CDATA_SECTION:{this._stateCdataSection(t);break}case A.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(t);break}case A.CDATA_SECTION_END:{this._stateCdataSectionEnd(t);break}case A.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case A.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(t);break}default:throw new Error("Unknown state")}}_stateData(t){switch(t){case u.LESS_THAN_SIGN:{this.state=A.TAG_OPEN;break}case u.AMPERSAND:{this._startCharacterReference();break}case u.NULL:{this._err(T.unexpectedNullCharacter),this._emitCodePoint(t);break}case u.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateRcdata(t){switch(t){case u.AMPERSAND:{this._startCharacterReference();break}case u.LESS_THAN_SIGN:{this.state=A.RCDATA_LESS_THAN_SIGN;break}case u.NULL:{this._err(T.unexpectedNullCharacter),this._emitChars(k);break}case u.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateRawtext(t){switch(t){case u.LESS_THAN_SIGN:{this.state=A.RAWTEXT_LESS_THAN_SIGN;break}case u.NULL:{this._err(T.unexpectedNullCharacter),this._emitChars(k);break}case u.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateScriptData(t){switch(t){case u.LESS_THAN_SIGN:{this.state=A.SCRIPT_DATA_LESS_THAN_SIGN;break}case u.NULL:{this._err(T.unexpectedNullCharacter),this._emitChars(k);break}case u.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_statePlaintext(t){switch(t){case u.NULL:{this._err(T.unexpectedNullCharacter),this._emitChars(k);break}case u.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateTagOpen(t){if(Ce(t))this._createStartTagToken(),this.state=A.TAG_NAME,this._stateTagName(t);else switch(t){case u.EXCLAMATION_MARK:{this.state=A.MARKUP_DECLARATION_OPEN;break}case u.SOLIDUS:{this.state=A.END_TAG_OPEN;break}case u.QUESTION_MARK:{this._err(T.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=A.BOGUS_COMMENT,this._stateBogusComment(t);break}case u.EOF:{this._err(T.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(T.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=A.DATA,this._stateData(t)}}_stateEndTagOpen(t){if(Ce(t))this._createEndTagToken(),this.state=A.TAG_NAME,this._stateTagName(t);else switch(t){case u.GREATER_THAN_SIGN:{this._err(T.missingEndTagName),this.state=A.DATA;break}case u.EOF:{this._err(T.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(T.invalidFirstCharacterOfTagName),this._createCommentToken(2),this.state=A.BOGUS_COMMENT,this._stateBogusComment(t)}}_stateTagName(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:{this.state=A.BEFORE_ATTRIBUTE_NAME;break}case u.SOLIDUS:{this.state=A.SELF_CLOSING_START_TAG;break}case u.GREATER_THAN_SIGN:{this.state=A.DATA,this.emitCurrentTagToken();break}case u.NULL:{this._err(T.unexpectedNullCharacter),r.tagName+=k;break}case u.EOF:{this._err(T.eofInTag),this._emitEOFToken();break}default:r.tagName+=String.fromCodePoint(ft(t)?ar(t):t)}}_stateRcdataLessThanSign(t){t===u.SOLIDUS?this.state=A.RCDATA_END_TAG_OPEN:(this._emitChars("<"),this.state=A.RCDATA,this._stateRcdata(t))}_stateRcdataEndTagOpen(t){Ce(t)?(this.state=A.RCDATA_END_TAG_NAME,this._stateRcdataEndTagName(t)):(this._emitChars("</"),this.state=A.RCDATA,this._stateRcdata(t))}handleSpecialEndTag(t){if(!this.preprocessor.startsWith(this.lastStartTagName,!1))return!this._ensureHibernation();this._createEndTagToken();let r=this.currentToken;switch(r.tagName=this.lastStartTagName,this.preprocessor.peek(this.lastStartTagName.length)){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:return this._advanceBy(this.lastStartTagName.length),this.state=A.BEFORE_ATTRIBUTE_NAME,!1;case u.SOLIDUS:return this._advanceBy(this.lastStartTagName.length),this.state=A.SELF_CLOSING_START_TAG,!1;case u.GREATER_THAN_SIGN:return this._advanceBy(this.lastStartTagName.length),this.emitCurrentTagToken(),this.state=A.DATA,!1;default:return!this._ensureHibernation()}}_stateRcdataEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=A.RCDATA,this._stateRcdata(t))}_stateRawtextLessThanSign(t){t===u.SOLIDUS?this.state=A.RAWTEXT_END_TAG_OPEN:(this._emitChars("<"),this.state=A.RAWTEXT,this._stateRawtext(t))}_stateRawtextEndTagOpen(t){Ce(t)?(this.state=A.RAWTEXT_END_TAG_NAME,this._stateRawtextEndTagName(t)):(this._emitChars("</"),this.state=A.RAWTEXT,this._stateRawtext(t))}_stateRawtextEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=A.RAWTEXT,this._stateRawtext(t))}_stateScriptDataLessThanSign(t){switch(t){case u.SOLIDUS:{this.state=A.SCRIPT_DATA_END_TAG_OPEN;break}case u.EXCLAMATION_MARK:{this.state=A.SCRIPT_DATA_ESCAPE_START,this._emitChars("<!");break}default:this._emitChars("<"),this.state=A.SCRIPT_DATA,this._stateScriptData(t)}}_stateScriptDataEndTagOpen(t){Ce(t)?(this.state=A.SCRIPT_DATA_END_TAG_NAME,this._stateScriptDataEndTagName(t)):(this._emitChars("</"),this.state=A.SCRIPT_DATA,this._stateScriptData(t))}_stateScriptDataEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=A.SCRIPT_DATA,this._stateScriptData(t))}_stateScriptDataEscapeStart(t){t===u.HYPHEN_MINUS?(this.state=A.SCRIPT_DATA_ESCAPE_START_DASH,this._emitChars("-")):(this.state=A.SCRIPT_DATA,this._stateScriptData(t))}_stateScriptDataEscapeStartDash(t){t===u.HYPHEN_MINUS?(this.state=A.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-")):(this.state=A.SCRIPT_DATA,this._stateScriptData(t))}_stateScriptDataEscaped(t){switch(t){case u.HYPHEN_MINUS:{this.state=A.SCRIPT_DATA_ESCAPED_DASH,this._emitChars("-");break}case u.LESS_THAN_SIGN:{this.state=A.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case u.NULL:{this._err(T.unexpectedNullCharacter),this._emitChars(k);break}case u.EOF:{this._err(T.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateScriptDataEscapedDash(t){switch(t){case u.HYPHEN_MINUS:{this.state=A.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");break}case u.LESS_THAN_SIGN:{this.state=A.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case u.NULL:{this._err(T.unexpectedNullCharacter),this.state=A.SCRIPT_DATA_ESCAPED,this._emitChars(k);break}case u.EOF:{this._err(T.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=A.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataEscapedDashDash(t){switch(t){case u.HYPHEN_MINUS:{this._emitChars("-");break}case u.LESS_THAN_SIGN:{this.state=A.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case u.GREATER_THAN_SIGN:{this.state=A.SCRIPT_DATA,this._emitChars(">");break}case u.NULL:{this._err(T.unexpectedNullCharacter),this.state=A.SCRIPT_DATA_ESCAPED,this._emitChars(k);break}case u.EOF:{this._err(T.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=A.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataEscapedLessThanSign(t){t===u.SOLIDUS?this.state=A.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:Ce(t)?(this._emitChars("<"),this.state=A.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(t)):(this._emitChars("<"),this.state=A.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t))}_stateScriptDataEscapedEndTagOpen(t){Ce(t)?(this.state=A.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(t)):(this._emitChars("</"),this.state=A.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t))}_stateScriptDataEscapedEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=A.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t))}_stateScriptDataDoubleEscapeStart(t){if(this.preprocessor.startsWith(Z.SCRIPT,!1)&&Ms(this.preprocessor.peek(Z.SCRIPT.length))){this._emitCodePoint(t);for(let r=0;r<Z.SCRIPT.length;r++)this._emitCodePoint(this._consume());this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED}else this._ensureHibernation()||(this.state=A.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t))}_stateScriptDataDoubleEscaped(t){switch(t){case u.HYPHEN_MINUS:{this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED_DASH,this._emitChars("-");break}case u.LESS_THAN_SIGN:{this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case u.NULL:{this._err(T.unexpectedNullCharacter),this._emitChars(k);break}case u.EOF:{this._err(T.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateScriptDataDoubleEscapedDash(t){switch(t){case u.HYPHEN_MINUS:{this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH,this._emitChars("-");break}case u.LESS_THAN_SIGN:{this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case u.NULL:{this._err(T.unexpectedNullCharacter),this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(k);break}case u.EOF:{this._err(T.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataDoubleEscapedDashDash(t){switch(t){case u.HYPHEN_MINUS:{this._emitChars("-");break}case u.LESS_THAN_SIGN:{this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case u.GREATER_THAN_SIGN:{this.state=A.SCRIPT_DATA,this._emitChars(">");break}case u.NULL:{this._err(T.unexpectedNullCharacter),this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(k);break}case u.EOF:{this._err(T.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataDoubleEscapedLessThanSign(t){t===u.SOLIDUS?(this.state=A.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t))}_stateScriptDataDoubleEscapeEnd(t){if(this.preprocessor.startsWith(Z.SCRIPT,!1)&&Ms(this.preprocessor.peek(Z.SCRIPT.length))){this._emitCodePoint(t);for(let r=0;r<Z.SCRIPT.length;r++)this._emitCodePoint(this._consume());this.state=A.SCRIPT_DATA_ESCAPED}else this._ensureHibernation()||(this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t))}_stateBeforeAttributeName(t){switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:break;case u.SOLIDUS:case u.GREATER_THAN_SIGN:case u.EOF:{this.state=A.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case u.EQUALS_SIGN:{this._err(T.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=A.ATTRIBUTE_NAME;break}default:this._createAttr(""),this.state=A.ATTRIBUTE_NAME,this._stateAttributeName(t)}}_stateAttributeName(t){switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:case u.SOLIDUS:case u.GREATER_THAN_SIGN:case u.EOF:{this._leaveAttrName(),this.state=A.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case u.EQUALS_SIGN:{this._leaveAttrName(),this.state=A.BEFORE_ATTRIBUTE_VALUE;break}case u.QUOTATION_MARK:case u.APOSTROPHE:case u.LESS_THAN_SIGN:{this._err(T.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(t);break}case u.NULL:{this._err(T.unexpectedNullCharacter),this.currentAttr.name+=k;break}default:this.currentAttr.name+=String.fromCodePoint(ft(t)?ar(t):t)}}_stateAfterAttributeName(t){switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:break;case u.SOLIDUS:{this.state=A.SELF_CLOSING_START_TAG;break}case u.EQUALS_SIGN:{this.state=A.BEFORE_ATTRIBUTE_VALUE;break}case u.GREATER_THAN_SIGN:{this.state=A.DATA,this.emitCurrentTagToken();break}case u.EOF:{this._err(T.eofInTag),this._emitEOFToken();break}default:this._createAttr(""),this.state=A.ATTRIBUTE_NAME,this._stateAttributeName(t)}}_stateBeforeAttributeValue(t){switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:break;case u.QUOTATION_MARK:{this.state=A.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break}case u.APOSTROPHE:{this.state=A.ATTRIBUTE_VALUE_SINGLE_QUOTED;break}case u.GREATER_THAN_SIGN:{this._err(T.missingAttributeValue),this.state=A.DATA,this.emitCurrentTagToken();break}default:this.state=A.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(t)}}_stateAttributeValueDoubleQuoted(t){switch(t){case u.QUOTATION_MARK:{this.state=A.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case u.AMPERSAND:{this._startCharacterReference();break}case u.NULL:{this._err(T.unexpectedNullCharacter),this.currentAttr.value+=k;break}case u.EOF:{this._err(T.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t)}}_stateAttributeValueSingleQuoted(t){switch(t){case u.APOSTROPHE:{this.state=A.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case u.AMPERSAND:{this._startCharacterReference();break}case u.NULL:{this._err(T.unexpectedNullCharacter),this.currentAttr.value+=k;break}case u.EOF:{this._err(T.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t)}}_stateAttributeValueUnquoted(t){switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:{this._leaveAttrValue(),this.state=A.BEFORE_ATTRIBUTE_NAME;break}case u.AMPERSAND:{this._startCharacterReference();break}case u.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=A.DATA,this.emitCurrentTagToken();break}case u.NULL:{this._err(T.unexpectedNullCharacter),this.currentAttr.value+=k;break}case u.QUOTATION_MARK:case u.APOSTROPHE:case u.LESS_THAN_SIGN:case u.EQUALS_SIGN:case u.GRAVE_ACCENT:{this._err(T.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(t);break}case u.EOF:{this._err(T.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t)}}_stateAfterAttributeValueQuoted(t){switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:{this._leaveAttrValue(),this.state=A.BEFORE_ATTRIBUTE_NAME;break}case u.SOLIDUS:{this._leaveAttrValue(),this.state=A.SELF_CLOSING_START_TAG;break}case u.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=A.DATA,this.emitCurrentTagToken();break}case u.EOF:{this._err(T.eofInTag),this._emitEOFToken();break}default:this._err(T.missingWhitespaceBetweenAttributes),this.state=A.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t)}}_stateSelfClosingStartTag(t){switch(t){case u.GREATER_THAN_SIGN:{let r=this.currentToken;r.selfClosing=!0,this.state=A.DATA,this.emitCurrentTagToken();break}case u.EOF:{this._err(T.eofInTag),this._emitEOFToken();break}default:this._err(T.unexpectedSolidusInTag),this.state=A.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t)}}_stateBogusComment(t){let r=this.currentToken;switch(t){case u.GREATER_THAN_SIGN:{this.state=A.DATA,this.emitCurrentComment(r);break}case u.EOF:{this.emitCurrentComment(r),this._emitEOFToken();break}case u.NULL:{this._err(T.unexpectedNullCharacter),r.data+=k;break}default:r.data+=String.fromCodePoint(t)}}_stateMarkupDeclarationOpen(t){this._consumeSequenceIfMatch(Z.DASH_DASH,!0)?(this._createCommentToken(Z.DASH_DASH.length+1),this.state=A.COMMENT_START):this._consumeSequenceIfMatch(Z.DOCTYPE,!1)?(this.currentLocation=this.getCurrentLocation(Z.DOCTYPE.length+1),this.state=A.DOCTYPE):this._consumeSequenceIfMatch(Z.CDATA_START,!0)?this.inForeignNode?this.state=A.CDATA_SECTION:(this._err(T.cdataInHtmlContent),this._createCommentToken(Z.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=A.BOGUS_COMMENT):this._ensureHibernation()||(this._err(T.incorrectlyOpenedComment),this._createCommentToken(2),this.state=A.BOGUS_COMMENT,this._stateBogusComment(t))}_stateCommentStart(t){switch(t){case u.HYPHEN_MINUS:{this.state=A.COMMENT_START_DASH;break}case u.GREATER_THAN_SIGN:{this._err(T.abruptClosingOfEmptyComment),this.state=A.DATA;let r=this.currentToken;this.emitCurrentComment(r);break}default:this.state=A.COMMENT,this._stateComment(t)}}_stateCommentStartDash(t){let r=this.currentToken;switch(t){case u.HYPHEN_MINUS:{this.state=A.COMMENT_END;break}case u.GREATER_THAN_SIGN:{this._err(T.abruptClosingOfEmptyComment),this.state=A.DATA,this.emitCurrentComment(r);break}case u.EOF:{this._err(T.eofInComment),this.emitCurrentComment(r),this._emitEOFToken();break}default:r.data+="-",this.state=A.COMMENT,this._stateComment(t)}}_stateComment(t){let r=this.currentToken;switch(t){case u.HYPHEN_MINUS:{this.state=A.COMMENT_END_DASH;break}case u.LESS_THAN_SIGN:{r.data+="<",this.state=A.COMMENT_LESS_THAN_SIGN;break}case u.NULL:{this._err(T.unexpectedNullCharacter),r.data+=k;break}case u.EOF:{this._err(T.eofInComment),this.emitCurrentComment(r),this._emitEOFToken();break}default:r.data+=String.fromCodePoint(t)}}_stateCommentLessThanSign(t){let r=this.currentToken;switch(t){case u.EXCLAMATION_MARK:{r.data+="!",this.state=A.COMMENT_LESS_THAN_SIGN_BANG;break}case u.LESS_THAN_SIGN:{r.data+="<";break}default:this.state=A.COMMENT,this._stateComment(t)}}_stateCommentLessThanSignBang(t){t===u.HYPHEN_MINUS?this.state=A.COMMENT_LESS_THAN_SIGN_BANG_DASH:(this.state=A.COMMENT,this._stateComment(t))}_stateCommentLessThanSignBangDash(t){t===u.HYPHEN_MINUS?this.state=A.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:(this.state=A.COMMENT_END_DASH,this._stateCommentEndDash(t))}_stateCommentLessThanSignBangDashDash(t){t!==u.GREATER_THAN_SIGN&&t!==u.EOF&&this._err(T.nestedComment),this.state=A.COMMENT_END,this._stateCommentEnd(t)}_stateCommentEndDash(t){let r=this.currentToken;switch(t){case u.HYPHEN_MINUS:{this.state=A.COMMENT_END;break}case u.EOF:{this._err(T.eofInComment),this.emitCurrentComment(r),this._emitEOFToken();break}default:r.data+="-",this.state=A.COMMENT,this._stateComment(t)}}_stateCommentEnd(t){let r=this.currentToken;switch(t){case u.GREATER_THAN_SIGN:{this.state=A.DATA,this.emitCurrentComment(r);break}case u.EXCLAMATION_MARK:{this.state=A.COMMENT_END_BANG;break}case u.HYPHEN_MINUS:{r.data+="-";break}case u.EOF:{this._err(T.eofInComment),this.emitCurrentComment(r),this._emitEOFToken();break}default:r.data+="--",this.state=A.COMMENT,this._stateComment(t)}}_stateCommentEndBang(t){let r=this.currentToken;switch(t){case u.HYPHEN_MINUS:{r.data+="--!",this.state=A.COMMENT_END_DASH;break}case u.GREATER_THAN_SIGN:{this._err(T.incorrectlyClosedComment),this.state=A.DATA,this.emitCurrentComment(r);break}case u.EOF:{this._err(T.eofInComment),this.emitCurrentComment(r),this._emitEOFToken();break}default:r.data+="--!",this.state=A.COMMENT,this._stateComment(t)}}_stateDoctype(t){switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:{this.state=A.BEFORE_DOCTYPE_NAME;break}case u.GREATER_THAN_SIGN:{this.state=A.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);break}case u.EOF:{this._err(T.eofInDoctype),this._createDoctypeToken(null);let r=this.currentToken;r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(T.missingWhitespaceBeforeDoctypeName),this.state=A.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t)}}_stateBeforeDoctypeName(t){if(ft(t))this._createDoctypeToken(String.fromCharCode(ar(t))),this.state=A.DOCTYPE_NAME;else switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:break;case u.NULL:{this._err(T.unexpectedNullCharacter),this._createDoctypeToken(k),this.state=A.DOCTYPE_NAME;break}case u.GREATER_THAN_SIGN:{this._err(T.missingDoctypeName),this._createDoctypeToken(null);let r=this.currentToken;r.forceQuirks=!0,this.emitCurrentDoctype(r),this.state=A.DATA;break}case u.EOF:{this._err(T.eofInDoctype),this._createDoctypeToken(null);let r=this.currentToken;r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._createDoctypeToken(String.fromCodePoint(t)),this.state=A.DOCTYPE_NAME}}_stateDoctypeName(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:{this.state=A.AFTER_DOCTYPE_NAME;break}case u.GREATER_THAN_SIGN:{this.state=A.DATA,this.emitCurrentDoctype(r);break}case u.NULL:{this._err(T.unexpectedNullCharacter),r.name+=k;break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:r.name+=String.fromCodePoint(ft(t)?ar(t):t)}}_stateAfterDoctypeName(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:break;case u.GREATER_THAN_SIGN:{this.state=A.DATA,this.emitCurrentDoctype(r);break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._consumeSequenceIfMatch(Z.PUBLIC,!1)?this.state=A.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._consumeSequenceIfMatch(Z.SYSTEM,!1)?this.state=A.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._ensureHibernation()||(this._err(T.invalidCharacterSequenceAfterDoctypeName),r.forceQuirks=!0,this.state=A.BOGUS_DOCTYPE,this._stateBogusDoctype(t))}}_stateAfterDoctypePublicKeyword(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:{this.state=A.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break}case u.QUOTATION_MARK:{this._err(T.missingWhitespaceAfterDoctypePublicKeyword),r.publicId="",this.state=A.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case u.APOSTROPHE:{this._err(T.missingWhitespaceAfterDoctypePublicKeyword),r.publicId="",this.state=A.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case u.GREATER_THAN_SIGN:{this._err(T.missingDoctypePublicIdentifier),r.forceQuirks=!0,this.state=A.DATA,this.emitCurrentDoctype(r);break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(T.missingQuoteBeforeDoctypePublicIdentifier),r.forceQuirks=!0,this.state=A.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateBeforeDoctypePublicIdentifier(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:break;case u.QUOTATION_MARK:{r.publicId="",this.state=A.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case u.APOSTROPHE:{r.publicId="",this.state=A.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case u.GREATER_THAN_SIGN:{this._err(T.missingDoctypePublicIdentifier),r.forceQuirks=!0,this.state=A.DATA,this.emitCurrentDoctype(r);break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(T.missingQuoteBeforeDoctypePublicIdentifier),r.forceQuirks=!0,this.state=A.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateDoctypePublicIdentifierDoubleQuoted(t){let r=this.currentToken;switch(t){case u.QUOTATION_MARK:{this.state=A.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case u.NULL:{this._err(T.unexpectedNullCharacter),r.publicId+=k;break}case u.GREATER_THAN_SIGN:{this._err(T.abruptDoctypePublicIdentifier),r.forceQuirks=!0,this.emitCurrentDoctype(r),this.state=A.DATA;break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:r.publicId+=String.fromCodePoint(t)}}_stateDoctypePublicIdentifierSingleQuoted(t){let r=this.currentToken;switch(t){case u.APOSTROPHE:{this.state=A.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case u.NULL:{this._err(T.unexpectedNullCharacter),r.publicId+=k;break}case u.GREATER_THAN_SIGN:{this._err(T.abruptDoctypePublicIdentifier),r.forceQuirks=!0,this.emitCurrentDoctype(r),this.state=A.DATA;break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:r.publicId+=String.fromCodePoint(t)}}_stateAfterDoctypePublicIdentifier(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:{this.state=A.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break}case u.GREATER_THAN_SIGN:{this.state=A.DATA,this.emitCurrentDoctype(r);break}case u.QUOTATION_MARK:{this._err(T.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),r.systemId="",this.state=A.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case u.APOSTROPHE:{this._err(T.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),r.systemId="",this.state=A.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(T.missingQuoteBeforeDoctypeSystemIdentifier),r.forceQuirks=!0,this.state=A.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateBetweenDoctypePublicAndSystemIdentifiers(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:break;case u.GREATER_THAN_SIGN:{this.emitCurrentDoctype(r),this.state=A.DATA;break}case u.QUOTATION_MARK:{r.systemId="",this.state=A.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case u.APOSTROPHE:{r.systemId="",this.state=A.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(T.missingQuoteBeforeDoctypeSystemIdentifier),r.forceQuirks=!0,this.state=A.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateAfterDoctypeSystemKeyword(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:{this.state=A.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break}case u.QUOTATION_MARK:{this._err(T.missingWhitespaceAfterDoctypeSystemKeyword),r.systemId="",this.state=A.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case u.APOSTROPHE:{this._err(T.missingWhitespaceAfterDoctypeSystemKeyword),r.systemId="",this.state=A.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case u.GREATER_THAN_SIGN:{this._err(T.missingDoctypeSystemIdentifier),r.forceQuirks=!0,this.state=A.DATA,this.emitCurrentDoctype(r);break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(T.missingQuoteBeforeDoctypeSystemIdentifier),r.forceQuirks=!0,this.state=A.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateBeforeDoctypeSystemIdentifier(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:break;case u.QUOTATION_MARK:{r.systemId="",this.state=A.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case u.APOSTROPHE:{r.systemId="",this.state=A.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case u.GREATER_THAN_SIGN:{this._err(T.missingDoctypeSystemIdentifier),r.forceQuirks=!0,this.state=A.DATA,this.emitCurrentDoctype(r);break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(T.missingQuoteBeforeDoctypeSystemIdentifier),r.forceQuirks=!0,this.state=A.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateDoctypeSystemIdentifierDoubleQuoted(t){let r=this.currentToken;switch(t){case u.QUOTATION_MARK:{this.state=A.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case u.NULL:{this._err(T.unexpectedNullCharacter),r.systemId+=k;break}case u.GREATER_THAN_SIGN:{this._err(T.abruptDoctypeSystemIdentifier),r.forceQuirks=!0,this.emitCurrentDoctype(r),this.state=A.DATA;break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:r.systemId+=String.fromCodePoint(t)}}_stateDoctypeSystemIdentifierSingleQuoted(t){let r=this.currentToken;switch(t){case u.APOSTROPHE:{this.state=A.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case u.NULL:{this._err(T.unexpectedNullCharacter),r.systemId+=k;break}case u.GREATER_THAN_SIGN:{this._err(T.abruptDoctypeSystemIdentifier),r.forceQuirks=!0,this.emitCurrentDoctype(r),this.state=A.DATA;break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:r.systemId+=String.fromCodePoint(t)}}_stateAfterDoctypeSystemIdentifier(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:break;case u.GREATER_THAN_SIGN:{this.emitCurrentDoctype(r),this.state=A.DATA;break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(T.unexpectedCharacterAfterDoctypeSystemIdentifier),this.state=A.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateBogusDoctype(t){let r=this.currentToken;switch(t){case u.GREATER_THAN_SIGN:{this.emitCurrentDoctype(r),this.state=A.DATA;break}case u.NULL:{this._err(T.unexpectedNullCharacter);break}case u.EOF:{this.emitCurrentDoctype(r),this._emitEOFToken();break}default:}}_stateCdataSection(t){switch(t){case u.RIGHT_SQUARE_BRACKET:{this.state=A.CDATA_SECTION_BRACKET;break}case u.EOF:{this._err(T.eofInCdata),this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateCdataSectionBracket(t){t===u.RIGHT_SQUARE_BRACKET?this.state=A.CDATA_SECTION_END:(this._emitChars("]"),this.state=A.CDATA_SECTION,this._stateCdataSection(t))}_stateCdataSectionEnd(t){switch(t){case u.GREATER_THAN_SIGN:{this.state=A.DATA;break}case u.RIGHT_SQUARE_BRACKET:{this._emitChars("]");break}default:this._emitChars("]]"),this.state=A.CDATA_SECTION,this._stateCdataSection(t)}}_stateCharacterReference(){let t=this.entityDecoder.write(this.preprocessor.html,this.preprocessor.pos);if(t<0)if(this.preprocessor.lastChunkWritten)t=this.entityDecoder.end();else{this.active=!1,this.preprocessor.pos=this.preprocessor.html.length-1,this.consumedAfterSnapshot=0,this.preprocessor.endOfChunkHit=!0;return}t===0?(this.preprocessor.pos=this.entityStartPos,this._flushCodePointConsumedAsCharacterReference(u.AMPERSAND),this.state=!this._isCharacterReferenceInAttribute()&&Ps(this.preprocessor.peek(1))?A.AMBIGUOUS_AMPERSAND:this.returnState):this.state=this.returnState}_stateAmbiguousAmpersand(t){Ps(t)?this._flushCodePointConsumedAsCharacterReference(t):(t===u.SEMICOLON&&this._err(T.unknownNamedCharacterReference),this.state=this.returnState,this._callState(t))}};var Ys=new Set([i.DD,i.DT,i.LI,i.OPTGROUP,i.OPTION,i.P,i.RB,i.RP,i.RT,i.RTC]),Fs=new Set([...Ys,i.CAPTION,i.COLGROUP,i.TBODY,i.TD,i.TFOOT,i.TH,i.THEAD,i.TR]),or=new Set([i.APPLET,i.CAPTION,i.HTML,i.MARQUEE,i.OBJECT,i.TABLE,i.TD,i.TEMPLATE,i.TH]),Uc=new Set([...or,i.OL,i.UL]),Fc=new Set([...or,i.BUTTON]),Hs=new Set([i.ANNOTATION_XML,i.MI,i.MN,i.MO,i.MS,i.MTEXT]),Qs=new Set([i.DESC,i.FOREIGN_OBJECT,i.TITLE]),Hc=new Set([i.TR,i.TEMPLATE,i.HTML]),Qc=new Set([i.TBODY,i.TFOOT,i.THEAD,i.TEMPLATE,i.HTML]),Yc=new Set([i.TABLE,i.TEMPLATE,i.HTML]),Gc=new Set([i.TD,i.TH]),cr=class{get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}constructor(t,r,n){this.treeAdapter=r,this.handler=n,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=i.UNKNOWN,this.current=t}_indexOf(t){return this.items.lastIndexOf(t,this.stackTop)}_isInTemplate(){return this.currentTagId===i.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===b.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop]}push(t,r){this.stackTop++,this.items[this.stackTop]=t,this.current=t,this.tagIDs[this.stackTop]=r,this.currentTagId=r,this._isInTemplate()&&this.tmplCount++,this.handler.onItemPush(t,r,!0)}pop(){let t=this.current;this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,!0)}replace(t,r){let n=this._indexOf(t);this.items[n]=r,n===this.stackTop&&(this.current=r)}insertAfter(t,r,n){let s=this._indexOf(t)+1;this.items.splice(s,0,r),this.tagIDs.splice(s,0,n),this.stackTop++,s===this.stackTop&&this._updateCurrentElement(),this.current&&this.currentTagId!==void 0&&this.handler.onItemPush(this.current,this.currentTagId,s===this.stackTop)}popUntilTagNamePopped(t){let r=this.stackTop+1;do r=this.tagIDs.lastIndexOf(t,r-1);while(r>0&&this.treeAdapter.getNamespaceURI(this.items[r])!==b.HTML);this.shortenToLength(Math.max(r,0))}shortenToLength(t){for(;this.stackTop>=t;){let r=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(r,this.stackTop<t)}}popUntilElementPopped(t){let r=this._indexOf(t);this.shortenToLength(Math.max(r,0))}popUntilPopped(t,r){let n=this._indexOfTagNames(t,r);this.shortenToLength(Math.max(n,0))}popUntilNumberedHeaderPopped(){this.popUntilPopped(gt,b.HTML)}popUntilTableCellPopped(){this.popUntilPopped(Gc,b.HTML)}popAllUpToHtmlElement(){this.tmplCount=0,this.shortenToLength(1)}_indexOfTagNames(t,r){for(let n=this.stackTop;n>=0;n--)if(t.has(this.tagIDs[n])&&this.treeAdapter.getNamespaceURI(this.items[n])===r)return n;return-1}clearBackTo(t,r){let n=this._indexOfTagNames(t,r);this.shortenToLength(n+1)}clearBackToTableContext(){this.clearBackTo(Yc,b.HTML)}clearBackToTableBodyContext(){this.clearBackTo(Qc,b.HTML)}clearBackToTableRowContext(){this.clearBackTo(Hc,b.HTML)}remove(t){let r=this._indexOf(t);r>=0&&(r===this.stackTop?this.pop():(this.items.splice(r,1),this.tagIDs.splice(r,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,!1)))}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===i.BODY?this.items[1]:null}contains(t){return this._indexOf(t)>-1}getCommonAncestor(t){let r=this._indexOf(t)-1;return r>=0?this.items[r]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===i.HTML}hasInDynamicScope(t,r){for(let n=this.stackTop;n>=0;n--){let s=this.tagIDs[n];switch(this.treeAdapter.getNamespaceURI(this.items[n])){case b.HTML:{if(s===t)return!0;if(r.has(s))return!1;break}case b.SVG:{if(Qs.has(s))return!1;break}case b.MATHML:{if(Hs.has(s))return!1;break}}}return!0}hasInScope(t){return this.hasInDynamicScope(t,or)}hasInListItemScope(t){return this.hasInDynamicScope(t,Uc)}hasInButtonScope(t){return this.hasInDynamicScope(t,Fc)}hasNumberedHeaderInScope(){for(let t=this.stackTop;t>=0;t--){let r=this.tagIDs[t];switch(this.treeAdapter.getNamespaceURI(this.items[t])){case b.HTML:{if(gt.has(r))return!0;if(or.has(r))return!1;break}case b.SVG:{if(Qs.has(r))return!1;break}case b.MATHML:{if(Hs.has(r))return!1;break}}}return!0}hasInTableScope(t){for(let r=this.stackTop;r>=0;r--)if(this.treeAdapter.getNamespaceURI(this.items[r])===b.HTML)switch(this.tagIDs[r]){case t:return!0;case i.TABLE:case i.HTML:return!1}return!0}hasTableBodyContextInTableScope(){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===b.HTML)switch(this.tagIDs[t]){case i.TBODY:case i.THEAD:case i.TFOOT:return!0;case i.TABLE:case i.HTML:return!1}return!0}hasInSelectScope(t){for(let r=this.stackTop;r>=0;r--)if(this.treeAdapter.getNamespaceURI(this.items[r])===b.HTML)switch(this.tagIDs[r]){case t:return!0;case i.OPTION:case i.OPTGROUP:break;default:return!1}return!0}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&Ys.has(this.currentTagId);)this.pop()}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&Fs.has(this.currentTagId);)this.pop()}generateImpliedEndTagsWithExclusion(t){for(;this.currentTagId!==void 0&&this.currentTagId!==t&&Fs.has(this.currentTagId);)this.pop()}};var ue;(function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element"})(ue||(ue={}));var Gs={type:ue.Marker},lr=class{constructor(t){this.treeAdapter=t,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(t,r){let n=[],s=r.length,a=this.treeAdapter.getTagName(t),c=this.treeAdapter.getNamespaceURI(t);for(let l=0;l<this.entries.length;l++){let o=this.entries[l];if(o.type===ue.Marker)break;let{element:d}=o;if(this.treeAdapter.getTagName(d)===a&&this.treeAdapter.getNamespaceURI(d)===c){let p=this.treeAdapter.getAttrList(d);p.length===s&&n.push({idx:l,attrs:p})}}return n}_ensureNoahArkCondition(t){if(this.entries.length<3)return;let r=this.treeAdapter.getAttrList(t),n=this._getNoahArkConditionCandidates(t,r);if(n.length<3)return;let s=new Map(r.map(c=>[c.name,c.value])),a=0;for(let c=0;c<n.length;c++){let l=n[c];l.attrs.every(o=>s.get(o.name)===o.value)&&(a+=1,a>=3&&this.entries.splice(l.idx,1))}}insertMarker(){this.entries.unshift(Gs)}pushElement(t,r){this._ensureNoahArkCondition(t),this.entries.unshift({type:ue.Element,element:t,token:r})}insertElementAfterBookmark(t,r){let n=this.entries.indexOf(this.bookmark);this.entries.splice(n,0,{type:ue.Element,element:t,token:r})}removeEntry(t){let r=this.entries.indexOf(t);r!==-1&&this.entries.splice(r,1)}clearToLastMarker(){let t=this.entries.indexOf(Gs);t===-1?this.entries.length=0:this.entries.splice(0,t+1)}getElementEntryInScopeWithTagName(t){let r=this.entries.find(n=>n.type===ue.Marker||this.treeAdapter.getTagName(n.element)===t);return r&&r.type===ue.Element?r:null}getElementEntry(t){return this.entries.find(r=>r.type===ue.Element&&r.element===t)}};var Ae={createDocument(){return{nodeName:"#document",mode:$.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:"#document-fragment",childNodes:[]}},createElement(e,t,r){return{nodeName:e,tagName:e,attrs:r,namespaceURI:t,childNodes:[],parentNode:null}},createCommentNode(e){return{nodeName:"#comment",data:e,parentNode:null}},createTextNode(e){return{nodeName:"#text",value:e,parentNode:null}},appendChild(e,t){e.childNodes.push(t),t.parentNode=e},insertBefore(e,t,r){let n=e.childNodes.indexOf(r);e.childNodes.splice(n,0,t),t.parentNode=e},setTemplateContent(e,t){e.content=t},getTemplateContent(e){return e.content},setDocumentType(e,t,r,n){let s=e.childNodes.find(a=>a.nodeName==="#documentType");if(s)s.name=t,s.publicId=r,s.systemId=n;else{let a={nodeName:"#documentType",name:t,publicId:r,systemId:n,parentNode:null};Ae.appendChild(e,a)}},setDocumentMode(e,t){e.mode=t},getDocumentMode(e){return e.mode},detachNode(e){if(e.parentNode){let t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null}},insertText(e,t){if(e.childNodes.length>0){let r=e.childNodes[e.childNodes.length-1];if(Ae.isTextNode(r)){r.value+=t;return}}Ae.appendChild(e,Ae.createTextNode(t))},insertTextBefore(e,t,r){let n=e.childNodes[e.childNodes.indexOf(r)-1];n&&Ae.isTextNode(n)?n.value+=t:Ae.insertBefore(e,Ae.createTextNode(t),r)},adoptAttributes(e,t){let r=new Set(e.attrs.map(n=>n.name));for(let n=0;n<t.length;n++)r.has(t[n].name)||e.attrs.push(t[n])},getFirstChild(e){return e.childNodes[0]},getChildNodes(e){return e.childNodes},getParentNode(e){return e.parentNode},getAttrList(e){return e.attrs},getTagName(e){return e.tagName},getNamespaceURI(e){return e.namespaceURI},getTextNodeContent(e){return e.value},getCommentNodeContent(e){return e.data},getDocumentTypeNodeName(e){return e.name},getDocumentTypeNodePublicId(e){return e.publicId},getDocumentTypeNodeSystemId(e){return e.systemId},isTextNode(e){return e.nodeName==="#text"},isCommentNode(e){return e.nodeName==="#comment"},isDocumentTypeNode(e){return e.nodeName==="#documentType"},isElementNode(e){return Object.prototype.hasOwnProperty.call(e,"tagName")},setNodeSourceCodeLocation(e,t){e.sourceCodeLocation=t},getNodeSourceCodeLocation(e){return e.sourceCodeLocation},updateNodeSourceCodeLocation(e,t){e.sourceCodeLocation={...e.sourceCodeLocation,...t}}};var Ks="html",Wc="about:legacy-compat",Kc="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",Js=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],Jc=[...Js,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],jc=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),js=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],Vc=[...js,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function Ws(e,t){return t.some(r=>e.startsWith(r))}function Vs(e){return e.name===Ks&&e.publicId===null&&(e.systemId===null||e.systemId===Wc)}function Xs(e){if(e.name!==Ks)return $.QUIRKS;let{systemId:t}=e;if(t&&t.toLowerCase()===Kc)return $.QUIRKS;let{publicId:r}=e;if(r!==null){if(r=r.toLowerCase(),jc.has(r))return $.QUIRKS;let n=t===null?Jc:Js;if(Ws(r,n))return $.QUIRKS;if(n=t===null?js:Vc,Ws(r,n))return $.LIMITED_QUIRKS}return $.NO_QUIRKS}var Zs={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},Zc="definitionurl",$c="definitionURL",qc=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(e=>[e.toLowerCase(),e])),zc=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:b.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:b.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:b.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:b.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:b.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:b.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:b.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:b.XML}],["xml:space",{prefix:"xml",name:"space",namespace:b.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:b.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:b.XMLNS}]]),el=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(e=>[e.toLowerCase(),e])),tl=new Set([i.B,i.BIG,i.BLOCKQUOTE,i.BODY,i.BR,i.CENTER,i.CODE,i.DD,i.DIV,i.DL,i.DT,i.EM,i.EMBED,i.H1,i.H2,i.H3,i.H4,i.H5,i.H6,i.HEAD,i.HR,i.I,i.IMG,i.LI,i.LISTING,i.MENU,i.META,i.NOBR,i.OL,i.P,i.PRE,i.RUBY,i.S,i.SMALL,i.SPAN,i.STRONG,i.STRIKE,i.SUB,i.SUP,i.TABLE,i.TT,i.U,i.UL,i.VAR]);function $s(e){let t=e.tagID;return t===i.FONT&&e.attrs.some(({name:n})=>n===Ee.COLOR||n===Ee.SIZE||n===Ee.FACE)||tl.has(t)}function pn(e){for(let t=0;t<e.attrs.length;t++)if(e.attrs[t].name===Zc){e.attrs[t].name=$c;break}}function hn(e){for(let t=0;t<e.attrs.length;t++){let r=qc.get(e.attrs[t].name);r!=null&&(e.attrs[t].name=r)}}function dr(e){for(let t=0;t<e.attrs.length;t++){let r=zc.get(e.attrs[t].name);r&&(e.attrs[t].prefix=r.prefix,e.attrs[t].name=r.name,e.attrs[t].namespace=r.namespace)}}function qs(e){let t=el.get(e.tagName);t!=null&&(e.tagName=t,e.tagID=ve(e.tagName))}function rl(e,t){return t===b.MATHML&&(e===i.MI||e===i.MO||e===i.MN||e===i.MS||e===i.MTEXT)}function nl(e,t,r){if(t===b.MATHML&&e===i.ANNOTATION_XML){for(let n=0;n<r.length;n++)if(r[n].name===Ee.ENCODING){let s=r[n].value.toLowerCase();return s===Zs.TEXT_HTML||s===Zs.APPLICATION_XML}}return t===b.SVG&&(e===i.FOREIGN_OBJECT||e===i.DESC||e===i.TITLE)}function zs(e,t,r,n){return(!n||n===b.HTML)&&nl(e,t,r)||(!n||n===b.MATHML)&&rl(e,t)}var sl="hidden",il=8,al=3,h;(function(e){e[e.INITIAL=0]="INITIAL",e[e.BEFORE_HTML=1]="BEFORE_HTML",e[e.BEFORE_HEAD=2]="BEFORE_HEAD",e[e.IN_HEAD=3]="IN_HEAD",e[e.IN_HEAD_NO_SCRIPT=4]="IN_HEAD_NO_SCRIPT",e[e.AFTER_HEAD=5]="AFTER_HEAD",e[e.IN_BODY=6]="IN_BODY",e[e.TEXT=7]="TEXT",e[e.IN_TABLE=8]="IN_TABLE",e[e.IN_TABLE_TEXT=9]="IN_TABLE_TEXT",e[e.IN_CAPTION=10]="IN_CAPTION",e[e.IN_COLUMN_GROUP=11]="IN_COLUMN_GROUP",e[e.IN_TABLE_BODY=12]="IN_TABLE_BODY",e[e.IN_ROW=13]="IN_ROW",e[e.IN_CELL=14]="IN_CELL",e[e.IN_SELECT=15]="IN_SELECT",e[e.IN_SELECT_IN_TABLE=16]="IN_SELECT_IN_TABLE",e[e.IN_TEMPLATE=17]="IN_TEMPLATE",e[e.AFTER_BODY=18]="AFTER_BODY",e[e.IN_FRAMESET=19]="IN_FRAMESET",e[e.AFTER_FRAMESET=20]="AFTER_FRAMESET",e[e.AFTER_AFTER_BODY=21]="AFTER_AFTER_BODY",e[e.AFTER_AFTER_FRAMESET=22]="AFTER_AFTER_FRAMESET"})(h||(h={}));var ol={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},si=new Set([i.TABLE,i.TBODY,i.TFOOT,i.THEAD,i.TR]),ti={scriptingEnabled:!0,sourceCodeLocationInfo:!1,treeAdapter:Ae,onParseError:null},Nt=class{constructor(t,r,n=null,s=null){this.fragmentContext=n,this.scriptHandler=s,this.currentToken=null,this.stopped=!1,this.insertionMode=h.INITIAL,this.originalInsertionMode=h.INITIAL,this.headElement=null,this.formElement=null,this.currentNotInHTML=!1,this.tmplInsertionModeStack=[],this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=!1,this.framesetOk=!0,this.skipNextNewLine=!1,this.fosterParentingEnabled=!1,this.options={...ti,...t},this.treeAdapter=this.options.treeAdapter,this.onParseError=this.options.onParseError,this.onParseError&&(this.options.sourceCodeLocationInfo=!0),this.document=r??this.treeAdapter.createDocument(),this.tokenizer=new Et(this.options,this),this.activeFormattingElements=new lr(this.treeAdapter),this.fragmentContextID=n?ve(this.treeAdapter.getTagName(n)):i.UNKNOWN,this._setContextModes(n??this.document,this.fragmentContextID),this.openElements=new cr(this.document,this.treeAdapter,this)}static parse(t,r){let n=new this(r);return n.tokenizer.write(t,!0),n.document}static getFragmentParser(t,r){let n={...ti,...r};t??(t=n.treeAdapter.createElement(E.TEMPLATE,b.HTML,[]));let s=n.treeAdapter.createElement("documentmock",b.HTML,[]),a=new this(n,s,t);return a.fragmentContextID===i.TEMPLATE&&a.tmplInsertionModeStack.unshift(h.IN_TEMPLATE),a._initTokenizerForFragmentParsing(),a._insertFakeRootElement(),a._resetInsertionMode(),a._findFormInFragmentContext(),a}getFragment(){let t=this.treeAdapter.getFirstChild(this.document),r=this.treeAdapter.createDocumentFragment();return this._adoptNodes(t,r),r}_err(t,r,n){var s;if(!this.onParseError)return;let a=(s=t.location)!==null&&s!==void 0?s:ol,c={code:r,startLine:a.startLine,startCol:a.startCol,startOffset:a.startOffset,endLine:n?a.startLine:a.endLine,endCol:n?a.startCol:a.endCol,endOffset:n?a.startOffset:a.endOffset};this.onParseError(c)}onItemPush(t,r,n){var s,a;(a=(s=this.treeAdapter).onItemPush)===null||a===void 0||a.call(s,t),n&&this.openElements.stackTop>0&&this._setContextModes(t,r)}onItemPop(t,r){var n,s;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(t,this.currentToken),(s=(n=this.treeAdapter).onItemPop)===null||s===void 0||s.call(n,t,this.openElements.current),r){let a,c;this.openElements.stackTop===0&&this.fragmentContext?(a=this.fragmentContext,c=this.fragmentContextID):{current:a,currentTagId:c}=this.openElements,this._setContextModes(a,c)}}_setContextModes(t,r){let n=t===this.document||t&&this.treeAdapter.getNamespaceURI(t)===b.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&t!==void 0&&r!==void 0&&!this._isIntegrationPoint(r,t)}_switchToTextParsing(t,r){this._insertElement(t,b.HTML),this.tokenizer.state=r,this.originalInsertionMode=this.insertionMode,this.insertionMode=h.TEXT}switchToPlaintextParsing(){this.insertionMode=h.TEXT,this.originalInsertionMode=h.IN_BODY,this.tokenizer.state=J.PLAINTEXT}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let t=this.fragmentContext;for(;t;){if(this.treeAdapter.getTagName(t)===E.FORM){this.formElement=t;break}t=this.treeAdapter.getParentNode(t)}}_initTokenizerForFragmentParsing(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==b.HTML))switch(this.fragmentContextID){case i.TITLE:case i.TEXTAREA:{this.tokenizer.state=J.RCDATA;break}case i.STYLE:case i.XMP:case i.IFRAME:case i.NOEMBED:case i.NOFRAMES:case i.NOSCRIPT:{this.tokenizer.state=J.RAWTEXT;break}case i.SCRIPT:{this.tokenizer.state=J.SCRIPT_DATA;break}case i.PLAINTEXT:{this.tokenizer.state=J.PLAINTEXT;break}default:}}_setDocumentType(t){let r=t.name||"",n=t.publicId||"",s=t.systemId||"";if(this.treeAdapter.setDocumentType(this.document,r,n,s),t.location){let c=this.treeAdapter.getChildNodes(this.document).find(l=>this.treeAdapter.isDocumentTypeNode(l));c&&this.treeAdapter.setNodeSourceCodeLocation(c,t.location)}}_attachElementToTree(t,r){if(this.options.sourceCodeLocationInfo){let n=r&&{...r,startTag:r};this.treeAdapter.setNodeSourceCodeLocation(t,n)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(t);else{let n=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(n??this.document,t)}}_appendElement(t,r){let n=this.treeAdapter.createElement(t.tagName,r,t.attrs);this._attachElementToTree(n,t.location)}_insertElement(t,r){let n=this.treeAdapter.createElement(t.tagName,r,t.attrs);this._attachElementToTree(n,t.location),this.openElements.push(n,t.tagID)}_insertFakeElement(t,r){let n=this.treeAdapter.createElement(t,b.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,r)}_insertTemplate(t){let r=this.treeAdapter.createElement(t.tagName,b.HTML,t.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(r,n),this._attachElementToTree(r,t.location),this.openElements.push(r,t.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null)}_insertFakeRootElement(){let t=this.treeAdapter.createElement(E.HTML,b.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(t,null),this.treeAdapter.appendChild(this.openElements.current,t),this.openElements.push(t,i.HTML)}_appendCommentNode(t,r){let n=this.treeAdapter.createCommentNode(t.data);this.treeAdapter.appendChild(r,n),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,t.location)}_insertCharacters(t){let r,n;if(this._shouldFosterParentOnInsertion()?({parent:r,beforeElement:n}=this._findFosterParentingLocation(),n?this.treeAdapter.insertTextBefore(r,t.chars,n):this.treeAdapter.insertText(r,t.chars)):(r=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(r,t.chars)),!t.location)return;let s=this.treeAdapter.getChildNodes(r),a=n?s.lastIndexOf(n):s.length,c=s[a-1];if(this.treeAdapter.getNodeSourceCodeLocation(c)){let{endLine:o,endCol:d,endOffset:p}=t.location;this.treeAdapter.updateNodeSourceCodeLocation(c,{endLine:o,endCol:d,endOffset:p})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(c,t.location)}_adoptNodes(t,r){for(let n=this.treeAdapter.getFirstChild(t);n;n=this.treeAdapter.getFirstChild(t))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(r,n)}_setEndLocation(t,r){if(this.treeAdapter.getNodeSourceCodeLocation(t)&&r.location){let n=r.location,s=this.treeAdapter.getTagName(t),a=r.type===O.END_TAG&&s===r.tagName?{endTag:{...n},endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(t,a)}}shouldProcessStartTagTokenInForeignContent(t){if(!this.currentNotInHTML)return!1;let r,n;return this.openElements.stackTop===0&&this.fragmentContext?(r=this.fragmentContext,n=this.fragmentContextID):{current:r,currentTagId:n}=this.openElements,t.tagID===i.SVG&&this.treeAdapter.getTagName(r)===E.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(r)===b.MATHML?!1:this.tokenizer.inForeignNode||(t.tagID===i.MGLYPH||t.tagID===i.MALIGNMARK)&&n!==void 0&&!this._isIntegrationPoint(n,r,b.HTML)}_processToken(t){switch(t.type){case O.CHARACTER:{this.onCharacter(t);break}case O.NULL_CHARACTER:{this.onNullCharacter(t);break}case O.COMMENT:{this.onComment(t);break}case O.DOCTYPE:{this.onDoctype(t);break}case O.START_TAG:{this._processStartTag(t);break}case O.END_TAG:{this.onEndTag(t);break}case O.EOF:{this.onEof(t);break}case O.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(t);break}}}_isIntegrationPoint(t,r,n){let s=this.treeAdapter.getNamespaceURI(r),a=this.treeAdapter.getAttrList(r);return zs(t,s,a,n)}_reconstructActiveFormattingElements(){let t=this.activeFormattingElements.entries.length;if(t){let r=this.activeFormattingElements.entries.findIndex(s=>s.type===ue.Marker||this.openElements.contains(s.element)),n=r===-1?t-1:r-1;for(let s=n;s>=0;s--){let a=this.activeFormattingElements.entries[s];this._insertElement(a.token,this.treeAdapter.getNamespaceURI(a.element)),a.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=h.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(i.P),this.openElements.popUntilTagNamePopped(i.P)}_resetInsertionMode(){for(let t=this.openElements.stackTop;t>=0;t--)switch(t===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[t]){case i.TR:{this.insertionMode=h.IN_ROW;return}case i.TBODY:case i.THEAD:case i.TFOOT:{this.insertionMode=h.IN_TABLE_BODY;return}case i.CAPTION:{this.insertionMode=h.IN_CAPTION;return}case i.COLGROUP:{this.insertionMode=h.IN_COLUMN_GROUP;return}case i.TABLE:{this.insertionMode=h.IN_TABLE;return}case i.BODY:{this.insertionMode=h.IN_BODY;return}case i.FRAMESET:{this.insertionMode=h.IN_FRAMESET;return}case i.SELECT:{this._resetInsertionModeForSelect(t);return}case i.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case i.HTML:{this.insertionMode=this.headElement?h.AFTER_HEAD:h.BEFORE_HEAD;return}case i.TD:case i.TH:{if(t>0){this.insertionMode=h.IN_CELL;return}break}case i.HEAD:{if(t>0){this.insertionMode=h.IN_HEAD;return}break}}this.insertionMode=h.IN_BODY}_resetInsertionModeForSelect(t){if(t>0)for(let r=t-1;r>0;r--){let n=this.openElements.tagIDs[r];if(n===i.TEMPLATE)break;if(n===i.TABLE){this.insertionMode=h.IN_SELECT_IN_TABLE;return}}this.insertionMode=h.IN_SELECT}_isElementCausesFosterParenting(t){return si.has(t)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let t=this.openElements.stackTop;t>=0;t--){let r=this.openElements.items[t];switch(this.openElements.tagIDs[t]){case i.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(r)===b.HTML)return{parent:this.treeAdapter.getTemplateContent(r),beforeElement:null};break}case i.TABLE:{let n=this.treeAdapter.getParentNode(r);return n?{parent:n,beforeElement:r}:{parent:this.openElements.items[t-1],beforeElement:null}}default:}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(t){let r=this._findFosterParentingLocation();r.beforeElement?this.treeAdapter.insertBefore(r.parent,t,r.beforeElement):this.treeAdapter.appendChild(r.parent,t)}_isSpecialElement(t,r){let n=this.treeAdapter.getNamespaceURI(t);return vs[n].has(r)}onCharacter(t){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){Md(this,t);return}switch(this.insertionMode){case h.INITIAL:{Tt(this,t);break}case h.BEFORE_HTML:{Ct(this,t);break}case h.BEFORE_HEAD:{It(this,t);break}case h.IN_HEAD:{yt(this,t);break}case h.IN_HEAD_NO_SCRIPT:{wt(this,t);break}case h.AFTER_HEAD:{xt(this,t);break}case h.IN_BODY:case h.IN_CAPTION:case h.IN_CELL:case h.IN_TEMPLATE:{ai(this,t);break}case h.TEXT:case h.IN_SELECT:case h.IN_SELECT_IN_TABLE:{this._insertCharacters(t);break}case h.IN_TABLE:case h.IN_TABLE_BODY:case h.IN_ROW:{mn(this,t);break}case h.IN_TABLE_TEXT:{Ai(this,t);break}case h.IN_COLUMN_GROUP:{Ar(this,t);break}case h.AFTER_BODY:{pr(this,t);break}case h.AFTER_AFTER_BODY:{ur(this,t);break}default:}}onNullCharacter(t){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){Pd(this,t);return}switch(this.insertionMode){case h.INITIAL:{Tt(this,t);break}case h.BEFORE_HTML:{Ct(this,t);break}case h.BEFORE_HEAD:{It(this,t);break}case h.IN_HEAD:{yt(this,t);break}case h.IN_HEAD_NO_SCRIPT:{wt(this,t);break}case h.AFTER_HEAD:{xt(this,t);break}case h.TEXT:{this._insertCharacters(t);break}case h.IN_TABLE:case h.IN_TABLE_BODY:case h.IN_ROW:{mn(this,t);break}case h.IN_COLUMN_GROUP:{Ar(this,t);break}case h.AFTER_BODY:{pr(this,t);break}case h.AFTER_AFTER_BODY:{ur(this,t);break}default:}}onComment(t){if(this.skipNextNewLine=!1,this.currentNotInHTML){gn(this,t);return}switch(this.insertionMode){case h.INITIAL:case h.BEFORE_HTML:case h.BEFORE_HEAD:case h.IN_HEAD:case h.IN_HEAD_NO_SCRIPT:case h.AFTER_HEAD:case h.IN_BODY:case h.IN_TABLE:case h.IN_CAPTION:case h.IN_COLUMN_GROUP:case h.IN_TABLE_BODY:case h.IN_ROW:case h.IN_CELL:case h.IN_SELECT:case h.IN_SELECT_IN_TABLE:case h.IN_TEMPLATE:case h.IN_FRAMESET:case h.AFTER_FRAMESET:{gn(this,t);break}case h.IN_TABLE_TEXT:{bt(this,t);break}case h.AFTER_BODY:{hl(this,t);break}case h.AFTER_AFTER_BODY:case h.AFTER_AFTER_FRAMESET:{ml(this,t);break}default:}}onDoctype(t){switch(this.skipNextNewLine=!1,this.insertionMode){case h.INITIAL:{gl(this,t);break}case h.BEFORE_HEAD:case h.IN_HEAD:case h.IN_HEAD_NO_SCRIPT:case h.AFTER_HEAD:{this._err(t,T.misplacedDoctype);break}case h.IN_TABLE_TEXT:{bt(this,t);break}default:}}onStartTag(t){this.skipNextNewLine=!1,this.currentToken=t,this._processStartTag(t),t.selfClosing&&!t.ackSelfClosing&&this._err(t,T.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(t){this.shouldProcessStartTagTokenInForeignContent(t)?Ud(this,t):this._startTagOutsideForeignContent(t)}_startTagOutsideForeignContent(t){switch(this.insertionMode){case h.INITIAL:{Tt(this,t);break}case h.BEFORE_HTML:{fl(this,t);break}case h.BEFORE_HEAD:{Tl(this,t);break}case h.IN_HEAD:{pe(this,t);break}case h.IN_HEAD_NO_SCRIPT:{Il(this,t);break}case h.AFTER_HEAD:{wl(this,t);break}case h.IN_BODY:{j(this,t);break}case h.IN_TABLE:{Ze(this,t);break}case h.IN_TABLE_TEXT:{bt(this,t);break}case h.IN_CAPTION:{bd(this,t);break}case h.IN_COLUMN_GROUP:{bn(this,t);break}case h.IN_TABLE_BODY:{gr(this,t);break}case h.IN_ROW:{fr(this,t);break}case h.IN_CELL:{yd(this,t);break}case h.IN_SELECT:{mi(this,t);break}case h.IN_SELECT_IN_TABLE:{xd(this,t);break}case h.IN_TEMPLATE:{Sd(this,t);break}case h.AFTER_BODY:{Rd(this,t);break}case h.IN_FRAMESET:{Ld(this,t);break}case h.AFTER_FRAMESET:{Dd(this,t);break}case h.AFTER_AFTER_BODY:{kd(this,t);break}case h.AFTER_AFTER_FRAMESET:{vd(this,t);break}default:}}onEndTag(t){this.skipNextNewLine=!1,this.currentToken=t,this.currentNotInHTML?Fd(this,t):this._endTagOutsideForeignContent(t)}_endTagOutsideForeignContent(t){switch(this.insertionMode){case h.INITIAL:{Tt(this,t);break}case h.BEFORE_HTML:{El(this,t);break}case h.BEFORE_HEAD:{bl(this,t);break}case h.IN_HEAD:{Cl(this,t);break}case h.IN_HEAD_NO_SCRIPT:{yl(this,t);break}case h.AFTER_HEAD:{xl(this,t);break}case h.IN_BODY:{mr(this,t);break}case h.TEXT:{dd(this,t);break}case h.IN_TABLE:{St(this,t);break}case h.IN_TABLE_TEXT:{bt(this,t);break}case h.IN_CAPTION:{Cd(this,t);break}case h.IN_COLUMN_GROUP:{Id(this,t);break}case h.IN_TABLE_BODY:{fn(this,t);break}case h.IN_ROW:{hi(this,t);break}case h.IN_CELL:{wd(this,t);break}case h.IN_SELECT:{gi(this,t);break}case h.IN_SELECT_IN_TABLE:{Nd(this,t);break}case h.IN_TEMPLATE:{_d(this,t);break}case h.AFTER_BODY:{Ei(this,t);break}case h.IN_FRAMESET:{Od(this,t);break}case h.AFTER_FRAMESET:{Bd(this,t);break}case h.AFTER_AFTER_BODY:{ur(this,t);break}default:}}onEof(t){switch(this.insertionMode){case h.INITIAL:{Tt(this,t);break}case h.BEFORE_HTML:{Ct(this,t);break}case h.BEFORE_HEAD:{It(this,t);break}case h.IN_HEAD:{yt(this,t);break}case h.IN_HEAD_NO_SCRIPT:{wt(this,t);break}case h.AFTER_HEAD:{xt(this,t);break}case h.IN_BODY:case h.IN_TABLE:case h.IN_CAPTION:case h.IN_COLUMN_GROUP:case h.IN_TABLE_BODY:case h.IN_ROW:case h.IN_CELL:case h.IN_SELECT:case h.IN_SELECT_IN_TABLE:{di(this,t);break}case h.TEXT:{ud(this,t);break}case h.IN_TABLE_TEXT:{bt(this,t);break}case h.IN_TEMPLATE:{fi(this,t);break}case h.AFTER_BODY:case h.IN_FRAMESET:case h.AFTER_FRAMESET:case h.AFTER_AFTER_BODY:case h.AFTER_AFTER_FRAMESET:{Tn(this,t);break}default:}}onWhitespaceCharacter(t){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,t.chars.charCodeAt(0)===u.LINE_FEED)){if(t.chars.length===1)return;t.chars=t.chars.substr(1)}if(this.tokenizer.inForeignNode){this._insertCharacters(t);return}switch(this.insertionMode){case h.IN_HEAD:case h.IN_HEAD_NO_SCRIPT:case h.AFTER_HEAD:case h.TEXT:case h.IN_COLUMN_GROUP:case h.IN_SELECT:case h.IN_SELECT_IN_TABLE:case h.IN_FRAMESET:case h.AFTER_FRAMESET:{this._insertCharacters(t);break}case h.IN_BODY:case h.IN_CAPTION:case h.IN_CELL:case h.IN_TEMPLATE:case h.AFTER_BODY:case h.AFTER_AFTER_BODY:case h.AFTER_AFTER_FRAMESET:{ii(this,t);break}case h.IN_TABLE:case h.IN_TABLE_BODY:case h.IN_ROW:{mn(this,t);break}case h.IN_TABLE_TEXT:{ui(this,t);break}default:}}};function cl(e,t){let r=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return r?e.openElements.contains(r.element)?e.openElements.hasInScope(t.tagID)||(r=null):(e.activeFormattingElements.removeEntry(r),r=null):li(e,t),r}function ll(e,t){let r=null,n=e.openElements.stackTop;for(;n>=0;n--){let s=e.openElements.items[n];if(s===t.element)break;e._isSpecialElement(s,e.openElements.tagIDs[n])&&(r=s)}return r||(e.openElements.shortenToLength(Math.max(n,0)),e.activeFormattingElements.removeEntry(t)),r}function dl(e,t,r){let n=t,s=e.openElements.getCommonAncestor(t);for(let a=0,c=s;c!==r;a++,c=s){s=e.openElements.getCommonAncestor(c);let l=e.activeFormattingElements.getElementEntry(c),o=l&&a>=al;!l||o?(o&&e.activeFormattingElements.removeEntry(l),e.openElements.remove(c)):(c=ul(e,l),n===t&&(e.activeFormattingElements.bookmark=l),e.treeAdapter.detachNode(n),e.treeAdapter.appendChild(c,n),n=c)}return n}function ul(e,t){let r=e.treeAdapter.getNamespaceURI(t.element),n=e.treeAdapter.createElement(t.token.tagName,r,t.token.attrs);return e.openElements.replace(t.element,n),t.element=n,n}function Al(e,t,r){let n=e.treeAdapter.getTagName(t),s=ve(n);if(e._isElementCausesFosterParenting(s))e._fosterParentElement(r);else{let a=e.treeAdapter.getNamespaceURI(t);s===i.TEMPLATE&&a===b.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,r)}}function pl(e,t,r){let n=e.treeAdapter.getNamespaceURI(r.element),{token:s}=r,a=e.treeAdapter.createElement(s.tagName,n,s.attrs);e._adoptNodes(t,a),e.treeAdapter.appendChild(t,a),e.activeFormattingElements.insertElementAfterBookmark(a,s),e.activeFormattingElements.removeEntry(r),e.openElements.remove(r.element),e.openElements.insertAfter(t,a,s.tagID)}function En(e,t){for(let r=0;r<il;r++){let n=cl(e,t);if(!n)break;let s=ll(e,n);if(!s)break;e.activeFormattingElements.bookmark=n;let a=dl(e,s,n.element),c=e.openElements.getCommonAncestor(n.element);e.treeAdapter.detachNode(a),c&&Al(e,c,a),pl(e,s,n)}}function gn(e,t){e._appendCommentNode(t,e.openElements.currentTmplContentOrNode)}function hl(e,t){e._appendCommentNode(t,e.openElements.items[0])}function ml(e,t){e._appendCommentNode(t,e.document)}function Tn(e,t){if(e.stopped=!0,t.location){let r=e.fragmentContext?0:2;for(let n=e.openElements.stackTop;n>=r;n--)e._setEndLocation(e.openElements.items[n],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){let n=e.openElements.items[0],s=e.treeAdapter.getNodeSourceCodeLocation(n);if(s&&!s.endTag&&(e._setEndLocation(n,t),e.openElements.stackTop>=1)){let a=e.openElements.items[1],c=e.treeAdapter.getNodeSourceCodeLocation(a);c&&!c.endTag&&e._setEndLocation(a,t)}}}}function gl(e,t){e._setDocumentType(t);let r=t.forceQuirks?$.QUIRKS:Xs(t);Vs(t)||e._err(t,T.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,r),e.insertionMode=h.BEFORE_HTML}function Tt(e,t){e._err(t,T.missingDoctype,!0),e.treeAdapter.setDocumentMode(e.document,$.QUIRKS),e.insertionMode=h.BEFORE_HTML,e._processToken(t)}function fl(e,t){t.tagID===i.HTML?(e._insertElement(t,b.HTML),e.insertionMode=h.BEFORE_HEAD):Ct(e,t)}function El(e,t){let r=t.tagID;(r===i.HTML||r===i.HEAD||r===i.BODY||r===i.BR)&&Ct(e,t)}function Ct(e,t){e._insertFakeRootElement(),e.insertionMode=h.BEFORE_HEAD,e._processToken(t)}function Tl(e,t){switch(t.tagID){case i.HTML:{j(e,t);break}case i.HEAD:{e._insertElement(t,b.HTML),e.headElement=e.openElements.current,e.insertionMode=h.IN_HEAD;break}default:It(e,t)}}function bl(e,t){let r=t.tagID;r===i.HEAD||r===i.BODY||r===i.HTML||r===i.BR?It(e,t):e._err(t,T.endTagWithoutMatchingOpenElement)}function It(e,t){e._insertFakeElement(E.HEAD,i.HEAD),e.headElement=e.openElements.current,e.insertionMode=h.IN_HEAD,e._processToken(t)}function pe(e,t){switch(t.tagID){case i.HTML:{j(e,t);break}case i.BASE:case i.BASEFONT:case i.BGSOUND:case i.LINK:case i.META:{e._appendElement(t,b.HTML),t.ackSelfClosing=!0;break}case i.TITLE:{e._switchToTextParsing(t,J.RCDATA);break}case i.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(t,J.RAWTEXT):(e._insertElement(t,b.HTML),e.insertionMode=h.IN_HEAD_NO_SCRIPT);break}case i.NOFRAMES:case i.STYLE:{e._switchToTextParsing(t,J.RAWTEXT);break}case i.SCRIPT:{e._switchToTextParsing(t,J.SCRIPT_DATA);break}case i.TEMPLATE:{e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=h.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(h.IN_TEMPLATE);break}case i.HEAD:{e._err(t,T.misplacedStartTagForHeadElement);break}default:yt(e,t)}}function Cl(e,t){switch(t.tagID){case i.HEAD:{e.openElements.pop(),e.insertionMode=h.AFTER_HEAD;break}case i.BODY:case i.BR:case i.HTML:{yt(e,t);break}case i.TEMPLATE:{Pe(e,t);break}default:e._err(t,T.endTagWithoutMatchingOpenElement)}}function Pe(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==i.TEMPLATE&&e._err(t,T.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(i.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,T.endTagWithoutMatchingOpenElement)}function yt(e,t){e.openElements.pop(),e.insertionMode=h.AFTER_HEAD,e._processToken(t)}function Il(e,t){switch(t.tagID){case i.HTML:{j(e,t);break}case i.BASEFONT:case i.BGSOUND:case i.HEAD:case i.LINK:case i.META:case i.NOFRAMES:case i.STYLE:{pe(e,t);break}case i.NOSCRIPT:{e._err(t,T.nestedNoscriptInHead);break}default:wt(e,t)}}function yl(e,t){switch(t.tagID){case i.NOSCRIPT:{e.openElements.pop(),e.insertionMode=h.IN_HEAD;break}case i.BR:{wt(e,t);break}default:e._err(t,T.endTagWithoutMatchingOpenElement)}}function wt(e,t){let r=t.type===O.EOF?T.openElementsLeftAfterEof:T.disallowedContentInNoscriptInHead;e._err(t,r),e.openElements.pop(),e.insertionMode=h.IN_HEAD,e._processToken(t)}function wl(e,t){switch(t.tagID){case i.HTML:{j(e,t);break}case i.BODY:{e._insertElement(t,b.HTML),e.framesetOk=!1,e.insertionMode=h.IN_BODY;break}case i.FRAMESET:{e._insertElement(t,b.HTML),e.insertionMode=h.IN_FRAMESET;break}case i.BASE:case i.BASEFONT:case i.BGSOUND:case i.LINK:case i.META:case i.NOFRAMES:case i.SCRIPT:case i.STYLE:case i.TEMPLATE:case i.TITLE:{e._err(t,T.abandonedHeadElementChild),e.openElements.push(e.headElement,i.HEAD),pe(e,t),e.openElements.remove(e.headElement);break}case i.HEAD:{e._err(t,T.misplacedStartTagForHeadElement);break}default:xt(e,t)}}function xl(e,t){switch(t.tagID){case i.BODY:case i.HTML:case i.BR:{xt(e,t);break}case i.TEMPLATE:{Pe(e,t);break}default:e._err(t,T.endTagWithoutMatchingOpenElement)}}function xt(e,t){e._insertFakeElement(E.BODY,i.BODY),e.insertionMode=h.IN_BODY,hr(e,t)}function hr(e,t){switch(t.type){case O.CHARACTER:{ai(e,t);break}case O.WHITESPACE_CHARACTER:{ii(e,t);break}case O.COMMENT:{gn(e,t);break}case O.START_TAG:{j(e,t);break}case O.END_TAG:{mr(e,t);break}case O.EOF:{di(e,t);break}default:}}function ii(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t)}function ai(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1}function Nl(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs)}function Sl(e,t){let r=e.openElements.tryPeekProperlyNestedBodyElement();r&&e.openElements.tmplCount===0&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(r,t.attrs))}function _l(e,t){let r=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&r&&(e.treeAdapter.detachNode(r),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,b.HTML),e.insertionMode=h.IN_FRAMESET)}function Rl(e,t){e.openElements.hasInButtonScope(i.P)&&e._closePElement(),e._insertElement(t,b.HTML)}function Ll(e,t){e.openElements.hasInButtonScope(i.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&gt.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,b.HTML)}function Ol(e,t){e.openElements.hasInButtonScope(i.P)&&e._closePElement(),e._insertElement(t,b.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function Dl(e,t){let r=e.openElements.tmplCount>0;(!e.formElement||r)&&(e.openElements.hasInButtonScope(i.P)&&e._closePElement(),e._insertElement(t,b.HTML),r||(e.formElement=e.openElements.current))}function Bl(e,t){e.framesetOk=!1;let r=t.tagID;for(let n=e.openElements.stackTop;n>=0;n--){let s=e.openElements.tagIDs[n];if(r===i.LI&&s===i.LI||(r===i.DD||r===i.DT)&&(s===i.DD||s===i.DT)){e.openElements.generateImpliedEndTagsWithExclusion(s),e.openElements.popUntilTagNamePopped(s);break}if(s!==i.ADDRESS&&s!==i.DIV&&s!==i.P&&e._isSpecialElement(e.openElements.items[n],s))break}e.openElements.hasInButtonScope(i.P)&&e._closePElement(),e._insertElement(t,b.HTML)}function kl(e,t){e.openElements.hasInButtonScope(i.P)&&e._closePElement(),e._insertElement(t,b.HTML),e.tokenizer.state=J.PLAINTEXT}function vl(e,t){e.openElements.hasInScope(i.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(i.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,b.HTML),e.framesetOk=!1}function Pl(e,t){let r=e.activeFormattingElements.getElementEntryInScopeWithTagName(E.A);r&&(En(e,t),e.openElements.remove(r.element),e.activeFormattingElements.removeEntry(r)),e._reconstructActiveFormattingElements(),e._insertElement(t,b.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function Ml(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,b.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function Ul(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(i.NOBR)&&(En(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,b.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function Fl(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,b.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function Hl(e,t){e.treeAdapter.getDocumentMode(e.document)!==$.QUIRKS&&e.openElements.hasInButtonScope(i.P)&&e._closePElement(),e._insertElement(t,b.HTML),e.framesetOk=!1,e.insertionMode=h.IN_TABLE}function oi(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,b.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function ci(e){let t=sr(e,Ee.TYPE);return t!=null&&t.toLowerCase()===sl}function Ql(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,b.HTML),ci(t)||(e.framesetOk=!1),t.ackSelfClosing=!0}function Yl(e,t){e._appendElement(t,b.HTML),t.ackSelfClosing=!0}function Gl(e,t){e.openElements.hasInButtonScope(i.P)&&e._closePElement(),e._appendElement(t,b.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function Wl(e,t){t.tagName=E.IMG,t.tagID=i.IMG,oi(e,t)}function Kl(e,t){e._insertElement(t,b.HTML),e.skipNextNewLine=!0,e.tokenizer.state=J.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=h.TEXT}function Jl(e,t){e.openElements.hasInButtonScope(i.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(t,J.RAWTEXT)}function jl(e,t){e.framesetOk=!1,e._switchToTextParsing(t,J.RAWTEXT)}function ri(e,t){e._switchToTextParsing(t,J.RAWTEXT)}function Vl(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,b.HTML),e.framesetOk=!1,e.insertionMode=e.insertionMode===h.IN_TABLE||e.insertionMode===h.IN_CAPTION||e.insertionMode===h.IN_TABLE_BODY||e.insertionMode===h.IN_ROW||e.insertionMode===h.IN_CELL?h.IN_SELECT_IN_TABLE:h.IN_SELECT}function Xl(e,t){e.openElements.currentTagId===i.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,b.HTML)}function Zl(e,t){e.openElements.hasInScope(i.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,b.HTML)}function $l(e,t){e.openElements.hasInScope(i.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(i.RTC),e._insertElement(t,b.HTML)}function ql(e,t){e._reconstructActiveFormattingElements(),pn(t),dr(t),t.selfClosing?e._appendElement(t,b.MATHML):e._insertElement(t,b.MATHML),t.ackSelfClosing=!0}function zl(e,t){e._reconstructActiveFormattingElements(),hn(t),dr(t),t.selfClosing?e._appendElement(t,b.SVG):e._insertElement(t,b.SVG),t.ackSelfClosing=!0}function ni(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,b.HTML)}function j(e,t){switch(t.tagID){case i.I:case i.S:case i.B:case i.U:case i.EM:case i.TT:case i.BIG:case i.CODE:case i.FONT:case i.SMALL:case i.STRIKE:case i.STRONG:{Ml(e,t);break}case i.A:{Pl(e,t);break}case i.H1:case i.H2:case i.H3:case i.H4:case i.H5:case i.H6:{Ll(e,t);break}case i.P:case i.DL:case i.OL:case i.UL:case i.DIV:case i.DIR:case i.NAV:case i.MAIN:case i.MENU:case i.ASIDE:case i.CENTER:case i.FIGURE:case i.FOOTER:case i.HEADER:case i.HGROUP:case i.DIALOG:case i.DETAILS:case i.ADDRESS:case i.ARTICLE:case i.SEARCH:case i.SECTION:case i.SUMMARY:case i.FIELDSET:case i.BLOCKQUOTE:case i.FIGCAPTION:{Rl(e,t);break}case i.LI:case i.DD:case i.DT:{Bl(e,t);break}case i.BR:case i.IMG:case i.WBR:case i.AREA:case i.EMBED:case i.KEYGEN:{oi(e,t);break}case i.HR:{Gl(e,t);break}case i.RB:case i.RTC:{Zl(e,t);break}case i.RT:case i.RP:{$l(e,t);break}case i.PRE:case i.LISTING:{Ol(e,t);break}case i.XMP:{Jl(e,t);break}case i.SVG:{zl(e,t);break}case i.HTML:{Nl(e,t);break}case i.BASE:case i.LINK:case i.META:case i.STYLE:case i.TITLE:case i.SCRIPT:case i.BGSOUND:case i.BASEFONT:case i.TEMPLATE:{pe(e,t);break}case i.BODY:{Sl(e,t);break}case i.FORM:{Dl(e,t);break}case i.NOBR:{Ul(e,t);break}case i.MATH:{ql(e,t);break}case i.TABLE:{Hl(e,t);break}case i.INPUT:{Ql(e,t);break}case i.PARAM:case i.TRACK:case i.SOURCE:{Yl(e,t);break}case i.IMAGE:{Wl(e,t);break}case i.BUTTON:{vl(e,t);break}case i.APPLET:case i.OBJECT:case i.MARQUEE:{Fl(e,t);break}case i.IFRAME:{jl(e,t);break}case i.SELECT:{Vl(e,t);break}case i.OPTION:case i.OPTGROUP:{Xl(e,t);break}case i.NOEMBED:case i.NOFRAMES:{ri(e,t);break}case i.FRAMESET:{_l(e,t);break}case i.TEXTAREA:{Kl(e,t);break}case i.NOSCRIPT:{e.options.scriptingEnabled?ri(e,t):ni(e,t);break}case i.PLAINTEXT:{kl(e,t);break}case i.COL:case i.TH:case i.TD:case i.TR:case i.HEAD:case i.FRAME:case i.TBODY:case i.TFOOT:case i.THEAD:case i.CAPTION:case i.COLGROUP:break;default:ni(e,t)}}function ed(e,t){if(e.openElements.hasInScope(i.BODY)&&(e.insertionMode=h.AFTER_BODY,e.options.sourceCodeLocationInfo)){let r=e.openElements.tryPeekProperlyNestedBodyElement();r&&e._setEndLocation(r,t)}}function td(e,t){e.openElements.hasInScope(i.BODY)&&(e.insertionMode=h.AFTER_BODY,Ei(e,t))}function rd(e,t){let r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r))}function nd(e){let t=e.openElements.tmplCount>0,{formElement:r}=e;t||(e.formElement=null),(r||t)&&e.openElements.hasInScope(i.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(i.FORM):r&&e.openElements.remove(r))}function sd(e){e.openElements.hasInButtonScope(i.P)||e._insertFakeElement(E.P,i.P),e._closePElement()}function id(e){e.openElements.hasInListItemScope(i.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(i.LI),e.openElements.popUntilTagNamePopped(i.LI))}function ad(e,t){let r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilTagNamePopped(r))}function od(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}function cd(e,t){let r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r),e.activeFormattingElements.clearToLastMarker())}function ld(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(E.BR,i.BR),e.openElements.pop(),e.framesetOk=!1}function li(e,t){let r=t.tagName,n=t.tagID;for(let s=e.openElements.stackTop;s>0;s--){let a=e.openElements.items[s],c=e.openElements.tagIDs[s];if(n===c&&(n!==i.UNKNOWN||e.treeAdapter.getTagName(a)===r)){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.stackTop>=s&&e.openElements.shortenToLength(s);break}if(e._isSpecialElement(a,c))break}}function mr(e,t){switch(t.tagID){case i.A:case i.B:case i.I:case i.S:case i.U:case i.EM:case i.TT:case i.BIG:case i.CODE:case i.FONT:case i.NOBR:case i.SMALL:case i.STRIKE:case i.STRONG:{En(e,t);break}case i.P:{sd(e);break}case i.DL:case i.UL:case i.OL:case i.DIR:case i.DIV:case i.NAV:case i.PRE:case i.MAIN:case i.MENU:case i.ASIDE:case i.BUTTON:case i.CENTER:case i.FIGURE:case i.FOOTER:case i.HEADER:case i.HGROUP:case i.DIALOG:case i.ADDRESS:case i.ARTICLE:case i.DETAILS:case i.SEARCH:case i.SECTION:case i.SUMMARY:case i.LISTING:case i.FIELDSET:case i.BLOCKQUOTE:case i.FIGCAPTION:{rd(e,t);break}case i.LI:{id(e);break}case i.DD:case i.DT:{ad(e,t);break}case i.H1:case i.H2:case i.H3:case i.H4:case i.H5:case i.H6:{od(e);break}case i.BR:{ld(e);break}case i.BODY:{ed(e,t);break}case i.HTML:{td(e,t);break}case i.FORM:{nd(e);break}case i.APPLET:case i.OBJECT:case i.MARQUEE:{cd(e,t);break}case i.TEMPLATE:{Pe(e,t);break}default:li(e,t)}}function di(e,t){e.tmplInsertionModeStack.length>0?fi(e,t):Tn(e,t)}function dd(e,t){var r;t.tagID===i.SCRIPT&&((r=e.scriptHandler)===null||r===void 0||r.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode}function ud(e,t){e._err(t,T.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t)}function mn(e,t){if(e.openElements.currentTagId!==void 0&&si.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=h.IN_TABLE_TEXT,t.type){case O.CHARACTER:{Ai(e,t);break}case O.WHITESPACE_CHARACTER:{ui(e,t);break}}else _t(e,t)}function Ad(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,b.HTML),e.insertionMode=h.IN_CAPTION}function pd(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,b.HTML),e.insertionMode=h.IN_COLUMN_GROUP}function hd(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(E.COLGROUP,i.COLGROUP),e.insertionMode=h.IN_COLUMN_GROUP,bn(e,t)}function md(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,b.HTML),e.insertionMode=h.IN_TABLE_BODY}function gd(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(E.TBODY,i.TBODY),e.insertionMode=h.IN_TABLE_BODY,gr(e,t)}function fd(e,t){e.openElements.hasInTableScope(i.TABLE)&&(e.openElements.popUntilTagNamePopped(i.TABLE),e._resetInsertionMode(),e._processStartTag(t))}function Ed(e,t){ci(t)?e._appendElement(t,b.HTML):_t(e,t),t.ackSelfClosing=!0}function Td(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,b.HTML),e.formElement=e.openElements.current,e.openElements.pop())}function Ze(e,t){switch(t.tagID){case i.TD:case i.TH:case i.TR:{gd(e,t);break}case i.STYLE:case i.SCRIPT:case i.TEMPLATE:{pe(e,t);break}case i.COL:{hd(e,t);break}case i.FORM:{Td(e,t);break}case i.TABLE:{fd(e,t);break}case i.TBODY:case i.TFOOT:case i.THEAD:{md(e,t);break}case i.INPUT:{Ed(e,t);break}case i.CAPTION:{Ad(e,t);break}case i.COLGROUP:{pd(e,t);break}default:_t(e,t)}}function St(e,t){switch(t.tagID){case i.TABLE:{e.openElements.hasInTableScope(i.TABLE)&&(e.openElements.popUntilTagNamePopped(i.TABLE),e._resetInsertionMode());break}case i.TEMPLATE:{Pe(e,t);break}case i.BODY:case i.CAPTION:case i.COL:case i.COLGROUP:case i.HTML:case i.TBODY:case i.TD:case i.TFOOT:case i.TH:case i.THEAD:case i.TR:break;default:_t(e,t)}}function _t(e,t){let r=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,hr(e,t),e.fosterParentingEnabled=r}function ui(e,t){e.pendingCharacterTokens.push(t)}function Ai(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=!0}function bt(e,t){let r=0;if(e.hasNonWhitespacePendingCharacterToken)for(;r<e.pendingCharacterTokens.length;r++)_t(e,e.pendingCharacterTokens[r]);else for(;r<e.pendingCharacterTokens.length;r++)e._insertCharacters(e.pendingCharacterTokens[r]);e.insertionMode=e.originalInsertionMode,e._processToken(t)}var pi=new Set([i.CAPTION,i.COL,i.COLGROUP,i.TBODY,i.TD,i.TFOOT,i.TH,i.THEAD,i.TR]);function bd(e,t){let r=t.tagID;pi.has(r)?e.openElements.hasInTableScope(i.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(i.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=h.IN_TABLE,Ze(e,t)):j(e,t)}function Cd(e,t){let r=t.tagID;switch(r){case i.CAPTION:case i.TABLE:{e.openElements.hasInTableScope(i.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(i.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=h.IN_TABLE,r===i.TABLE&&St(e,t));break}case i.BODY:case i.COL:case i.COLGROUP:case i.HTML:case i.TBODY:case i.TD:case i.TFOOT:case i.TH:case i.THEAD:case i.TR:break;default:mr(e,t)}}function bn(e,t){switch(t.tagID){case i.HTML:{j(e,t);break}case i.COL:{e._appendElement(t,b.HTML),t.ackSelfClosing=!0;break}case i.TEMPLATE:{pe(e,t);break}default:Ar(e,t)}}function Id(e,t){switch(t.tagID){case i.COLGROUP:{e.openElements.currentTagId===i.COLGROUP&&(e.openElements.pop(),e.insertionMode=h.IN_TABLE);break}case i.TEMPLATE:{Pe(e,t);break}case i.COL:break;default:Ar(e,t)}}function Ar(e,t){e.openElements.currentTagId===i.COLGROUP&&(e.openElements.pop(),e.insertionMode=h.IN_TABLE,e._processToken(t))}function gr(e,t){switch(t.tagID){case i.TR:{e.openElements.clearBackToTableBodyContext(),e._insertElement(t,b.HTML),e.insertionMode=h.IN_ROW;break}case i.TH:case i.TD:{e.openElements.clearBackToTableBodyContext(),e._insertFakeElement(E.TR,i.TR),e.insertionMode=h.IN_ROW,fr(e,t);break}case i.CAPTION:case i.COL:case i.COLGROUP:case i.TBODY:case i.TFOOT:case i.THEAD:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=h.IN_TABLE,Ze(e,t));break}default:Ze(e,t)}}function fn(e,t){let r=t.tagID;switch(t.tagID){case i.TBODY:case i.TFOOT:case i.THEAD:{e.openElements.hasInTableScope(r)&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=h.IN_TABLE);break}case i.TABLE:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=h.IN_TABLE,St(e,t));break}case i.BODY:case i.CAPTION:case i.COL:case i.COLGROUP:case i.HTML:case i.TD:case i.TH:case i.TR:break;default:St(e,t)}}function fr(e,t){switch(t.tagID){case i.TH:case i.TD:{e.openElements.clearBackToTableRowContext(),e._insertElement(t,b.HTML),e.insertionMode=h.IN_CELL,e.activeFormattingElements.insertMarker();break}case i.CAPTION:case i.COL:case i.COLGROUP:case i.TBODY:case i.TFOOT:case i.THEAD:case i.TR:{e.openElements.hasInTableScope(i.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=h.IN_TABLE_BODY,gr(e,t));break}default:Ze(e,t)}}function hi(e,t){switch(t.tagID){case i.TR:{e.openElements.hasInTableScope(i.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=h.IN_TABLE_BODY);break}case i.TABLE:{e.openElements.hasInTableScope(i.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=h.IN_TABLE_BODY,fn(e,t));break}case i.TBODY:case i.TFOOT:case i.THEAD:{(e.openElements.hasInTableScope(t.tagID)||e.openElements.hasInTableScope(i.TR))&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=h.IN_TABLE_BODY,fn(e,t));break}case i.BODY:case i.CAPTION:case i.COL:case i.COLGROUP:case i.HTML:case i.TD:case i.TH:break;default:St(e,t)}}function yd(e,t){let r=t.tagID;pi.has(r)?(e.openElements.hasInTableScope(i.TD)||e.openElements.hasInTableScope(i.TH))&&(e._closeTableCell(),fr(e,t)):j(e,t)}function wd(e,t){let r=t.tagID;switch(r){case i.TD:case i.TH:{e.openElements.hasInTableScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=h.IN_ROW);break}case i.TABLE:case i.TBODY:case i.TFOOT:case i.THEAD:case i.TR:{e.openElements.hasInTableScope(r)&&(e._closeTableCell(),hi(e,t));break}case i.BODY:case i.CAPTION:case i.COL:case i.COLGROUP:case i.HTML:break;default:mr(e,t)}}function mi(e,t){switch(t.tagID){case i.HTML:{j(e,t);break}case i.OPTION:{e.openElements.currentTagId===i.OPTION&&e.openElements.pop(),e._insertElement(t,b.HTML);break}case i.OPTGROUP:{e.openElements.currentTagId===i.OPTION&&e.openElements.pop(),e.openElements.currentTagId===i.OPTGROUP&&e.openElements.pop(),e._insertElement(t,b.HTML);break}case i.HR:{e.openElements.currentTagId===i.OPTION&&e.openElements.pop(),e.openElements.currentTagId===i.OPTGROUP&&e.openElements.pop(),e._appendElement(t,b.HTML),t.ackSelfClosing=!0;break}case i.INPUT:case i.KEYGEN:case i.TEXTAREA:case i.SELECT:{e.openElements.hasInSelectScope(i.SELECT)&&(e.openElements.popUntilTagNamePopped(i.SELECT),e._resetInsertionMode(),t.tagID!==i.SELECT&&e._processStartTag(t));break}case i.SCRIPT:case i.TEMPLATE:{pe(e,t);break}default:}}function gi(e,t){switch(t.tagID){case i.OPTGROUP:{e.openElements.stackTop>0&&e.openElements.currentTagId===i.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===i.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===i.OPTGROUP&&e.openElements.pop();break}case i.OPTION:{e.openElements.currentTagId===i.OPTION&&e.openElements.pop();break}case i.SELECT:{e.openElements.hasInSelectScope(i.SELECT)&&(e.openElements.popUntilTagNamePopped(i.SELECT),e._resetInsertionMode());break}case i.TEMPLATE:{Pe(e,t);break}default:}}function xd(e,t){let r=t.tagID;r===i.CAPTION||r===i.TABLE||r===i.TBODY||r===i.TFOOT||r===i.THEAD||r===i.TR||r===i.TD||r===i.TH?(e.openElements.popUntilTagNamePopped(i.SELECT),e._resetInsertionMode(),e._processStartTag(t)):mi(e,t)}function Nd(e,t){let r=t.tagID;r===i.CAPTION||r===i.TABLE||r===i.TBODY||r===i.TFOOT||r===i.THEAD||r===i.TR||r===i.TD||r===i.TH?e.openElements.hasInTableScope(r)&&(e.openElements.popUntilTagNamePopped(i.SELECT),e._resetInsertionMode(),e.onEndTag(t)):gi(e,t)}function Sd(e,t){switch(t.tagID){case i.BASE:case i.BASEFONT:case i.BGSOUND:case i.LINK:case i.META:case i.NOFRAMES:case i.SCRIPT:case i.STYLE:case i.TEMPLATE:case i.TITLE:{pe(e,t);break}case i.CAPTION:case i.COLGROUP:case i.TBODY:case i.TFOOT:case i.THEAD:{e.tmplInsertionModeStack[0]=h.IN_TABLE,e.insertionMode=h.IN_TABLE,Ze(e,t);break}case i.COL:{e.tmplInsertionModeStack[0]=h.IN_COLUMN_GROUP,e.insertionMode=h.IN_COLUMN_GROUP,bn(e,t);break}case i.TR:{e.tmplInsertionModeStack[0]=h.IN_TABLE_BODY,e.insertionMode=h.IN_TABLE_BODY,gr(e,t);break}case i.TD:case i.TH:{e.tmplInsertionModeStack[0]=h.IN_ROW,e.insertionMode=h.IN_ROW,fr(e,t);break}default:e.tmplInsertionModeStack[0]=h.IN_BODY,e.insertionMode=h.IN_BODY,j(e,t)}}function _d(e,t){t.tagID===i.TEMPLATE&&Pe(e,t)}function fi(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(i.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):Tn(e,t)}function Rd(e,t){t.tagID===i.HTML?j(e,t):pr(e,t)}function Ei(e,t){var r;if(t.tagID===i.HTML){if(e.fragmentContext||(e.insertionMode=h.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===i.HTML){e._setEndLocation(e.openElements.items[0],t);let n=e.openElements.items[1];n&&!(!((r=e.treeAdapter.getNodeSourceCodeLocation(n))===null||r===void 0)&&r.endTag)&&e._setEndLocation(n,t)}}else pr(e,t)}function pr(e,t){e.insertionMode=h.IN_BODY,hr(e,t)}function Ld(e,t){switch(t.tagID){case i.HTML:{j(e,t);break}case i.FRAMESET:{e._insertElement(t,b.HTML);break}case i.FRAME:{e._appendElement(t,b.HTML),t.ackSelfClosing=!0;break}case i.NOFRAMES:{pe(e,t);break}default:}}function Od(e,t){t.tagID===i.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==i.FRAMESET&&(e.insertionMode=h.AFTER_FRAMESET))}function Dd(e,t){switch(t.tagID){case i.HTML:{j(e,t);break}case i.NOFRAMES:{pe(e,t);break}default:}}function Bd(e,t){t.tagID===i.HTML&&(e.insertionMode=h.AFTER_AFTER_FRAMESET)}function kd(e,t){t.tagID===i.HTML?j(e,t):ur(e,t)}function ur(e,t){e.insertionMode=h.IN_BODY,hr(e,t)}function vd(e,t){switch(t.tagID){case i.HTML:{j(e,t);break}case i.NOFRAMES:{pe(e,t);break}default:}}function Pd(e,t){t.chars=k,e._insertCharacters(t)}function Md(e,t){e._insertCharacters(t),e.framesetOk=!1}function Ti(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==b.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop()}function Ud(e,t){if($s(t))Ti(e),e._startTagOutsideForeignContent(t);else{let r=e._getAdjustedCurrentElement(),n=e.treeAdapter.getNamespaceURI(r);n===b.MATHML?pn(t):n===b.SVG&&(qs(t),hn(t)),dr(t),t.selfClosing?e._appendElement(t,n):e._insertElement(t,n),t.ackSelfClosing=!0}}function Fd(e,t){if(t.tagID===i.P||t.tagID===i.BR){Ti(e),e._endTagOutsideForeignContent(t);return}for(let r=e.openElements.stackTop;r>0;r--){let n=e.openElements.items[r];if(e.treeAdapter.getNamespaceURI(n)===b.HTML){e._endTagOutsideForeignContent(t);break}let s=e.treeAdapter.getTagName(n);if(s.toLowerCase()===t.tagName){t.tagName=s,e.openElements.shortenToLength(r);break}}}var Rm=new Set([E.AREA,E.BASE,E.BASEFONT,E.BGSOUND,E.BR,E.COL,E.EMBED,E.FRAME,E.HR,E.IMG,E.INPUT,E.KEYGEN,E.LINK,E.META,E.PARAM,E.SOURCE,E.TRACK,E.WBR]);function bi(e,t){return Nt.parse(e,t)}function oe(e,t){return e.attrs?.find(r=>r.name.toLowerCase()===t.toLowerCase())?.value??null}function Cn(e){return e.nodeName==="#text"?e.value??"":(e.childNodes??[]).map(Cn).join("")}function Ie(e){return e?.replace(/\s+/g," ").trim()||null}function In(e){let t=bi(e),r={title:null,description:null,canonical:null,robots:null,lang:null,h1Count:0,openGraph:{title:null,description:null,image:null},twitter:{card:null,title:null,description:null,image:null},hreflang:[],jsonLd:[],images:[],links:[],wordCount:0,visibleText:""},n=[];function s(a,c=!1){let l=a.tagName?.toLowerCase(),o=c||l==="script"||l==="style"||l==="noscript"||l==="template";if(a.nodeName==="#text"&&!o){let d=Ie(a.value);d&&n.push(d)}if(l==="html"&&r.lang===null&&(r.lang=Ie(oe(a,"lang"))),l==="title"&&r.title===null&&(r.title=Ie(Cn(a))),l==="h1"&&(r.h1Count+=1),l==="meta"){let d=oe(a,"name")?.toLowerCase(),p=oe(a,"property")?.toLowerCase(),m=Ie(oe(a,"content"));d==="description"&&r.description===null?r.description=m:d==="robots"&&r.robots===null?r.robots=m:p==="og:title"&&r.openGraph.title===null?r.openGraph.title=m:p==="og:description"&&r.openGraph.description===null?r.openGraph.description=m:p==="og:image"&&r.openGraph.image===null?r.openGraph.image=m:d==="twitter:card"&&r.twitter.card===null?r.twitter.card=m:d==="twitter:title"&&r.twitter.title===null?r.twitter.title=m:d==="twitter:description"&&r.twitter.description===null?r.twitter.description=m:d==="twitter:image"&&r.twitter.image===null&&(r.twitter.image=m)}if(l==="link"){let d=oe(a,"rel")?.toLowerCase().split(/\s+/).filter(Boolean)??[];if(d.includes("canonical")&&r.canonical===null&&(r.canonical=Ie(oe(a,"href"))),d.includes("alternate")){let p=Ie(oe(a,"hreflang")),m=Ie(oe(a,"href"));p&&m&&r.hreflang.push({lang:p,url:m})}}if(l==="a"){let d=oe(a,"href");d&&r.links.push(d)}if(l==="img"&&r.images.push({src:Ie(oe(a,"src")),alt:oe(a,"alt")}),l==="script"&&oe(a,"type")?.toLowerCase()==="application/ld+json"){let d=Cn(a).trim();if(d)try{r.jsonLd.push({valid:!0,value:JSON.parse(d)})}catch(p){r.jsonLd.push({valid:!1,error:p instanceof Error?p.message:String(p)})}}for(let d of a.childNodes??[])s(d,o)}return s(t),r.visibleText=n.join(" "),r.wordCount=r.visibleText?r.visibleText.split(/\s+/u).length:0,r}function Hd(e,t){return{url:e,finalUrl:null,status:null,contentType:null,blockedByRobots:!1,error:null,title:null,description:null,canonical:null,canonicalRaw:null,robots:null,xRobotsTag:null,lang:null,h1Count:0,openGraph:{title:null,description:null,image:null},twitter:{card:null,title:null,description:null,image:null},hreflang:[],jsonLd:[],images:[],links:[],internalLinks:[],externalLinks:[],wordCount:0,contentHash:null,depth:t,redirectChain:[],responseBytes:0}}async function $e(e,t){await e.onEvent?.(t)}async function Qd(e,t,r,n,s){let a=Hd(e,t);if(n.respectRobots&&!es(e,s))return a.blockedByRobots=!0,a;try{if(n.renderer){n.signal?.throwIfAborted(),await n.requestGate(e);let x=await n.renderer.render({url:e,timeout:n.timeout,maxResponseBytes:n.maxResponseBytes,userAgent:n.userAgent,...n.signal?{signal:n.signal}:{}});return Yd(a,x,e,r,n.includeQuery)}let{response:c,redirectChain:l}=await Le(e,{headers:{accept:"text/html,application/xhtml+xml;q=0.9,*/*;q=0.1","user-agent":n.userAgent}},{...n,gate:n.requestGate,onEvent:n.onEvent}),o=c.headers.get("content-type")??"",d=o.includes("text/html")||o.includes("application/xhtml+xml"),p=Q(c.url,void 0,{includeQuery:n.includeQuery});if(a.finalUrl=p,a.status=c.status,a.contentType=o||null,a.xRobotsTag=c.headers.get("x-robots-tag"),a.redirectChain=l,!d)return await c.body?.cancel(),a;let{text:m,bytes:f}=await Oe(c,n.maxResponseBytes),g=In(m),y=p??e,w=g.canonical?Q(g.canonical,y,{includeQuery:!0}):null,I=[...new Set(g.links.map(x=>Q(x,y,{includeQuery:n.includeQuery})).filter(x=>!!x))].sort(),_=g.hreflang.map(x=>({lang:x.lang,url:Q(x.url,y,{includeQuery:!0})}));return Object.assign(a,{...g,visibleText:void 0,canonical:w,canonicalRaw:g.canonical,links:I,internalLinks:I.filter(x=>le(x,r)),externalLinks:I.filter(x=>!le(x,r)),hreflang:_,contentHash:g.visibleText?Ci("sha256").update(g.visibleText.toLowerCase()).digest("hex"):null,responseBytes:f}),a}catch(c){if(n.signal?.aborted)throw c;return a.error=c instanceof Error?c.message:String(c),c instanceof me&&(a.redirectChain=c.redirectChain),a}}function Yd(e,t,r,n,s){let a=t.headers["content-type"]??"text/html",c=Q(t.finalUrl,void 0,{includeQuery:s});if(e.finalUrl=c,e.status=t.status,e.contentType=a,e.xRobotsTag=t.headers["x-robots-tag"]??null,e.redirectChain=t.redirectChain,!a.includes("text/html")&&!a.includes("application/xhtml+xml"))return e;let l=In(t.html),o=c??r,d=l.canonical?Q(l.canonical,o,{includeQuery:!0}):null,p=[...new Set(l.links.map(m=>Q(m,o,{includeQuery:s})).filter(m=>!!m))].sort();return Object.assign(e,{...l,visibleText:void 0,canonical:d,canonicalRaw:l.canonical,links:p,internalLinks:p.filter(m=>le(m,n)),externalLinks:p.filter(m=>!le(m,n)),hreflang:l.hreflang.map(m=>({lang:m.lang,url:Q(m.url,o,{includeQuery:!0})})),contentHash:l.visibleText?Ci("sha256").update(l.visibleText.toLowerCase()).digest("hex"):null,responseBytes:t.responseBytes}),e}function Gd(e={}){let t=e.requestDelay??e.delay??100,r=e.requestGate;return{...e,maxPages:e.maxPages??100,concurrency:Math.max(1,e.concurrency??5),timeout:e.timeout??1e4,includeQuery:e.includeQuery??!1,respectRobots:e.respectRobots??!0,sitemap:e.sitemap??null,sitemapData:e.sitemapData??null,userAgent:e.userAgent??xe,requestDelay:t,requestGate:r?async n=>r(n):He(t),maxRedirects:e.maxRedirects??10,maxResponseBytes:e.maxResponseBytes??5*1024*1024,retries:e.retries??2,fetch:e.fetch??globalThis.fetch,logger:e.logger??Ht}}async function Wd(e,t){let r=[],n=Array.from({length:e},async()=>{for(;;){let s=await t();if(s===null)return;r.push(s)}});return await Promise.all(n),r}async function Ii(e,t={}){let r=Date.now(),n=Gd(t),s=Q(e,void 0,{includeQuery:n.includeQuery});if(!s)throw new Error(`invalid start URL: ${e}`);let a=new URL(s).origin;await $e(n,{type:"scan-start",url:s,total:n.maxPages});let c=t.robots??await Qt(s,n),l=n.sitemapData;if(!l&&n.sitemap)try{l=await zt(n.sitemap,{...n,maxUrls:t.sitemapMaxUrls??5e4,siteOrigin:a})}catch(L){l={url:n.sitemap,urls:[],sitemapCount:0,truncated:!1,error:L instanceof Error?L.message:String(L)},n.logger.warn(`Could not load sitemap ${n.sitemap}: ${l.error}`)}let d=[...new Set([s,...l?.urls??[]])].slice(0,n.maxPages).map(L=>({url:L,depth:0})),p=new Set(d.map(L=>L.url)),m=new Map((t.cachedPages??[]).map(L=>[L.url,L])),f=new Map,g=Math.max(n.maxPages*10,n.maxPages),y=!1;for(;d.length>0&&f.size<n.maxPages&&!n.signal?.aborted;){d.sort((F,P)=>F.url.localeCompare(P.url));let L=n.maxPages-f.size,D=d.slice(0,L);d.length>D.length&&(y=!0);let S=0,v=await Wd(n.concurrency,async()=>{if(n.signal?.aborted||S>=D.length)return null;let F=D[S++];if(!F)return null;let P=m.get(F.url);if(!P)try{P=await Qd(F.url,F.depth,a,n,c)}catch(B){if(n.signal?.aborted)return null;throw B}return f.set(F.url,P),m.has(F.url)||(await t.onBatch?.([P]),await n.storage?.saveCheckpoint?.(s,P),await $e(n,{type:"checkpoint",page:P,completed:f.size,total:n.maxPages})),t.onProgress?.(f.size,n.maxPages),await $e(n,{type:"page",completed:f.size,total:n.maxPages,page:P}),await $e(n,{type:"progress",completed:f.size,total:n.maxPages,page:P}),{item:F,page:P}}),Y=new Map;for(let{item:F,page:P}of v.sort((B,q)=>B.item.url.localeCompare(q.item.url))){let B=P.internalLinks?.length?P.internalLinks:(P.links??[]).filter(q=>le(q,a));for(let q of[...B].sort())p.size>=g||p.has(q)||!$t(q)||(p.add(q),Y.set(q,{url:q,depth:F.depth+1}))}d=[...Y.values()]}let w=[...f.values()].sort((L,D)=>L.url.localeCompare(D.url)),I=!!n.signal?.aborted,_=I||y||d.length>0||(l?l.urls.length>w.length:!1)||(l?.truncated??!1),x={startUrl:s,pages:w,robots:c,sitemap:l,truncated:_,partial:I,durationMs:Date.now()-r,options:n};return x.snapshot=be(x),I||await n.storage?.removeCheckpoint?.(s),I?await $e(n,{type:"cancelled",completed:w.length,total:n.maxPages,partial:!0}):await $e(n,{type:"complete",completed:w.length,total:n.maxPages}),x}function yi(e){return"planVersion"in e}function Kd(e,t){return{schemaVersion:2,pageSchemaVersion:1,siteUrl:e.startUrl,sitemapUrl:e.sitemap?.url??null,includeQuery:e.config.includeQuery,respectRobots:e.config.respectRobots,timeout:e.config.timeout,maxRedirects:e.config.maxRedirects,maxResponseBytes:e.config.maxResponseBytes,userAgent:e.userAgent,...t?{rendererId:t}:{}}}function Jd(e){return!e.error&&(e.status===null||e.status<500)}async function qe(e,t={}){let r=null,n=null,s;try{s=yi(e)?e:await de(e,{...t,async onEvent(g){g.type==="robots"&&(r=g.robots),g.type==="sitemap"&&(n=g.sitemap),await t.onEvent?.(g)}})}catch(g){if(yi(e)||!t.signal?.aborted)throw g;let y=fe(e),w=Q(y.url,void 0,{includeQuery:y.includeQuery});if(!w)throw new Error(`invalid start URL: ${y.url}`,{cause:g});let I=r??{url:new URL("/robots.txt",w).href,status:null,sha256:null,error:"Scan cancelled before robots.txt planning completed",denyAll:!1},_=be({startUrl:w,pages:[],robots:I,sitemap:n,options:y,partial:!0,truncated:!0});return await t.checkpointStore?.flush?.(),await t.onEvent?.({type:"cancelled",completed:0,total:y.maxPages,partial:!0}),{snapshot:_,startUrl:w,pages:[],robots:I,sitemap:n,truncated:!0,partial:!0,durationMs:0,options:y}}if(s.planVersion!==1)throw new Error(`unsupported scan plan version: ${String(s.planVersion)}`);let a=t.limit??s.config.maxPages;if(!Number.isInteger(a)||a<=0)throw new Error("scan limit must be a positive integer");let c={...s.config,maxPages:a},l=He(c.delay),o=Kd(s,t.renderer?.id),d=t.checkpointStore&&t.resume!==!1?await t.checkpointStore.load(o):null,p=[...t.cachedPages??[],...d?.pages.filter(Jd)??[]],m=[...new Map(p.map(g=>[g.url,g])).values()];m.length>0&&await t.onEvent?.({type:"resume",completed:m.length,total:a});let f=await Ii(s.startUrl,{...t,maxPages:a,concurrency:c.concurrency,requestDelay:c.delay,timeout:c.timeout,respectRobots:c.respectRobots,includeQuery:c.includeQuery,maxRedirects:c.maxRedirects,maxResponseBytes:c.maxResponseBytes,enabledRules:c.enabledRules,severityOverrides:c.severityOverrides,suppressions:c.suppressions,regressionBudgets:c.regressionBudgets,report:c.report,requestGate:l,robots:s.robots,sitemap:s.sitemap?.url??null,sitemapData:s.sitemap,userAgent:s.userAgent,cachedPages:m,async onBatch(g){for(let y of g)await t.checkpointStore?.append(o,y);await t.onBatch?.(g)}});return await t.checkpointStore?.flush?.(),!f.partial&&!t.retainCheckpoint&&await t.checkpointStore?.clear(o),f}function wi(e){return/^\d+$/.test(e)?":id":/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e)?":uuid":/^\d{4}-\d{2}-\d{2}$/.test(e)?":date":/^[0-9a-f]{16,}$/i.test(e)?":hash":null}function jd(e){return e.flatMap(t=>{try{let r=new URL(t.url);return[{issue:t,url:r,segments:r.pathname.split("/").filter(Boolean)}]}catch{return[]}})}function Vd(e){let t=new Map;for(let r of e)for(let n=1;n<r.segments.length;n+=1){if(wi(r.segments[n]))continue;let s=r.segments.slice(0,n).join("/"),a=`${r.url.origin}|${r.segments.length}|${n}|${s}`,c=t.get(a)??new Set;c.add(r.segments[n]),t.set(a,c)}return new Set([...t].filter(([,r])=>r.size>=2).map(([r])=>r))}function Xd(e,t){let r=e.segments.map((n,s)=>{let a=wi(n);if(a)return a;let c=e.segments.slice(0,s).join("/"),l=`${e.url.origin}|${e.segments.length}|${s}|${c}`;return s>0&&t.has(l)?":slug":n});return`/${r.join("/")}${e.url.pathname.endsWith("/")&&r.length>0?"/":""}`}function xi(e){return Er(e.map(t=>({url:t,ruleId:"",severity:"info",owner:"seo"}))).map(({origin:t,template:r,urls:n})=>({origin:t,template:r,urls:n}))}function Er(e){let t=jd(e),r=Vd(t),n=new Map;for(let s of t){let a=Xd(s,r),c=`${s.url.origin}${a}`,l=n.get(c)??{origin:s.url.origin,template:a,issues:[],urls:new Set};l.issues.push(s.issue),l.urls.add(s.issue.url),n.set(c,l)}return[...n.values()].map(s=>{let a={error:0,warning:0,info:0},c={},l={};for(let d of s.issues)a[d.severity]+=1,c[d.ruleId]=(c[d.ruleId]??0)+1,l[d.owner]=(l[d.owner]??0)+1;let o=[...s.urls].sort();return{origin:s.origin,template:s.template,issueCount:s.issues.length,affectedPages:o.length,severities:a,rules:c,owners:l,urls:o,representativeUrls:o.slice(0,3)}}).sort((s,a)=>a.issueCount-s.issueCount||s.template.localeCompare(a.template)||s.origin.localeCompare(a.origin))}function Ni(e){let t=e.replaceAll("-"," ");return t.charAt(0).toUpperCase()+t.slice(1)}var Zd={"page-unreachable":"\u041D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430","http-error":"HTTP-\u043F\u043E\u043C\u0438\u043B\u043A\u0430",noindex:"Noindex","x-robots-noindex":"Noindex \u0443 X-Robots-Tag","robots-blocked":"\u0417\u0430\u0431\u043B\u043E\u043A\u043E\u0432\u0430\u043D\u043E robots.txt","missing-canonical":"\u0412\u0456\u0434\u0441\u0443\u0442\u043D\u0456\u0439 canonical","invalid-canonical":"\u041D\u0435\u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0438\u0439 canonical","cross-domain-canonical":"Canonical \u043D\u0430 \u0456\u043D\u0448\u043E\u043C\u0443 \u0434\u043E\u043C\u0435\u043D\u0456","canonical-target-error":"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u0446\u0456\u043B\u0456 canonical","redirect-loop":"\u0426\u0438\u043A\u043B \u043F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u044C","long-redirect-chain":"\u0414\u043E\u0432\u0433\u0438\u0439 \u043B\u0430\u043D\u0446\u044E\u0436\u043E\u043A \u043F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u044C","sitemap-unavailable":"Sitemap \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439","noindex-in-sitemap":"Noindex \u0443 sitemap","redirect-in-sitemap":"\u041F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043D\u044F \u0443 sitemap","missing-title":"\u0412\u0456\u0434\u0441\u0443\u0442\u043D\u0456\u0439 title","duplicate-title":"\u0414\u0443\u0431\u043B\u044C\u043E\u0432\u0430\u043D\u0438\u0439 title","title-length":"\u0414\u043E\u0432\u0436\u0438\u043D\u0430 title","missing-description":"\u0412\u0456\u0434\u0441\u0443\u0442\u043D\u0456\u0439 description","duplicate-description":"\u0414\u0443\u0431\u043B\u044C\u043E\u0432\u0430\u043D\u0438\u0439 description","description-length":"\u0414\u043E\u0432\u0436\u0438\u043D\u0430 description","missing-h1":"\u0412\u0456\u0434\u0441\u0443\u0442\u043D\u0456\u0439 H1","broken-internal-link":"\u041D\u0435\u0440\u043E\u0431\u043E\u0447\u0435 \u0432\u043D\u0443\u0442\u0440\u0456\u0448\u043D\u0454 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F","orphan-sitemap-page":"\u0406\u0437\u043E\u043B\u044C\u043E\u0432\u0430\u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430 sitemap","crawlable-not-in-sitemap":"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u0432\u0456\u0434\u0441\u0443\u0442\u043D\u044F \u0443 sitemap","invalid-hreflang":"\u041D\u0435\u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0438\u0439 hreflang","malformed-json-ld":"\u041D\u0435\u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0438\u0439 JSON-LD","http-on-https-site":"HTTP URL \u043D\u0430 HTTPS-\u0441\u0430\u0439\u0442\u0456","invalid-language":"\u041D\u0435\u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0435 \u043E\u0433\u043E\u043B\u043E\u0448\u0435\u043D\u043D\u044F \u043C\u043E\u0432\u0438","duplicate-content":"\u0414\u0443\u0431\u043B\u044C\u043E\u0432\u0430\u043D\u0438\u0439 \u043A\u043E\u043D\u0442\u0435\u043D\u0442","multiple-h1":"\u041A\u0456\u043B\u044C\u043A\u0430 H1","missing-open-graph":"\u041D\u0435\u043F\u043E\u0432\u043D\u0456 Open Graph metadata","missing-twitter-metadata":"\u041D\u0435\u043F\u043E\u0432\u043D\u0456 Twitter metadata","image-missing-alt":"\u0417\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0431\u0435\u0437 alt","low-word-count":"\u041C\u0430\u043B\u043E \u0442\u0435\u043A\u0441\u0442\u0443","robots-changed":"robots.txt \u0437\u043C\u0456\u043D\u0435\u043D\u043E","page-missing":"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u043D\u0435 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u043E","status-regression":"\u0420\u0435\u0433\u0440\u0435\u0441\u0456\u044F HTTP-\u0441\u0442\u0430\u0442\u0443\u0441\u0443","new-noindex":"\u041D\u043E\u0432\u0438\u0439 noindex","title-removed":"Title \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E","title-changed":"Title \u0437\u043C\u0456\u043D\u0435\u043D\u043E","description-removed":"Description \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E","canonical-removed":"Canonical \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E","canonical-changed":"Canonical \u0437\u043C\u0456\u043D\u0435\u043D\u043E","h1-removed":"H1 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E","redirect-changed":"\u041F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043D\u044F \u0437\u043C\u0456\u043D\u0435\u043D\u043E","sitemap-url-count-drop":"\u0417\u043C\u0435\u043D\u0448\u0435\u043D\u043D\u044F URL \u0443 sitemap"},$d={"page-unreachable":"\u0412\u0456\u0434\u043D\u043E\u0432\u0456\u0442\u044C \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u0430\u0431\u043E \u043F\u0440\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u043D\u0430 \u043D\u0435\u0457.","http-error":"\u041F\u043E\u0432\u0435\u0440\u043D\u0456\u0442\u044C \u0443\u0441\u043F\u0456\u0448\u043D\u0443 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u044C \u0430\u0431\u043E \u0441\u0432\u0456\u0434\u043E\u043C\u0435 \u043F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043D\u044F.",noindex:"\u041F\u0440\u0438\u0431\u0435\u0440\u0456\u0442\u044C noindex, \u044F\u043A\u0449\u043E \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043C\u0430\u0454 \u0437\u2019\u044F\u0432\u043B\u044F\u0442\u0438\u0441\u044F \u0432 \u043F\u043E\u0448\u0443\u043A\u0443.","x-robots-noindex":"\u041F\u0440\u0438\u0431\u0435\u0440\u0456\u0442\u044C noindex \u0456\u0437 X-Robots-Tag, \u044F\u043A\u0449\u043E \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043C\u0430\u0454 \u0456\u043D\u0434\u0435\u043A\u0441\u0443\u0432\u0430\u0442\u0438\u0441\u044F.","robots-blocked":"\u0414\u043E\u0437\u0432\u043E\u043B\u044C\u0442\u0435 URL \u0443 robots.txt, \u044F\u043A\u0449\u043E \u0439\u043E\u0433\u043E \u043F\u043E\u0442\u0440\u0456\u0431\u043D\u043E \u0441\u043A\u0430\u043D\u0443\u0432\u0430\u0442\u0438.","missing-canonical":"\u0412\u043A\u0430\u0436\u0456\u0442\u044C \u0431\u0430\u0436\u0430\u043D\u0438\u0439 canonical URL, \u044F\u043A\u0449\u043E \u043C\u043E\u0436\u043B\u0438\u0432\u0456 \u0434\u0443\u0431\u043B\u0456\u043A\u0430\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0438.","invalid-canonical":"\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u0439\u0442\u0435 \u0430\u0431\u0441\u043E\u043B\u044E\u0442\u043D\u0438\u0439 \u0430\u0431\u043E \u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0438\u0439 \u0432\u0456\u0434\u043D\u043E\u0441\u043D\u0438\u0439 HTTP(S) canonical URL.","cross-domain-canonical":"\u041F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u044C\u0442\u0435 \u0437\u043E\u0432\u043D\u0456\u0448\u043D\u0456\u0439 canonical \u0430\u0431\u043E \u0432\u043A\u0430\u0436\u0456\u0442\u044C \u043F\u043E\u0442\u0440\u0456\u0431\u043D\u0438\u0439 URL \u0446\u044C\u043E\u0433\u043E \u0441\u0430\u0439\u0442\u0443.","canonical-target-error":"\u0421\u043F\u0440\u044F\u043C\u0443\u0439\u0442\u0435 canonical \u043D\u0430 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439 URL, \u0434\u043E\u0437\u0432\u043E\u043B\u0435\u043D\u0438\u0439 \u0434\u043B\u044F \u0456\u043D\u0434\u0435\u043A\u0441\u0430\u0446\u0456\u0457.","redirect-loop":"\u041F\u0440\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u0446\u0438\u043A\u043B\u0456\u0447\u043D\u0438\u0439 \u043C\u0430\u0440\u0448\u0440\u0443\u0442 \u043F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u044C.","long-redirect-chain":"\u041F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u044F\u0439\u0442\u0435 \u043E\u0434\u0440\u0430\u0437\u0443 \u043D\u0430 \u043A\u0456\u043D\u0446\u0435\u0432\u0443 \u0430\u0434\u0440\u0435\u0441\u0443.","sitemap-unavailable":"\u0412\u0456\u0434\u043D\u043E\u0432\u0456\u0442\u044C \u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0438\u0439 \u0456 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439 XML sitemap.","noindex-in-sitemap":"\u041F\u0440\u0438\u0431\u0435\u0440\u0456\u0442\u044C URL \u0456\u0437 sitemap \u0430\u0431\u043E \u0434\u043E\u0437\u0432\u043E\u043B\u044C\u0442\u0435 \u0439\u043E\u0433\u043E \u0456\u043D\u0434\u0435\u043A\u0441\u0430\u0446\u0456\u044E.","redirect-in-sitemap":"\u0417\u0430\u043C\u0456\u043D\u0456\u0442\u044C URL \u0443 sitemap \u043D\u0430 \u0439\u043E\u0433\u043E \u043A\u0456\u043D\u0446\u0435\u0432\u0443 canonical-\u0430\u0434\u0440\u0435\u0441\u0443.","missing-title":"\u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u0443\u043D\u0456\u043A\u0430\u043B\u044C\u043D\u0438\u0439 \u043E\u043F\u0438\u0441\u043E\u0432\u0438\u0439 HTML title.","duplicate-title":"\u041D\u0430\u043F\u0438\u0448\u0456\u0442\u044C title, \u044F\u043A\u0438\u0439 \u0443\u043D\u0456\u043A\u0430\u043B\u044C\u043D\u043E \u043E\u043F\u0438\u0441\u0443\u0454 \u0446\u044E \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443.","title-length":"\u0417\u0440\u043E\u0431\u0456\u0442\u044C title \u0441\u0442\u0438\u0441\u043B\u0438\u043C \u0456 \u0437\u043C\u0456\u0441\u0442\u043E\u0432\u043D\u0438\u043C, \u0437\u0430\u0437\u0432\u0438\u0447\u0430\u0439 10\u201360 \u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432.","missing-description":"\u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u043A\u043E\u0440\u0438\u0441\u043D\u0438\u0439 meta description.","duplicate-description":"\u041D\u0430\u043F\u0438\u0448\u0456\u0442\u044C \u0443\u043D\u0456\u043A\u0430\u043B\u044C\u043D\u0438\u0439 meta description \u0434\u043B\u044F \u0446\u0456\u0454\u0457 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438.","description-length":"\u0417\u0440\u043E\u0431\u0456\u0442\u044C description \u043A\u043E\u0440\u0438\u0441\u043D\u0438\u043C \u0456 \u0437\u0430\u0437\u0432\u0438\u0447\u0430\u0439 \u0434\u043E\u0432\u0436\u0438\u043D\u043E\u044E 50\u2013160 \u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432.","missing-h1":"\u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u043E\u0434\u0438\u043D \u0437\u0440\u043E\u0437\u0443\u043C\u0456\u043B\u0438\u0439 \u043E\u0441\u043D\u043E\u0432\u043D\u0438\u0439 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A.","broken-internal-link":"\u041E\u043D\u043E\u0432\u0456\u0442\u044C \u0430\u0431\u043E \u043F\u0440\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u0432\u043D\u0443\u0442\u0440\u0456\u0448\u043D\u0454 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u0447\u0438 \u0432\u0456\u0434\u043D\u043E\u0432\u0456\u0442\u044C \u0439\u043E\u0433\u043E \u0446\u0456\u043B\u044C.","orphan-sitemap-page":"\u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u0437\u043C\u0456\u0441\u0442\u043E\u0432\u043D\u0456 \u0432\u043D\u0443\u0442\u0440\u0456\u0448\u043D\u0456 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u0456\u0437 sitemap.","crawlable-not-in-sitemap":"\u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u0434\u043E sitemap \u0430\u0431\u043E \u0441\u0432\u0456\u0434\u043E\u043C\u043E \u0432\u0438\u043A\u043B\u044E\u0447\u0456\u0442\u044C \u0457\u0457.","invalid-hreflang":"\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u0439\u0442\u0435 \u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0456 \u043C\u043E\u0432\u043D\u0456 \u0442\u0435\u0433\u0438 \u0442\u0430 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0456 HTTP(S) alternate URL.","malformed-json-ld":"\u0412\u0438\u043F\u0440\u0430\u0432\u0442\u0435 JSON-\u0441\u0438\u043D\u0442\u0430\u043A\u0441\u0438\u0441 \u0443 \u0431\u043B\u043E\u0446\u0456 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u043E\u0432\u0430\u043D\u0438\u0445 \u0434\u0430\u043D\u0438\u0445.","http-on-https-site":"\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 HTTPS \u0434\u043B\u044F \u0432\u043D\u0443\u0442\u0440\u0456\u0448\u043D\u0456\u0445 URL \u0456 metadata.","invalid-language":"\u0412\u043A\u0430\u0436\u0456\u0442\u044C \u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0438\u0439 \u043C\u043E\u0432\u043D\u0438\u0439 \u0442\u0435\u0433 BCP 47 \u0432 \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456 html.","duplicate-content":"\u041E\u0431\u2019\u0454\u0434\u043D\u0430\u0439\u0442\u0435 \u0434\u0443\u0431\u043B\u044C\u043E\u0432\u0430\u043D\u0456 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \u0430\u0431\u043E \u0437\u0440\u043E\u0431\u0456\u0442\u044C \u0457\u0445\u043D\u0456\u0439 \u043E\u0441\u043D\u043E\u0432\u043D\u0438\u0439 \u043A\u043E\u043D\u0442\u0435\u043D\u0442 \u0432\u0456\u0434\u043C\u0456\u043D\u043D\u0438\u043C.","multiple-h1":"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435, \u0447\u0438 \u043E\u0434\u0438\u043D \u043E\u0441\u043D\u043E\u0432\u043D\u0438\u0439 H1 \u043D\u0435 \u0437\u0440\u043E\u0431\u0438\u0442\u044C \u0456\u0454\u0440\u0430\u0440\u0445\u0456\u044E \u0437\u0440\u043E\u0437\u0443\u043C\u0456\u043B\u0456\u0448\u043E\u044E.","missing-open-graph":"\u0414\u043E\u0434\u0430\u0439\u0442\u0435 Open Graph title, description \u0442\u0430 image \u0434\u043B\u044F \u043F\u043E\u0448\u0438\u0440\u0435\u043D\u043D\u044F \u0432 \u0441\u043E\u0446\u043C\u0435\u0440\u0435\u0436\u0430\u0445.","missing-twitter-metadata":"\u0414\u043E\u0434\u0430\u0439\u0442\u0435 Twitter card metadata, \u044F\u043A\u0449\u043E \u0432\u0430\u0436\u043B\u0438\u0432\u0456 \u0441\u043E\u0446\u0456\u0430\u043B\u044C\u043D\u0456 \u043F\u0440\u0435\u0432\u2019\u044E.","image-missing-alt":"\u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u0437\u043C\u0456\u0441\u0442\u043E\u0432\u043D\u0438\u0439 alt \u0430\u0431\u043E \u043F\u043E\u0440\u043E\u0436\u043D\u0456\u0439 alt \u0434\u043B\u044F \u0434\u0435\u043A\u043E\u0440\u0430\u0442\u0438\u0432\u043D\u0438\u0445 \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u044C.","low-word-count":"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435, \u0447\u0438 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u0434\u043E\u0441\u0442\u0430\u0442\u043D\u044C\u043E \u043A\u043E\u0440\u0438\u0441\u043D\u043E\u0433\u043E \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0433\u043E \u043A\u043E\u043D\u0442\u0435\u043D\u0442\u0443.","robots-changed":"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u0437\u043C\u0456\u043D\u0443 robots.txt \u0456 \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u044C\u0442\u0435, \u0449\u043E \u0434\u043E\u0441\u0442\u0443\u043F \u0434\u043B\u044F \u0441\u043A\u0430\u043D\u0443\u0432\u0430\u043D\u043D\u044F \u0437\u043C\u0456\u043D\u0435\u043D\u043E \u0441\u0432\u0456\u0434\u043E\u043C\u043E.","page-missing":"\u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u0434\u043E \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0438 \u0430\u0431\u043E \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u044C\u0442\u0435, \u0449\u043E \u0457\u0457 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E \u0441\u0432\u0456\u0434\u043E\u043C\u043E.","status-regression":"\u0412\u0456\u0434\u043D\u043E\u0432\u0456\u0442\u044C \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u044E \u0443\u0441\u043F\u0456\u0448\u043D\u0443 HTTP-\u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u044C.","new-noindex":"\u041F\u0440\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u043D\u043E\u0432\u0438\u0439 noindex, \u044F\u043A\u0449\u043E \u0439\u043E\u0433\u043E \u043D\u0435 \u0434\u043E\u0434\u0430\u043D\u043E \u043D\u0430\u0432\u043C\u0438\u0441\u043D\u043E.","title-removed":"\u0412\u0456\u0434\u043D\u043E\u0432\u0456\u0442\u044C \u0437\u043C\u0456\u0441\u0442\u043E\u0432\u043D\u0438\u0439 title.","title-changed":"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u0442\u0430 \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u044C\u0442\u0435 \u0437\u043C\u0456\u043D\u0435\u043D\u0438\u0439 title.","description-removed":"\u0412\u0456\u0434\u043D\u043E\u0432\u0456\u0442\u044C \u043A\u043E\u0440\u0438\u0441\u043D\u0438\u0439 meta description.","canonical-removed":"\u0412\u0456\u0434\u043D\u043E\u0432\u0456\u0442\u044C canonical.","canonical-changed":"\u041F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u044C\u0442\u0435, \u0449\u043E \u043D\u043E\u0432\u0430 \u0446\u0456\u043B\u044C canonical \u0441\u0432\u0456\u0434\u043E\u043C\u0430 \u0439 \u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0430.","h1-removed":"\u0412\u0456\u0434\u043D\u043E\u0432\u0456\u0442\u044C \u0437\u0440\u043E\u0437\u0443\u043C\u0456\u043B\u0438\u0439 \u043E\u0441\u043D\u043E\u0432\u043D\u0438\u0439 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A.","redirect-changed":"\u041F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u044C\u0442\u0435, \u0449\u043E \u043D\u043E\u0432\u0430 \u0446\u0456\u043B\u044C \u043F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043D\u044F \u0441\u0432\u0456\u0434\u043E\u043C\u0430.","sitemap-url-count-drop":"\u0414\u043E\u0441\u043B\u0456\u0434\u0456\u0442\u044C \u0432\u0442\u0440\u0430\u0442\u0443 URL \u0443 sitemap \u0456 \u043F\u043E\u0432\u0435\u0440\u043D\u0456\u0442\u044C \u043F\u0440\u043E\u043F\u0443\u0449\u0435\u043D\u0456 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \u0434\u043B\u044F \u0456\u043D\u0434\u0435\u043A\u0441\u0430\u0446\u0456\u0457."};function qd(e){return e.evidence?.actual??e.after}function zd(e,t){let r=qd(e);switch(t){case"page-unreachable":case"redirect-loop":return`\u0417\u0430\u043F\u0438\u0442 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0432\u0441\u044F \u043F\u043E\u043C\u0438\u043B\u043A\u043E\u044E: ${String(r??"\u043D\u0435\u0432\u0456\u0434\u043E\u043C\u0430 \u043F\u043E\u043C\u0438\u043B\u043A\u0430")}`;case"http-error":return`\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043F\u043E\u0432\u0435\u0440\u043D\u0443\u043B\u0430 HTTP ${String(r??"\u043D\u0435\u0432\u0456\u0434\u043E\u043C\u043E")}`;case"noindex":return"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u0434\u0438\u0440\u0435\u043A\u0442\u0438\u0432\u0443 noindex \u0443 meta";case"x-robots-noindex":return"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043C\u0456\u0441\u0442\u0438\u0442\u044C noindex \u0443 X-Robots-Tag";case"robots-blocked":return e.before===!1?"\u0422\u0435\u043F\u0435\u0440 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u0437\u0430\u0431\u043B\u043E\u043A\u043E\u0432\u0430\u043D\u043E \u0447\u0435\u0440\u0435\u0437 robots.txt":"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u0437\u0430\u0431\u043B\u043E\u043A\u043E\u0432\u0430\u043D\u043E \u0447\u0435\u0440\u0435\u0437 robots.txt";case"missing-canonical":return"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043D\u0435 \u043C\u0456\u0441\u0442\u0438\u0442\u044C canonical URL";case"invalid-canonical":return"Canonical URL \u043D\u0435\u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0438\u0439";case"cross-domain-canonical":return"Canonical \u0432\u043A\u0430\u0437\u0443\u0454 \u043D\u0430 \u0456\u043D\u0448\u0438\u0439 \u0434\u043E\u043C\u0435\u043D";case"canonical-target-error":return"\u0426\u0456\u043B\u044C canonical \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430";case"long-redirect-chain":return`\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0454 ${String(r??0)} \u043F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u044C`;case"sitemap-unavailable":return"\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u043D\u0430\u043B\u0430\u0448\u0442\u043E\u0432\u0430\u043D\u0438\u0439 sitemap";case"noindex-in-sitemap":return"URL \u0456\u0437 sitemap \u043F\u043E\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 noindex";case"redirect-in-sitemap":return"URL \u0456\u0437 sitemap \u043F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u044F\u0454\u0442\u044C\u0441\u044F";case"missing-title":return"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043D\u0435 \u043C\u0430\u0454 title";case"duplicate-title":return"\u041A\u0456\u043B\u044C\u043A\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A \u043C\u0430\u044E\u0442\u044C \u043E\u0434\u043D\u0430\u043A\u043E\u0432\u0438\u0439 title";case"title-length":return`\u0414\u043E\u0432\u0436\u0438\u043D\u0430 title \u2014 ${String(r??0)} \u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432`;case"missing-description":return"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043D\u0435 \u043C\u0430\u0454 meta description";case"duplicate-description":return"\u041A\u0456\u043B\u044C\u043A\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A \u043C\u0430\u044E\u0442\u044C \u043E\u0434\u043D\u0430\u043A\u043E\u0432\u0438\u0439 meta description";case"description-length":return`\u0414\u043E\u0432\u0436\u0438\u043D\u0430 description \u2014 ${String(r??0)} \u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432`;case"missing-h1":return"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043D\u0435 \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430 H1";case"multiple-h1":return`\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043C\u0456\u0441\u0442\u0438\u0442\u044C H1 \u0443 \u043A\u0456\u043B\u044C\u043A\u043E\u0441\u0442\u0456: ${String(r??0)}`;case"broken-internal-link":return"\u0412\u043D\u0443\u0442\u0440\u0456\u0448\u043D\u0454 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u0432\u0435\u0434\u0435 \u043D\u0430 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0443 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443";case"orphan-sitemap-page":return"\u041D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u0456\u0437 sitemap \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u0432\u043D\u0443\u0442\u0440\u0456\u0448\u043D\u0456\u0445 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u044C";case"crawlable-not-in-sitemap":return"\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0434\u043B\u044F \u0441\u043A\u0430\u043D\u0443\u0432\u0430\u043D\u043D\u044F \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u0432\u0456\u0434\u0441\u0443\u0442\u043D\u044F \u0443 sitemap";case"invalid-hreflang":return"\u041E\u0433\u043E\u043B\u043E\u0448\u0435\u043D\u043D\u044F hreflang \u043D\u0435\u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0435";case"malformed-json-ld":return"\u0411\u043B\u043E\u043A JSON-LD \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u043D\u0435\u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0438\u0439 JSON";case"http-on-https-site":return"HTTPS-\u0441\u0430\u0439\u0442 \u043F\u043E\u0441\u0438\u043B\u0430\u0454\u0442\u044C\u0441\u044F \u043D\u0430 \u0432\u043D\u0443\u0442\u0440\u0456\u0448\u043D\u0456\u0439 HTTP URL";case"invalid-language":return"\u041E\u0433\u043E\u043B\u043E\u0448\u0435\u043D\u043D\u044F \u043C\u043E\u0432\u0438 HTML \u043D\u0435\u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0435";case"duplicate-content":return"\u041E\u0441\u043D\u043E\u0432\u043D\u0438\u0439 \u0442\u0435\u043A\u0441\u0442 \u0454 \u0442\u043E\u0447\u043D\u0438\u043C \u0434\u0443\u0431\u043B\u0435\u043C \u0456\u043D\u0448\u043E\u0457 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438";case"missing-open-graph":return"Open Graph metadata \u043D\u0435\u043F\u043E\u0432\u043D\u0456";case"missing-twitter-metadata":return"Twitter card metadata \u043D\u0435\u043F\u043E\u0432\u043D\u0456";case"image-missing-alt":return`${Array.isArray(r)?r.length:String(r??0)} \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u044C \u043D\u0435 \u043C\u0430\u044E\u0442\u044C \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 alt`;case"low-word-count":return`\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u043F\u0440\u0438\u0431\u043B\u0438\u0437\u043D\u043E ${String(r??0)} \u0432\u0438\u0434\u0438\u043C\u0438\u0445 \u0441\u043B\u0456\u0432`;case"robots-changed":return"\u0412\u043C\u0456\u0441\u0442 robots.txt \u0437\u043C\u0456\u043D\u0438\u0432\u0441\u044F";case"page-missing":return"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u043D\u0435 \u0431\u0443\u043B\u043E \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u043E";case"status-regression":return`HTTP-\u0441\u0442\u0430\u0442\u0443\u0441 \u043F\u043E\u0433\u0456\u0440\u0448\u0438\u0432\u0441\u044F \u0437 ${String(e.before??"\u043D\u0435\u0432\u0456\u0434\u043E\u043C\u043E")} \u0434\u043E ${String(e.after??"\u0432\u0456\u0434\u0441\u0443\u0442\u043D\u0456\u0439")}`;case"new-noindex":return"\u0422\u0435\u043F\u0435\u0440 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u0434\u0438\u0440\u0435\u043A\u0442\u0438\u0432\u0443 noindex";case"title-removed":return"Title \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E";case"title-changed":return"Title \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \u0437\u043C\u0456\u043D\u0435\u043D\u043E";case"description-removed":return"Meta description \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E";case"canonical-removed":return"Canonical URL \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E";case"canonical-changed":return"Canonical URL \u0437\u043C\u0456\u043D\u0435\u043D\u043E";case"h1-removed":return"\u0423\u0441\u0456 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0438 H1 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E";case"redirect-changed":return"\u041A\u0456\u043D\u0446\u0435\u0432\u0438\u0439 URL \u043F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043D\u044F \u0437\u043C\u0456\u043D\u0435\u043D\u043E";case"sitemap-url-count-drop":return`\u041A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C URL \u0443 sitemap \u0437\u043C\u0435\u043D\u0448\u0438\u043B\u0430\u0441\u044F \u043D\u0430 ${String((Number(e.before)||0)-(Number(e.after)||0))}`;default:return e.message??"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0443 \u0442\u0430 \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u044C\u0442\u0435 \u043E\u0447\u0456\u043A\u0443\u0432\u0430\u043D\u0443 \u043F\u043E\u0432\u0435\u0434\u0456\u043D\u043A\u0443."}}function Si(e,t){let r=e.remediation??"Review the finding and confirm the intended behavior.";return{en:{rule:Ni(t),message:e.message??"",remediation:r},uk:{rule:Zd[t]??Ni(t),message:zd(e,t),remediation:$d[t]??"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0443 \u0442\u0430 \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u044C\u0442\u0435 \u043E\u0447\u0456\u043A\u0443\u0432\u0430\u043D\u0443 \u043F\u043E\u0432\u0435\u0434\u0456\u043D\u043A\u0443."}}}var _i={en:{language:"Language",titles:{partial:"Partial SEO scan report",check:"SEO regression report",scan:"SEO baseline audit"},generated:"Generated",engine:"Engine",rules:"Rules",issueLifecycle:"Issue lifecycle",partialTitle:"Partial results.",partialMessage:"This report contains the pages saved so far. Run the same scan command again to resume without requesting them twice.",incompleteTitle:"Incomplete comparison.",incompleteMessage:"Regressions found on checked pages are shown, but unchecked pages are not marked missing or resolved.",previewTitle:"Preview deployment comparison.",production:"Production",preview:"Preview",cards:{pages:"Pages checked",error:"Errors",warning:"Warnings",info:"Info",affected:"Affected pages"},analytics:{title:"Issue statistics",hint:"Select a chart item to filter the issue table.",severity:"By severity",topRules:"Most frequent checks",owners:"By owner",lifecycle:"By lifecycle",templates:"Affected page templates",total:"Total issues",noData:"No issues to chart.",filterBy:"Filter by"},history:{title:"Local scan history",hint:"Issue trends from snapshots stored on this device.",chartLabel:"Issue trend across runs.",runs:"Runs",pages:"Latest pages",newIssues:"New issues",resolvedIssues:"Resolved issues",sitemapUrls:"Sitemap URLs",maxDepth:"Maximum crawl depth"},tabs:{current:"Current / all",new:"New",ongoing:"Ongoing",resolved:"Resolved",unchanged:"Unchanged"},filters:{search:"URL or text",searchPlaceholder:"URL, check, or message",severity:"Severity",rule:"Check",template:"Page template",owner:"Owner",rows:"Rows"},all:{severity:"All severities",rule:"All checks",template:"All templates",owner:"All owners"},severities:{error:"Error",warning:"Warning",info:"Info"},owners:{seo:"SEO",content:"Content",developer:"Developer"},rows:{100:"100 per page",250:"250 per page",500:"500 per page"},guide:{error:"Errors",errorText:"need attention first.",warning:"Warnings",warningText:"are important improvements.",info:"Info",infoText:"is useful context.",score:"No opaque SEO score is used."},exportCsv:"Export CSV",previous:"Previous",next:"Next",table:{severity:"Severity",lifecycle:"Lifecycle",ruleOwner:"Check / owner",page:"Page",finding:"What was found",change:"Change",before:"Before",evidence:"Evidence / after",remediation:"Remediation",fingerprint:"Fingerprint"},empty:{cleanTitle:"No SEO issues found",cleanMessage:"The scanned pages passed all current checks.",filteredTitle:"No matching issues",filteredMessage:"Try a different lifecycle tab or clear the selected filters.",clear:"Clear filters"},lifecycle:{current:"Current",new:"New",ongoing:"Ongoing",resolved:"Resolved",unchanged:"Unchanged"},notPresent:"Not present",page:"Page",of:"of",issue:"issue",issues:"issues",docs:"docs",footer:"Generated locally. No report data was uploaded."},uk:{language:"\u041C\u043E\u0432\u0430",titles:{partial:"\u0417\u0432\u0456\u0442 \u0447\u0430\u0441\u0442\u043A\u043E\u0432\u043E\u0433\u043E SEO-\u0441\u043A\u0430\u043D\u0443\u0432\u0430\u043D\u043D\u044F",check:"\u0417\u0432\u0456\u0442 \u043F\u0440\u043E SEO-\u0440\u0435\u0433\u0440\u0435\u0441\u0456\u0457",scan:"\u0411\u0430\u0437\u043E\u0432\u0438\u0439 SEO-\u0430\u0443\u0434\u0438\u0442"},generated:"\u0421\u0442\u0432\u043E\u0440\u0435\u043D\u043E",engine:"\u0420\u0443\u0448\u0456\u0439",rules:"\u041F\u0440\u0430\u0432\u0438\u043B\u0430",issueLifecycle:"\u0421\u0442\u0430\u043D\u0438 \u043F\u0440\u043E\u0431\u043B\u0435\u043C",partialTitle:"\u0427\u0430\u0441\u0442\u043A\u043E\u0432\u0456 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0438.",partialMessage:"\u0417\u0432\u0456\u0442 \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u0443\u0436\u0435 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043D\u0456 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438. \u0417\u0430\u043F\u0443\u0441\u0442\u0456\u0442\u044C \u0442\u0443 \u0441\u0430\u043C\u0443 \u043A\u043E\u043C\u0430\u043D\u0434\u0443 \u0449\u0435 \u0440\u0430\u0437, \u0449\u043E\u0431 \u043F\u0440\u043E\u0434\u043E\u0432\u0436\u0438\u0442\u0438 \u0431\u0435\u0437 \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u0438\u0445 \u0437\u0430\u043F\u0438\u0442\u0456\u0432.",incompleteTitle:"\u041D\u0435\u043F\u043E\u0432\u043D\u0435 \u043F\u043E\u0440\u0456\u0432\u043D\u044F\u043D\u043D\u044F.",incompleteMessage:"\u041F\u043E\u043A\u0430\u0437\u0430\u043D\u043E \u0440\u0435\u0433\u0440\u0435\u0441\u0456\u0457 \u043D\u0430 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u0438\u0445 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430\u0445, \u0430\u043B\u0435 \u043D\u0435\u043F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u0456 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \u043D\u0435 \u043F\u043E\u0437\u043D\u0430\u0447\u0435\u043D\u043E \u044F\u043A \u0432\u0456\u0434\u0441\u0443\u0442\u043D\u0456 \u0447\u0438 \u0432\u0438\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0456.",previewTitle:"\u041F\u043E\u0440\u0456\u0432\u043D\u044F\u043D\u043D\u044F production \u0456 preview.",production:"Production",preview:"Preview",cards:{pages:"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u043E \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A",error:"\u041F\u043E\u043C\u0438\u043B\u043A\u0438",warning:"\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u0436\u0435\u043D\u043D\u044F",info:"\u0406\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u044F",affected:"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \u0437 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0430\u043C\u0438"},analytics:{title:"\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0430 \u043F\u0440\u043E\u0431\u043B\u0435\u043C",hint:"\u041E\u0431\u0435\u0440\u0456\u0442\u044C \u0435\u043B\u0435\u043C\u0435\u043D\u0442 \u0433\u0440\u0430\u0444\u0456\u043A\u0430, \u0449\u043E\u0431 \u0432\u0456\u0434\u0444\u0456\u043B\u044C\u0442\u0440\u0443\u0432\u0430\u0442\u0438 \u0442\u0430\u0431\u043B\u0438\u0446\u044E \u043F\u0440\u043E\u0431\u043B\u0435\u043C.",severity:"\u0417\u0430 \u0432\u0430\u0436\u043B\u0438\u0432\u0456\u0441\u0442\u044E",topRules:"\u041D\u0430\u0439\u0447\u0430\u0441\u0442\u0456\u0448\u0456 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0438",owners:"\u0417\u0430 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u043B\u044C\u043D\u0438\u043C\u0438",lifecycle:"\u0417\u0430 \u0441\u0442\u0430\u043D\u043E\u043C",templates:"\u0428\u0430\u0431\u043B\u043E\u043D\u0438 \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A \u0456\u0437 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0430\u043C\u0438",total:"\u0423\u0441\u044C\u043E\u0433\u043E \u043F\u0440\u043E\u0431\u043B\u0435\u043C",noData:"\u041D\u0435\u043C\u0430\u0454 \u043F\u0440\u043E\u0431\u043B\u0435\u043C \u0434\u043B\u044F \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F.",filterBy:"\u0424\u0456\u043B\u044C\u0442\u0440\u0443\u0432\u0430\u0442\u0438 \u0437\u0430"},history:{title:"\u041B\u043E\u043A\u0430\u043B\u044C\u043D\u0430 \u0456\u0441\u0442\u043E\u0440\u0456\u044F \u0441\u043A\u0430\u043D\u0443\u0432\u0430\u043D\u044C",hint:"\u0414\u0438\u043D\u0430\u043C\u0456\u043A\u0430 \u043F\u0440\u043E\u0431\u043B\u0435\u043C \u0437\u0456 snapshot-\u0444\u0430\u0439\u043B\u0456\u0432, \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043D\u0438\u0445 \u043D\u0430 \u0446\u044C\u043E\u043C\u0443 \u043F\u0440\u0438\u0441\u0442\u0440\u043E\u0457.",chartLabel:"\u0414\u0438\u043D\u0430\u043C\u0456\u043A\u0430 \u043F\u0440\u043E\u0431\u043B\u0435\u043C \u0437\u0430 \u0437\u0430\u043F\u0443\u0441\u043A\u0430\u043C\u0438.",runs:"\u0417\u0430\u043F\u0443\u0441\u043A\u0438",pages:"\u0421\u0442\u043E\u0440\u0456\u043D\u043E\u043A \u0432\u043E\u0441\u0442\u0430\u043D\u043D\u0454",newIssues:"\u041D\u043E\u0432\u0456 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0438",resolvedIssues:"\u0412\u0438\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0456 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0438",sitemapUrls:"URL \u0443 sitemap",maxDepth:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430 \u0433\u043B\u0438\u0431\u0438\u043D\u0430"},tabs:{current:"\u041F\u043E\u0442\u043E\u0447\u043D\u0456 / \u0443\u0441\u0456",new:"\u041D\u043E\u0432\u0456",ongoing:"\u0422\u0440\u0438\u0432\u0430\u044E\u0442\u044C",resolved:"\u0412\u0438\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0456",unchanged:"\u0411\u0435\u0437 \u0437\u043C\u0456\u043D"},filters:{search:"URL \u0430\u0431\u043E \u0442\u0435\u043A\u0441\u0442",searchPlaceholder:"URL, \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 \u0430\u0431\u043E \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F",severity:"\u0412\u0430\u0436\u043B\u0438\u0432\u0456\u0441\u0442\u044C",rule:"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430",template:"\u0428\u0430\u0431\u043B\u043E\u043D \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438",owner:"\u0412\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u043B\u044C\u043D\u0438\u0439",rows:"\u0420\u044F\u0434\u043A\u0438"},all:{severity:"\u0423\u0441\u0456 \u0440\u0456\u0432\u043D\u0456",rule:"\u0423\u0441\u0456 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0438",template:"\u0423\u0441\u0456 \u0448\u0430\u0431\u043B\u043E\u043D\u0438",owner:"\u0423\u0441\u0456 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u043B\u044C\u043D\u0456"},severities:{error:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430",warning:"\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u0436\u0435\u043D\u043D\u044F",info:"\u0406\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u044F"},owners:{seo:"SEO",content:"\u041A\u043E\u043D\u0442\u0435\u043D\u0442",developer:"\u0420\u043E\u0437\u0440\u043E\u0431\u043D\u0438\u043A"},rows:{100:"100 \u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443",250:"250 \u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443",500:"500 \u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443"},guide:{error:"\u041F\u043E\u043C\u0438\u043B\u043A\u0438",errorText:"\u043F\u043E\u0442\u0440\u0435\u0431\u0443\u044E\u0442\u044C \u043F\u0435\u0440\u0448\u043E\u0447\u0435\u0440\u0433\u043E\u0432\u043E\u0457 \u0443\u0432\u0430\u0433\u0438.",warning:"\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u0436\u0435\u043D\u043D\u044F",warningText:"\u043F\u043E\u0437\u043D\u0430\u0447\u0430\u044E\u0442\u044C \u0432\u0430\u0436\u043B\u0438\u0432\u0456 \u043F\u043E\u043A\u0440\u0430\u0449\u0435\u043D\u043D\u044F.",info:"\u0406\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u044F",infoText:"\u0434\u0430\u0454 \u043A\u043E\u0440\u0438\u0441\u043D\u0438\u0439 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442.",score:"\u041D\u0435\u043F\u0440\u043E\u0437\u043E\u0440\u0430 SEO-\u043E\u0446\u0456\u043D\u043A\u0430 \u043D\u0435 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0454\u0442\u044C\u0441\u044F."},exportCsv:"\u0415\u043A\u0441\u043F\u043E\u0440\u0442 CSV",previous:"\u041D\u0430\u0437\u0430\u0434",next:"\u0414\u0430\u043B\u0456",table:{severity:"\u0412\u0430\u0436\u043B\u0438\u0432\u0456\u0441\u0442\u044C",lifecycle:"\u0421\u0442\u0430\u043D",ruleOwner:"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 / \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u043B\u044C\u043D\u0438\u0439",page:"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430",finding:"\u0429\u043E \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E",change:"\u0417\u043C\u0456\u043D\u0430",before:"\u0411\u0443\u043B\u043E",evidence:"\u0414\u043E\u043A\u0430\u0437 / \u0441\u0442\u0430\u043B\u043E",remediation:"\u042F\u043A \u0432\u0438\u043F\u0440\u0430\u0432\u0438\u0442\u0438",fingerprint:"\u0412\u0456\u0434\u0431\u0438\u0442\u043E\u043A"},empty:{cleanTitle:"SEO-\u043F\u0440\u043E\u0431\u043B\u0435\u043C \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E",cleanMessage:"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u0456 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \u043F\u0440\u043E\u0439\u0448\u043B\u0438 \u0432\u0441\u0456 \u0430\u043A\u0442\u0438\u0432\u043D\u0456 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0438.",filteredTitle:"\u0417\u0431\u0456\u0433\u0456\u0432 \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E",filteredMessage:"\u041E\u0431\u0435\u0440\u0456\u0442\u044C \u0456\u043D\u0448\u0438\u0439 \u0441\u0442\u0430\u043D \u0430\u0431\u043E \u043E\u0447\u0438\u0441\u0442\u044C\u0442\u0435 \u0444\u0456\u043B\u044C\u0442\u0440\u0438.",clear:"\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0444\u0456\u043B\u044C\u0442\u0440\u0438"},lifecycle:{current:"\u041F\u043E\u0442\u043E\u0447\u043D\u0430",new:"\u041D\u043E\u0432\u0430",ongoing:"\u0422\u0440\u0438\u0432\u0430\u0454",resolved:"\u0412\u0438\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0430",unchanged:"\u0411\u0435\u0437 \u0437\u043C\u0456\u043D"},notPresent:"\u0412\u0456\u0434\u0441\u0443\u0442\u043D\u0454",page:"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430",of:"\u0437",issue:"\u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0430",issues:"\u043F\u0440\u043E\u0431\u043B\u0435\u043C",docs:"\u0434\u043E\u0432\u0456\u0434\u043A\u0430",footer:"\u0421\u0442\u0432\u043E\u0440\u0435\u043D\u043E \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u043E. \u0414\u0430\u043D\u0456 \u0437\u0432\u0456\u0442\u0443 \u043D\u0456\u043A\u0443\u0434\u0438 \u043D\u0435 \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0443\u0432\u0430\u043B\u0438\u0441\u044F."}};function Tr(e,t){try{let r=new URL(e,t);return r.protocol!=="http:"&&r.protocol!=="https:"?null:(r.hash="",r.href)}catch{return null}}function Ri(e){let t=new Map,r=new Map,n=new Map;for(let s of e){let a=Tr(s.url);a&&t.set(a,s),r.set(s.url,{incoming:[],broken:[],redirects:[]})}for(let s of e){let a=r.get(s.url),c=new Set(s.internalLinks.map(l=>Tr(l,s.finalUrl??s.url)));for(let l of c){if(!l||l===Tr(s.url)||l===Tr(s.finalUrl??s.url))continue;let o=t.get(l);if(!o)continue;let d=n.get(o.url)??new Set;d.add(s.url),n.set(o.url,d),!o.blockedByRobots&&(o.error||o.status!==null&&o.status>=400)&&a.broken.push(o.url),(o.redirectChain.length||o.finalUrl&&o.finalUrl!==o.url||o.status!==null&&o.status>=300&&o.status<400)&&a.redirects.push(o.url)}}for(let[s,a]of r)a.incoming=[...n.get(s)??[]].sort(),a.broken.sort(),a.redirects.sort();return r}var eu="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Crect width='64' height='64' rx='16' fill='%233157d5'/%3E%3Ccircle cx='27' cy='27' r='13' fill='none' stroke='white' stroke-width='6'/%3E%3Cpath d='m37 37 12 12' fill='none' stroke='white' stroke-linecap='round' stroke-width='6'/%3E%3Cpath d='m21 27 5 5 9-11' fill='none' stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='4'/%3E%3C/svg%3E";function ne(e){return String(e??"").replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#039;")}function tu(e){return JSON.stringify(e).replaceAll("<","\\u003c").replaceAll(">","\\u003e").replaceAll("&","\\u0026")}function ru(){return'<svg class="logo product-mark" viewBox="0 0 64 64" role="img" aria-label="SEO Crawl Audit logo"><rect width="64" height="64" rx="16" fill="var(--accent)"/><circle cx="27" cy="27" r="13" fill="none" stroke="#fff" stroke-width="6"/><path d="m37 37 12 12" fill="none" stroke="#fff" stroke-linecap="round" stroke-width="6"/><path d="m21 27 5 5 9-11" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="4"/></svg>'}function Rt(e,t="current"){let r=e.ruleId??e.rule??"unknown";return{fingerprint:e.fingerprint??"legacy",ruleId:r,rule:e.rule??e.ruleId??"unknown",severity:e.severity??"info",scope:e.scope??"page",url:e.url??"",message:e.message??"",evidence:e.evidence??{actual:e.after},owner:e.owner??"seo",remediation:e.remediation??"Review the finding and confirm the intended behavior.",documentationUrl:e.documentationUrl??"https://github.com/MelnixDev/seo-crawl-audit/blob/main/docs/rules.md",before:e.before,after:e.after,lifecycle:e.lifecycle??t,template:"",localized:Si(e,r)}}function yn(e,t){return e.reduce((r,n)=>{let s=String(n[t]);return r[s]=(r[s]??0)+1,r},{})}function nu(e){if(e.blockedByRobots)return"blocked";if(e.error||e.status!==null&&e.status>=400)return"error";if(e.status===null)return"unknown";if(e.redirectChain.length>0||e.finalUrl!==null&&e.finalUrl!==e.url||e.status>=300)return"redirect";if(!e.contentType)return"unknown";if(!/(?:text\/html|application\/xhtml\+xml)/i.test(e.contentType))return"non-html";let t=`${e.robots??""},${e.xRobotsTag??""}`.toLowerCase();return/(^|[:,\s])(?:noindex|none)($|[:,\s])/.test(t)?"noindex":"allowed"}function su(e,t,r){let n=[],s=new Map,a=m=>{if(m===null||m==="")return null;let f=s.get(m);if(f!==void 0)return f;let g=n.length;return n.push(m),s.set(m,g),g},c=new Map;r.forEach((m,f)=>{if(m.scope!=="page"||m.lifecycle==="resolved")return;let g=c.get(m.url)??{indexes:[],error:0,warning:0,info:0};g.indexes.push(f),g[m.severity]+=1,c.set(m.url,g)});let l=t?.map(m=>({url:m.url}))??e??[],o=t?Ri(t):null,d=xi(l.map(m=>m.url)),p=new Map(d.flatMap((m,f)=>m.urls.map(g=>[g,f])));return{detailed:!!t,templates:d.map(({origin:m,template:f,urls:g})=>({label:m+f,count:g.length})),urls:n,pages:l.map((m,f)=>{let g=t?.[f]??null,y=c.get(m.url)??{indexes:[],error:0,warning:0,info:0};return{u:a(m.url),template:p.get(m.url)??null,f:a(g?.finalUrl??null),s:g?.status??null,ct:g?.contentType??null,b:g?.blockedByRobots??!1,e:g?.error??null,t:g?.title??null,d:g?.description??null,c:a(g?.canonical??null),cr:a(g?.canonicalRaw??null),r:g?.robots??null,xr:g?.xRobotsTag??null,l:g?.lang??null,h:g?.h1Count??null,w:g?.wordCount??null,z:g?.responseBytes??null,depth:g?.depth??null,incoming:o?.get(m.url)?.incoming.map(a)??null,broken:o?.get(m.url)?.broken.map(a)??null,redirects:o?.get(m.url)?.redirects.map(a)??null,ix:g?nu(g):"unknown",il:g?.internalLinks.map(a)??[],el:g?.externalLinks.map(a)??[],rc:g?.redirectChain.map(w=>({u:a(w.url),s:w.status,l:a(w.location)}))??[],issues:y.indexes,counts:{error:y.error,warning:y.warning,info:y.info}}})}}function Li(e,t={}){let r=e.mode??"scan",n=e.pages??[],s=(e.issues??[]).map(N=>Rt(N)),a=[...(e.newIssues??[]).map(N=>Rt(N,"new")),...(e.ongoingIssues??[]).map(N=>Rt(N,"ongoing")),...(e.resolvedIssues??[]).map(N=>Rt(N,"resolved")),...(e.unchangedIssues??[]).map(N=>Rt(N,"unchanged"))],c=a.length>0?a:s,l=Er(c),o=new Map(l.flatMap(N=>N.urls.map(M=>[M,N.template])));for(let N of c)N.template=o.get(N.url)??"";let d=c.reduce((N,M)=>(N[M.severity]+=1,N),{error:0,warning:0,info:0}),p=new Set(c.map(N=>N.url)).size,m=yn(c,"rule"),f={error:0,warning:1,info:2},g=new Map;for(let N of c.filter(M=>M.lifecycle!=="resolved")){let M=g.get(N.rule);M?(M.count+=1,M.urls.add(N.url),f[N.severity]<f[M.severity]&&(M.severity=N.severity)):g.set(N.rule,{rule:N.rule,severity:N.severity,owner:N.owner,count:1,urls:new Set([N.url])})}let y=[...g.values()].map(N=>({rule:N.rule,severity:N.severity,owner:N.owner,count:N.count,affectedPages:N.urls.size})).sort((N,M)=>f[N.severity]-f[M.severity]||M.affectedPages-N.affectedPages||M.count-N.count||N.rule.localeCompare(M.rule)).slice(0,5),w={total:c.length,pagesChecked:n.length,targetPages:e.targetPages??null,affectedPages:p,severity:d,rules:Object.entries(m).map(([N,M])=>({id:N,count:M})).sort((N,M)=>M.count-N.count||N.id.localeCompare(M.id)),owners:yn(c,"owner"),lifecycle:yn(c,"lifecycle"),templates:l.map(({template:N,issueCount:M,affectedPages:Sa})=>({template:N,issueCount:M,affectedPages:Sa})),priorities:y},I=e.partial??!1,_=I||e.complete===!1,x=r==="check"&&e.complete===!1,L=I?"Partial SEO scan report":r==="check"?"SEO regression report":"SEO baseline audit",D={...e.branding??{},...t.branding??{}},S=/^#[0-9a-f]{6}$/i.test(D.primaryColor??"")?D.primaryColor:"#3157d5",v=D.logo&&(/^data:image\//.test(D.logo)||/^https:\/\//.test(D.logo))?`<img class="logo" src="${ne(D.logo)}" alt="${ne(D.agencyName??"Report logo")}">`:ru(),Y=e.generatedAt??new Date().toISOString(),F=e.startUrl??"",P=e.targetPages??null,B=r==="check",q=c.length>25e3,xa=su(n,e.pageDetails,c),Na=tu({mode:r,issues:c,statistics:w,pageExplorer:xa,copy:_i,partial:I,incompleteComparison:x,comparison:e.comparison??null,history:e.history??null,siteMetrics:e.siteMetrics??null});return`<!doctype html>
4
+ ${Hr(n??null)}`).digest("hex").slice(0,24)}function O(e,t,r,n={},s){let a=Ka.get(e);if(!a)throw new Error(`unknown rule: ${e}`);return{fingerprint:es(e,a.scope,t,s),ruleId:e,rule:e,severity:a.severity,scope:a.scope,url:t,message:r,evidence:n,owner:a.owner,remediation:a.remediation,documentationUrl:`${Ga}#${e}`,after:n.actual}}function it(e,t){return new RegExp(`(^|[\\s,])${t}($|[\\s,])`,"i").test(e??"")}function ts(e){if(e.toLowerCase()==="x-default")return!0;try{return new Intl.Locale(e),!0}catch{return!1}}function Qr(e,t){let r=new Map;for(let n of e){let s=t(n)?.trim().toLowerCase();if(!s)continue;let a=r.get(s)??[];a.push(n.url),r.set(s,a)}return new Map([...r].filter(([,n])=>n.length>1))}function rs(e){let t=[],r=o=>{t.push(o)},n=new Map(e.pages.map(o=>[o.url,o])),s=new Set(e.sitemap?.urls??[]),a=Qr(e.pages,o=>o.title),c=Qr(e.pages,o=>o.description),l=Qr(e.pages,o=>o.contentHash);e.sitemap?.error&&r(O("sitemap-unavailable",e.sitemap.url,"The configured sitemap could not be loaded",{actual:e.sitemap.error}));for(let o of e.pages){if(o.blockedByRobots){r(O("robots-blocked",o.url,"Page is blocked by robots.txt",{actual:!0}));continue}if(o.error){r(O(o.error.includes("redirect loop")?"redirect-loop":"page-unreachable",o.url,`Page request failed: ${o.error}`,{actual:o.error,redirectChain:o.redirectChain}));continue}if((o.status===null||o.status>=400)&&r(O("http-error",o.url,`Page returned HTTP ${o.status??"unknown"}`,{actual:o.status})),it(o.robots,"noindex")&&r(O("noindex",o.url,"Page contains a noindex meta directive",{actual:o.robots})),it(o.xRobotsTag,"noindex")&&r(O("x-robots-noindex",o.url,"Page contains a noindex X-Robots-Tag",{actual:o.xRobotsTag})),!o.canonicalRaw&&!o.canonical&&r(O("missing-canonical",o.url,"Page does not declare a canonical URL",{actual:null})),o.canonicalRaw&&!o.canonical&&r(O("invalid-canonical",o.url,"Canonical URL is invalid",{actual:o.canonicalRaw})),o.canonical&&new URL(o.canonical).origin!==new URL(e.siteUrl).origin&&r(O("cross-domain-canonical",o.url,"Canonical points to another origin",{actual:o.canonical})),o.canonical){let p=n.get(o.canonical);p&&(p.error||(p.status??500)>=400)&&r(O("canonical-target-error",o.url,"Canonical target is unavailable",{target:o.canonical,actual:p.status??p.error},o.canonical))}o.redirectChain.length>3&&r(O("long-redirect-chain",o.url,`Page uses ${o.redirectChain.length} redirects`,{actual:o.redirectChain.length,redirectChain:o.redirectChain})),s.has(o.url)&&(it(o.robots,"noindex")||it(o.xRobotsTag,"noindex"))&&r(O("noindex-in-sitemap",o.url,"Sitemap URL is marked noindex",{actual:o.robots??o.xRobotsTag})),s.has(o.url)&&o.redirectChain.length>0&&r(O("redirect-in-sitemap",o.url,"Sitemap URL redirects",{actual:o.finalUrl,redirectChain:o.redirectChain})),o.title?(a.get(o.title.trim().toLowerCase())&&r(O("duplicate-title",o.url,"Title is shared by multiple pages",{actual:o.title,urls:a.get(o.title.trim().toLowerCase())},o.title.trim().toLowerCase())),(o.title.length<10||o.title.length>60)&&r(O("title-length",o.url,`Title length is ${o.title.length} characters`,{actual:o.title.length,value:o.title}))):r(O("missing-title",o.url,"Page does not have a title",{actual:null})),o.description?(c.get(o.description.trim().toLowerCase())&&r(O("duplicate-description",o.url,"Meta description is shared by multiple pages",{actual:o.description,urls:c.get(o.description.trim().toLowerCase())},o.description.trim().toLowerCase())),(o.description.length<50||o.description.length>160)&&r(O("description-length",o.url,`Description length is ${o.description.length} characters`,{actual:o.description.length,value:o.description}))):r(O("missing-description",o.url,"Page does not have a meta description",{actual:null})),o.h1Count===0?r(O("missing-h1",o.url,"Page does not contain an H1 heading",{actual:0})):o.h1Count>1&&r(O("multiple-h1",o.url,`Page contains ${o.h1Count} H1 headings`,{actual:o.h1Count}));for(let p of o.internalLinks){let h=n.get(p);h&&(h.error||(h.status??500)>=400)&&r(O("broken-internal-link",o.url,"Internal link points to an unavailable page",{target:p,actual:h.status??h.error},p))}s.has(o.url)&&o.url!==e.siteUrl&&e.linkGraph.orphanUrls.includes(o.url)&&r(O("orphan-sitemap-page",o.url,"Sitemap page has no discovered internal links",{actual:!0})),e.sitemap&&!s.has(o.url)&&!it(o.robots,"noindex")&&(o.status??500)<400&&r(O("crawlable-not-in-sitemap",o.url,"Crawlable page is absent from the sitemap",{actual:!1}));for(let p of o.hreflang)(!ts(p.lang)||!p.url)&&r(O("invalid-hreflang",o.url,"Hreflang declaration is invalid",{actual:p},p));for(let[p,h]of o.jsonLd.entries())h.valid||r(O("malformed-json-ld",o.url,"JSON-LD block contains invalid JSON",{actual:h.error,index:p},p));e.siteUrl.startsWith("https:")&&[o.url,o.canonical,...o.internalLinks].some(p=>p?.startsWith("http:"))&&r(O("http-on-https-site",o.url,"HTTPS site references an internal HTTP URL",{actual:[o.url,o.canonical,...o.internalLinks].filter(p=>p?.startsWith("http:"))})),o.lang&&!ts(o.lang)&&r(O("invalid-language",o.url,"HTML language declaration is invalid",{actual:o.lang})),o.contentHash&&l.get(o.contentHash)&&r(O("duplicate-content",o.url,"Main text is an exact duplicate of another page",{urls:l.get(o.contentHash)},o.contentHash)),(!o.openGraph.title||!o.openGraph.description||!o.openGraph.image)&&r(O("missing-open-graph",o.url,"Open Graph metadata is incomplete",{actual:o.openGraph})),(!o.twitter.card||!o.twitter.title||!o.twitter.description||!o.twitter.image)&&r(O("missing-twitter-metadata",o.url,"Twitter card metadata is incomplete",{actual:o.twitter}));let d=o.images.filter(p=>p.alt===null).map(p=>p.src);d.length>0&&r(O("image-missing-alt",o.url,`${d.length} image(s) do not have an alt attribute`,{actual:d})),o.wordCount<200&&r(O("low-word-count",o.url,`Page contains approximately ${o.wordCount} visible words`,{actual:o.wordCount}))}return t}var ns={error:0,warning:1,info:2};function Ja(e,t){let r=(()=>{try{return new URL(e).pathname}catch{return e}})(),n=t.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replaceAll("**","\0").replaceAll("*","[^/]*").replaceAll("\0",".*"),s=new RegExp(`^${n}$`);return s.test(r)||s.test(e)}function ja(e,t,r){return t.find(n=>n.rule!==e.ruleId||!Ja(e.url,n.urlPattern)?!1:n.expiresAt?new Date(`${n.expiresAt}T23:59:59.999Z`).getTime()>=r.getTime():!0)??null}function Qe(e){return e.sort((t,r)=>ns[t.severity]-ns[r.severity]||t.url.localeCompare(r.url)||t.ruleId.localeCompare(r.ruleId)||t.fingerprint.localeCompare(r.fingerprint))}function at(e,t,r={}){let n=r.enabledRules??t.config.enabledRules,s=n?new Set(n):null,a={...t.config.severityOverrides,...r.severityOverrides??{}},c=r.suppressions??t.config.suppressions,l=new Date(r.now??Date.now());return Qe(e.filter(o=>!s||s.has(o.ruleId)).map(o=>({...o,severity:a[o.ruleId]??o.severity})).filter(o=>!ja(o,c,l)))}import{createHash as $a}from"node:crypto";var X="0.14.1",ot="1.1.0",Va="seo-crawl-audit",_e=`${Va}/${X}`;var Xa={title:null,description:null,image:null},Za={card:null,title:null,description:null,image:null};function ss(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("snapshot must be an object");return e}function za(e){if(!e||typeof e!="object"||typeof e.url!="string")throw new Error("snapshot page URL must be a string");return e}function Yr(e){return Array.isArray(e)?`[${e.map(Yr).join(",")}]`:e&&typeof e=="object"?`{${Object.entries(e).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>`${JSON.stringify(t)}:${Yr(r)}`).join(",")}}`:JSON.stringify(e)}function qa(e){return $a("sha256").update(Yr(e)).digest("hex")}function eo(e){return{url:e.url,finalUrl:e.finalUrl??null,status:e.status??null,contentType:e.contentType??null,blockedByRobots:e.blockedByRobots??!1,error:e.error??null,title:e.title??null,description:e.description??null,canonical:e.canonical??null,canonicalRaw:e.canonicalRaw??e.canonical??null,robots:e.robots??null,xRobotsTag:e.xRobotsTag??null,lang:e.lang??null,h1Count:e.h1Count??0,openGraph:e.openGraph??Xa,twitter:e.twitter??Za,hreflang:e.hreflang??[],jsonLd:e.jsonLd??[],images:e.images??[],links:[...e.links??[]].sort(),internalLinks:[...e.internalLinks??[]].sort(),externalLinks:[...e.externalLinks??[]].sort(),wordCount:e.wordCount??0,contentHash:e.contentHash??null,depth:e.depth??0,redirectChain:e.redirectChain??[],responseBytes:e.responseBytes??0}}function to(e){let t=e.source??{},r=e.options??{},n=e.pages?.[0],s=n&&typeof n=="object"?n.url:void 0,a=e.siteUrl??e.startUrl??t.startUrl??(typeof s=="string"?s:void 0);if(!a)throw new Error("snapshot site URL must be a string");return{schemaVersion:1,url:a,sitemap:r.sitemap??t.sitemap??"auto",maxPages:r.maxPages??t.maxPages??100,concurrency:r.concurrency??5,delay:r.requestDelay??t.requestDelay??100,timeout:r.timeout??1e4,respectRobots:r.respectRobots??t.respectRobots??!0,includeQuery:r.includeQuery??t.includeQuery??!1,maxRedirects:r.maxRedirects??10,maxResponseBytes:r.maxResponseBytes??5*1024*1024,enabledRules:r.enabledRules??null,severityOverrides:r.severityOverrides??{},suppressions:r.suppressions??[],regressionBudgets:r.regressionBudgets??{},report:r.report??{}}}function ro(e,t){let r=new Set(e.map(a=>a.url)),n=new Set(e.flatMap(a=>a.internalLinks)),s=new Set;for(let a of e)(a.error||a.blockedByRobots||(a.status??500)>=400)&&s.add(a.url);return{internalEdges:e.reduce((a,c)=>a+c.internalLinks.length,0),externalEdges:e.reduce((a,c)=>a+c.externalLinks.length,0),orphanUrls:t.filter(a=>r.has(a)&&!n.has(a)),brokenInternalUrls:[...s].sort()}}function no(e,t){let r=t.filter(s=>s.blockedByRobots).length,n=t.filter(s=>s.error||(s.status??500)>=400).length;return{requested:e.requested??t.length,completed:t.length,succeeded:t.length-n-r,failed:n,blockedByRobots:r,redirected:t.filter(s=>s.redirectChain.length>0||s.url!==s.finalUrl).length,durationMs:e.durationMs??0,truncated:e.truncated??!1,partial:e.partial??!1}}function Ie(e){let t=ss(e),r=to(t),n=(t.pages??[]).map(o=>eo(za(o))).sort((o,d)=>o.url.localeCompare(d.url)),s=t.sitemap?.urls??[];if(t.sitemap&&!t.sitemap.url)throw new Error("snapshot sitemap URL must be a string");let a=t.sitemap?{url:t.sitemap.url,urls:[...s].sort(),sitemapCount:t.sitemap.sitemapCount??0,truncated:t.sitemap.truncated??!1,error:t.sitemap.error??null}:null,c=t.startUrl??r.url,l=t.truncated??!1;return{schemaVersion:2,engineVersion:X,ruleSetVersion:ot,generatedAt:t.generatedAt??new Date().toISOString(),siteUrl:c,configurationHash:qa(r),config:r,robots:{url:t.robots?.url??new URL("/robots.txt",c).href,status:t.robots?.status??null,sha256:t.robots?.sha256??null,error:t.robots?.error??null,denyAll:t.robots?.denyAll??!1},sitemap:a,pages:n,linkGraph:t.linkGraph??ro(n,s),statistics:t.statistics??no(t,n),partial:t.partial??!1,source:{startUrl:c,maxPages:r.maxPages,requestDelay:r.delay,includeQuery:r.includeQuery,respectRobots:r.respectRobots,sitemap:typeof r.sitemap=="string"&&!["auto","none"].includes(r.sitemap)?r.sitemap:null},truncated:l}}function ye(e){let t=ss(e);if(!Array.isArray(t.pages))throw new Error("snapshot pages must be an array");if(t.schemaVersion===2)return Ie({...t,startUrl:t.siteUrl,options:t.config,pages:t.pages,generatedAt:t.generatedAt,partial:t.partial,statistics:t.statistics,linkGraph:t.linkGraph});if(t.schemaVersion===1)return Ie(t);throw new Error(`unsupported snapshot schema version: ${String(t.schemaVersion)}`)}function Re(e){if(e.schemaVersion===2)return e;let t=e,r=t.pages?.[0],n=r&&typeof r=="object"?r.url:void 0,s=typeof n=="string"?n:t.source?.startUrl??"https://invalid.local/";return Ie({...t,startUrl:t.siteUrl??t.source?.startUrl??s,robots:t.robots??{url:new URL("/robots.txt",s).href,status:null,sha256:null,error:null},options:t.config??t.options??{}})}function me(e,t={}){let r=Re(e);return at(rs(r),r,t)}function is(e,t){return new RegExp(`(^|[\\s,])${t}($|[\\s,])`,"i").test(e??"")}function ee(e,t,r,n,s){let a=O(e,t,r,{before:n,after:s,actual:s});return a.before=n,a.after=s,a}function as(e,t){let r=!t.partial&&!t.truncated,n=[],s=new Map(t.pages.map(o=>[o.url,o]));e.robots.sha256&&t.robots.sha256&&e.robots.sha256!==t.robots.sha256&&n.push(ee("robots-changed",t.robots.url,"robots.txt content changed",e.robots.sha256,t.robots.sha256));let a=e.sitemap?.urls.length??0,c=t.sitemap?.urls.length??0,l=a-c;r&&a>0&&l>=Math.max(5,Math.ceil(a*.2))&&n.push(ee("sitemap-url-count-drop",t.sitemap?.url??e.sitemap?.url??t.siteUrl,`Sitemap URL count dropped by ${l}`,a,c));for(let o of e.pages){let d=s.get(o.url);if(!d){r&&n.push(ee("page-missing",o.url,"Page was not checked",o.status,null));continue}if(d.blockedByRobots&&!o.blockedByRobots){n.push(ee("robots-blocked",o.url,"Page is now blocked by robots.txt",!1,!0));continue}if(d.error&&!o.error){n.push(ee(d.error.includes("redirect loop")?"redirect-loop":"page-unreachable",o.url,`Page request failed: ${d.error}`,o.error,d.error));continue}o.status!==null&&o.status<400&&(d.status===null||d.status>=400)&&n.push(ee("status-regression",o.url,`HTTP status regressed from ${o.status} to ${d.status??"none"}`,o.status,d.status));let p=`${o.robots??""},${o.xRobotsTag??""}`,h=`${d.robots??""},${d.xRobotsTag??""}`;if(!is(p,"noindex")&&is(h,"noindex")&&n.push(ee("new-noindex",o.url,"Page now contains a noindex directive",p,h)),o.title&&!d.title?n.push(ee("title-removed",o.url,"Page title was removed",o.title,d.title)):o.title&&d.title&&o.title!==d.title&&n.push(ee("title-changed",o.url,"Page title changed",o.title,d.title)),o.description&&!d.description&&n.push(ee("description-removed",o.url,"Meta description was removed",o.description,d.description)),o.canonical&&!d.canonical)n.push(ee("canonical-removed",o.url,"Canonical URL was removed",o.canonical,d.canonical));else if(o.canonical&&d.canonical&&o.canonical!==d.canonical){let f=ee("canonical-changed",o.url,"Canonical URL changed",o.canonical,d.canonical);new URL(d.canonical).origin!==new URL(o.url).origin&&(f.severity="error"),n.push(f)}if(o.h1Count>0&&d.h1Count===0&&n.push(ee("h1-removed",o.url,"All H1 headings were removed",o.h1Count,d.h1Count)),o.finalUrl&&d.finalUrl&&o.finalUrl!==d.finalUrl){let f=ee("redirect-changed",o.url,"Final redirect URL changed",o.finalUrl,d.finalUrl);new URL(d.finalUrl).origin!==new URL(o.url).origin&&(f.severity="error"),n.push(f)}}return n}function io(e,t,r={}){let n=Re(e),s=Re(t);return at(as(n,s),s,r)}function ct(e,t){return{...e,lifecycle:t}}function Ye(e,t,r={}){let n=Re(e),s=Re(t),a=!s.partial&&!s.truncated,c=new Set(s.pages.map(I=>I.url)),l=new Map(me(n,r).map(I=>[I.fingerprint,I])),o=new Map(me(s,r).map(I=>[I.fingerprint,I])),d=[],p=[],h=[],f=[];for(let[I,_]of o){let N=l.get(I);N?JSON.stringify(N.evidence)===JSON.stringify(_.evidence)?h.push(ct(_,"unchanged")):p.push(ct({..._,before:N.evidence,after:_.evidence},"ongoing")):d.push(ct(_,"new"))}for(let[I,_]of l)(_.scope==="page"?c.has(_.url):a)&&!o.has(I)&&f.push(ct(_,"resolved"));let m=new Set(d.map(I=>I.fingerprint));for(let I of io(n,s,r))m.has(I.fingerprint)||d.push(ct(I,"new"));let y={...n.config.regressionBudgets,...s.config.regressionBudgets},w=Object.entries(y).flatMap(([I,_])=>{let N=d.filter(L=>L.severity===I||L.ruleId===I).length;return N>_?[{budget:I,allowed:_,actual:N}]:[]});return Qe(d),Qe(p),Qe(h),Qe(f),{complete:a,newIssues:d,ongoingIssues:p,resolvedIssues:f,unchangedIssues:h,issues:[...d,...p],budgetExceeded:w}}var Gr="seo-audit.config.json",os=Object.freeze({schemaVersion:1,url:"",sitemap:"auto",maxPages:100,concurrency:5,delay:100,timeout:1e4,respectRobots:!0,includeQuery:!1,maxRedirects:10,maxResponseBytes:5242880,enabledRules:null,severityOverrides:{},suppressions:[],regressionBudgets:{},report:{}});function lt(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${t} must be an object`);return e}function Le(e,t,r,n=Number.MAX_SAFE_INTEGER){if(!Number.isInteger(e)||e<r||e>n)throw new Error(`${t} must be an integer between ${r} and ${n}`);return e}function dt(e,t){if(e!==void 0){if(typeof e!="string")throw new Error(`${t} must be a string`);return e}}function Wr(e){let t=lt(e,"config"),r=new Set(["$schema","schemaVersion","url","sitemap","maxPages","concurrency","delay","timeout","respectRobots","includeQuery","maxRedirects","maxResponseBytes","enabledRules","severityOverrides","suppressions","regressionBudgets","report"]);for(let s of Object.keys(t))if(!r.has(s))throw new Error(`unknown config property: ${s}`);let n={};if(t.schemaVersion!==void 0&&t.schemaVersion!==1)throw new Error("schemaVersion must be 1");if(t.url!==void 0){let s=dt(t.url,"url");if(!/^https?:\/\//i.test(s))throw new Error("url must be an HTTP(S) URL");n.url=s}if(t.sitemap!==void 0){let s=dt(t.sitemap,"sitemap");if(!["auto","none"].includes(s)&&!/^https?:\/\//i.test(s))throw new Error("sitemap must be auto, none, or an HTTP(S) URL");n.sitemap=s}t.maxPages!==void 0&&(n.maxPages=Le(t.maxPages,"maxPages",1)),t.concurrency!==void 0&&(n.concurrency=Le(t.concurrency,"concurrency",1,50)),t.delay!==void 0&&(n.delay=Le(t.delay,"delay",0)),t.timeout!==void 0&&(n.timeout=Le(t.timeout,"timeout",1)),t.maxRedirects!==void 0&&(n.maxRedirects=Le(t.maxRedirects,"maxRedirects",0,50)),t.maxResponseBytes!==void 0&&(n.maxResponseBytes=Le(t.maxResponseBytes,"maxResponseBytes",1024));for(let s of["respectRobots","includeQuery"])if(t[s]!==void 0){if(typeof t[s]!="boolean")throw new Error(`${s} must be a boolean`);n[s]=t[s]}if(t.enabledRules!==void 0){if(t.enabledRules!==null&&(!Array.isArray(t.enabledRules)||t.enabledRules.some(s=>typeof s!="string")))throw new Error("enabledRules must be null or an array of rule IDs");n.enabledRules=t.enabledRules}if(t.severityOverrides!==void 0){let s=lt(t.severityOverrides,"severityOverrides");for(let[a,c]of Object.entries(s))if(!["error","warning","info"].includes(c))throw new Error(`severityOverrides.${a} must be error, warning, or info`);n.severityOverrides=s}if(t.suppressions!==void 0){if(!Array.isArray(t.suppressions))throw new Error("suppressions must be an array");n.suppressions=t.suppressions.map((s,a)=>{let c=lt(s,`suppressions[${a}]`);for(let l of["rule","urlPattern","reason"])if(typeof c[l]!="string"||c[l]==="")throw new Error(`suppressions[${a}].${l} must be a non-empty string`);if(c.expiresAt!==void 0&&!/^\d{4}-\d{2}-\d{2}$/.test(String(c.expiresAt)))throw new Error(`suppressions[${a}].expiresAt must use YYYY-MM-DD`);return c})}if(t.regressionBudgets!==void 0){let s=lt(t.regressionBudgets,"regressionBudgets");n.regressionBudgets=Object.fromEntries(Object.entries(s).map(([a,c])=>[a,Le(c,`regressionBudgets.${a}`,0)]))}if(t.report!==void 0){let s=lt(t.report,"report"),a={},c=dt(s.agencyName,"report.agencyName"),l=dt(s.logo,"report.logo"),o=dt(s.primaryColor,"report.primaryColor");if(c!==void 0&&(a.agencyName=c),l!==void 0&&(a.logo=l),o!==void 0&&(a.primaryColor=o),a.primaryColor&&!/^#[0-9a-f]{6}$/i.test(a.primaryColor))throw new Error("report.primaryColor must be a six-digit hex color");n.report=Object.fromEntries(Object.entries(a).filter(([,d])=>d!==void 0))}return n}function Te(e,t={},r={}){return{...{...os,...r,...t,...e},schemaVersion:1,severityOverrides:{...r.severityOverrides??{},...t.severityOverrides??{},...e.severityOverrides??{}},regressionBudgets:{...r.regressionBudgets??{},...t.regressionBudgets??{},...e.regressionBudgets??{}},report:{...r.report??{},...t.report??{},...e.report??{}},suppressions:e.suppressions??t.suppressions??r.suppressions??[]}}function Gt(){}var Wt=Object.freeze({debug:Gt,info:Gt,warn:Gt,error:Gt});import{setTimeout as ao}from"node:timers/promises";function oo(e=0,{now:t=Date.now,wait:r=ao}={}){let n=Math.max(0,e),s=0,a=Promise.resolve();return function(){if(n===0)return Promise.resolve();let l=a.then(async()=>{let o=Math.max(0,s-t());o>0&&await r(o),s=t()+n});return a=l.catch(()=>{}),l}}function Ge(e=0,t=oo){let r=new Map;return n=>{let s=new URL(n).origin,a=r.get(s);return a||(a=t(e),r.set(s,a)),a()}}import{createHash as go}from"node:crypto";import{setTimeout as cs}from"node:timers/promises";var fe=class extends Error{redirectChain;constructor(t,r=[],n){super(t,n),this.name="RequestFailure",this.redirectChain=r}};function co(e){return e===429||e===500||e===502||e===503||e===504}function lo(e,t=Date.now()){if(!e)return null;let r=Number(e);if(Number.isFinite(r)&&r>=0)return Math.min(r*1e3,3e4);let n=Date.parse(e);return Number.isNaN(n)?null:Math.min(Math.max(0,n-t),3e4)}function uo(e,t){let r=AbortSignal.timeout(e);return t?AbortSignal.any([t,r]):r}async function Ao(e,t,r){let n=[],s=new Set([e]),a=e;for(;;){r.signal?.throwIfAborted(),await r.gate?.(a);let c=await r.fetch(a,{...t,redirect:"manual",signal:uo(r.timeout,r.signal)}),l=c.headers.get("location");if(c.status<300||c.status>=400||!l)return{response:c,redirectChain:n};let o=new URL(l,a).href;if(n.push({url:a,status:c.status,location:o}),await c.body?.cancel(),s.has(o))throw new fe(`redirect loop detected at ${o}`,n);if(n.length>r.maxRedirects)throw new fe(`redirect limit of ${r.maxRedirects} exceeded`,n);s.add(o),a=o}}async function Oe(e,t,r){let n;for(let s=0;s<=r.retries;s+=1)try{let a=await Ao(e,t,r);if(!co(a.response.status)||s===r.retries)return a;let c=lo(a.response.headers.get("retry-after"));await a.response.body?.cancel();let l=Math.floor((r.random??Math.random)()*100),o=c??Math.min(250*2**s+l,3e4);await r.onEvent?.({type:"retry",url:e,attempt:s+1,delayMs:o}),await cs(o,void 0,{signal:r.signal})}catch(a){if(r.signal?.aborted)throw r.signal.reason??a;if(n=a,a instanceof fe||s===r.retries)break;let c=Math.floor((r.random??Math.random)()*100),l=Math.min(250*2**s+c,3e4);await r.onEvent?.({type:"retry",url:e,attempt:s+1,delayMs:l}),await cs(l,void 0,{signal:r.signal})}throw n instanceof fe?n:new fe(n instanceof Error?n.message:String(n),[],{cause:n})}async function ve(e,t){if(!e.body)return{text:"",bytes:0,buffer:Buffer.alloc(0)};let r=e.body.getReader(),n=[],s=0;for(;;){let{done:c,value:l}=await r.read();if(c)break;if(s+=l.byteLength,s>t)throw await r.cancel(),new fe(`response exceeds ${t} bytes`);n.push(Buffer.from(l))}let a=Buffer.concat(n);return{text:a.toString("utf8"),bytes:s,buffer:a}}function po(e,t){if(!t)return!1;let r=t.endsWith("$"),s=(r?t.slice(0,-1):t).replace(/[.+?^${}()|[\]\\]/g,"\\$&").replaceAll("*",".*");return new RegExp(`^${s}${r?"$":""}`).test(e)}function ho(e,t){let r=[],n=null;for(let l of e.replace(/^\uFEFF/,"").split(/\r?\n/)){let o=l.replace(/#.*$/,"").trim(),d=o.indexOf(":");if(!o||d<0)continue;let p=o.slice(0,d).trim().toLowerCase(),h=o.slice(d+1).trim();if(p==="user-agent"){(!n||n.hasRules)&&(n={agents:[],rules:[],hasRules:!1},r.push(n)),h&&n.agents.push(h.toLowerCase());continue}n&&(p==="allow"||p==="disallow")&&h&&(n.rules.push({type:p,path:h}),n.hasRules=!0)}let s=t.toLowerCase(),a=r.filter(l=>l.agents.some(o=>o!=="*"&&s.includes(o)));return(a.length>0?a:r.filter(l=>l.agents.includes("*"))).flatMap(l=>l.rules)}function ls(e,t){if(t.denyAll)return!1;let r=new URL(e),n=`${r.pathname}${r.search}`,s=(t.rules??[]).filter(a=>po(n,a.path)).sort((a,c)=>c.path.length-a.path.length||(a.type==="allow"?-1:1));return s.length===0||s[0]?.type==="allow"}async function Kt(e,t){let r=new URL("/robots.txt",e).href;try{let{response:n}=await Oe(r,{headers:{accept:"text/plain,*/*;q=0.1","user-agent":t.userAgent}},{fetch:t.fetch,timeout:t.timeout,maxRedirects:t.maxRedirects,retries:t.retries,signal:t.signal,gate:t.requestGate,onEvent:t.onEvent}),{text:s}=await ve(n,mo);return{url:r,status:n.status,body:s,sha256:go("sha256").update(s).digest("hex"),rules:n.ok?ho(s,t.userAgent):[],denyAll:n.status===401||n.status===403,error:null}}catch(n){if(t.signal?.aborted)throw n;return{url:r,status:null,body:"",sha256:null,rules:[],denyAll:!1,error:n instanceof Error?n.message:String(n)}}}var mo=512*1024;import{gunzipSync as Dc}from"node:zlib";var ds=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",fo=ds+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040",Eo="["+ds+"]["+fo+"]*",To=new RegExp("^"+Eo+"$");function Jt(e,t){let r=[],n=t.exec(e);for(;n;){let s=[];s.startIndex=t.lastIndex-n[0].length;let a=n.length;for(let c=0;c<a;c++)s.push(n[c]);r.push(s),n=t.exec(e)}return r}var Kr=function(e){let t=To.exec(e);return!(t===null||typeof t>"u")};function us(e){return typeof e<"u"}var ut=["hasOwnProperty","toString","valueOf","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__"],jt=["__proto__","constructor","prototype"];var bo={allowBooleanAttributes:!1,unpairedTags:[]};function Vt(e,t){t=Object.assign({},bo,t);let r=[],n=!1,s=!1;e[0]==="\uFEFF"&&(e=e.substr(1));for(let a=0;a<e.length;a++)if(e[a]==="<"&&e[a+1]==="?"){if(a+=2,a=ps(e,a),a.err)return a}else if(e[a]==="<"){let c=a;if(a++,e[a]==="!"){a=hs(e,a);continue}else{let l=!1;e[a]==="/"&&(l=!0,a++);let o="";for(;a<e.length&&e[a]!==">"&&e[a]!==" "&&e[a]!==" "&&e[a]!==`
5
+ `&&e[a]!=="\r";a++)o+=e[a];if(o=o.trim(),o[o.length-1]==="/"&&(o=o.substring(0,o.length-1),a--),!_o(o)){let h;return o.trim().length===0?h="Invalid space after '<'.":h="Tag '"+o+"' is an invalid name.",Q("InvalidTag",h,Z(e,a))}let d=yo(e,a);if(d===!1)return Q("InvalidAttr","Attributes for '"+o+"' have open quote.",Z(e,a));let p=d.value;if(a=d.index,p[p.length-1]==="/"){let h=a-p.length;p=p.substring(0,p.length-1);let f=gs(p,t);if(f===!0)n=!0;else return Q(f.err.code,f.err.msg,Z(e,h+f.err.line))}else if(l)if(d.tagClosed){if(p.trim().length>0)return Q("InvalidTag","Closing tag '"+o+"' can't have attributes or invalid starting.",Z(e,c));if(r.length===0)return Q("InvalidTag","Closing tag '"+o+"' has not been opened.",Z(e,c));{let h=r.pop();if(o!==h.tagName){let f=Z(e,h.tagStartPos);return Q("InvalidTag","Expected closing tag '"+h.tagName+"' (opened in line "+f.line+", col "+f.col+") instead of closing tag '"+o+"'.",Z(e,c))}r.length==0&&(s=!0)}}else return Q("InvalidTag","Closing tag '"+o+"' doesn't have proper closing.",Z(e,a));else{let h=gs(p,t);if(h!==!0)return Q(h.err.code,h.err.msg,Z(e,a-p.length+h.err.line));if(s===!0)return Q("InvalidXml","Multiple possible root nodes found.",Z(e,a));t.unpairedTags.indexOf(o)!==-1||r.push({tagName:o,tagStartPos:c}),n=!0}for(a++;a<e.length;a++)if(e[a]==="<")if(e[a+1]==="!"){a++,a=hs(e,a);continue}else if(e[a+1]==="?"){if(a=ps(e,++a),a.err)return a}else break;else if(e[a]==="&"){let h=So(e,a);if(h==-1)return Q("InvalidChar","char '&' is not expected.",Z(e,a));a=h}else if(s===!0&&!As(e[a]))return Q("InvalidXml","Extra text at the end",Z(e,a));e[a]==="<"&&a--}}else{if(As(e[a]))continue;return Q("InvalidChar","char '"+e[a]+"' is not expected.",Z(e,a))}if(n){if(r.length==1)return Q("InvalidTag","Unclosed tag '"+r[0].tagName+"'.",Z(e,r[0].tagStartPos));if(r.length>0)return Q("InvalidXml","Invalid '"+JSON.stringify(r.map(a=>a.tagName),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1})}else return Q("InvalidXml","Start tag expected.",1);return!0}function As(e){return e===" "||e===" "||e===`
6
+ `||e==="\r"}function ps(e,t){let r=t;for(;t<e.length;t++)if(e[t]=="?"||e[t]==" "){let n=e.substr(r,t-r);if(t>5&&n==="xml")return Q("InvalidXml","XML declaration allowed only at the start of the document.",Z(e,t));if(e[t]=="?"&&e[t+1]==">"){t++;break}else continue}return t}function hs(e,t){if(e.length>t+5&&e[t+1]==="-"&&e[t+2]==="-"){for(t+=3;t<e.length;t++)if(e[t]==="-"&&e[t+1]==="-"&&e[t+2]===">"){t+=2;break}}else if(e.length>t+8&&e[t+1]==="D"&&e[t+2]==="O"&&e[t+3]==="C"&&e[t+4]==="T"&&e[t+5]==="Y"&&e[t+6]==="P"&&e[t+7]==="E"){let r=1;for(t+=8;t<e.length;t++)if(e[t]==="<")r++;else if(e[t]===">"&&(r--,r===0))break}else if(e.length>t+9&&e[t+1]==="["&&e[t+2]==="C"&&e[t+3]==="D"&&e[t+4]==="A"&&e[t+5]==="T"&&e[t+6]==="A"&&e[t+7]==="["){for(t+=8;t<e.length;t++)if(e[t]==="]"&&e[t+1]==="]"&&e[t+2]===">"){t+=2;break}}return t}var Co='"',Io="'";function yo(e,t){let r="",n="",s=!1;for(;t<e.length;t++){if(e[t]===Co||e[t]===Io)n===""?n=e[t]:n!==e[t]||(n="");else if(e[t]===">"&&n===""){s=!0;break}r+=e[t]}return n!==""?!1:{value:r,index:t,tagClosed:s}}var wo=new RegExp(`(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['"])(([\\s\\S])*?)\\5)?`,"g");function gs(e,t){let r=Jt(e,wo),n={};for(let s=0;s<r.length;s++){if(r[s][1].length===0)return Q("InvalidAttr","Attribute '"+r[s][2]+"' has no space in starting.",At(r[s]));if(r[s][3]!==void 0&&r[s][4]===void 0)return Q("InvalidAttr","Attribute '"+r[s][2]+"' is without value.",At(r[s]));if(r[s][3]===void 0&&!t.allowBooleanAttributes)return Q("InvalidAttr","boolean attribute '"+r[s][2]+"' is not allowed.",At(r[s]));let a=r[s][2];if(!No(a))return Q("InvalidAttr","Attribute '"+a+"' is an invalid name.",At(r[s]));if(!Object.prototype.hasOwnProperty.call(n,a))n[a]=1;else return Q("InvalidAttr","Attribute '"+a+"' is repeated.",At(r[s]))}return!0}function xo(e,t){let r=/\d/;for(e[t]==="x"&&(t++,r=/[\da-fA-F]/);t<e.length;t++){if(e[t]===";")return t;if(!e[t].match(r))break}return-1}function So(e,t){if(t++,e[t]===";")return-1;if(e[t]==="#")return t++,xo(e,t);let r=0;for(;t<e.length;t++,r++)if(!(e[t].match(/\w/)&&r<20)){if(e[t]===";")break;return-1}return t}function Q(e,t,r){return{err:{code:e,msg:t,line:r.line||r,col:r.col}}}function No(e){return Kr(e)}function _o(e){return Kr(e)}function Z(e,t){let r=e.substring(0,t).split(/\r?\n/);return{line:r.length,col:r[r.length-1].length+1}}function At(e){return e.startIndex+e[1].length}var Jr={cent:"\xA2",pound:"\xA3",curren:"\xA4",yen:"\xA5",euro:"\u20AC",dollar:"$",fnof:"\u0192",inr:"\u20B9",af:"\u060B",birr:"\u1265\u122D",peso:"\u20B1",rub:"\u20BD",won:"\u20A9",yuan:"\xA5",cedil:"\xB8"};var pt={amp:"&",apos:"'",gt:">",lt:"<",quot:'"'},jr={nbsp:"\xA0",copy:"\xA9",reg:"\xAE",trade:"\u2122",mdash:"\u2014",ndash:"\u2013",hellip:"\u2026",laquo:"\xAB",raquo:"\xBB",lsquo:"\u2018",rsquo:"\u2019",ldquo:"\u201C",rdquo:"\u201D",bull:"\u2022",para:"\xB6",sect:"\xA7",deg:"\xB0",frac12:"\xBD",frac14:"\xBC",frac34:"\xBE"};var We=Object.freeze({ALLOW:"allow",BLOCK:"block",THROW:"throw"}),Ro=new Set("!?\\\\/[]$%{}^&*()<>|+");function ms(e){if(e[0]==="#")throw new Error(`[EntityReplacer] Invalid character '#' in entity name: "${e}"`);for(let t of e)if(Ro.has(t))throw new Error(`[EntityReplacer] Invalid character '${t}' in entity name: "${e}"`);return e}function ht(...e){let t=Object.create(null);for(let r of e)if(r)for(let n of Object.keys(r)){let s=r[n];if(typeof s=="string")t[n]=s;else if(s&&typeof s=="object"&&s.val!==void 0){let a=s.val;typeof a=="string"&&(t[n]=a)}}return t}var De="external",$t="base",Vr="all";function Lo(e){return!e||e===De?new Set([De]):e===Vr?new Set([Vr]):e===$t?new Set([$t]):Array.isArray(e)?new Set(e):new Set([De])}var te=Object.freeze({allow:0,leave:1,remove:2,throw:3}),Oo=new Set([9,10,13]);function vo(e){if(!e)return{xmlVersion:1,onLevel:te.allow,nullLevel:te.remove};let t=e.xmlVersion===1.1?1.1:1,r=te[e.onNCR]??te.allow,n=te[e.nullNCR]??te.remove,s=Math.max(n,te.remove);return{xmlVersion:t,onLevel:r,nullLevel:s}}var Ke=class{constructor(t={}){this._limit=t.limit||{},this._maxTotalExpansions=this._limit.maxTotalExpansions||0,this._maxExpandedLength=this._limit.maxExpandedLength||0,this._postCheck=typeof t.postCheck=="function"?t.postCheck:n=>n,this._limitTiers=Lo(this._limit.applyLimitsTo??De),this._numericAllowed=t.numericAllowed??!0,this._baseMap=ht(pt,t.namedEntities||null),this._externalMap=Object.create(null),this._inputMap=Object.create(null),this._totalExpansions=0,this._expandedLength=0,this._removeSet=new Set(t.remove&&Array.isArray(t.remove)?t.remove:[]),this._leaveSet=new Set(t.leave&&Array.isArray(t.leave)?t.leave:[]);let r=vo(t.ncr);this._ncrXmlVersion=r.xmlVersion,this._ncrOnLevel=r.onLevel,this._ncrNullLevel=r.nullLevel,this._onExternalEntity=typeof t.onExternalEntity=="function"?t.onExternalEntity:null,this._onInputEntity=typeof t.onInputEntity=="function"?t.onInputEntity:null}_applyRegistrationHook(t,r,n,s){if(!t)return!0;let a=t(r,n);if(a===We.BLOCK)return!1;if(a===We.THROW)throw new Error(`[EntityDecoder] Registration of ${s} entity "&${r};" was rejected by hook`);return!0}setExternalEntities(t){if(t)for(let s of Object.keys(t))ms(s);if(!this._onExternalEntity){this._externalMap=ht(t);return}let r=ht(t),n=Object.create(null);for(let[s,a]of Object.entries(r))this._applyRegistrationHook(this._onExternalEntity,s,a,"external")&&(n[s]=a);this._externalMap=n}addExternalEntity(t,r){ms(t),typeof r=="string"&&r.indexOf("&")===-1&&this._applyRegistrationHook(this._onExternalEntity,t,r,"external")&&(this._externalMap[t]=r)}addInputEntities(t){if(this._totalExpansions=0,this._expandedLength=0,!this._onInputEntity){this._inputMap=ht(t);return}let r=ht(t),n=Object.create(null);for(let[s,a]of Object.entries(r))this._applyRegistrationHook(this._onInputEntity,s,a,"input")&&(n[s]=a);this._inputMap=n}reset(){return this._inputMap=Object.create(null),this._totalExpansions=0,this._expandedLength=0,this}setXmlVersion(t){this._ncrXmlVersion=t===1.1?1.1:1}decode(t){if(typeof t!="string"||t.length===0||t.indexOf("&")===-1)return t;let r=t,n=[],s=t.length,a=0,c=0,l=this._maxTotalExpansions>0,o=this._maxExpandedLength>0,d=l||o;for(;c<s;){if(t.charCodeAt(c)!==38){c++;continue}let h=c+1;for(;h<s&&t.charCodeAt(h)!==59&&h-c<=32;)h++;if(h>=s||t.charCodeAt(h)!==59){c++;continue}let f=t.slice(c+1,h);if(f.length===0){c++;continue}let m,y;if(this._removeSet.has(f))m="",y===void 0&&(y=De);else if(this._leaveSet.has(f)){c++;continue}else if(f.charCodeAt(0)===35){let w=this._resolveNCR(f);if(w===void 0){c++;continue}m=w,y=$t}else{let w=this._resolveName(f);m=w?.value,y=w?.tier}if(m===void 0){c++;continue}if(c>a&&n.push(t.slice(a,c)),n.push(m),a=h+1,c=a,d&&this._tierCounts(y)){if(l&&(this._totalExpansions++,this._totalExpansions>this._maxTotalExpansions))throw new Error(`[EntityReplacer] Entity expansion count limit exceeded: ${this._totalExpansions} > ${this._maxTotalExpansions}`);if(o){let w=m.length-(f.length+2);if(w>0&&(this._expandedLength+=w,this._expandedLength>this._maxExpandedLength))throw new Error(`[EntityReplacer] Expanded content length limit exceeded: ${this._expandedLength} > ${this._maxExpandedLength}`)}}}a<s&&n.push(t.slice(a));let p=n.length===0?t:n.join("");return this._postCheck(p,r)}_tierCounts(t){return this._limitTiers.has(Vr)?!0:this._limitTiers.has(t)}_resolveName(t){if(t in this._inputMap)return{value:this._inputMap[t],tier:De};if(t in this._externalMap)return{value:this._externalMap[t],tier:De};if(t in this._baseMap)return{value:this._baseMap[t],tier:$t}}_classifyNCR(t){return t===0?this._ncrNullLevel:t>=55296&&t<=57343||this._ncrXmlVersion===1&&t>=1&&t<=31&&!Oo.has(t)?te.remove:-1}_applyNCRAction(t,r,n){switch(t){case te.allow:return String.fromCodePoint(n);case te.remove:return"";case te.leave:return;case te.throw:throw new Error(`[EntityDecoder] Prohibited numeric character reference &${r}; (U+${n.toString(16).toUpperCase().padStart(4,"0")})`);default:return String.fromCodePoint(n)}}_resolveNCR(t){let r=t.charCodeAt(1),n;if(r===120||r===88?n=parseInt(t.slice(2),16):n=parseInt(t.slice(1),10),Number.isNaN(n)||n<0||n>1114111)return;let s=this._classifyNCR(n);if(!this._numericAllowed&&s<te.remove)return;let a=s===-1?this._ncrOnLevel:Math.max(this._ncrOnLevel,s);return this._applyNCRAction(a,t,n)}};var fs=e=>ut.includes(e)?"__"+e:e,Do={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0,unicode:!1},tagValueProcessor:function(e,t){return t},attributeValueProcessor:function(e,t){return t},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,entityDecoder:null,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(e,t,r){return e},captureMetaData:!1,maxNestedTags:100,strictReservedNames:!0,jPath:!0,onDangerousProperty:fs};function ko(e,t){if(typeof e!="string")return;let r=e.toLowerCase();if(ut.some(n=>r===n.toLowerCase()))throw new Error(`[SECURITY] Invalid ${t}: "${e}" is a reserved JavaScript keyword that could cause prototype pollution`);if(jt.some(n=>r===n.toLowerCase()))throw new Error(`[SECURITY] Invalid ${t}: "${e}" is a reserved JavaScript keyword that could cause prototype pollution`)}function Es(e,t){return typeof e=="boolean"?{enabled:e,maxEntitySize:1e4,maxExpansionDepth:1e4,maxTotalExpansions:1/0,maxExpandedLength:1e5,maxEntityCount:1e3,allowedTags:null,tagFilter:null,appliesTo:"all"}:typeof e=="object"&&e!==null?{enabled:e.enabled!==!1,maxEntitySize:Math.max(1,e.maxEntitySize??1e4),maxExpansionDepth:Math.max(1,e.maxExpansionDepth??1e4),maxTotalExpansions:Math.max(1,e.maxTotalExpansions??1/0),maxExpandedLength:Math.max(1,e.maxExpandedLength??1e5),maxEntityCount:Math.max(1,e.maxEntityCount??1e3),allowedTags:e.allowedTags??null,tagFilter:e.tagFilter??null,appliesTo:e.appliesTo??"all"}:Es(!0)}var Ts=function(e){let t=Object.assign({},Do,e),r=[{value:t.attributeNamePrefix,name:"attributeNamePrefix"},{value:t.attributesGroupName,name:"attributesGroupName"},{value:t.textNodeName,name:"textNodeName"},{value:t.cdataPropName,name:"cdataPropName"},{value:t.commentPropName,name:"commentPropName"}];for(let{value:n,name:s}of r)n&&ko(n,s);return t.onDangerousProperty===null&&(t.onDangerousProperty=fs),t.processEntities=Es(t.processEntities,t.htmlEntities),t.unpairedTagsSet=new Set(t.unpairedTags),t.stopNodes&&Array.isArray(t.stopNodes)&&(t.stopNodes=t.stopNodes.map(n=>typeof n=="string"&&n.startsWith("*.")?".."+n.substring(2):n)),t};var Xt;typeof Symbol!="function"?Xt="@@xmlMetadata":Xt=Symbol("XML Node Metadata");var re=class{constructor(t){this.tagname=t,this.child=[],this[":@"]=Object.create(null)}add(t,r){t==="__proto__"&&(t="#__proto__"),this.child.push({[t]:r})}addChild(t,r){t.tagname==="__proto__"&&(t.tagname="#__proto__"),t[":@"]&&Object.keys(t[":@"]).length>0?this.child.push({[t.tagname]:t.child,":@":t[":@"]}):this.child.push({[t.tagname]:t.child}),r!==void 0&&(this.child[this.child.length-1][Xt]={startIndex:r})}static getMetaDataSymbol(){return Xt}};var bs=":A-Za-z_\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u0486\u0488-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD",Bo=bs+"\\-\\.\\d\xB7\u0300-\u036F\u203F-\u2040",Cs=":A-Za-z_\xC0-\u02FF\u0370-\u037D\u037F-\u0486\u0488-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u{10000}-\u{EFFFF}",Po=Cs+"\\-\\.\\d\xB7\u0300-\u036F\u0487\u203F-\u2040",$r=(e,t,r="")=>{let n=e.replace(":",""),s=t.replace(":",""),a=`[${n}][${s}]*`;return{name:new RegExp(`^[${e}][${t}]*$`,r),ncName:new RegExp(`^${a}$`,r),qName:new RegExp(`^${a}(?::${a})?$`,r),nmToken:new RegExp(`^[${t}]+$`,r),nmTokens:new RegExp(`^[${t}]+(?:\\s+[${t}]+)*$`,r)}},Mo=$r(bs,Bo),Uo=$r(Cs,Po,"u"),Is=":A-Za-z_",Fo=Is+"\\-\\.\\d",Ho=$r(Is,Fo),Qo=(e="1.0",t=!1)=>t?Ho:e==="1.1"?Uo:Mo;var Xr=(e,{xmlVersion:t="1.0",asciiOnly:r=!1}={})=>Qo(t,r).qName.test(e);var mt=class{constructor(t,r){this.suppressValidationErr=!t,this.options=t,this.xmlVersion=r||1}setXmlVersion(t=1){this.xmlVersion=t}readDocType(t,r){let n=Object.create(null),s=0;if(t[r+3]==="O"&&t[r+4]==="C"&&t[r+5]==="T"&&t[r+6]==="Y"&&t[r+7]==="P"&&t[r+8]==="E"){r=r+9;let a=1,c=!1,l=!1,o="";for(;r<t.length;r++)if(t[r]==="<"&&!l){if(c&&ke(t,"!ENTITY",r)){r+=7;let d,p;if([d,p,r]=this.readEntityExp(t,r+1,this.suppressValidationErr),p.indexOf("&")===-1){if(this.options.enabled!==!1&&this.options.maxEntityCount!=null&&s>=this.options.maxEntityCount)throw new Error(`Entity count (${s+1}) exceeds maximum allowed (${this.options.maxEntityCount})`);n[d]=p,s++}}else if(c&&ke(t,"!ELEMENT",r)){r+=8;let{index:d}=this.readElementExp(t,r+1);r=d}else if(c&&ke(t,"!ATTLIST",r))r+=8;else if(c&&ke(t,"!NOTATION",r)){r+=9;let{index:d}=this.readNotationExp(t,r+1,this.suppressValidationErr);r=d}else if(ke(t,"!--",r))l=!0;else throw new Error("Invalid DOCTYPE");a++,o=""}else if(t[r]===">"){if(l?t[r-1]==="-"&&t[r-2]==="-"&&(l=!1,a--):a--,a===0)break}else t[r]==="["?c=!0:o+=t[r];if(a!==0)throw new Error("Unclosed DOCTYPE")}else throw new Error("Invalid Tag instead of DOCTYPE");return{entities:n,i:r}}readEntityExp(t,r){r=ne(t,r);let n=r;for(;r<t.length&&!/\s/.test(t[r])&&t[r]!=='"'&&t[r]!=="'";)r++;let s=t.substring(n,r);if(gt(s,{xmlVersion:this.xmlVersion}),r=ne(t,r),!this.suppressValidationErr){if(t.substring(r,r+6).toUpperCase()==="SYSTEM")throw new Error("External entities are not supported");if(t[r]==="%")throw new Error("Parameter entities are not supported")}let a="";if([r,a]=this.readIdentifierVal(t,r,"entity"),this.options.enabled!==!1&&this.options.maxEntitySize!=null&&a.length>this.options.maxEntitySize)throw new Error(`Entity "${s}" size (${a.length}) exceeds maximum allowed size (${this.options.maxEntitySize})`);return r--,[s,a,r]}readNotationExp(t,r){r=ne(t,r);let n=r;for(;r<t.length&&!/\s/.test(t[r]);)r++;let s=t.substring(n,r);!this.suppressValidationErr&&gt(s,{xmlVersion:this.xmlVersion}),r=ne(t,r);let a=t.substring(r,r+6).toUpperCase();if(!this.suppressValidationErr&&a!=="SYSTEM"&&a!=="PUBLIC")throw new Error(`Expected SYSTEM or PUBLIC, found "${a}"`);r+=a.length,r=ne(t,r);let c=null,l=null;if(a==="PUBLIC")[r,c]=this.readIdentifierVal(t,r,"publicIdentifier"),r=ne(t,r),(t[r]==='"'||t[r]==="'")&&([r,l]=this.readIdentifierVal(t,r,"systemIdentifier"));else if(a==="SYSTEM"&&([r,l]=this.readIdentifierVal(t,r,"systemIdentifier"),!this.suppressValidationErr&&!l))throw new Error("Missing mandatory system identifier for SYSTEM notation");return{notationName:s,publicIdentifier:c,systemIdentifier:l,index:--r}}readIdentifierVal(t,r,n){let s="",a=t[r];if(a!=='"'&&a!=="'")throw new Error(`Expected quoted string, found "${a}"`);r++;let c=r;for(;r<t.length&&t[r]!==a;)r++;if(s=t.substring(c,r),t[r]!==a)throw new Error(`Unterminated ${n} value`);return r++,[r,s]}readElementExp(t,r){r=ne(t,r);let n=r;for(;r<t.length&&!/\s/.test(t[r]);)r++;let s=t.substring(n,r);if(!this.suppressValidationErr&&!Xr(s,{xmlVersion:this.xmlVersion}))throw new Error(`Invalid element name: "${s}"`);r=ne(t,r);let a="";if(t[r]==="E"&&ke(t,"MPTY",r))r+=4;else if(t[r]==="A"&&ke(t,"NY",r))r+=2;else if(t[r]==="("){r++;let c=r;for(;r<t.length&&t[r]!==")";)r++;if(a=t.substring(c,r),t[r]!==")")throw new Error("Unterminated content model")}else if(!this.suppressValidationErr)throw new Error(`Invalid Element Expression, found "${t[r]}"`);return{elementName:s,contentModel:a.trim(),index:r}}readAttlistExp(t,r){r=ne(t,r);let n=r;for(;r<t.length&&!/\s/.test(t[r]);)r++;let s=t.substring(n,r);for(gt(s,{xmlVersion:this.xmlVersion}),r=ne(t,r),n=r;r<t.length&&!/\s/.test(t[r]);)r++;let a=t.substring(n,r);if(!gt(a,{xmlVersion:this.xmlVersion}))throw new Error(`Invalid attribute name: "${a}"`);r=ne(t,r);let c="";if(t.substring(r,r+8).toUpperCase()==="NOTATION"){if(c="NOTATION",r+=8,r=ne(t,r),t[r]!=="(")throw new Error(`Expected '(', found "${t[r]}"`);r++;let o=[];for(;r<t.length&&t[r]!==")";){let d=r;for(;r<t.length&&t[r]!=="|"&&t[r]!==")";)r++;let p=t.substring(d,r);if(p=p.trim(),!gt(p,{xmlVersion:this.xmlVersion}))throw new Error(`Invalid notation name: "${p}"`);o.push(p),t[r]==="|"&&(r++,r=ne(t,r))}if(t[r]!==")")throw new Error("Unterminated list of notations");r++,c+=" ("+o.join("|")+")"}else{let o=r;for(;r<t.length&&!/\s/.test(t[r]);)r++;c+=t.substring(o,r);let d=["CDATA","ID","IDREF","IDREFS","ENTITY","ENTITIES","NMTOKEN","NMTOKENS"];if(!this.suppressValidationErr&&!d.includes(c.toUpperCase()))throw new Error(`Invalid attribute type: "${c}"`)}r=ne(t,r);let l="";return t.substring(r,r+8).toUpperCase()==="#REQUIRED"?(l="#REQUIRED",r+=8):t.substring(r,r+7).toUpperCase()==="#IMPLIED"?(l="#IMPLIED",r+=7):[r,l]=this.readIdentifierVal(t,r,"ATTLIST"),{elementName:s,attributeName:a,attributeType:c,defaultValue:l,index:r}}},ne=(e,t)=>{for(;t<e.length&&/\s/.test(e[t]);)t++;return t};function ke(e,t,r){for(let n=0;n<t.length;n++)if(t[n]!==e[r+n+1])return!1;return!0}function gt(e,t){if(Xr(e,{xmlVersion:t}))return e;throw new Error(`Invalid entity name ${e}`)}var Yo=[48,1632,1776,2406,2534,2662,2790,2918,3046,3174,3302,3430,3558,3664,3792,3872,4160,4240,6112,6160,6470,6608,6784,6800,6992,7088,7232,7248,65296,120782,120792,120802,120812,120822,66720,68912,69734,69872,69942,70096,70384,70736,70864,71248,71360,71472,71904,72016,72688,72784,73040,73120,73552,92768,92864,93008,123200,123632,124144,125264,130032],Zt=255,zt=new Map,ys=65535,ws=1632,Je=ws,Go=ys-ws+1,qt=new Uint8Array(Go).fill(Zt);for(let e of Yo)for(let t=0;t<10;t++){let r=e+t;r<=ys?qt[r-Je]=t:zt.set(r,t)}var xs=48,Ss=57,Ns=45,er=new Set([8722,65293,65123]);function Wo(e){if(typeof e!="string")return e;let t=e.length;if(t===0)return e;let r=-1;for(let s=0;s<t;s++){let a=e.charCodeAt(s);if(!(a>=xs&&a<=Ss||a===Ns)){if(a<Je){if(er.has(a)){r=s;break}continue}if(a>=55296&&a<=56319){if(s+1<t){let c=e.charCodeAt(s+1);if(c>=56320&&c<=57343){let l=65536+(a-55296<<10)+(c-56320);if(zt.has(l)){r=s;break}}}continue}if(qt[a-Je]!==Zt||er.has(a)){r=s;break}}}if(r===-1)return e;let n=[];r>0&&n.push(e.slice(0,r));for(let s=r;s<t;s++){let a=e.charCodeAt(s);if(a>=xs&&a<=Ss||a===Ns){n.push(e[s]);continue}if(a<Je){n.push(er.has(a)?"-":e[s]);continue}if(a>=55296&&a<=56319){if(s+1<t){let l=e.charCodeAt(s+1);if(l>=56320&&l<=57343){let o=65536+(a-55296<<10)+(l-56320),d=zt.get(o);if(d!==void 0){n.push(String.fromCharCode(d+48)),s++;continue}}}n.push(e[s]);continue}if(er.has(a)){n.push("-");continue}let c=qt[a-Je];n.push(c!==Zt?String.fromCharCode(c+48):e[s])}return n.join("")}var _s=Wo;var Ko=/^[-+]?0x[a-fA-F0-9]+$/,Jo=/^0b[01]+$/,jo=/^0o[0-7]+$/,Vo=/^([\-\+])?(0*)([0-9]*(\.[0-9]*)?)$/,$o={hex:!0,binary:!1,octal:!1,leadingZeros:!0,decimalPoint:".",eNotation:!0,infinity:"original",unicode:!1};function zr(e,t={}){if(t=Object.assign({},$o,t),!e||typeof e!="string")return e;let r=e.trim();if(r.length===0)return e;if(t.skipLike!==void 0&&t.skipLike.test(r))return e;if(r==="0"||t.unicode&&(r=_s(r),r==="0"))return 0;if(t.hex&&Ko.test(r))return Zr(r,16);if(t.binary&&Jo.test(r))return Zr(r,2);if(t.octal&&jo.test(r))return Zr(r,8);if(isFinite(r)){if(r.includes("e")||r.includes("E"))return Zo(e,r,t);{let n=Vo.exec(r);if(n){let s=n[1]||"",a=n[2],c=zo(n[3]),l=s?e[a.length+1]===".":e[a.length]===".";if(!t.leadingZeros&&(a.length>1||a.length===1&&!l))return e;{let o=Number(r),d=String(o);if(o===0)return o;if(d.search(/[eE]/)!==-1)return t.eNotation?o:e;if(r.indexOf(".")!==-1)return d==="0"||d===c||d===`${s}${c}`?o:e;let p=a?c:r;return a?p===d||s+p===d?o:e:p===d||p===s+d?o:e}}else return e}}else return qo(e,Number(r),t)}var Xo=/^([-+])?(0*)(\d*(\.\d*)?[eE][-\+]?\d+)$/;function Zo(e,t,r){if(!r.eNotation)return e;let n=t.match(Xo);if(n){let s=n[1]||"",a=n[3].indexOf("e")===-1?"E":"e",c=n[2],l=s?e[c.length+1]===a:e[c.length]===a;return c.length>1&&l?e:c.length===1&&(n[3].startsWith(`.${a}`)||n[3][0]===a)?Number(t):c.length>0?r.leadingZeros&&!l?(t=(n[1]||"")+n[3],Number(t)):e:Number(t)}else return e}function zo(e){return e&&e.indexOf(".")!==-1&&(e=e.replace(/0+$/,""),e==="."?e="0":e[0]==="."?e="0"+e:e[e.length-1]==="."&&(e=e.substring(0,e.length-1))),e}function Zr(e,t){let r=e.trim();if((t===2||t===8)&&(e=r.substring(2)),parseInt)return parseInt(e,t);if(Number.parseInt)return Number.parseInt(e,t);if(window&&window.parseInt)return window.parseInt(e,t);throw new Error("parseInt, Number.parseInt, window.parseInt are not supported")}function qo(e,t,r){let n=t===1/0;switch(r.infinity.toLowerCase()){case"null":return null;case"infinity":return t;case"string":return n?"Infinity":"-Infinity";case"original":default:return e}}function qr(e){return typeof e=="function"?e:Array.isArray(e)?t=>{for(let r of e)if(typeof r=="string"&&t===r||r instanceof RegExp&&r.test(t))return!0}:()=>!1}var Be=class{constructor(t,r={},n){this.pattern=t,this.separator=r.separator||".",this.segments=this._parse(t),this.data=n,this._hasDeepWildcard=this.segments.some(s=>s.type==="deep-wildcard"),this._hasAttributeCondition=this.segments.some(s=>s.attrName!==void 0),this._hasPositionSelector=this.segments.some(s=>s.position!==void 0)}_parse(t){let r=[],n=0,s="";for(;n<t.length;)t[n]===this.separator?n+1<t.length&&t[n+1]===this.separator?(s.trim()&&(r.push(this._parseSegment(s.trim())),s=""),r.push({type:"deep-wildcard"}),n+=2):(s.trim()&&r.push(this._parseSegment(s.trim())),s="",n++):(s+=t[n],n++);return s.trim()&&r.push(this._parseSegment(s.trim())),r}_parseSegment(t){let r={type:"tag"},n=null,s=t,a=t.match(/^([^\[]+)(\[[^\]]*\])(.*)$/);if(a&&(s=a[1]+a[3],a[2])){let p=a[2].slice(1,-1);p&&(n=p)}let c,l=s;if(s.includes("::")){let p=s.indexOf("::");if(c=s.substring(0,p).trim(),l=s.substring(p+2).trim(),!c)throw new Error(`Invalid namespace in pattern: ${t}`)}let o,d=null;if(l.includes(":")){let p=l.lastIndexOf(":"),h=l.substring(0,p).trim(),f=l.substring(p+1).trim();["first","last","odd","even"].includes(f)||/^nth\(\d+\)$/.test(f)?(o=h,d=f):o=l}else o=l;if(!o)throw new Error(`Invalid segment pattern: ${t}`);if(r.tag=o,c&&(r.namespace=c),n)if(n.includes("=")){let p=n.indexOf("=");r.attrName=n.substring(0,p).trim(),r.attrValue=n.substring(p+1).trim()}else r.attrName=n.trim();if(d){let p=d.match(/^nth\((\d+)\)$/);p?(r.position="nth",r.positionValue=parseInt(p[1],10)):r.position=d}return r}get length(){return this.segments.length}hasDeepWildcard(){return this._hasDeepWildcard}hasAttributeCondition(){return this._hasAttributeCondition}hasPositionSelector(){return this._hasPositionSelector}toString(){return this.pattern}};var je=class{constructor(){this._byDepthAndTag=new Map,this._wildcardByDepth=new Map,this._deepWildcards=[],this._deepByTerminalTag=new Map,this._patterns=new Set,this._sealed=!1}add(t){if(this._sealed)throw new TypeError("ExpressionSet is sealed. Create a new ExpressionSet to add more expressions.");if(this._patterns.has(t.pattern))return this;if(this._patterns.add(t.pattern),t.hasDeepWildcard()){let a=t.segments[t.segments.length-1];if(a&&a.type!=="deep-wildcard"&&a.tag!=="*"){let c=a.tag;this._deepByTerminalTag.has(c)||this._deepByTerminalTag.set(c,[]),this._deepByTerminalTag.get(c).push(t)}else this._deepWildcards.push(t);return this}let r=t.length,s=t.segments[t.segments.length-1]?.tag;if(!s||s==="*")this._wildcardByDepth.has(r)||this._wildcardByDepth.set(r,[]),this._wildcardByDepth.get(r).push(t);else{let a=`${r}:${s}`;this._byDepthAndTag.has(a)||this._byDepthAndTag.set(a,[]),this._byDepthAndTag.get(a).push(t)}return this}addAll(t){for(let r of t)this.add(r);return this}has(t){return this._patterns.has(t.pattern)}get size(){return this._patterns.size}seal(){return this._sealed=!0,this}get isSealed(){return this._sealed}matchesAny(t){return this.findMatch(t)!==null}findMatch(t){let r=t.getDepth(),n=t.getCurrentTag(),s=`${r}:${n}`,a=this._byDepthAndTag.get(s);if(a){for(let o=0;o<a.length;o++)if(t.matches(a[o]))return a[o]}let c=this._wildcardByDepth.get(r);if(c){for(let o=0;o<c.length;o++)if(t.matches(c[o]))return c[o]}let l=this._deepByTerminalTag.get(n);if(l){for(let o=0;o<l.length;o++)if(t.matches(l[o]))return l[o]}for(let o=0;o<this._deepWildcards.length;o++)if(t.matches(this._deepWildcards[o]))return this._deepWildcards[o];return null}};var en=class{constructor(t){this._matcher=t}get separator(){return this._matcher.separator}getCurrentTag(){let t=this._matcher.path;return t.length>0?t[t.length-1].tag:void 0}getCurrentNamespace(){let t=this._matcher.path;return t.length>0?t[t.length-1].namespace:void 0}getAttrValue(t){let r=this._matcher.path;if(r.length!==0)return r[r.length-1].values?.[t]}hasAttr(t){let r=this._matcher.path;if(r.length===0)return!1;let n=r[r.length-1];return n.values!==void 0&&t in n.values}getAnyParentAttr(t){return this._matcher.getAnyParentAttr(t)}hasAnyParentAttr(t){return this._matcher.hasAnyParentAttr(t)}getPosition(){let t=this._matcher.path;return t.length===0?-1:t[t.length-1].position??0}getCounter(){let t=this._matcher.path;return t.length===0?-1:t[t.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this._matcher.path.length}toString(t,r=!0){return this._matcher.toString(t,r)}toArray(){return this._matcher.path.map(t=>t.tag)}matches(t){return this._matcher.matches(t)}matchesAny(t){return t.matchesAny(this._matcher)}},Ve=class{constructor(t={}){this.separator=t.separator||".",this.path=[],this.siblingStacks=[],this._pathStringCache=null,this._view=new en(this),this._keptAttrs=[]}push(t,r=null,n=null,s=null){this._pathStringCache=null,this.path.length>0&&(this.path[this.path.length-1].values=void 0);let a=this.path.length,c=this.siblingStacks[a];c||(c={counts:new Map,total:0},this.siblingStacks[a]=c);let l=n?`${n}:${t}`:t,o=c.counts.get(l)||0,d=c.total;c.counts.set(l,o+1),c.total++;let p={tag:t,position:d,counter:o};n!=null&&(p.namespace=n),r!=null&&(p.values=r),this.path.push(p);let h=this.path.length,f=s!==null?s.keep:null;if(f!=null&&f.length>0&&r)for(let m=0;m<f.length;m++){let y=f[m];r[y]!==void 0&&this._keptAttrs.push({depth:h,name:y,value:r[y]})}}pop(){if(this.path.length===0)return;this._pathStringCache=null;let t=this.path.pop();this.siblingStacks.length>this.path.length+1&&(this.siblingStacks.length=this.path.length+1);let r=this.path.length+1;for(;this._keptAttrs.length>0&&this._keptAttrs[this._keptAttrs.length-1].depth>=r;)this._keptAttrs.pop();return t}updateCurrent(t){if(this.path.length>0){let r=this.path[this.path.length-1];t!=null&&(r.values=t)}}getCurrentTag(){return this.path.length>0?this.path[this.path.length-1].tag:void 0}getCurrentNamespace(){return this.path.length>0?this.path[this.path.length-1].namespace:void 0}getAttrValue(t){if(this.path.length!==0)return this.path[this.path.length-1].values?.[t]}hasAttr(t){if(this.path.length===0)return!1;let r=this.path[this.path.length-1];return r.values!==void 0&&t in r.values}getAnyParentAttr(t){let r=this._keptAttrs;for(let n=r.length-1;n>=0;n--)if(r[n].name===t)return r[n].value}hasAnyParentAttr(t){let r=this._keptAttrs;for(let n=r.length-1;n>=0;n--)if(r[n].name===t)return!0;return!1}getPosition(){return this.path.length===0?-1:this.path[this.path.length-1].position??0}getCounter(){return this.path.length===0?-1:this.path[this.path.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this.path.length}toString(t,r=!0){let n=t||this.separator;if(n===this.separator&&r===!0){if(this._pathStringCache!==null)return this._pathStringCache;let a=this.path.map(c=>c.namespace?`${c.namespace}:${c.tag}`:c.tag).join(n);return this._pathStringCache=a,a}return this.path.map(a=>r&&a.namespace?`${a.namespace}:${a.tag}`:a.tag).join(n)}toArray(){return this.path.map(t=>t.tag)}reset(){this._pathStringCache=null,this.path=[],this.siblingStacks=[],this._keptAttrs=[]}matches(t){let r=t.segments;return r.length===0?!1:t.hasDeepWildcard()?this._matchWithDeepWildcard(r):this._matchSimple(r)}_matchSimple(t){if(this.path.length!==t.length)return!1;for(let r=0;r<t.length;r++)if(!this._matchSegment(t[r],this.path[r],r===this.path.length-1))return!1;return!0}_matchWithDeepWildcard(t){let r=this.path.length-1,n=t.length-1;for(;n>=0&&r>=0;){let s=t[n];if(s.type==="deep-wildcard"){if(n--,n<0)return!0;let a=t[n],c=!1;for(let l=r;l>=0;l--)if(this._matchSegment(a,this.path[l],l===this.path.length-1)){r=l-1,n--,c=!0;break}if(!c)return!1}else{if(!this._matchSegment(s,this.path[r],r===this.path.length-1))return!1;r--,n--}}return n<0}_matchSegment(t,r,n){if(t.tag!=="*"&&t.tag!==r.tag||t.namespace!==void 0&&t.namespace!=="*"&&t.namespace!==r.namespace||t.attrName!==void 0&&(!n||!r.values||!(t.attrName in r.values)||t.attrValue!==void 0&&String(r.values[t.attrName])!==String(t.attrValue)))return!1;if(t.position!==void 0){if(!n)return!1;let s=r.counter??0;if(t.position==="first"&&s!==0)return!1;if(t.position==="odd"&&s%2!==1)return!1;if(t.position==="even"&&s%2!==0)return!1;if(t.position==="nth"&&s!==t.positionValue)return!1}return!0}matchesAny(t){return t.matchesAny(this)}snapshot(){return{path:this.path.map(t=>({...t})),siblingStacks:this.siblingStacks.map(t=>t&&{counts:new Map(t.counts),total:t.total}),keptAttrs:this._keptAttrs.map(t=>({...t}))}}restore(t){this._pathStringCache=null,this.path=t.path.map(r=>({...r})),this.siblingStacks=t.siblingStacks.map(r=>r&&{counts:new Map(r.counts),total:r.total}),this._keptAttrs=(t.keptAttrs||[]).map(r=>({...r}))}readOnly(){return this._view}};var ec=[{id:"html-script-open",description:"<script opening tag",pattern:/<script[\s>/]/i},{id:"html-script-close",description:"</script closing tag",pattern:/<\/script[\s>]/i},{id:"html-javascript-protocol",description:"javascript: URI scheme (with optional whitespace/encoding)",pattern:/j[\t\n\r ]*a[\t\n\r ]*v[\t\n\r ]*a[\t\n\r ]*s[\t\n\r ]*c[\t\n\r ]*r[\t\n\r ]*i[\t\n\r ]*p[\t\n\r ]*t[\t\n\r ]*:/i},{id:"html-vbscript-protocol",description:"vbscript: URI scheme",pattern:/vbscript[\t\n\r ]*:/i},{id:"html-data-html",description:"data:text/html URI \u2014 can execute scripts in browsers",pattern:/data[\t\n\r ]*:[\t\n\r ]*text\/html/i},{id:"html-data-xhtml",description:"data:application/xhtml+xml URI",pattern:/data[\t\n\r ]*:[\t\n\r ]*application\/xhtml/i},{id:"html-data-svg",description:"data:image/svg+xml URI \u2014 can execute scripts",pattern:/data[\t\n\r ]*:[\t\n\r ]*image\/svg\+xml/i},{id:"html-inline-event-handler",description:"Inline event handler attributes: onclick=, onerror=, onload=, etc.",pattern:/\bon\w{1,30}\s*=/i},{id:"html-entity-obfuscated-script",description:"HTML-entity-encoded <script (e.g. &#x3C;script or &lt;script)",pattern:/(?:&#x0*3[Cc];?|&#0*60;?|&lt;)\s*script/i},{id:"html-entity-obfuscated-javascript",description:'HTML-entity-encoded javascript: (partial \u2014 catches common &#106; or &#x6a; for "j")',pattern:/(?:&#x0*6[Aa];?|&#0*106;?)\s*(?:&#x0*61;?|a)[\s\S]{0,80}script\s*:/i},{id:"html-style-expression",description:"CSS expression() \u2014 IE-era code execution in style attributes",pattern:/style[\s\S]{0,20}expression\s*\(/i},{id:"html-object-embed",description:"<object or <embed tags that can load active content",pattern:/<(?:object|embed)[\s>/]/i},{id:"html-base-tag",description:"<base href= \u2014 can hijack all relative URLs on a page",pattern:/<base[\s>]/i},{id:"html-meta-refresh",description:'<meta http-equiv="refresh" \u2014 can redirect users',pattern:/<meta[\s\S]{0,40}http-equiv[\s\S]{0,20}refresh/i},{id:"html-srcdoc",description:"srcdoc= attribute on iframes \u2014 embeds HTML that can run scripts",pattern:/srcdoc\s*=/i},{id:"html-iframe",description:"<iframe tag",pattern:/<iframe[\s>/]/i},{id:"html-form",description:"<form tag \u2014 can be used for phishing / credential harvesting injection",pattern:/<form[\s>/]/i}],$e=ec;var tc=[{id:"xml-cdata-injection",description:"CDATA section injection: <![CDATA[ breaks out of text node context",pattern:/<!\[CDATA\[/i},{id:"xml-cdata-close",description:"CDATA close sequence: ]]> can terminate an enclosing CDATA section",pattern:/\]\]>/},{id:"xml-processing-instruction",description:"XML processing instruction: <?xml-stylesheet or <?php etc.",pattern:/<\?(?:xml[\- ]|php|asp)/i},{id:"xml-doctype-injection",description:"DOCTYPE declaration embedded in content \u2014 can define entities",pattern:/<!DOCTYPE(?:[\s[]|$)/i},{id:"xml-entity-system",description:"SYSTEM keyword \u2014 used in external entity declarations (XXE)",pattern:/\bSYSTEM\s+["']/i},{id:"xml-entity-public",description:"PUBLIC keyword \u2014 used in external entity declarations (XXE)",pattern:/\bPUBLIC\s+["']/i},{id:"xml-entity-declaration",description:"<!ENTITY declaration \u2014 defines entities, potential XXE or entity expansion",pattern:/<!ENTITY[\s%]/i},{id:"xml-billion-laughs",description:"Entity reference chaining / billion laughs: repeated &eX; style references",pattern:/(?:&\w{1,20};){3,}/},{id:"xml-namespace-confusion",description:"xmlns: attribute injection \u2014 can redefine namespaces to confuse parsers",pattern:/\bxmlns\s*(?::\w{1,40})?\s*=/i},{id:"xml-comment-injection",description:"<!-- comment injection \u2014 can hide content from some parsers",pattern:/<!--/},{id:"xml-comment-close",description:"--> closes an enclosing XML comment",pattern:/-->/},{id:"xml-pi-close",description:"?> closes an enclosing processing instruction",pattern:/\?>/}],Xe=tc;var rc=[{id:"svg-script-element",description:"<script element inside SVG executes JavaScript",pattern:/<script[\s>/]/i},{id:"svg-xlink-href-javascript",description:"xlink:href with javascript: \u2014 classic SVG XSS via <a> or <use>",pattern:/xlink\s*:\s*href\s*=\s*["']?\s*javascript\s*:/i},{id:"svg-href-javascript",description:"href= with javascript: in SVG context (<a>, <animate>, etc.)",pattern:/href\s*=\s*["']?\s*javascript\s*:/i},{id:"svg-foreignobject",description:"<foreignObject embeds HTML inside SVG \u2014 can execute scripts",pattern:/<foreignObject[\s>/]/i},{id:"svg-use-external",description:"<use xlink:href or href pointing to external resource (non-fragment URL)",pattern:/<use[\s\S]{0,60}(?:xlink\s*:\s*)?href\s*=\s*(?:["'][^#]|[^"'#\s>])/i},{id:"svg-animate-href",description:'<animate attributeName="href" \u2014 can dynamically change href to javascript:',pattern:/<animate[\s\S]{0,80}attributeName\s*=\s*["'][\s]*href["']/i},{id:"svg-animate-xlinkhref",description:'<animate attributeName="xlink:href"',pattern:/<animate[\s\S]{0,80}attributeName\s*=\s*["'][\s]*xlink\s*:\s*href["']/i},{id:"svg-set-javascript",description:'<set to="javascript:..." \u2014 sets an attribute to a javascript: URI',pattern:/<set[\s\S]{0,80}to\s*=\s*["']?\s*javascript\s*:/i},{id:"svg-event-handler",description:"SVG-specific event handler attributes: onload=, onerror=, onactivate=, etc.",pattern:/\bon(?:load|error|activate|begin|end|repeat|focus|blur|click|mouse\w{1,20}|key\w{1,20})\s*=/i},{id:"svg-handler-generic",description:"Generic on* handler catch-all for SVG attributes",pattern:/\bon\w{1,30}\s*=/i},{id:"svg-filter-feimage",description:"<feImage href= \u2014 filter primitive that can load external resources",pattern:/<feImage[\s\S]{0,80}(?:xlink\s*:\s*)?href\s*=/i},{id:"svg-image-external",description:"<image xlink:href with http/https or javascript protocol",pattern:/<image[\s\S]{0,80}(?:xlink\s*:\s*)?href\s*=\s*["']?\s*(?:https?|javascript)\s*:/i},{id:"svg-style-javascript",description:"style= attribute containing javascript: (e.g. background:url(javascript:...))",pattern:/style\s*=[\s\S]{0,60}javascript\s*:/i}],tn=rc;var nc=[{id:"sql-block-comment-open",description:"SQL block comment open: /* ... */ \u2014 unusual in legitimate user text",pattern:/\/\*/},{id:"sql-union-select",description:"UNION SELECT \u2014 most common SQL injection aggregation attack",pattern:/\bUNION\s{1,20}(?:ALL\s{1,20})?SELECT\b/i},{id:"sql-drop-table",description:"DROP TABLE \u2014 destructive DDL injection",pattern:/\bDROP\s{1,20}TABLE\b/i},{id:"sql-drop-database",description:"DROP DATABASE \u2014 destructive DDL injection",pattern:/\bDROP\s{1,20}DATABASE\b/i},{id:"sql-insert-into",description:"INSERT INTO \u2014 data injection",pattern:/\bINSERT\s{1,20}INTO\b/i},{id:"sql-delete-from",description:"DELETE FROM \u2014 data deletion injection",pattern:/\bDELETE\s{1,20}FROM\b/i},{id:"sql-update-set",description:"UPDATE ... SET \u2014 data modification injection",pattern:/\bUPDATE\b[\s\S]{1,60}\bSET\b/i},{id:"sql-exec-xp",description:"EXEC xp_ \u2014 MSSQL extended stored procedure execution",pattern:/\bEXEC(?:UTE)?\s{1,20}xp_/i},{id:"sql-tautology-string",description:`Classic string tautology: ' OR '1'='1 or " OR "1"="1"`,pattern:/'\s{0,10}OR\s{0,10}'[^']{0,20}'\s*=\s*'[^']{0,20}/i},{id:"sql-tautology-numeric",description:"Numeric tautology: OR 1=1",pattern:/\bOR\s{1,10}1\s*=\s*1\b/i},{id:"sql-always-true-zero",description:"Numeric tautology: OR 0=0",pattern:/\bOR\s{1,10}0\s*=\s*0\b/i},{id:"sql-sleep-benchmark",description:"Time-based blind injection: SLEEP() or BENCHMARK()",pattern:/\b(?:SLEEP|BENCHMARK)\s*\(/i},{id:"sql-waitfor-delay",description:"MSSQL time-based blind injection: WAITFOR DELAY",pattern:/\bWAITFOR\s{1,20}DELAY\b/i},{id:"sql-char-function",description:"CHAR() function \u2014 used to obfuscate injected strings",pattern:/\bCHAR\s*\(\s*\d{1,3}/i},{id:"sql-information-schema",description:"INFORMATION_SCHEMA \u2014 reconnaissance query for table/column enumeration",pattern:/\bINFORMATION_SCHEMA\b/i}],ft=nc;var sc=[{id:"shell-path-traversal-unix",description:"Unix path traversal: ../ \u2014 climbing the directory tree",pattern:/\.\.\//},{id:"shell-path-traversal-windows",description:"Windows path traversal: ..\\ \u2014 climbing the directory tree",pattern:/\.\.\\/},{id:"shell-path-traversal-encoded",description:"URL-encoded path traversal: %2e%2e or %2f variants",pattern:/%2e%2e|%2f\.\.|\.\.%2f/i},{id:"shell-null-byte",description:"Null byte injection: \\x00 or %00 \u2014 truncates strings in C-backed functions",pattern:/\x00|%00/},{id:"shell-semicolon",description:"Semicolon command separator: cmd1; cmd2",pattern:/;/},{id:"shell-pipe",description:"Pipe operator: cmd1 | cmd2",pattern:/\|/},{id:"shell-and-operator",description:"AND operator: cmd1 && cmd2",pattern:/&&/},{id:"shell-or-operator",description:"OR operator: cmd1 || cmd2",pattern:/\|\|/},{id:"shell-backtick",description:"Backtick command substitution: `cmd`",pattern:/`/},{id:"shell-dollar-paren",description:"Dollar-paren command substitution: $(cmd)",pattern:/\$\(/},{id:"shell-dollar-brace",description:"Dollar-brace variable expansion: ${var} \u2014 can be abused for injection",pattern:/\$\{/},{id:"shell-redirect-out",description:"Output redirection: cmd > file or cmd >> file",pattern:/>{1,2}/},{id:"shell-redirect-in",description:"Input redirection: cmd < file",pattern:/</},{id:"shell-newline-injection",description:"Newline injection: \\n or \\r \u2014 can inject new shell commands",pattern:/[\n\r]/},{id:"shell-glob-star",description:"Glob expansion: * or ? \u2014 can expand to unintended files",pattern:/[/\\][*?]/},{id:"shell-absolute-root",description:"Absolute root path injection: string starting with / or \\ (Windows UNC)",pattern:/^(?:\/|\\\\)/},{id:"shell-windows-drive",description:"Windows drive letter path injection: C:\\ or D:/",pattern:/^[a-zA-Z]:[/\\]/},{id:"shell-curl-wget",description:"curl/wget with URL or flags \u2014 can exfiltrate data or download payloads",pattern:/\b(?:curl|wget)\s+(?:https?:\/\/|ftp:\/\/|-)/i}],rn=sc;var ic=[{id:"redos-nested-quantifier-plus",description:"Nested + quantifier inside a group with outer quantifier: (a+)+, (.+b)*, etc.",pattern:/\([^)]*\+[^)]*\)[+*]/},{id:"redos-nested-quantifier-star",description:"Nested * quantifier: (a*)* or (a*)+ \u2014 catastrophic backtracking",pattern:/\([^)]*\*[^)]*\)[*+]/},{id:"redos-nested-groups",description:"Doubly nested quantified groups: ((a+)+) \u2014 guaranteed catastrophic",pattern:/\(\([^)]{0,40}\)[+*]\)[+*]/},{id:"redos-alternation-overlap",description:"Overlapping alternation under quantifier: (a|a)+ \u2014 ambiguous NFA paths",pattern:/\(([^|()]{1,20})\|(?:\1)(?:\|[^|()]{1,20}){0,5}\)[+*?]{1,2}/},{id:"redos-star-plus-concat",description:"(x*x)+ pattern \u2014 triggers super-linear backtracking",pattern:/\([^)]{0,10}\*[^)]{0,10}\)[+*]/},{id:"redos-dot-star-greedy",description:"(.*){n,} or (.+){n,} \u2014 repeated greedy dot quantifiers",pattern:/\(\.[*+]\)\{?\d/},{id:"redos-large-repetition",description:"Very large fixed or range repetition count {1000,} or {1000,n} \u2014 denial of service via backtracking",pattern:/\{\d{4,}(?:,\d*)?\}/},{id:"redos-catastrophic-alternation",description:"Long alternation with many similar branches \u2014 polynomial backtracking risk",pattern:/\([^)]{0,200}(?:\|[^|)]{0,50}){9,}\)/}],nn=ic;var ae=`["'\\s]*:`,ac=[{id:"nosql-where-operator",description:"$where \u2014 executes arbitrary JavaScript server-side in MongoDB",pattern:new RegExp(`\\$where${ae}`,"i")},{id:"nosql-ne-operator",description:'$ne \u2014 "not equal" operator used to bypass equality checks',pattern:new RegExp(`\\$ne${ae}`,"i")},{id:"nosql-gt-operator",description:'$gt \u2014 "greater than" used to bypass password/value checks',pattern:new RegExp(`\\$gte?${ae}`,"i")},{id:"nosql-lt-operator",description:'$lt / $lte \u2014 "less than" bypass variants',pattern:new RegExp(`\\$lte?${ae}`,"i")},{id:"nosql-regex-operator",description:"$regex \u2014 can be used to extract data character by character (blind injection)",pattern:new RegExp(`\\$regex${ae}`,"i")},{id:"nosql-or-operator",description:"$or \u2014 logical OR; used to create always-true conditions",pattern:new RegExp(`\\$or${ae}\\s*\\[`,"i")},{id:"nosql-and-operator",description:"$and \u2014 logical AND operator injection",pattern:new RegExp(`\\$and${ae}\\s*\\[`,"i")},{id:"nosql-nor-operator",description:"$nor \u2014 logical NOR operator injection",pattern:new RegExp(`\\$nor${ae}\\s*\\[`,"i")},{id:"nosql-exists-operator",description:"$exists \u2014 can enumerate fields to determine schema",pattern:new RegExp(`\\$exists${ae}`,"i")},{id:"nosql-in-operator",description:"$in \u2014 matches any value in a list; can enumerate values",pattern:new RegExp(`\\$in${ae}\\s*\\[`,"i")},{id:"nosql-expr-operator",description:"$expr \u2014 allows aggregation expressions in queries (MongoDB 3.6+)",pattern:new RegExp(`\\$expr${ae}`,"i")},{id:"nosql-function-operator",description:"$function \u2014 executes arbitrary JavaScript in MongoDB 4.4+",pattern:new RegExp(`\\$function${ae}`,"i")},{id:"nosql-accumulator-operator",description:"$accumulator \u2014 custom aggregation with arbitrary JS execution",pattern:new RegExp(`\\$accumulator${ae}`,"i")},{id:"nosql-proto-pollution",description:"__proto__ \u2014 prototype pollution via object key injection",pattern:/__proto__/},{id:"nosql-constructor-prototype",description:"constructor.prototype \u2014 alternative prototype pollution vector (dot notation or JSON key)",pattern:/constructor[\s"':.,{\[]*prototype/i},{id:"nosql-proto-bracket",description:'["__proto__"] \u2014 bracket-notation prototype pollution',pattern:/\[["']__proto__["']\]/}],sn=ac;var oc=[{id:"log-crlf-injection",description:"CRLF injection: literal \\r or \\n embeds fake log lines",pattern:/[\r\n]/},{id:"log-url-encoded-crlf",description:"URL-encoded CRLF: %0d, %0a, %0D, %0A \u2014 decoded by some log parsers",pattern:/%0[dDaA]/},{id:"log-unicode-newline",description:"Unicode newline variants: U+2028 (line separator), U+2029 (paragraph separator)",pattern:/[\u2028\u2029]/},{id:"log-log4shell-jndi",description:"Log4Shell: ${jndi:...} triggers remote code execution in Apache Log4j",pattern:/\$\{jndi\s*:/i},{id:"log-log4shell-obfuscated",description:"Obfuscated Log4Shell: ${::-j}... lookup-bypass prefix used to evade WAF detection",pattern:/\$\{::-/},{id:"log-log4j-lookup",description:"Log4j lookup syntax: ${env:...}, ${sys:...}, ${ctx:...} \u2014 data exfiltration",pattern:/\$\{(?:env|sys|ctx|main|map|sd|web|docker|k8s|spring)\s*:/i},{id:"log-ssti-double-brace",description:"SSTI double-brace: {{expression}} \u2014 Jinja2, Twig, Handlebars, etc.",pattern:/\{\{[\s\S]{0,80}\}\}/},{id:"log-ssti-hash-brace",description:"SSTI hash-brace: #{expression} \u2014 Thymeleaf, Velocity, Ruby ERB",pattern:/#\{[\s\S]{0,80}\}/},{id:"log-ssti-dollar-brace",description:"SSTI/EL injection: ${expression with operators or method calls} \u2014 JSP EL, Freemarker, SpEL",pattern:/\$\{[^}]*(?:\.|\(|\*|\+|\bclass\b|\bruntime\b|\bprocess\b|\bexec\b)[^}]{0,80}\}/i},{id:"log-ssti-percent-tag",description:"SSTI ERB/ASP tag: <%= expression %> \u2014 Ruby ERB, ASP",pattern:/<%=[\s\S]{0,80}%>/},{id:"log-null-byte",description:"Null byte: \\x00 or %00 \u2014 can truncate log entries in C-backed loggers",pattern:/\x00|%00/},{id:"log-ansi-escape",description:"ANSI escape sequence: ESC[ \u2014 can manipulate terminal output when logs are tailed",pattern:/\x1b\[/}],an=oc;var cc=[{id:"sql-line-comment",description:"SQL line comment: -- followed by whitespace or end of string",pattern:/--(?:\s|$)/},{id:"sql-stacked-query",description:"Stacked queries: semicolon immediately followed by a SQL keyword",pattern:/;\s{0,10}(?:SELECT|INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|EXEC)\b/i},{id:"sql-hex-encoding",description:"Hex-encoded string injection: 0x41414141 style (MySQL)",pattern:/\b0x[0-9a-f]{4,}/i}],lc=[...ft,...cc],on=lc;$e.label="HTML";Xe.label="XML";tn.label="SVG";ft.label="SQL";on.label="SQL-STRICT";rn.label="SHELL";nn.label="REDOS";sn.label="NOSQL";an.label="LOG";var yh=Object.freeze({HTML:$e,XML:Xe,SVG:tn,SQL:ft,"SQL-STRICT":on,SHELL:rn,REDOS:nn,NOSQL:sn,LOG:an});function dc(e){if(typeof e!="string")throw new TypeError(`is-unsafe: first argument must be a string, got ${typeof e}`)}function uc(e){if(!(e instanceof RegExp)){if(Array.isArray(e)){if(e.length===0)throw new TypeError("is-unsafe: context must not be an empty array");if(Array.isArray(e[0])){for(let t of e)if(!Array.isArray(t)||t.length===0)throw new TypeError("is-unsafe: each context in the array must be a non-empty pattern array (PatternList)")}return}throw new TypeError(`is-unsafe: second argument must be a PatternList (e.g. HTML), an array of PatternLists (e.g. [HTML, XML]), or a RegExp. Got: ${typeof e}`)}}function Ac(e){return e instanceof RegExp?{lists:null,regex:e}:Array.isArray(e[0])?{lists:e,regex:null}:{lists:[e],regex:null}}function pc(e,t){let r=t.label??"CUSTOM";for(let n of t)if(n.pattern.test(e))return{context:r,id:n.id,description:n.description,pattern:n.pattern};return null}function Rs(e,t){dc(e),uc(t);let{lists:r,regex:n}=Ac(t);if(n)return n.test(e);for(let s of r)if(pc(e,s)!==null)return!0;return!1}function hc(e,t){if(!e)return{};let r=t.attributesGroupName?e[t.attributesGroupName]:e;if(!r)return{};let n={};for(let s in r)if(s.startsWith(t.attributeNamePrefix)){let a=s.substring(t.attributeNamePrefix.length);n[a]=r[s]}else n[s]=r[s];return n}function gc(e){if(!e||typeof e!="string")return;let t=e.indexOf(":");if(t!==-1&&t>0){let r=e.substring(0,t);if(r!=="xmlns")return r}}var Et=class{constructor(t,r){this.options=t,this.currentNode=null,this.tagsNodeStack=[],this.parseXml=bc,this.parseTextData=mc,this.resolveNameSpace=fc,this.buildAttributesMap=Tc,this.isItStopNode=wc,this.replaceEntitiesValue=Ic,this.readStopNodeData=Nc,this.saveTextToParentTag=yc,this.addChild=Cc,this.ignoreAttributesFn=qr(this.options.ignoreAttributes),this.entityExpansionCount=0,this.currentExpandedLength=0,this.doctypefound=!1;let n={...pt};this.options.entityDecoder?this.entityDecoder=this.options.entityDecoder:(typeof this.options.htmlEntities=="object"?n=this.options.htmlEntities:this.options.htmlEntities===!0&&(n={...jr,...Jr}),this.entityDecoder=new Ke({namedEntities:{...n,...r},numericAllowed:this.options.htmlEntities,limit:{maxTotalExpansions:this.options.processEntities.maxTotalExpansions,maxExpandedLength:this.options.processEntities.maxExpandedLength,applyLimitsTo:this.options.processEntities.appliesTo},onInputEntity:(a,c)=>Rs(c,[$e,Xe])?We.BLOCK:We.ALLOW})),this.matcher=new Ve,this.readonlyMatcher=this.matcher.readOnly(),this.isCurrentNodeStopNode=!1,this.stopNodeExpressionsSet=new je;let s=this.options.stopNodes;if(s&&s.length>0){for(let a=0;a<s.length;a++){let c=s[a];typeof c=="string"?this.stopNodeExpressionsSet.add(new Be(c)):c instanceof Be&&this.stopNodeExpressionsSet.add(c)}this.stopNodeExpressionsSet.seal()}}};function mc(e,t,r,n,s,a,c){let l=this.options;if(e!==void 0&&(l.trimValues&&!n&&(e=e.trim()),e.length>0)){c||(e=this.replaceEntitiesValue(e,t,r));let o=l.jPath?r.toString():r,d=l.tagValueProcessor(t,e,o,s,a);return d==null?e:typeof d!=typeof e||d!==e?d:l.trimValues||e.trim()===e?dn(e,l.parseTagValue,l.numberParseOptions):e}}function fc(e){if(this.options.removeNSPrefix){let t=e.split(":"),r=e.charAt(0)==="/"?"/":"";if(t[0]==="xmlns")return"";t.length===2&&(e=r+t[1])}return e}var Ec=new RegExp(`([^\\s=]+)\\s*(=\\s*(['"])([\\s\\S]*?)\\3)?`,"gm");function Tc(e,t,r,n=!1){let s=this.options;if(n===!0||s.ignoreAttributes!==!0&&typeof e=="string"){let a=Jt(e,Ec),c=a.length,l={},o=new Array(c),d=!1,p={};for(let m=0;m<c;m++){let y=this.resolveNameSpace(a[m][1]),w=a[m][4];if(y.length&&w!==void 0){let I=w;s.trimValues&&(I=I.trim()),I=this.replaceEntitiesValue(I,r,this.readonlyMatcher),o[m]=I,p[y]=I,d=!0}}d&&typeof t=="object"&&t.updateCurrent&&t.updateCurrent(p);let h=s.jPath?t.toString():this.readonlyMatcher,f=!1;for(let m=0;m<c;m++){let y=this.resolveNameSpace(a[m][1]);if(this.ignoreAttributesFn(y,h))continue;let w=s.attributeNamePrefix+y;if(y.length)if(s.transformAttributeName&&(w=s.transformAttributeName(w)),w=Ls(w,s),a[m][4]!==void 0){let I=o[m],_=s.attributeValueProcessor(y,I,h);_==null?l[w]=I:typeof _!=typeof I||_!==I?l[w]=_:l[w]=dn(I,s.parseAttributeValue,s.numberParseOptions),f=!0}else s.allowBooleanAttributes&&(l[w]=!0,f=!0)}if(!f)return;if(s.attributesGroupName&&!s.preserveOrder){let m={};return m[s.attributesGroupName]=l,m}return l}}var bc=function(e){e=e.replace(/\r\n?/g,`
7
+ `);let t=new re("!xml"),r=t,n="";this.matcher.reset(),this.entityDecoder.reset(),this.entityExpansionCount=0,this.currentExpandedLength=0,this.doctypefound=!1;let s=this.options,a=new mt(s.processEntities),c=e.length;for(let l=0;l<c;l++)if(e[l]==="<"){let d=e.charCodeAt(l+1);if(d===47){let p=Ze(e,">",l,"Closing Tag is not closed."),h=e.substring(l+2,p).trim();if(s.removeNSPrefix){let m=h.indexOf(":");m!==-1&&(h=h.substr(m+1))}h=cn(s.transformTagName,h,"",s).tagName,r&&(n=this.saveTextToParentTag(n,r,this.readonlyMatcher));let f=this.matcher.getCurrentTag();if(h&&s.unpairedTagsSet.has(h))throw new Error(`Unpaired tag can not be used as closing tag: </${h}>`);f&&s.unpairedTagsSet.has(f)&&(this.matcher.pop(),this.tagsNodeStack.pop()),this.matcher.pop(),this.isCurrentNodeStopNode=!1,r=this.tagsNodeStack.pop(),n="",l=p}else if(d===63){let p=ln(e,l,!1,"?>");if(!p)throw new Error("Pi Tag is not closed.");n=this.saveTextToParentTag(n,r,this.readonlyMatcher);let h=this.buildAttributesMap(p.tagExp,this.matcher,p.tagName,!0);if(h){let f=h[this.options.attributeNamePrefix+"version"];this.entityDecoder.setXmlVersion(Number(f)||1),a.setXmlVersion(Number(f)||1)}if(!(s.ignoreDeclaration&&p.tagName==="?xml"||s.ignorePiTags)){let f=new re(p.tagName);f.add(s.textNodeName,""),p.tagName!==p.tagExp&&p.attrExpPresent&&s.ignoreAttributes!==!0&&(f[":@"]=h),this.addChild(r,f,this.readonlyMatcher,l)}l=p.closeIndex+1}else if(d===33&&e.charCodeAt(l+2)===45&&e.charCodeAt(l+3)===45){let p=Ze(e,"-->",l+4,"Comment is not closed.");if(s.commentPropName){let h=e.substring(l+4,p-2);n=this.saveTextToParentTag(n,r,this.readonlyMatcher),r.add(s.commentPropName,[{[s.textNodeName]:h}])}l=p}else if(d===33&&e.charCodeAt(l+2)===68){if(this.doctypefound)throw new Error("Multiple DOCTYPE declarations found.");this.doctypefound=!0;let p=a.readDocType(e,l);this.entityDecoder.addInputEntities(p.entities),l=p.i}else if(d===33&&e.charCodeAt(l+2)===91){let p=Ze(e,"]]>",l,"CDATA is not closed.")-2,h=e.substring(l+9,p);n=this.saveTextToParentTag(n,r,this.readonlyMatcher);let f=this.parseTextData(h,r.tagname,this.readonlyMatcher,!0,!1,!0,!0);f==null&&(f=""),s.cdataPropName?r.add(s.cdataPropName,[{[s.textNodeName]:h}]):r.add(s.textNodeName,f),l=p+2}else{let p=ln(e,l,s.removeNSPrefix);if(!p){let P=e.substring(Math.max(0,l-50),Math.min(c,l+50));throw new Error(`readTagExp returned undefined at position ${l}. Context: "${P}"`)}let h=p.tagName,f=p.rawTagName,m=p.tagExp,y=p.attrExpPresent,w=p.closeIndex;if({tagName:h,tagExp:m}=cn(s.transformTagName,h,m,s),s.strictReservedNames&&(h===s.commentPropName||h===s.cdataPropName||h===s.textNodeName||h===s.attributesGroupName))throw new Error(`Invalid tag name: ${h}`);r&&n&&r.tagname!=="!xml"&&(n=this.saveTextToParentTag(n,r,this.readonlyMatcher,!1));let I=r;I&&s.unpairedTagsSet.has(I.tagname)&&(r=this.tagsNodeStack.pop(),this.matcher.pop());let _=!1;m.length>0&&m.lastIndexOf("/")===m.length-1&&(_=!0,h[h.length-1]==="/"?(h=h.substr(0,h.length-1),m=h):m=m.substr(0,m.length-1),y=h!==m);let N=null,L={},B;B=gc(f),h!==t.tagname&&this.matcher.push(h,{},B),h!==m&&y&&(N=this.buildAttributesMap(m,this.matcher,h),N&&(L=hc(N,s))),h!==t.tagname&&(this.isCurrentNodeStopNode=this.isItStopNode());let R=l;if(this.isCurrentNodeStopNode){let P="";if(_)l=p.closeIndex;else if(s.unpairedTagsSet.has(h))l=p.closeIndex;else{let x=this.readStopNodeData(e,f,w+1);if(!x)throw new Error(`Unexpected end of ${f}`);l=x.i,P=x.tagContent}let G=new re(h);N&&(G[":@"]=N),G.add(s.textNodeName,P),this.matcher.pop(),this.isCurrentNodeStopNode=!1,this.addChild(r,G,this.readonlyMatcher,R)}else{if(_){({tagName:h,tagExp:m}=cn(s.transformTagName,h,m,s));let P=new re(h);N&&(P[":@"]=N),this.addChild(r,P,this.readonlyMatcher,R),this.matcher.pop(),this.isCurrentNodeStopNode=!1}else if(s.unpairedTagsSet.has(h)){let P=new re(h);N&&(P[":@"]=N),this.addChild(r,P,this.readonlyMatcher,R),this.matcher.pop(),this.isCurrentNodeStopNode=!1,l=p.closeIndex;continue}else{let P=new re(h);if(this.tagsNodeStack.length>s.maxNestedTags)throw new Error("Maximum nested tags exceeded");this.tagsNodeStack.push(r),N&&(P[":@"]=N),this.addChild(r,P,this.readonlyMatcher,R),r=P}n="",l=w}}}else n+=e[l];return t.child};function Cc(e,t,r,n){this.options.captureMetaData||(n=void 0);let s=this.options.jPath?r.toString():r,a=this.options.updateTag(t.tagname,s,t[":@"]);a===!1||(typeof a=="string"&&(t.tagname=a),e.addChild(t,n))}function Ic(e,t,r){let n=this.options.processEntities;if(!n||!n.enabled)return e;if(n.allowedTags){let s=this.options.jPath?r.toString():r;if(!(Array.isArray(n.allowedTags)?n.allowedTags.includes(t):n.allowedTags(t,s)))return e}if(n.tagFilter){let s=this.options.jPath?r.toString():r;if(!n.tagFilter(t,s))return e}return this.entityDecoder.decode(e)}function yc(e,t,r,n){return e&&(n===void 0&&(n=t.child.length===0),e=this.parseTextData(e,t.tagname,r,!1,t[":@"]?Object.keys(t[":@"]).length!==0:!1,n),e!==void 0&&e!==""&&t.add(this.options.textNodeName,e),e=""),e}function wc(){return this.stopNodeExpressionsSet.size===0?!1:this.matcher.matchesAny(this.stopNodeExpressionsSet)}function xc(e,t,r=">"){let n=0,s=e.length,a=r.charCodeAt(0),c=r.length>1?r.charCodeAt(1):-1,l="",o=t;for(let d=t;d<s;d++){let p=e.charCodeAt(d);if(n)p===n&&(n=0);else if(p===34||p===39)n=p;else if(p===a)if(c!==-1){if(e.charCodeAt(d+1)===c)return l+=e.substring(o,d),{data:l,index:d}}else return l+=e.substring(o,d),{data:l,index:d};else p===9&&!n&&(l+=e.substring(o,d)+" ",o=d+1)}}function Ze(e,t,r,n){let s=e.indexOf(t,r);if(s===-1)throw new Error(n);return s+t.length-1}function Sc(e,t,r,n){let s=e.indexOf(t,r);if(s===-1)throw new Error(n);return s}function ln(e,t,r,n=">"){let s=xc(e,t+1,n);if(!s)return;let a=s.data,c=s.index,l=a.search(/\s/),o=a,d=!0;l!==-1&&(o=a.substring(0,l),a=a.substring(l+1).trimStart());let p=o;if(r){let h=o.indexOf(":");h!==-1&&(o=o.substr(h+1),d=o!==s.data.substr(h+1))}return{tagName:o,tagExp:a,closeIndex:c,attrExpPresent:d,rawTagName:p}}function Nc(e,t,r){let n=r,s=1,a=e.length;for(;r<a;r++)if(e[r]==="<"){let c=e.charCodeAt(r+1);if(c===47){let l=Sc(e,">",r,`${t} is not closed`);if(e.substring(r+2,l).trim()===t&&(s--,s===0))return{tagContent:e.substring(n,r),i:l};r=l}else if(c===63)r=Ze(e,"?>",r+1,"StopNode is not closed.");else if(c===33&&e.charCodeAt(r+2)===45&&e.charCodeAt(r+3)===45)r=Ze(e,"-->",r+3,"StopNode is not closed.");else if(c===33&&e.charCodeAt(r+2)===91)r=Ze(e,"]]>",r,"StopNode is not closed.")-2;else{let l=ln(e,r,!1);l&&((l&&l.tagName)===t&&l.tagExp[l.tagExp.length-1]!=="/"&&s++,r=l.closeIndex)}}}function dn(e,t,r){if(t&&typeof e=="string"){let n=e.trim();return n==="true"?!0:n==="false"?!1:zr(e,r)}else return us(e)?e:""}function cn(e,t,r,n){if(e){let s=e(t);r===t&&(r=s),t=s}return t=Ls(t,n),{tagName:t,tagExp:r}}function Ls(e,t){if(jt.includes(e))throw new Error(`[SECURITY] Invalid name: "${e}" is a reserved JavaScript keyword that could cause prototype pollution`);return ut.includes(e)?t.onDangerousProperty(e):e}var un=re.getMetaDataSymbol();function _c(e,t){if(!e||typeof e!="object")return{};if(!t)return e;let r={};for(let n in e)if(n.startsWith(t)){let s=n.substring(t.length);r[s]=e[n]}else r[n]=e[n];return r}function An(e,t,r,n){return Os(e,t,r,n)}function Os(e,t,r,n){let s,a={};for(let c=0;c<e.length;c++){let l=e[c],o=Rc(l);if(o!==void 0&&o!==t.textNodeName){let d=_c(l[":@"]||{},t.attributeNamePrefix);r.push(o,d)}if(o===t.textNodeName)s===void 0?s=l[o]:s+=""+l[o];else{if(o===void 0)continue;if(l[o]){let d=Os(l[o],t,r,n),p=Oc(d,t);if(Object.keys(d).length===0&&t.alwaysCreateTextNode&&(d[t.textNodeName]=""),l[":@"]?Lc(d,l[":@"],n,t):Object.keys(d).length===1&&d[t.textNodeName]!==void 0&&!t.alwaysCreateTextNode?d=d[t.textNodeName]:Object.keys(d).length===0&&(t.alwaysCreateTextNode?d[t.textNodeName]="":d=""),l[un]!==void 0&&typeof d=="object"&&d!==null&&(d[un]=l[un]),a[o]!==void 0&&Object.prototype.hasOwnProperty.call(a,o))Array.isArray(a[o])||(a[o]=[a[o]]),a[o].push(d);else{let h=t.jPath?n.toString():n;t.isArray(o,h,p)?a[o]=[d]:a[o]=d}o!==void 0&&o!==t.textNodeName&&r.pop()}}}return typeof s=="string"?s.length>0&&(a[t.textNodeName]=s):s!==void 0&&(a[t.textNodeName]=s),a}function Rc(e){let t=Object.keys(e);for(let r=0;r<t.length;r++){let n=t[r];if(n!==":@")return n}}function Lc(e,t,r,n){if(t){let s=Object.keys(t),a=s.length;for(let c=0;c<a;c++){let l=s[c],o=l.startsWith(n.attributeNamePrefix)?l.substring(n.attributeNamePrefix.length):l,d=n.jPath?r.toString()+"."+o:r;n.isArray(l,d,!0,!0)?e[l]=[t[l]]:e[l]=t[l]}}}function Oc(e,t){let{textNodeName:r}=t,n=Object.keys(e).length;return!!(n===0||n===1&&(e[r]||typeof e[r]=="boolean"||e[r]===0))}var ze=class{constructor(t){this.externalEntities={},this.options=Ts(t)}parse(t,r){if(typeof t!="string"&&t.toString)t=t.toString();else if(typeof t!="string")throw new Error("XML data is accepted in String or Bytes[] form.");if(r){r===!0&&(r={});let a=Vt(t,r);if(a!==!0)throw Error(`${a.err.msg}:${a.err.line}:${a.err.col}`)}let n=new Et(this.options,this.externalEntities),s=n.parseXml(t);return this.options.preserveOrder||s===void 0?s:An(s,this.options,n.matcher,n.readonlyMatcher)}addEntity(t,r){if(r.indexOf("&")!==-1)throw new Error("Entity value can't have '&'");if(t.indexOf("&")!==-1||t.indexOf(";")!==-1)throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for '&#xD;'");if(r==="&")throw new Error("An entity with value '&' is not permitted");this.externalEntities[t]=r}static getMetaDataSymbol(){return re.getMetaDataSymbol()}};var vs={validate:Vt};var vc=/\.(?:avif|bmp|css|csv|docx?|eot|gif|gz|ico|jpe?g|js|json|map|mp3|mp4|mov|ogg|otf|pdf|png|pptx?|rar|rss|svg|tar|tiff?|ttf|txt|wav|webm|webp|woff2?|xlsx?|xml|zip)$/i;function Y(e,t,{includeQuery:r=!1}={}){let n;try{n=t?new URL(e,t):new URL(e)}catch{return null}return n.protocol!=="http:"&&n.protocol!=="https:"?null:(n.hash="",r||(n.search=""),n.pathname.length>1&&n.pathname.endsWith("/")&&(n.pathname=n.pathname.replace(/\/+$/,"")),n.href)}function de(e,t){try{return new URL(e).origin===t}catch{return!1}}function tr(e){try{let t=new URL(e);return!vc.test(t.pathname)}catch{return!1}}var pn=10*1024*1024,Ds=100,kc=5e4,Bc=new ze({ignoreAttributes:!1,removeNSPrefix:!0,trimValues:!0});function rr(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function ks(e){return(e===void 0?[]:Array.isArray(e)?e:[e]).flatMap(r=>{let n=rr(r)?.loc;return typeof n=="string"?[n]:[]})}function Pc(e,t,r){let s=t.toLowerCase().endsWith(".gz")||r.includes("gzip")||e[0]===31&&e[1]===139?Dc(e):e;if(s.byteLength>pn)throw new Error(`sitemap exceeds ${pn} bytes after decompression: ${t}`);return s.toString("utf8").replace(/^\uFEFF/,"")}function Bs(e,t){let r=vs.validate(e);if(r!==!0)throw new Error(`invalid sitemap XML at ${t}: ${r.err.msg}`);let n=rr(Bc.parse(e)),s=rr(n?.sitemapindex);if(s)return{kind:"index",locations:ks(s.sitemap)};let a=rr(n?.urlset);if(a)return{kind:"urlset",locations:ks(a.url)};throw new Error(`XML is not a sitemap urlset or sitemapindex: ${t}`)}function Ps(e){return{fetch:e.fetch??globalThis.fetch,timeout:e.timeout,maxRedirects:e.maxRedirects??10,retries:e.retries??2,signal:e.signal,gate:e.requestGate?async t=>e.requestGate?.(t):void 0,onEvent:e.onEvent}}async function Ms(e,t){let{response:r}=await Oe(e,{headers:{accept:"application/xml,text/xml,application/gzip,text/plain;q=0.9,*/*;q=0.1","user-agent":t.userAgent}},Ps(t));if(!r.ok)throw await r.body?.cancel(),new Error(`sitemap returned HTTP ${r.status}: ${e}`);let{buffer:n}=await ve(r,pn);return Pc(n,e,r.headers.get("content-type")?.toLowerCase()??"")}async function Mc(e,t){try{let r=await Ms(e,t);return Bs(r,e),!0}catch{return!1}}async function Us(e,t){let r=Y(e,void 0);if(!r)throw new Error(`invalid start URL: ${e}`);let n=new URL(r).origin,s=new URL("/robots.txt",n).href;try{if(t.robotsBody!==void 0)for(let a of t.robotsBody.matchAll(/^sitemap:\s*(\S+)\s*$/gim)){let c=a[1];if(!c)continue;let l=Y(c,s,{includeQuery:!0});if(l&&de(l,n))return l}else{let{response:a}=await Oe(s,{headers:{accept:"text/plain,*/*;q=0.1","user-agent":t.userAgent}},Ps({...t,siteOrigin:n}));if(a.ok){let{text:c}=await ve(a,524288);for(let l of c.matchAll(/^sitemap:\s*(\S+)\s*$/gim)){let o=l[1];if(!o)continue;let d=Y(o,s,{includeQuery:!0});if(d&&de(d,n))return d}}else await a.body?.cancel()}}catch{}for(let a of["/sitemap.xml","/sitemap.xml.gz","/sitemap_index.xml"]){let c=new URL(a,n).href;if(await Mc(c,{...t,siteOrigin:n}))return c}return null}async function nr(e,t){let r=Y(e,void 0,{includeQuery:!0});if(!r)throw new Error(`invalid sitemap URL: ${e}`);let n=new URL(r).origin,s=[r],a=new Set,c=[],l=new Set,o=t.maxUrls??kc,d=!1;for(;s.length>0&&a.size<Ds&&c.length<o;){let p=s.shift();if(a.has(p))continue;a.add(p);let h=Bs(await Ms(p,t),p);if(h.kind==="index"){for(let f of h.locations){let m=Y(f,p,{includeQuery:!0});m&&de(m,n)&&!a.has(m)&&!s.includes(m)&&s.push(m)}s.sort();continue}for(let f of h.locations){let m=Y(f,p,{includeQuery:t.includeQuery??!1});if(!(!m||l.has(m)||!de(m,t.siteOrigin)||!tr(m))&&(l.add(m),c.push(m),c.length>=o)){d=!0;break}}}return(s.length>0||a.size>=Ds)&&(d=!0),{url:r,urls:c.sort(),sitemapCount:a.size,truncated:d,error:null}}async function hn(e,t){await e.onEvent?.(t)}async function ue(e,t={}){let r=Te(e),n=Y(r.url,void 0,{includeQuery:r.includeQuery});if(!n)throw new Error(`invalid start URL: ${r.url}`);let s=new URL(n).origin,a=t.fetch??globalThis.fetch,c=Ge(r.delay),l=t.logger??Wt;await hn(t,{type:"plan-start",url:n});let o=await Kt(n,{userAgent:_e,timeout:r.timeout,maxRedirects:r.maxRedirects,retries:2,fetch:a,signal:t.signal,requestGate:c,onEvent:t.onEvent,logger:l});await hn(t,{type:"robots",robots:o});let d=null;r.sitemap==="auto"?d=await Us(n,{timeout:r.timeout,maxRedirects:r.maxRedirects,userAgent:_e,fetch:a,signal:t.signal,requestGate:c,onEvent:t.onEvent,robotsBody:o.body}):r.sitemap!=="none"&&(d=r.sitemap);let p=null;if(d)try{p=await nr(d,{siteOrigin:s,includeQuery:r.includeQuery,maxUrls:5e4,timeout:r.timeout,maxRedirects:r.maxRedirects,retries:2,userAgent:_e,fetch:a,signal:t.signal,requestGate:c,onEvent:t.onEvent})}catch(m){p={url:d,urls:[],sitemapCount:0,truncated:!1,error:m instanceof Error?m.message:String(m)},l.warn(`Could not load sitemap ${d}: ${p.error}`)}let h=p?[...new Set([n,...p.urls])].sort((m,y)=>m===n?-1:y===n?1:m.localeCompare(y)):[n],f=p?h.length:null;return await hn(t,{type:"sitemap",sitemap:p,candidateCount:f}),{planVersion:1,config:r,startUrl:n,origin:s,userAgent:_e,robots:o,sitemap:p,candidateUrls:h,candidateCount:f,mode:p?"sitemap":"links"}}import{createHash as Li}from"node:crypto";var Uc=new Set([65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]),M="\uFFFD",u;(function(e){e[e.EOF=-1]="EOF",e[e.NULL=0]="NULL",e[e.TABULATION=9]="TABULATION",e[e.CARRIAGE_RETURN=13]="CARRIAGE_RETURN",e[e.LINE_FEED=10]="LINE_FEED",e[e.FORM_FEED=12]="FORM_FEED",e[e.SPACE=32]="SPACE",e[e.EXCLAMATION_MARK=33]="EXCLAMATION_MARK",e[e.QUOTATION_MARK=34]="QUOTATION_MARK",e[e.AMPERSAND=38]="AMPERSAND",e[e.APOSTROPHE=39]="APOSTROPHE",e[e.HYPHEN_MINUS=45]="HYPHEN_MINUS",e[e.SOLIDUS=47]="SOLIDUS",e[e.DIGIT_0=48]="DIGIT_0",e[e.DIGIT_9=57]="DIGIT_9",e[e.SEMICOLON=59]="SEMICOLON",e[e.LESS_THAN_SIGN=60]="LESS_THAN_SIGN",e[e.EQUALS_SIGN=61]="EQUALS_SIGN",e[e.GREATER_THAN_SIGN=62]="GREATER_THAN_SIGN",e[e.QUESTION_MARK=63]="QUESTION_MARK",e[e.LATIN_CAPITAL_A=65]="LATIN_CAPITAL_A",e[e.LATIN_CAPITAL_Z=90]="LATIN_CAPITAL_Z",e[e.RIGHT_SQUARE_BRACKET=93]="RIGHT_SQUARE_BRACKET",e[e.GRAVE_ACCENT=96]="GRAVE_ACCENT",e[e.LATIN_SMALL_A=97]="LATIN_SMALL_A",e[e.LATIN_SMALL_Z=122]="LATIN_SMALL_Z"})(u||(u={}));var z={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function sr(e){return e>=55296&&e<=57343}function Fs(e){return e>=56320&&e<=57343}function Hs(e,t){return(e-55296)*1024+9216+t}function ir(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function ar(e){return e>=64976&&e<=65007||Uc.has(e)}var T;(function(e){e.controlCharacterInInputStream="control-character-in-input-stream",e.noncharacterInInputStream="noncharacter-in-input-stream",e.surrogateInInputStream="surrogate-in-input-stream",e.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",e.endTagWithAttributes="end-tag-with-attributes",e.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",e.unexpectedSolidusInTag="unexpected-solidus-in-tag",e.unexpectedNullCharacter="unexpected-null-character",e.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",e.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",e.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",e.missingEndTagName="missing-end-tag-name",e.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",e.unknownNamedCharacterReference="unknown-named-character-reference",e.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",e.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",e.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",e.eofBeforeTagName="eof-before-tag-name",e.eofInTag="eof-in-tag",e.missingAttributeValue="missing-attribute-value",e.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",e.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",e.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",e.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",e.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",e.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",e.missingDoctypePublicIdentifier="missing-doctype-public-identifier",e.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",e.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",e.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",e.cdataInHtmlContent="cdata-in-html-content",e.incorrectlyOpenedComment="incorrectly-opened-comment",e.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",e.eofInDoctype="eof-in-doctype",e.nestedComment="nested-comment",e.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",e.eofInComment="eof-in-comment",e.incorrectlyClosedComment="incorrectly-closed-comment",e.eofInCdata="eof-in-cdata",e.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",e.nullCharacterReference="null-character-reference",e.surrogateCharacterReference="surrogate-character-reference",e.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",e.controlCharacterReference="control-character-reference",e.noncharacterCharacterReference="noncharacter-character-reference",e.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",e.missingDoctypeName="missing-doctype-name",e.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",e.duplicateAttribute="duplicate-attribute",e.nonConformingDoctype="non-conforming-doctype",e.missingDoctype="missing-doctype",e.misplacedDoctype="misplaced-doctype",e.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",e.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",e.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",e.openElementsLeftAfterEof="open-elements-left-after-eof",e.abandonedHeadElementChild="abandoned-head-element-child",e.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",e.nestedNoscriptInHead="nested-noscript-in-head",e.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"})(T||(T={}));var Hc=65536,or=class{constructor(t){this.handler=t,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=Hc,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+ +(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(t,r){let{line:n,col:s,offset:a}=this,c=s+r,l=a+r;return{code:t,startLine:n,endLine:n,startCol:c,endCol:c,startOffset:l,endOffset:l}}_err(t){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(t,0)))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(t){if(this.pos!==this.html.length-1){let r=this.html.charCodeAt(this.pos+1);if(Fs(r))return this.pos++,this._addGap(),Hs(t,r)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,u.EOF;return this._err(T.surrogateInInputStream),t}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}write(t,r){this.html.length>0?this.html+=t:this.html=t,this.endOfChunkHit=!1,this.lastChunkWritten=r}insertHtmlAtCurrentPos(t){this.html=this.html.substring(0,this.pos+1)+t+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(t,r){if(this.pos+t.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(r)return this.html.startsWith(t,this.pos);for(let n=0;n<t.length;n++)if((this.html.charCodeAt(this.pos+n)|32)!==t.charCodeAt(n))return!1;return!0}peek(t){let r=this.pos+t;if(r>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,u.EOF;let n=this.html.charCodeAt(r);return n===u.CARRIAGE_RETURN?u.LINE_FEED:n}advance(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,u.EOF;let t=this.html.charCodeAt(this.pos);return t===u.CARRIAGE_RETURN?(this.isEol=!0,this.skipNextNewLine=!0,u.LINE_FEED):t===u.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()):(this.skipNextNewLine=!1,sr(t)&&(t=this._processSurrogate(t)),this.handler.onParseError===null||t>31&&t<127||t===u.LINE_FEED||t===u.CARRIAGE_RETURN||t>159&&t<64976||this._checkForProblematicCharacters(t),t)}_checkForProblematicCharacters(t){ir(t)?this._err(T.controlCharacterInInputStream):ar(t)&&this._err(T.noncharacterInInputStream)}retreat(t){for(this.pos-=t;this.pos<this.lastGapPos;)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=!1}};var v;(function(e){e[e.CHARACTER=0]="CHARACTER",e[e.NULL_CHARACTER=1]="NULL_CHARACTER",e[e.WHITESPACE_CHARACTER=2]="WHITESPACE_CHARACTER",e[e.START_TAG=3]="START_TAG",e[e.END_TAG=4]="END_TAG",e[e.COMMENT=5]="COMMENT",e[e.DOCTYPE=6]="DOCTYPE",e[e.EOF=7]="EOF",e[e.HIBERNATION=8]="HIBERNATION"})(v||(v={}));function cr(e,t){for(let r=e.attrs.length-1;r>=0;r--)if(e.attrs[r].name===t)return e.attrs[r].value;return null}var Yc=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function Qs(e){return e>=55296&&e<=57343||e>1114111?65533:Yc.get(e)??e}function Ys(e){let t=atob(e),r=t.length&-2,n=new Uint16Array(r/2);for(let s=0,a=0;s<r;s+=2){let c=t.charCodeAt(s),l=t.charCodeAt(s+1);n[a++]=c|l<<8}return n}var gn=Ys("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWlsN2E6ZHIAAOA12CjdciJlZW4AOGFjAHkARWRjAHkAXGRwAGYAAOA12FzdYwByAADgNdjA3IALQUJFSGFiY2RlZmdoamxtbm9wcnN0dXYAXhxtHHEcdRx5HN8cBx0dHTwd3B3tHfEdAR4EHh0eLB5FHrwewx7hHgkfPR9LH4ABYXJ0AGQcZxxpHHIA8gBvB/IAxQLhIWlsAKAbKeEhcnIAoA4pZ6BmIgCgiyphAHIAAKBiKWMJjRwAAJAcAACVHAAAAAAAAAAAAACZHJwcAACmHKgcrRwAANIc9SF0ZTph7SJwdHl2AKC0KXIAYQDuAFoG4iFkYbtjZwAAoegnZGyhHKMcAKCRKeUAiwYAoIUqdQBvADuAqwCrQHIAgKOQIWJmaGxwc3QAuhy/HMIcxBzHHMoczhxmoOQhcwAAoB8pcwAAoB0p6wCyGnAAAKCrIWwAAKA5KWkAbQAAoHMpbAAAoKIhAKGrKmFl1hzaHGkAbAAAoBkpc6CtKgDgrSoA/oABYWJyAOUc6RztHHIAcgAAoAwpcgBrAACgcicAAWFr8Rz4HGMAAAFla/Yc9xx7YFtgAAFlc/wc/hwAoIspbAAAAWR1Ax0FHQCgjykAoI0pAAJhZXV5Dh0RHRodHB3yIW9uPmEAAWRpFR0YHWkAbAA8YewAowbiAPccO2QAAmNxcnMkHScdLB05HWEAAKA2KXUAbwDyoBwgqhEAAWR1MB00HeghYXIAoGcpcyJoYXIAAKBLKWgAAKCyIQCiZCJmZ3FzRB1FB5Qdnh10AIACYWhscnQATh1WHWUdbB2NHXIicm93AHSgkCFhAOkAzxxhI3Jwb29uAAABZHVeHWId7yF3bgCgvSFwAACgvCHlJGZ0YXJyb3dzAKDHIWkiZ2h0AIABYWhzAHUdex2DHXIicm93APOglCGdBmEAcgBwAG8AbwBuAPMAzgtxAHUAaQBnAGEAcgByAG8A9wBlGugkcmVldGltZXMAoMsi8aFkIk0HAACaHWwAYQBuAPQAXgcAon0qY2Rnc6YdqR2xHbcdYwAAoKgqbwB0AG+gfypyoIEqAKCDKmXg2iIA/nMAAKCTKoACYWRlZ3MAwB3GHcod1h3ZHXAAcAByAG8A+ACmHG8AdAAAoNYicQAAAWdxzx3SHXQA8gBGB2cAdADyAHQcdADyAFMHaQDtAGMHgAFpbHIA4h3mHeod8yFodACgfClvAG8A8gDKBgDgNdgp3UWgdiIAoJEqYQH1Hf4dcgAAAWR1YB35HWygvCEAoGopbABrAACghCVjAHkAWWQAomoiYWNodAweDx4VHhkecgDyAGsdbwByAG4AZQDyAGAW4SFyZACgaylyAGkAAKD6JQABaW8hHiQe5CFvdEBh9SFzdGGgsCPjIWhlAKCwIwACRWFlczMeNR48HkEeAKBoInAAcKCJKvIhb3gAoIkqcaCHKvGghyo0HmkAbQAAoOYiAARhYm5vcHR3elIeXB5fHoUelh6mHqsetB4AAW5yVh5ZHmcAAKDsJ3IAAKD9IXIA6wCwBmcAgAFsbXIAZh52Hnse5SFmdAABYXKIB2weaQBnAGgAdABhAHIAcgBvAPcAkwfhInBzdG8AoPwnaQBnAGgAdABhAHIAcgBvAPcAmgdwI2Fycm93AAABbHKNHpEeZQBmAPQAxhxpImdodAAAoKwhgAFhZmwAnB6fHqIecgAAoIUpAOA12F3ddQBzAACgLSppIm1lcwAAoDQqYQGvHrMecwB0AACgFyLhAIoOZaHKJbkeRhLuIWdlAKDKJWEAcgBsoCgAdAAAoJMpgAJhY2htdADMHs8e1R7bHt0ecgDyAJ0GbwByAG4AZQDyANYWYQByAGSgyyEAoG0pAKAOIHIAaQAAoL8iAANhY2hpcXTrHu8e1QfzHv0eBh/xIXVvAKA5IHIAAOA12MHcbQDloXIi+h4AAPweAKCNKgCgjyoAAWJ19xwBH28AcqAYIACgGiDyIW9rQmEAhDwAO2NkaGlscXJCBhcfxh0gHyQfKB8sHzEfAAFjaRsfHR8AoKYqcgAAoHkqcgBlAOUAkx3tIWVzAKDJIuEhcnIAoHYpdSJlc3QAAKB7KgABUGk1HzkfYQByAACglillocMlAgdfEnIAAAFkdUIfRx9zImhhcgAAoEop6CFhcgCgZikAAWVuTx9WH3IjdG5lcXEAAOBoIgD+xQBUHwAHRGFjZGVmaGlsbm9wc3VuH3Ifoh+rH68ftx+7H74f5h/uH/MfBwj/HwsgxCFvdACgOiIAAmNscHJ5H30fiR+eH3IAO4CvAK9AAAFldIEfgx8AoEImZaAgJ3MAZQAAoCAnc6CmIXQAbwCAoaYhZGx1AJQfmB+cH28AdwDuAHkDZQBmAPQA6gbwAOkO6yFlcgCgriUAAW95ph+qH+0hbWEAoCkqPGThIXNoAKAUIOElc3VyZWRhbmdsZQCgISJyAADgNdgq3W8AAKAnIYABY2RuAMQfyR/bH3IAbwA7gLUAtUBhoiMi0B8AANMf1x9zAPQAKxFpAHIAAKDwKm8AdAA7gLcAt0B1AHMA4qESIh4TAADjH3WgOCIAoCoqYwHqH+0fcAAAoNsq8gB+GnAAbAB1APMACAgAAWRw9x/7H+UhbHMAoKciZgAA4DXYXt0AAWN0AyAHIHIAAOA12MLc8CFvcwCgPiJsobwDECAVIPQiaW1hcACguCJhAPAAEyAADEdMUlZhYmNkZWZnaGlqbG1vcHJzdHV2dzwgRyBmIG0geSCqILgg2iDeIBEhFSEyIUMhTSFQIZwhnyHSIQAiIyKLIrEivyIUIwABZ3RAIEMgAODZIjgD9uBrItIgBwmAAWVsdABNIF8gYiBmAHQAAAFhclMgWCByInJvdwAAoM0h6SRnaHRhcnJvdwCgziEA4NgiOAP24Goi0iBfCekkZ2h0YXJyb3cAoM8hAAFEZHEgdSDhIXNoAKCvIuEhc2gAoK4igAJiY25wdACCIIYgiSCNIKIgbABhAACgByL1IXRlRGFnAADgICLSIACiSSJFaW9wlSCYIJwgniAA4HAqOANkAADgSyI4A3MASWFyAG8A+AAyCnUAcgBhoG4mbADzoG4mmwjzAa8gAACzIHAAO4CgAKBAbQBwAOXgTiI4AyoJgAJhZW91eQDBIMogzSDWINkg8AHGIAAAyCAAoEMqbwBuAEhh5CFpbEZhbgBnAGSgRyJvAHQAAOBtKjgDcAAAoEIqPWThIXNoAKATIACjYCJBYWRxc3jpIO0g+SD+IAIhDCFyAHIAAKDXIXIAAAFocvIg9SBrAACgJClvoJch9wAGD28AdAAA4FAiOAN1AGkA9gC7CAABZWkGIQohYQByAACgKCntAN8I6SFzdPOgBCLlCHIAAOA12CvdAAJFZXN0/wgcISshLiHxoXEiIiEAABMJ8aFxIgAJAAAnIWwAYQBuAPQAEwlpAO0AGQlyoG8iAKBvIoABQWFwADghOyE/IXIA8gBeIHIAcgAAoK4hYQByAACg8ipzogsiSiEAAAAAxwtkoPwiAKD6ImMAeQBaZIADQUVhZGVzdABcIV8hYiFmIWkhkyGWIXIA8gBXIADgZiI4A3IAcgAAoJohcgAAoCUggKFwImZxcwBwIYQhjiF0AAABYXJ1IXohcgByAG8A9wBlIWkAZwBoAHQAYQByAHIAbwD3AD4h8aFwImAhAACKIWwAYQBuAPQAZwlz4H0qOAMAoG4iaQDtAG0JcqBuImkA5aDqIkUJaQDkADoKAAFwdKMhpyFmAADgNdhf3YCBrAA7aW4AriGvIcchrEBuAIChCSJFZHYAtyG6Ib8hAOD5IjgDbwB0AADg9SI4A+EB1gjEIcYhAKD3IgCg9iJpAHagDCLhAagJzyHRIQCg/iIAoP0igAFhb3IA2CHsIfEhcgCAoSYiYXN0AOAh5SHpIWwAbABlAOwAywhsAADg/SrlIADgAiI4A2wiaW50AACgFCrjoYAi9yEAAPohdQDlAJsJY+CvKjgDZaCAIvEAkwkAAkFhaXQHIgoiFyIeInIA8gBsIHIAcgAAoZshY3cRIhQiAOAzKTgDAOCdITgDZyRodGFycm93AACgmyFyAGkA5aDrIr4JgANjaGltcHF1AC8iPCJHIpwhTSJQIloigKGBImNlcgA2Iv0JOSJ1AOUABgoA4DXYw9zvIXJ0bQKdIQAAAABEImEAcgDhAOEhbQBloEEi8aBEIiYKYQDyAMsIcwB1AAABYnBWIlgi5QDUCeUA3wmAAWJjcABgInMieCKAoYQiRWVzAGci7glqIgDgxSo4A2UAdABl4IIi0iBxAPGgiCJoImMAZaCBIvEA/gmAoYUiRWVzAH8iFgqCIgDgxio4A2UAdABl4IMi0iBxAPGgiSKAIgACZ2lscpIilCKaIpwi7AAMCWwAZABlADuA8QDxQOcAWwlpI2FuZ2xlAAABbHKkIqoi5SFmdGWg6iLxAEUJaSJnaHQAZaDrIvEAvgltoL0DAKEjAGVzuCK8InIAbwAAoBYhcAAAoAcggARESGFkZ2lscnMAziLSItYi2iLeIugi7SICIw8j4SFzaACgrSLhIXJyAKAEKXAAAOBNItIg4SFzaACgrCIAAWV04iLlIgDgZSLSIADgPgDSIG4iZmluAACg3imAAUFldADzIvci+iJyAHIAAKACKQDgZCLSIHLgPADSIGkAZQAA4LQi0iAAAUF0BiMKI3IAcgAAoAMp8iFpZQDgtSLSIGkAbQAA4Dwi0iCAAUFhbgAaIx4jKiNyAHIAAKDWIXIAAAFociMjJiNrAACgIylvoJYh9wD/DuUhYXIAoCcpUxJqFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVCMAAF4jaSN/I4IjjSOeI8AUAAAAAKYjwCMAANoj3yMAAO8jHiQvJD8kRCQAAWNzVyNsFHUAdABlADuA8wDzQAABaXlhI2cjcgBjoJoiO4D0APRAPmSAAmFiaW9zAHEjdCN3I3EBeiNzAOgAdhTsIWFjUWF2AACgOCrvIWxkAKC8KewhaWdTYQABY3KFI4kjaQByAACgvykA4DXYLN1vA5QjAAAAAJYjAACcI24A22JhAHYAZQA7gPIA8kAAoMEpAAFibaEjjAphAHIAAKC1KQACYWNpdKwjryO6I70jcgDyAFkUAAFpcrMjtiNyAACgvinvIXNzAKC7KW4A5QDZCgCgwCmAAWFlaQDFI8gjyyNjAHIATWFnAGEAyWOAAWNkbgDRI9Qj1iPyIW9uv2MAoLYpdQDzAHgBcABmAADgNdhg3YABYWVsAOQj5yPrI3IAAKC3KXIAcAAAoLkpdQDzAHwBAKMoImFkaW9zdvkj/CMPJBMkFiQbJHIA8gBeFIChXSplZm0AAyQJJAwkcgBvoDQhZgAAoDQhO4CqAKpAO4C6ALpA5yFvZgCgtiJyAACgVipsIm9wZQAAoFcqAKBbKoABY2xvACMkJSQrJPIACCRhAHMAaAA7gPgA+EBsAACgmCJpAGwBMyQ4JGQAZQA7gPUA9UBlAHMAYaCXInMAAKA2Km0AbAA7gPYA9kDiIWFyAKA9I+EKXiQAAHokAAB8JJQkAACYJKkkAAAAALUkEQsAAPAkAAAAAAQleiUAAIMlcgCAoSUiYXN0AGUkbyQBCwCBtgA7bGokayS2QGwAZQDsABgDaQJ1JAAAAAB4JG0AAKDzKgCg/Sp5AD9kcgCAAmNpbXB0AIUkiCSLJJkSjyRuAHQAJWBvAGQALmBpAGwAAKAwIOUhbmsAoDEgcgAA4DXYLd2AAWltbwCdJKAkpCR2oMYD1WNtAGEA9AD+B24AZQAAoA4m9KHAA64kAAC0JGMjaGZvcmsAAKDUItZjAAFhdbgkxCRuAAABY2u9JMIkawBooA8hAKAOIfYAaRpzAACkKwBhYmNkZW1zdNMkIRPXJNsk4STjJOck6yTjIWlyAKAjKmkAcgAAoCIqAAFvdYsW3yQAoCUqAKByKm4AO4CxALFAaQBtAACgJip3AG8AAKAnKoABaXB1APUk+iT+JO4idGludACgFSpmAADgNdhh3W4AZAA7gKMAo0CApHoiRWFjZWlub3N1ABMlFSUYJRslTCVRJVklSSV1JQCgsypwAACgtyp1AOUAPwtjoK8qgKJ6ImFjZW5zACclLSU0JTYlSSVwAHAAcgBvAPgAFyV1AHIAbAB5AGUA8QA/C/EAOAuAAWFlcwA8JUElRSXwInByb3gAoLkqcQBxAACgtSppAG0AAKDoImkA7QBEC20AZQDzoDIgIguAAUVhcwBDJVclRSXwAEAlgAFkZnAATwtfJXElgAFhbHMAZSVpJW0l7CFhcgCgLiPpIW5lAKASI/UhcmYAoBMjdKAdIu8AWQvyIWVsAKCwIgABY2l9JYElcgAA4DXYxdzIY24iY3NwAACgCCAAA2Zpb3BzdZElKxuVJZolnyWkJXIAAOA12C7dcABmAADgNdhi3XIiaW1lAACgVyBjAHIAAOA12MbcgAFhZW8AqiW6JcAldAAAAWVpryW2JXIAbgBpAG8AbgDzABkFbgB0AACgFipzAHQAZaA/APEACRj0AG0LgApBQkhhYmNkZWZoaWxtbm9wcnN0dXgA4yXyJfYl+iVpJpAmpia9JtUm5ib4JlonaCdxJ3UnnietJ7EnyCfiJ+cngAFhcnQA6SXsJe4lcgDyAJkM8gD6AuEhaWwAoBwpYQByAPIA3BVhAHIAAKBkKYADY2RlbnFydAAGJhAmEyYYJiYmKyZaJgABZXUKJg0mAOA9IjEDdABlAFVhaQDjACAN7SJwdHl2AKCzKWcAgKHpJ2RlbAAgJiImJCYAoJIpAKClKeUA9wt1AG8AO4C7ALtAcgAApZIhYWJjZmhscHN0dz0mQCZFJkcmSiZMJk4mUSZVJlgmcAAAoHUpZqDlIXMAAKAgKQCgMylzAACgHinrALka8ACVHmwAAKBFKWkAbQAAoHQpbAAAoKMhAKCdIQABYWleJmImaQBsAACgGilvAG6gNiJhAGwA8wB2C4ABYWJyAG8mciZ2JnIA8gAvEnIAawAAoHMnAAFha3omgSZjAAABZWt/JoAmfWBdYAABZXOFJocmAKCMKWwAAAFkdYwmjiYAoI4pAKCQKQACYWV1eZcmmiajJqUm8iFvbllhAAFkaZ4moSZpAGwAV2HsAA8M4gCAJkBkAAJjbHFzrSawJrUmuiZhAACgNylkImhhcgAAoGkpdQBvAPKgHSCjAWgAAKCzIYABYWNnAMMm0iaUC2wAgKEcIWlwcwDLJs4migxuAOUAoAxhAHIA9ADaC3QAAKCtJYABaWxyANsm3ybjJvMhaHQAoH0pbwBvAPIANgwA4DXYL90AAWFv6ib1JnIAAAFkde8m8SYAoMEhbKDAIQCgbCl2oMED8WOAAWducwD+Jk4nUCdoAHQAAANhaGxyc3QKJxInISc1Jz0nRydyInJvdwB0oJIhYQDpAFYmYSNycG9vbgAAAWR1GiceJ28AdwDuAPAmcAAAoMAh5SFmdAABYWgnJy0ncgByAG8AdwDzAAkMYQByAHAAbwBvAG4A8wATBGklZ2h0YXJyb3dzAACgySFxAHUAaQBnAGEAcgByAG8A9wBZJugkcmVldGltZXMAoMwiZwDaYmkAbgBnAGQAbwB0AHMAZQDxABwYgAFhaG0AYCdjJ2YncgDyAAkMYQDyABMEAKAPIG8idXN0AGGgsSPjIWhlAKCxI+0haWQAoO4qAAJhYnB0fCeGJ4knmScAAW5ygCeDJ2cAAKDtJ3IAAKD+IXIA6wAcDIABYWZsAI8nkieVJ3IAAKCGKQDgNdhj3XUAcwAAoC4qaSJtZXMAAKA1KgABYXCiJ6gncgBnoCkAdAAAoJQp7yJsaW50AKASKmEAcgDyADwnAAJhY2hxuCe8J6EMwCfxIXVvAKA6IHIAAOA12MfcAAFidYAmxCdvAPKgGSCoAYABaGlyAM4n0ifWJ3IAZQDlAE0n7SFlcwCgyiJpAIChuSVlZmwAXAxjEt4n9CFyaQCgzinsInVoYXIAoGgpAKAeIWENBSgJKA0oSyhVKIYoAACLKLAoAAAAAOMo5ygAABApJCkxKW0pcSmHKaYpAACYKgAAAACxKmMidXRlAFthcQB1AO8ABR+ApHsiRWFjZWlucHN5ABwoHignKCooLygyKEEoRihJKACgtCrwASMoAAAlKACguCpvAG4AYWF1AOUAgw1koLAqaQBsAF9hcgBjAF1hgAFFYXMAOCg6KD0oAKC2KnAAAKC6KmkAbQAAoOki7yJsaW50AKATKmkA7QCIDUFkbwB0AGKixSKRFgAAAABTKACgZiqAA0FhY21zdHgAYChkKG8ocyh1KHkogihyAHIAAKDYIXIAAAFocmkoayjrAJAab6CYIfcAzAd0ADuApwCnQGkAO2D3IWFyAKApKW0AAAFpbn4ozQBuAHUA8wDOAHQAAKA2J3IA7+A12DDdIxkAAmFjb3mRKJUonSisKHIAcAAAoG8mAAFoeZkonChjAHkASWRIZHIAdABtAqUoAAAAAKgoaQDkAFsPYQByAGEA7ABsJDuArQCtQAABZ22zKLsobQBhAAChwwNmdroouijCY4CjPCJkZWdsbnByAMgozCjPKNMo1yjaKN4obwB0AACgairxoEMiCw5FoJ4qAKCgKkWgnSoAoJ8qZQAAoEYi7CF1cwCgJCrhIXJyAKByKWEAcgDyAPwMAAJhZWl07Sj8KAEpCCkAAWxz8Sj4KGwAcwBlAHQAbQDpAH8oaABwAACgMyrwImFyc2wAoOQpAAFkbFoPBSllAACgIyNloKoqc6CsKgDgrCoA/oABZmxwABUpGCkfKfQhY3lMZGKgLwBhoMQpcgAAoD8jZgAA4DXYZN1hAAABZHIoKRcDZQBzAHWgYCZpAHQAAKBgJoABY3N1ADYpRilhKQABYXU6KUApcABzoJMiAOCTIgD+cABzoJQiAOCUIgD+dQAAAWJwSylWKQChjyJlcz4NUCllAHQAZaCPIvEAPw0AoZAiZXNIDVspZQB0AGWgkCLxAEkNAKGhJWFmZilbBHIAZQFrKVwEAKChJWEAcgDyAAMNAAJjZW10dyl7KX8pgilyAADgNdjI3HQAbQDuAM4AaQDsAAYpYQByAOYAVw0AAWFyiimOKXIA5qAGJhESAAFhbpIpoylpImdodAAAAWVwmSmgKXAAcwBpAGwAbwDuANkXaADpAKAkcwCvYIACYmNtbnAArin8KY4NJSooKgCkgiJFZGVtbnByc7wpvinCKcgpzCnUKdgp3CkAoMUqbwB0AACgvSpkoIYibwB0AACgwyr1IWx0AKDBKgABRWXQKdIpAKDLKgCgiiLsIXVzAKC/KuEhcnIAoHkpgAFlaXUA4inxKfQpdAAAoYIiZW7oKewpcQDxoIYivSllAHEA8aCKItEpbQAAoMcqAAFicPgp+ikAoNUqAKDTKmMAgKJ7ImFjZW5zAAcqDSoUKhYqRihwAHAAcgBvAPgAIyh1AHIAbAB5AGUA8QCDDfEAfA2AAWFlcwAcKiIqPShwAHAAcgBvAPgAPChxAPEAOShnAACgaiYApoMiMTIzRWRlaGxtbnBzPCo/KkIqRSpHKlIqWCpjKmcqaypzKncqO4C5ALlAO4CyALJAO4CzALNAAKDGKgABb3NLKk4qdAAAoL4qdQBiAACg2CpkoIcibwB0AACgxCpzAAABb3VdKmAqbAAAoMknYgAAoNcq4SFycgCgeyn1IWx0AKDCKgABRWVvKnEqAKDMKgCgiyLsIXVzAKDAKoABZWl1AH0qjCqPKnQAAKGDImVugyqHKnEA8aCHIkYqZQBxAPGgiyJwKm0AAKDIKgABYnCTKpUqAKDUKgCg1iqAAUFhbgCdKqEqrCpyAHIAAKDZIXIAAAFocqYqqCrrAJUab6CZIfcAxQf3IWFyAKAqKWwAaQBnADuA3wDfQOELzyrZKtwq6SrsKvEqAAD1KjQrAAAAAAAAAAAAAEwrbCsAAHErvSsAAAAAAADRK3IC1CoAAAAA2CrnIWV0AKAWI8RjcgDrAOUKgAFhZXkA4SrkKucq8iFvbmVh5CFpbGNhQmRvAPQAIg5sInJlYwAAoBUjcgAA4DXYMd0AAmVpa2/7KhIrKCsuK/IBACsAAAkrZQAAATRm6g0EK28AcgDlAOsNYQBzorgDECsAAAAAEit5AG0A0WMAAWNuFislK2sAAAFhcxsrIStwAHAAcgBvAPgAFw5pAG0AAKA8InMA8AD9DQABYXMsKyEr8AAXDnIAbgA7gP4A/kDsATgrOyswG2QA5QBnAmUAcwCAgdcAO2JkAEMrRCtJK9dAYaCgInIAAKAxKgCgMCqAAWVwcwBRK1MraSvhAAkh4qKkIlsrXysAAAAAYytvAHQAAKA2I2kAcgAAoPEqb+A12GXdcgBrAACg2irhAHgociJpbWUAAKA0IIABYWlwAHYreSu3K2QA5QC+DYADYWRlbXBzdACFK6MrmiunK6wrsCuzK24iZ2xlAACitSVkbHFykCuUK5ornCvvIXduAKC/JeUhZnRloMMl8QACBwCgXCJpImdodABloLkl8QBdDG8AdAAAoOwlaSJudXMAAKA6KuwhdXMAoDkqYgAAoM0p6SFtZQCgOyrlInppdW0AoOIjgAFjaHQAwivKK80rAAFyecYrySsA4DXYydxGZGMAeQBbZPIhb2tnYQABaW/UK9creAD0ANERaCJlYWQAAAFsct4r5ytlAGYAdABhAHIAcgBvAPcAXQbpJGdodGFycm93AKCgIQAJQUhhYmNkZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");var J;(function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.FLAG13=8192]="FLAG13",e[e.BRANCH_LENGTH=8064]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE"})(J||(J={}));var H;(function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z"})(H||(H={}));var Gs=32;function mn(e){return e>=H.ZERO&&e<=H.NINE}function Gc(e){return e>=H.UPPER_A&&e<=H.UPPER_F||e>=H.LOWER_A&&e<=H.LOWER_F}function Wc(e){return e>=H.UPPER_A&&e<=H.UPPER_Z||e>=H.LOWER_A&&e<=H.LOWER_Z||mn(e)}function Kc(e){return e===H.EQUALS||Wc(e)}var W;(function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity"})(W||(W={}));var Ee;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute"})(Ee||(Ee={}));var lr=class{decodeTree;emitCodePoint;errors;constructor(t,r,n){this.decodeTree=t,this.emitCodePoint=r,this.errors=n}state=W.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=Ee.Strict;runConsumed=0;startEntity(t){this.decodeMode=t,this.state=W.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(t,r){switch(this.state){case W.EntityStart:return t.charCodeAt(r)===H.NUM?(this.state=W.NumericStart,this.consumed+=1,this.stateNumericStart(t,r+1)):(this.state=W.NamedEntity,this.stateNamedEntity(t,r));case W.NumericStart:return this.stateNumericStart(t,r);case W.NumericDecimal:return this.stateNumericDecimal(t,r);case W.NumericHex:return this.stateNumericHex(t,r);case W.NamedEntity:return this.stateNamedEntity(t,r)}}stateNumericStart(t,r){return r>=t.length?-1:(t.charCodeAt(r)|Gs)===H.LOWER_X?(this.state=W.NumericHex,this.consumed+=1,this.stateNumericHex(t,r+1)):(this.state=W.NumericDecimal,this.stateNumericDecimal(t,r))}stateNumericHex(t,r){for(;r<t.length;){let n=t.charCodeAt(r);if(mn(n)||Gc(n)){let s=n<=H.NINE?n-H.ZERO:(n|Gs)-H.LOWER_A+10;this.result=this.result*16+s,this.consumed++,r++}else return this.emitNumericEntity(n,3)}return-1}stateNumericDecimal(t,r){for(;r<t.length;){let n=t.charCodeAt(r);if(mn(n))this.result=this.result*10+(n-H.ZERO),this.consumed++,r++;else return this.emitNumericEntity(n,2)}return-1}emitNumericEntity(t,r){if(this.consumed<=r)return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(t===H.SEMI)this.consumed+=1;else if(this.decodeMode===Ee.Strict)return 0;return this.emitCodePoint(Qs(this.result),this.consumed),this.errors&&(t!==H.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(t,r){let{decodeTree:n}=this,s=n[this.treeIndex],a=(s&J.VALUE_LENGTH)>>14;for(;r<t.length;){if(a===0&&(s&J.FLAG13)!==0){let l=(s&J.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let o=s&J.JUMP_TABLE;if(t.charCodeAt(r)!==o)return this.result===0?0:this.emitNotTerminatedNamedEntity();r++,this.excess++,this.runConsumed++}for(;this.runConsumed<l;){if(r>=t.length)return-1;let o=this.runConsumed-1,d=n[this.treeIndex+1+(o>>1)],p=o%2===0?d&255:d>>8&255;if(t.charCodeAt(r)!==p)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();r++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(l>>1),s=n[this.treeIndex],a=(s&J.VALUE_LENGTH)>>14}if(r>=t.length)break;let c=t.charCodeAt(r);if(c===H.SEMI&&a!==0&&(s&J.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,a,this.consumed+this.excess);if(this.treeIndex=Jc(n,s,this.treeIndex+Math.max(1,a),c),this.treeIndex<0)return this.result===0||this.decodeMode===Ee.Attribute&&(a===0||Kc(c))?0:this.emitNotTerminatedNamedEntity();if(s=n[this.treeIndex],a=(s&J.VALUE_LENGTH)>>14,a!==0){if(c===H.SEMI)return this.emitNamedEntityData(this.treeIndex,a,this.consumed+this.excess);this.decodeMode!==Ee.Strict&&(s&J.FLAG13)===0&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}r++,this.excess++}return-1}emitNotTerminatedNamedEntity(){let{result:t,decodeTree:r}=this,n=(r[t]&J.VALUE_LENGTH)>>14;return this.emitNamedEntityData(t,n,this.consumed),this.errors?.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,r,n){let{decodeTree:s}=this;return this.emitCodePoint(r===1?s[t]&~(J.VALUE_LENGTH|J.FLAG13):s[t+1],n),r===3&&this.emitCodePoint(s[t+2],n),n}end(){switch(this.state){case W.NamedEntity:return this.result!==0&&(this.decodeMode!==Ee.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case W.NumericDecimal:return this.emitNumericEntity(0,2);case W.NumericHex:return this.emitNumericEntity(0,3);case W.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case W.EntityStart:return 0}}};function Jc(e,t,r,n){let s=(t&J.BRANCH_LENGTH)>>7,a=t&J.JUMP_TABLE;if(s===0)return a!==0&&n===a?r:-1;if(a){let d=n-a;return d<0||d>=s?-1:e[r+d]-1}let c=s+1>>1,l=0,o=s-1;for(;l<=o;){let d=l+o>>>1,p=d>>1,f=e[r+p]>>(d&1)*8&255;if(f<n)l=d+1;else if(f>n)o=d-1;else return e[r+c+d]}return-1}var b;(function(e){e.HTML="http://www.w3.org/1999/xhtml",e.MATHML="http://www.w3.org/1998/Math/MathML",e.SVG="http://www.w3.org/2000/svg",e.XLINK="http://www.w3.org/1999/xlink",e.XML="http://www.w3.org/XML/1998/namespace",e.XMLNS="http://www.w3.org/2000/xmlns/"})(b||(b={}));var be;(function(e){e.TYPE="type",e.ACTION="action",e.ENCODING="encoding",e.PROMPT="prompt",e.NAME="name",e.COLOR="color",e.FACE="face",e.SIZE="size"})(be||(be={}));var q;(function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks"})(q||(q={}));var E;(function(e){e.A="a",e.ADDRESS="address",e.ANNOTATION_XML="annotation-xml",e.APPLET="applet",e.AREA="area",e.ARTICLE="article",e.ASIDE="aside",e.B="b",e.BASE="base",e.BASEFONT="basefont",e.BGSOUND="bgsound",e.BIG="big",e.BLOCKQUOTE="blockquote",e.BODY="body",e.BR="br",e.BUTTON="button",e.CAPTION="caption",e.CENTER="center",e.CODE="code",e.COL="col",e.COLGROUP="colgroup",e.DD="dd",e.DESC="desc",e.DETAILS="details",e.DIALOG="dialog",e.DIR="dir",e.DIV="div",e.DL="dl",e.DT="dt",e.EM="em",e.EMBED="embed",e.FIELDSET="fieldset",e.FIGCAPTION="figcaption",e.FIGURE="figure",e.FONT="font",e.FOOTER="footer",e.FOREIGN_OBJECT="foreignObject",e.FORM="form",e.FRAME="frame",e.FRAMESET="frameset",e.H1="h1",e.H2="h2",e.H3="h3",e.H4="h4",e.H5="h5",e.H6="h6",e.HEAD="head",e.HEADER="header",e.HGROUP="hgroup",e.HR="hr",e.HTML="html",e.I="i",e.IMG="img",e.IMAGE="image",e.INPUT="input",e.IFRAME="iframe",e.KEYGEN="keygen",e.LABEL="label",e.LI="li",e.LINK="link",e.LISTING="listing",e.MAIN="main",e.MALIGNMARK="malignmark",e.MARQUEE="marquee",e.MATH="math",e.MENU="menu",e.META="meta",e.MGLYPH="mglyph",e.MI="mi",e.MO="mo",e.MN="mn",e.MS="ms",e.MTEXT="mtext",e.NAV="nav",e.NOBR="nobr",e.NOFRAMES="noframes",e.NOEMBED="noembed",e.NOSCRIPT="noscript",e.OBJECT="object",e.OL="ol",e.OPTGROUP="optgroup",e.OPTION="option",e.P="p",e.PARAM="param",e.PLAINTEXT="plaintext",e.PRE="pre",e.RB="rb",e.RP="rp",e.RT="rt",e.RTC="rtc",e.RUBY="ruby",e.S="s",e.SCRIPT="script",e.SEARCH="search",e.SECTION="section",e.SELECT="select",e.SOURCE="source",e.SMALL="small",e.SPAN="span",e.STRIKE="strike",e.STRONG="strong",e.STYLE="style",e.SUB="sub",e.SUMMARY="summary",e.SUP="sup",e.TABLE="table",e.TBODY="tbody",e.TEMPLATE="template",e.TEXTAREA="textarea",e.TFOOT="tfoot",e.TD="td",e.TH="th",e.THEAD="thead",e.TITLE="title",e.TR="tr",e.TRACK="track",e.TT="tt",e.U="u",e.UL="ul",e.SVG="svg",e.VAR="var",e.WBR="wbr",e.XMP="xmp"})(E||(E={}));var i;(function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.A=1]="A",e[e.ADDRESS=2]="ADDRESS",e[e.ANNOTATION_XML=3]="ANNOTATION_XML",e[e.APPLET=4]="APPLET",e[e.AREA=5]="AREA",e[e.ARTICLE=6]="ARTICLE",e[e.ASIDE=7]="ASIDE",e[e.B=8]="B",e[e.BASE=9]="BASE",e[e.BASEFONT=10]="BASEFONT",e[e.BGSOUND=11]="BGSOUND",e[e.BIG=12]="BIG",e[e.BLOCKQUOTE=13]="BLOCKQUOTE",e[e.BODY=14]="BODY",e[e.BR=15]="BR",e[e.BUTTON=16]="BUTTON",e[e.CAPTION=17]="CAPTION",e[e.CENTER=18]="CENTER",e[e.CODE=19]="CODE",e[e.COL=20]="COL",e[e.COLGROUP=21]="COLGROUP",e[e.DD=22]="DD",e[e.DESC=23]="DESC",e[e.DETAILS=24]="DETAILS",e[e.DIALOG=25]="DIALOG",e[e.DIR=26]="DIR",e[e.DIV=27]="DIV",e[e.DL=28]="DL",e[e.DT=29]="DT",e[e.EM=30]="EM",e[e.EMBED=31]="EMBED",e[e.FIELDSET=32]="FIELDSET",e[e.FIGCAPTION=33]="FIGCAPTION",e[e.FIGURE=34]="FIGURE",e[e.FONT=35]="FONT",e[e.FOOTER=36]="FOOTER",e[e.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",e[e.FORM=38]="FORM",e[e.FRAME=39]="FRAME",e[e.FRAMESET=40]="FRAMESET",e[e.H1=41]="H1",e[e.H2=42]="H2",e[e.H3=43]="H3",e[e.H4=44]="H4",e[e.H5=45]="H5",e[e.H6=46]="H6",e[e.HEAD=47]="HEAD",e[e.HEADER=48]="HEADER",e[e.HGROUP=49]="HGROUP",e[e.HR=50]="HR",e[e.HTML=51]="HTML",e[e.I=52]="I",e[e.IMG=53]="IMG",e[e.IMAGE=54]="IMAGE",e[e.INPUT=55]="INPUT",e[e.IFRAME=56]="IFRAME",e[e.KEYGEN=57]="KEYGEN",e[e.LABEL=58]="LABEL",e[e.LI=59]="LI",e[e.LINK=60]="LINK",e[e.LISTING=61]="LISTING",e[e.MAIN=62]="MAIN",e[e.MALIGNMARK=63]="MALIGNMARK",e[e.MARQUEE=64]="MARQUEE",e[e.MATH=65]="MATH",e[e.MENU=66]="MENU",e[e.META=67]="META",e[e.MGLYPH=68]="MGLYPH",e[e.MI=69]="MI",e[e.MO=70]="MO",e[e.MN=71]="MN",e[e.MS=72]="MS",e[e.MTEXT=73]="MTEXT",e[e.NAV=74]="NAV",e[e.NOBR=75]="NOBR",e[e.NOFRAMES=76]="NOFRAMES",e[e.NOEMBED=77]="NOEMBED",e[e.NOSCRIPT=78]="NOSCRIPT",e[e.OBJECT=79]="OBJECT",e[e.OL=80]="OL",e[e.OPTGROUP=81]="OPTGROUP",e[e.OPTION=82]="OPTION",e[e.P=83]="P",e[e.PARAM=84]="PARAM",e[e.PLAINTEXT=85]="PLAINTEXT",e[e.PRE=86]="PRE",e[e.RB=87]="RB",e[e.RP=88]="RP",e[e.RT=89]="RT",e[e.RTC=90]="RTC",e[e.RUBY=91]="RUBY",e[e.S=92]="S",e[e.SCRIPT=93]="SCRIPT",e[e.SEARCH=94]="SEARCH",e[e.SECTION=95]="SECTION",e[e.SELECT=96]="SELECT",e[e.SOURCE=97]="SOURCE",e[e.SMALL=98]="SMALL",e[e.SPAN=99]="SPAN",e[e.STRIKE=100]="STRIKE",e[e.STRONG=101]="STRONG",e[e.STYLE=102]="STYLE",e[e.SUB=103]="SUB",e[e.SUMMARY=104]="SUMMARY",e[e.SUP=105]="SUP",e[e.TABLE=106]="TABLE",e[e.TBODY=107]="TBODY",e[e.TEMPLATE=108]="TEMPLATE",e[e.TEXTAREA=109]="TEXTAREA",e[e.TFOOT=110]="TFOOT",e[e.TD=111]="TD",e[e.TH=112]="TH",e[e.THEAD=113]="THEAD",e[e.TITLE=114]="TITLE",e[e.TR=115]="TR",e[e.TRACK=116]="TRACK",e[e.TT=117]="TT",e[e.U=118]="U",e[e.UL=119]="UL",e[e.SVG=120]="SVG",e[e.VAR=121]="VAR",e[e.WBR=122]="WBR",e[e.XMP=123]="XMP"})(i||(i={}));var jc=new Map([[E.A,i.A],[E.ADDRESS,i.ADDRESS],[E.ANNOTATION_XML,i.ANNOTATION_XML],[E.APPLET,i.APPLET],[E.AREA,i.AREA],[E.ARTICLE,i.ARTICLE],[E.ASIDE,i.ASIDE],[E.B,i.B],[E.BASE,i.BASE],[E.BASEFONT,i.BASEFONT],[E.BGSOUND,i.BGSOUND],[E.BIG,i.BIG],[E.BLOCKQUOTE,i.BLOCKQUOTE],[E.BODY,i.BODY],[E.BR,i.BR],[E.BUTTON,i.BUTTON],[E.CAPTION,i.CAPTION],[E.CENTER,i.CENTER],[E.CODE,i.CODE],[E.COL,i.COL],[E.COLGROUP,i.COLGROUP],[E.DD,i.DD],[E.DESC,i.DESC],[E.DETAILS,i.DETAILS],[E.DIALOG,i.DIALOG],[E.DIR,i.DIR],[E.DIV,i.DIV],[E.DL,i.DL],[E.DT,i.DT],[E.EM,i.EM],[E.EMBED,i.EMBED],[E.FIELDSET,i.FIELDSET],[E.FIGCAPTION,i.FIGCAPTION],[E.FIGURE,i.FIGURE],[E.FONT,i.FONT],[E.FOOTER,i.FOOTER],[E.FOREIGN_OBJECT,i.FOREIGN_OBJECT],[E.FORM,i.FORM],[E.FRAME,i.FRAME],[E.FRAMESET,i.FRAMESET],[E.H1,i.H1],[E.H2,i.H2],[E.H3,i.H3],[E.H4,i.H4],[E.H5,i.H5],[E.H6,i.H6],[E.HEAD,i.HEAD],[E.HEADER,i.HEADER],[E.HGROUP,i.HGROUP],[E.HR,i.HR],[E.HTML,i.HTML],[E.I,i.I],[E.IMG,i.IMG],[E.IMAGE,i.IMAGE],[E.INPUT,i.INPUT],[E.IFRAME,i.IFRAME],[E.KEYGEN,i.KEYGEN],[E.LABEL,i.LABEL],[E.LI,i.LI],[E.LINK,i.LINK],[E.LISTING,i.LISTING],[E.MAIN,i.MAIN],[E.MALIGNMARK,i.MALIGNMARK],[E.MARQUEE,i.MARQUEE],[E.MATH,i.MATH],[E.MENU,i.MENU],[E.META,i.META],[E.MGLYPH,i.MGLYPH],[E.MI,i.MI],[E.MO,i.MO],[E.MN,i.MN],[E.MS,i.MS],[E.MTEXT,i.MTEXT],[E.NAV,i.NAV],[E.NOBR,i.NOBR],[E.NOFRAMES,i.NOFRAMES],[E.NOEMBED,i.NOEMBED],[E.NOSCRIPT,i.NOSCRIPT],[E.OBJECT,i.OBJECT],[E.OL,i.OL],[E.OPTGROUP,i.OPTGROUP],[E.OPTION,i.OPTION],[E.P,i.P],[E.PARAM,i.PARAM],[E.PLAINTEXT,i.PLAINTEXT],[E.PRE,i.PRE],[E.RB,i.RB],[E.RP,i.RP],[E.RT,i.RT],[E.RTC,i.RTC],[E.RUBY,i.RUBY],[E.S,i.S],[E.SCRIPT,i.SCRIPT],[E.SEARCH,i.SEARCH],[E.SECTION,i.SECTION],[E.SELECT,i.SELECT],[E.SOURCE,i.SOURCE],[E.SMALL,i.SMALL],[E.SPAN,i.SPAN],[E.STRIKE,i.STRIKE],[E.STRONG,i.STRONG],[E.STYLE,i.STYLE],[E.SUB,i.SUB],[E.SUMMARY,i.SUMMARY],[E.SUP,i.SUP],[E.TABLE,i.TABLE],[E.TBODY,i.TBODY],[E.TEMPLATE,i.TEMPLATE],[E.TEXTAREA,i.TEXTAREA],[E.TFOOT,i.TFOOT],[E.TD,i.TD],[E.TH,i.TH],[E.THEAD,i.THEAD],[E.TITLE,i.TITLE],[E.TR,i.TR],[E.TRACK,i.TRACK],[E.TT,i.TT],[E.U,i.U],[E.UL,i.UL],[E.SVG,i.SVG],[E.VAR,i.VAR],[E.WBR,i.WBR],[E.XMP,i.XMP]]);function Pe(e){var t;return(t=jc.get(e))!==null&&t!==void 0?t:i.UNKNOWN}var C=i,Ws={[b.HTML]:new Set([C.ADDRESS,C.APPLET,C.AREA,C.ARTICLE,C.ASIDE,C.BASE,C.BASEFONT,C.BGSOUND,C.BLOCKQUOTE,C.BODY,C.BR,C.BUTTON,C.CAPTION,C.CENTER,C.COL,C.COLGROUP,C.DD,C.DETAILS,C.DIR,C.DIV,C.DL,C.DT,C.EMBED,C.FIELDSET,C.FIGCAPTION,C.FIGURE,C.FOOTER,C.FORM,C.FRAME,C.FRAMESET,C.H1,C.H2,C.H3,C.H4,C.H5,C.H6,C.HEAD,C.HEADER,C.HGROUP,C.HR,C.HTML,C.IFRAME,C.IMG,C.INPUT,C.LI,C.LINK,C.LISTING,C.MAIN,C.MARQUEE,C.MENU,C.META,C.NAV,C.NOEMBED,C.NOFRAMES,C.NOSCRIPT,C.OBJECT,C.OL,C.P,C.PARAM,C.PLAINTEXT,C.PRE,C.SCRIPT,C.SECTION,C.SELECT,C.SOURCE,C.STYLE,C.SUMMARY,C.TABLE,C.TBODY,C.TD,C.TEMPLATE,C.TEXTAREA,C.TFOOT,C.TH,C.THEAD,C.TITLE,C.TR,C.TRACK,C.UL,C.WBR,C.XMP]),[b.MATHML]:new Set([C.MI,C.MO,C.MN,C.MS,C.MTEXT,C.ANNOTATION_XML]),[b.SVG]:new Set([C.TITLE,C.FOREIGN_OBJECT,C.DESC]),[b.XLINK]:new Set,[b.XML]:new Set,[b.XMLNS]:new Set},Tt=new Set([C.H1,C.H2,C.H3,C.H4,C.H5,C.H6]),Cg=new Set([E.STYLE,E.SCRIPT,E.XMP,E.IFRAME,E.NOEMBED,E.NOFRAMES,E.PLAINTEXT]);var A;(function(e){e[e.DATA=0]="DATA",e[e.RCDATA=1]="RCDATA",e[e.RAWTEXT=2]="RAWTEXT",e[e.SCRIPT_DATA=3]="SCRIPT_DATA",e[e.PLAINTEXT=4]="PLAINTEXT",e[e.TAG_OPEN=5]="TAG_OPEN",e[e.END_TAG_OPEN=6]="END_TAG_OPEN",e[e.TAG_NAME=7]="TAG_NAME",e[e.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",e[e.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",e[e.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",e[e.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",e[e.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",e[e.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",e[e.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",e[e.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",e[e.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",e[e.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",e[e.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",e[e.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",e[e.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",e[e.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",e[e.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",e[e.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",e[e.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",e[e.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",e[e.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",e[e.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",e[e.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",e[e.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",e[e.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",e[e.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",e[e.BOGUS_COMMENT=40]="BOGUS_COMMENT",e[e.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",e[e.COMMENT_START=42]="COMMENT_START",e[e.COMMENT_START_DASH=43]="COMMENT_START_DASH",e[e.COMMENT=44]="COMMENT",e[e.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",e[e.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",e[e.COMMENT_END_DASH=49]="COMMENT_END_DASH",e[e.COMMENT_END=50]="COMMENT_END",e[e.COMMENT_END_BANG=51]="COMMENT_END_BANG",e[e.DOCTYPE=52]="DOCTYPE",e[e.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",e[e.DOCTYPE_NAME=54]="DOCTYPE_NAME",e[e.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",e[e.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",e[e.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",e[e.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",e[e.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",e[e.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",e[e.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",e[e.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",e[e.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",e[e.CDATA_SECTION=68]="CDATA_SECTION",e[e.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",e[e.CDATA_SECTION_END=70]="CDATA_SECTION_END",e[e.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",e[e.AMBIGUOUS_AMPERSAND=72]="AMBIGUOUS_AMPERSAND"})(A||(A={}));var j={DATA:A.DATA,RCDATA:A.RCDATA,RAWTEXT:A.RAWTEXT,SCRIPT_DATA:A.SCRIPT_DATA,PLAINTEXT:A.PLAINTEXT,CDATA_SECTION:A.CDATA_SECTION};function $c(e){return e>=u.DIGIT_0&&e<=u.DIGIT_9}function bt(e){return e>=u.LATIN_CAPITAL_A&&e<=u.LATIN_CAPITAL_Z}function Xc(e){return e>=u.LATIN_SMALL_A&&e<=u.LATIN_SMALL_Z}function we(e){return Xc(e)||bt(e)}function Ks(e){return we(e)||$c(e)}function dr(e){return e+32}function js(e){return e===u.SPACE||e===u.LINE_FEED||e===u.TABULATION||e===u.FORM_FEED}function Js(e){return js(e)||e===u.SOLIDUS||e===u.GREATER_THAN_SIGN}function Zc(e){return e===u.NULL?T.nullCharacterReference:e>1114111?T.characterReferenceOutsideUnicodeRange:sr(e)?T.surrogateCharacterReference:ar(e)?T.noncharacterCharacterReference:ir(e)||e===u.CARRIAGE_RETURN?T.controlCharacterReference:null}var Ct=class{constructor(t,r){this.options=t,this.handler=r,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=A.DATA,this.returnState=A.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new or(r),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new lr(gn,(n,s)=>{this.preprocessor.pos=this.entityStartPos+s-1,this._flushCodePointConsumedAsCharacterReference(n)},r.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(T.missingSemicolonAfterCharacterReference,1)},absenceOfDigitsInNumericCharacterReference:n=>{this._err(T.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+n)},validateNumericCharacterReference:n=>{let s=Zc(n);s&&this._err(s,1)}}:void 0)}_err(t,r=0){var n,s;(s=(n=this.handler).onParseError)===null||s===void 0||s.call(n,this.preprocessor.getError(t,r))}getCurrentLocation(t){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-t,startOffset:this.preprocessor.offset-t,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;let t=this._consume();this._ensureHibernation()||this._callState(t)}this.inLoop=!1}}pause(){this.paused=!0}resume(t){if(!this.paused)throw new Error("Parser was already resumed");this.paused=!1,!this.inLoop&&(this._runParsingLoop(),this.paused||t?.())}write(t,r,n){this.active=!0,this.preprocessor.write(t,r),this._runParsingLoop(),this.paused||n?.()}insertHtmlAtCurrentPos(t){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(t),this._runParsingLoop()}_ensureHibernation(){return this.preprocessor.endOfChunkHit?(this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=!1,!0):!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(t){this.consumedAfterSnapshot+=t;for(let r=0;r<t;r++)this.preprocessor.advance()}_consumeSequenceIfMatch(t,r){return this.preprocessor.startsWith(t,r)?(this._advanceBy(t.length-1),!0):!1}_createStartTagToken(){this.currentToken={type:v.START_TAG,tagName:"",tagID:i.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(1)}}_createEndTagToken(){this.currentToken={type:v.END_TAG,tagName:"",tagID:i.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(2)}}_createCommentToken(t){this.currentToken={type:v.COMMENT,data:"",location:this.getCurrentLocation(t)}}_createDoctypeToken(t){this.currentToken={type:v.DOCTYPE,name:t,forceQuirks:!1,publicId:null,systemId:null,location:this.currentLocation}}_createCharacterToken(t,r){this.currentCharacterToken={type:t,chars:r,location:this.currentLocation}}_createAttr(t){this.currentAttr={name:t,value:""},this.currentLocation=this.getCurrentLocation(0)}_leaveAttrName(){var t,r;let n=this.currentToken;if(cr(n,this.currentAttr.name)===null){if(n.attrs.push(this.currentAttr),n.location&&this.currentLocation){let s=(t=(r=n.location).attrs)!==null&&t!==void 0?t:r.attrs=Object.create(null);s[this.currentAttr.name]=this.currentLocation,this._leaveAttrValue()}}else this._err(T.duplicateAttribute)}_leaveAttrValue(){this.currentLocation&&(this.currentLocation.endLine=this.preprocessor.line,this.currentLocation.endCol=this.preprocessor.col,this.currentLocation.endOffset=this.preprocessor.offset)}prepareToken(t){this._emitCurrentCharacterToken(t.location),this.currentToken=null,t.location&&(t.location.endLine=this.preprocessor.line,t.location.endCol=this.preprocessor.col+1,t.location.endOffset=this.preprocessor.offset+1),this.currentLocation=this.getCurrentLocation(-1)}emitCurrentTagToken(){let t=this.currentToken;this.prepareToken(t),t.tagID=Pe(t.tagName),t.type===v.START_TAG?(this.lastStartTagName=t.tagName,this.handler.onStartTag(t)):(t.attrs.length>0&&this._err(T.endTagWithAttributes),t.selfClosing&&this._err(T.endTagWithTrailingSolidus),this.handler.onEndTag(t)),this.preprocessor.dropParsedChunk()}emitCurrentComment(t){this.prepareToken(t),this.handler.onComment(t),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(t){this.prepareToken(t),this.handler.onDoctype(t),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(t){if(this.currentCharacterToken){switch(t&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=t.startLine,this.currentCharacterToken.location.endCol=t.startCol,this.currentCharacterToken.location.endOffset=t.startOffset),this.currentCharacterToken.type){case v.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case v.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case v.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null}}_emitEOFToken(){let t=this.getCurrentLocation(0);t&&(t.endLine=t.startLine,t.endCol=t.startCol,t.endOffset=t.startOffset),this._emitCurrentCharacterToken(t),this.handler.onEof({type:v.EOF,location:t}),this.active=!1}_appendCharToCurrentCharacterToken(t,r){if(this.currentCharacterToken)if(this.currentCharacterToken.type===t){this.currentCharacterToken.chars+=r;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(t,r)}_emitCodePoint(t){let r=js(t)?v.WHITESPACE_CHARACTER:t===u.NULL?v.NULL_CHARACTER:v.CHARACTER;this._appendCharToCurrentCharacterToken(r,t<65536?String.fromCharCode(t):String.fromCodePoint(t))}_emitChars(t){this._appendCharToCurrentCharacterToken(v.CHARACTER,t)}_startCharacterReference(){this.returnState=this.state,this.state=A.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?Ee.Attribute:Ee.Legacy)}_isCharacterReferenceInAttribute(){return this.returnState===A.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===A.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===A.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(t){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(t):this._emitCodePoint(t)}_callState(t){switch(this.state){case A.DATA:{this._stateData(t);break}case A.RCDATA:{this._stateRcdata(t);break}case A.RAWTEXT:{this._stateRawtext(t);break}case A.SCRIPT_DATA:{this._stateScriptData(t);break}case A.PLAINTEXT:{this._statePlaintext(t);break}case A.TAG_OPEN:{this._stateTagOpen(t);break}case A.END_TAG_OPEN:{this._stateEndTagOpen(t);break}case A.TAG_NAME:{this._stateTagName(t);break}case A.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(t);break}case A.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(t);break}case A.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(t);break}case A.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(t);break}case A.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(t);break}case A.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(t);break}case A.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(t);break}case A.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(t);break}case A.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(t);break}case A.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(t);break}case A.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(t);break}case A.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(t);break}case A.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(t);break}case A.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(t);break}case A.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(t);break}case A.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(t);break}case A.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(t);break}case A.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(t);break}case A.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(t);break}case A.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(t);break}case A.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(t);break}case A.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(t);break}case A.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(t);break}case A.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(t);break}case A.ATTRIBUTE_NAME:{this._stateAttributeName(t);break}case A.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(t);break}case A.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(t);break}case A.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(t);break}case A.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(t);break}case A.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(t);break}case A.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(t);break}case A.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(t);break}case A.BOGUS_COMMENT:{this._stateBogusComment(t);break}case A.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(t);break}case A.COMMENT_START:{this._stateCommentStart(t);break}case A.COMMENT_START_DASH:{this._stateCommentStartDash(t);break}case A.COMMENT:{this._stateComment(t);break}case A.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(t);break}case A.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(t);break}case A.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(t);break}case A.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(t);break}case A.COMMENT_END_DASH:{this._stateCommentEndDash(t);break}case A.COMMENT_END:{this._stateCommentEnd(t);break}case A.COMMENT_END_BANG:{this._stateCommentEndBang(t);break}case A.DOCTYPE:{this._stateDoctype(t);break}case A.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(t);break}case A.DOCTYPE_NAME:{this._stateDoctypeName(t);break}case A.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(t);break}case A.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(t);break}case A.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(t);break}case A.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(t);break}case A.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(t);break}case A.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(t);break}case A.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(t);break}case A.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(t);break}case A.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(t);break}case A.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(t);break}case A.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(t);break}case A.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(t);break}case A.BOGUS_DOCTYPE:{this._stateBogusDoctype(t);break}case A.CDATA_SECTION:{this._stateCdataSection(t);break}case A.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(t);break}case A.CDATA_SECTION_END:{this._stateCdataSectionEnd(t);break}case A.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case A.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(t);break}default:throw new Error("Unknown state")}}_stateData(t){switch(t){case u.LESS_THAN_SIGN:{this.state=A.TAG_OPEN;break}case u.AMPERSAND:{this._startCharacterReference();break}case u.NULL:{this._err(T.unexpectedNullCharacter),this._emitCodePoint(t);break}case u.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateRcdata(t){switch(t){case u.AMPERSAND:{this._startCharacterReference();break}case u.LESS_THAN_SIGN:{this.state=A.RCDATA_LESS_THAN_SIGN;break}case u.NULL:{this._err(T.unexpectedNullCharacter),this._emitChars(M);break}case u.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateRawtext(t){switch(t){case u.LESS_THAN_SIGN:{this.state=A.RAWTEXT_LESS_THAN_SIGN;break}case u.NULL:{this._err(T.unexpectedNullCharacter),this._emitChars(M);break}case u.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateScriptData(t){switch(t){case u.LESS_THAN_SIGN:{this.state=A.SCRIPT_DATA_LESS_THAN_SIGN;break}case u.NULL:{this._err(T.unexpectedNullCharacter),this._emitChars(M);break}case u.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_statePlaintext(t){switch(t){case u.NULL:{this._err(T.unexpectedNullCharacter),this._emitChars(M);break}case u.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateTagOpen(t){if(we(t))this._createStartTagToken(),this.state=A.TAG_NAME,this._stateTagName(t);else switch(t){case u.EXCLAMATION_MARK:{this.state=A.MARKUP_DECLARATION_OPEN;break}case u.SOLIDUS:{this.state=A.END_TAG_OPEN;break}case u.QUESTION_MARK:{this._err(T.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=A.BOGUS_COMMENT,this._stateBogusComment(t);break}case u.EOF:{this._err(T.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(T.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=A.DATA,this._stateData(t)}}_stateEndTagOpen(t){if(we(t))this._createEndTagToken(),this.state=A.TAG_NAME,this._stateTagName(t);else switch(t){case u.GREATER_THAN_SIGN:{this._err(T.missingEndTagName),this.state=A.DATA;break}case u.EOF:{this._err(T.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(T.invalidFirstCharacterOfTagName),this._createCommentToken(2),this.state=A.BOGUS_COMMENT,this._stateBogusComment(t)}}_stateTagName(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:{this.state=A.BEFORE_ATTRIBUTE_NAME;break}case u.SOLIDUS:{this.state=A.SELF_CLOSING_START_TAG;break}case u.GREATER_THAN_SIGN:{this.state=A.DATA,this.emitCurrentTagToken();break}case u.NULL:{this._err(T.unexpectedNullCharacter),r.tagName+=M;break}case u.EOF:{this._err(T.eofInTag),this._emitEOFToken();break}default:r.tagName+=String.fromCodePoint(bt(t)?dr(t):t)}}_stateRcdataLessThanSign(t){t===u.SOLIDUS?this.state=A.RCDATA_END_TAG_OPEN:(this._emitChars("<"),this.state=A.RCDATA,this._stateRcdata(t))}_stateRcdataEndTagOpen(t){we(t)?(this.state=A.RCDATA_END_TAG_NAME,this._stateRcdataEndTagName(t)):(this._emitChars("</"),this.state=A.RCDATA,this._stateRcdata(t))}handleSpecialEndTag(t){if(!this.preprocessor.startsWith(this.lastStartTagName,!1))return!this._ensureHibernation();this._createEndTagToken();let r=this.currentToken;switch(r.tagName=this.lastStartTagName,this.preprocessor.peek(this.lastStartTagName.length)){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:return this._advanceBy(this.lastStartTagName.length),this.state=A.BEFORE_ATTRIBUTE_NAME,!1;case u.SOLIDUS:return this._advanceBy(this.lastStartTagName.length),this.state=A.SELF_CLOSING_START_TAG,!1;case u.GREATER_THAN_SIGN:return this._advanceBy(this.lastStartTagName.length),this.emitCurrentTagToken(),this.state=A.DATA,!1;default:return!this._ensureHibernation()}}_stateRcdataEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=A.RCDATA,this._stateRcdata(t))}_stateRawtextLessThanSign(t){t===u.SOLIDUS?this.state=A.RAWTEXT_END_TAG_OPEN:(this._emitChars("<"),this.state=A.RAWTEXT,this._stateRawtext(t))}_stateRawtextEndTagOpen(t){we(t)?(this.state=A.RAWTEXT_END_TAG_NAME,this._stateRawtextEndTagName(t)):(this._emitChars("</"),this.state=A.RAWTEXT,this._stateRawtext(t))}_stateRawtextEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=A.RAWTEXT,this._stateRawtext(t))}_stateScriptDataLessThanSign(t){switch(t){case u.SOLIDUS:{this.state=A.SCRIPT_DATA_END_TAG_OPEN;break}case u.EXCLAMATION_MARK:{this.state=A.SCRIPT_DATA_ESCAPE_START,this._emitChars("<!");break}default:this._emitChars("<"),this.state=A.SCRIPT_DATA,this._stateScriptData(t)}}_stateScriptDataEndTagOpen(t){we(t)?(this.state=A.SCRIPT_DATA_END_TAG_NAME,this._stateScriptDataEndTagName(t)):(this._emitChars("</"),this.state=A.SCRIPT_DATA,this._stateScriptData(t))}_stateScriptDataEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=A.SCRIPT_DATA,this._stateScriptData(t))}_stateScriptDataEscapeStart(t){t===u.HYPHEN_MINUS?(this.state=A.SCRIPT_DATA_ESCAPE_START_DASH,this._emitChars("-")):(this.state=A.SCRIPT_DATA,this._stateScriptData(t))}_stateScriptDataEscapeStartDash(t){t===u.HYPHEN_MINUS?(this.state=A.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-")):(this.state=A.SCRIPT_DATA,this._stateScriptData(t))}_stateScriptDataEscaped(t){switch(t){case u.HYPHEN_MINUS:{this.state=A.SCRIPT_DATA_ESCAPED_DASH,this._emitChars("-");break}case u.LESS_THAN_SIGN:{this.state=A.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case u.NULL:{this._err(T.unexpectedNullCharacter),this._emitChars(M);break}case u.EOF:{this._err(T.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateScriptDataEscapedDash(t){switch(t){case u.HYPHEN_MINUS:{this.state=A.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");break}case u.LESS_THAN_SIGN:{this.state=A.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case u.NULL:{this._err(T.unexpectedNullCharacter),this.state=A.SCRIPT_DATA_ESCAPED,this._emitChars(M);break}case u.EOF:{this._err(T.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=A.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataEscapedDashDash(t){switch(t){case u.HYPHEN_MINUS:{this._emitChars("-");break}case u.LESS_THAN_SIGN:{this.state=A.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case u.GREATER_THAN_SIGN:{this.state=A.SCRIPT_DATA,this._emitChars(">");break}case u.NULL:{this._err(T.unexpectedNullCharacter),this.state=A.SCRIPT_DATA_ESCAPED,this._emitChars(M);break}case u.EOF:{this._err(T.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=A.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataEscapedLessThanSign(t){t===u.SOLIDUS?this.state=A.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:we(t)?(this._emitChars("<"),this.state=A.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(t)):(this._emitChars("<"),this.state=A.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t))}_stateScriptDataEscapedEndTagOpen(t){we(t)?(this.state=A.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(t)):(this._emitChars("</"),this.state=A.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t))}_stateScriptDataEscapedEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=A.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t))}_stateScriptDataDoubleEscapeStart(t){if(this.preprocessor.startsWith(z.SCRIPT,!1)&&Js(this.preprocessor.peek(z.SCRIPT.length))){this._emitCodePoint(t);for(let r=0;r<z.SCRIPT.length;r++)this._emitCodePoint(this._consume());this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED}else this._ensureHibernation()||(this.state=A.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t))}_stateScriptDataDoubleEscaped(t){switch(t){case u.HYPHEN_MINUS:{this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED_DASH,this._emitChars("-");break}case u.LESS_THAN_SIGN:{this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case u.NULL:{this._err(T.unexpectedNullCharacter),this._emitChars(M);break}case u.EOF:{this._err(T.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateScriptDataDoubleEscapedDash(t){switch(t){case u.HYPHEN_MINUS:{this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH,this._emitChars("-");break}case u.LESS_THAN_SIGN:{this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case u.NULL:{this._err(T.unexpectedNullCharacter),this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(M);break}case u.EOF:{this._err(T.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataDoubleEscapedDashDash(t){switch(t){case u.HYPHEN_MINUS:{this._emitChars("-");break}case u.LESS_THAN_SIGN:{this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case u.GREATER_THAN_SIGN:{this.state=A.SCRIPT_DATA,this._emitChars(">");break}case u.NULL:{this._err(T.unexpectedNullCharacter),this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(M);break}case u.EOF:{this._err(T.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataDoubleEscapedLessThanSign(t){t===u.SOLIDUS?(this.state=A.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t))}_stateScriptDataDoubleEscapeEnd(t){if(this.preprocessor.startsWith(z.SCRIPT,!1)&&Js(this.preprocessor.peek(z.SCRIPT.length))){this._emitCodePoint(t);for(let r=0;r<z.SCRIPT.length;r++)this._emitCodePoint(this._consume());this.state=A.SCRIPT_DATA_ESCAPED}else this._ensureHibernation()||(this.state=A.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t))}_stateBeforeAttributeName(t){switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:break;case u.SOLIDUS:case u.GREATER_THAN_SIGN:case u.EOF:{this.state=A.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case u.EQUALS_SIGN:{this._err(T.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=A.ATTRIBUTE_NAME;break}default:this._createAttr(""),this.state=A.ATTRIBUTE_NAME,this._stateAttributeName(t)}}_stateAttributeName(t){switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:case u.SOLIDUS:case u.GREATER_THAN_SIGN:case u.EOF:{this._leaveAttrName(),this.state=A.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case u.EQUALS_SIGN:{this._leaveAttrName(),this.state=A.BEFORE_ATTRIBUTE_VALUE;break}case u.QUOTATION_MARK:case u.APOSTROPHE:case u.LESS_THAN_SIGN:{this._err(T.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(t);break}case u.NULL:{this._err(T.unexpectedNullCharacter),this.currentAttr.name+=M;break}default:this.currentAttr.name+=String.fromCodePoint(bt(t)?dr(t):t)}}_stateAfterAttributeName(t){switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:break;case u.SOLIDUS:{this.state=A.SELF_CLOSING_START_TAG;break}case u.EQUALS_SIGN:{this.state=A.BEFORE_ATTRIBUTE_VALUE;break}case u.GREATER_THAN_SIGN:{this.state=A.DATA,this.emitCurrentTagToken();break}case u.EOF:{this._err(T.eofInTag),this._emitEOFToken();break}default:this._createAttr(""),this.state=A.ATTRIBUTE_NAME,this._stateAttributeName(t)}}_stateBeforeAttributeValue(t){switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:break;case u.QUOTATION_MARK:{this.state=A.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break}case u.APOSTROPHE:{this.state=A.ATTRIBUTE_VALUE_SINGLE_QUOTED;break}case u.GREATER_THAN_SIGN:{this._err(T.missingAttributeValue),this.state=A.DATA,this.emitCurrentTagToken();break}default:this.state=A.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(t)}}_stateAttributeValueDoubleQuoted(t){switch(t){case u.QUOTATION_MARK:{this.state=A.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case u.AMPERSAND:{this._startCharacterReference();break}case u.NULL:{this._err(T.unexpectedNullCharacter),this.currentAttr.value+=M;break}case u.EOF:{this._err(T.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t)}}_stateAttributeValueSingleQuoted(t){switch(t){case u.APOSTROPHE:{this.state=A.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case u.AMPERSAND:{this._startCharacterReference();break}case u.NULL:{this._err(T.unexpectedNullCharacter),this.currentAttr.value+=M;break}case u.EOF:{this._err(T.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t)}}_stateAttributeValueUnquoted(t){switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:{this._leaveAttrValue(),this.state=A.BEFORE_ATTRIBUTE_NAME;break}case u.AMPERSAND:{this._startCharacterReference();break}case u.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=A.DATA,this.emitCurrentTagToken();break}case u.NULL:{this._err(T.unexpectedNullCharacter),this.currentAttr.value+=M;break}case u.QUOTATION_MARK:case u.APOSTROPHE:case u.LESS_THAN_SIGN:case u.EQUALS_SIGN:case u.GRAVE_ACCENT:{this._err(T.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(t);break}case u.EOF:{this._err(T.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t)}}_stateAfterAttributeValueQuoted(t){switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:{this._leaveAttrValue(),this.state=A.BEFORE_ATTRIBUTE_NAME;break}case u.SOLIDUS:{this._leaveAttrValue(),this.state=A.SELF_CLOSING_START_TAG;break}case u.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=A.DATA,this.emitCurrentTagToken();break}case u.EOF:{this._err(T.eofInTag),this._emitEOFToken();break}default:this._err(T.missingWhitespaceBetweenAttributes),this.state=A.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t)}}_stateSelfClosingStartTag(t){switch(t){case u.GREATER_THAN_SIGN:{let r=this.currentToken;r.selfClosing=!0,this.state=A.DATA,this.emitCurrentTagToken();break}case u.EOF:{this._err(T.eofInTag),this._emitEOFToken();break}default:this._err(T.unexpectedSolidusInTag),this.state=A.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t)}}_stateBogusComment(t){let r=this.currentToken;switch(t){case u.GREATER_THAN_SIGN:{this.state=A.DATA,this.emitCurrentComment(r);break}case u.EOF:{this.emitCurrentComment(r),this._emitEOFToken();break}case u.NULL:{this._err(T.unexpectedNullCharacter),r.data+=M;break}default:r.data+=String.fromCodePoint(t)}}_stateMarkupDeclarationOpen(t){this._consumeSequenceIfMatch(z.DASH_DASH,!0)?(this._createCommentToken(z.DASH_DASH.length+1),this.state=A.COMMENT_START):this._consumeSequenceIfMatch(z.DOCTYPE,!1)?(this.currentLocation=this.getCurrentLocation(z.DOCTYPE.length+1),this.state=A.DOCTYPE):this._consumeSequenceIfMatch(z.CDATA_START,!0)?this.inForeignNode?this.state=A.CDATA_SECTION:(this._err(T.cdataInHtmlContent),this._createCommentToken(z.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=A.BOGUS_COMMENT):this._ensureHibernation()||(this._err(T.incorrectlyOpenedComment),this._createCommentToken(2),this.state=A.BOGUS_COMMENT,this._stateBogusComment(t))}_stateCommentStart(t){switch(t){case u.HYPHEN_MINUS:{this.state=A.COMMENT_START_DASH;break}case u.GREATER_THAN_SIGN:{this._err(T.abruptClosingOfEmptyComment),this.state=A.DATA;let r=this.currentToken;this.emitCurrentComment(r);break}default:this.state=A.COMMENT,this._stateComment(t)}}_stateCommentStartDash(t){let r=this.currentToken;switch(t){case u.HYPHEN_MINUS:{this.state=A.COMMENT_END;break}case u.GREATER_THAN_SIGN:{this._err(T.abruptClosingOfEmptyComment),this.state=A.DATA,this.emitCurrentComment(r);break}case u.EOF:{this._err(T.eofInComment),this.emitCurrentComment(r),this._emitEOFToken();break}default:r.data+="-",this.state=A.COMMENT,this._stateComment(t)}}_stateComment(t){let r=this.currentToken;switch(t){case u.HYPHEN_MINUS:{this.state=A.COMMENT_END_DASH;break}case u.LESS_THAN_SIGN:{r.data+="<",this.state=A.COMMENT_LESS_THAN_SIGN;break}case u.NULL:{this._err(T.unexpectedNullCharacter),r.data+=M;break}case u.EOF:{this._err(T.eofInComment),this.emitCurrentComment(r),this._emitEOFToken();break}default:r.data+=String.fromCodePoint(t)}}_stateCommentLessThanSign(t){let r=this.currentToken;switch(t){case u.EXCLAMATION_MARK:{r.data+="!",this.state=A.COMMENT_LESS_THAN_SIGN_BANG;break}case u.LESS_THAN_SIGN:{r.data+="<";break}default:this.state=A.COMMENT,this._stateComment(t)}}_stateCommentLessThanSignBang(t){t===u.HYPHEN_MINUS?this.state=A.COMMENT_LESS_THAN_SIGN_BANG_DASH:(this.state=A.COMMENT,this._stateComment(t))}_stateCommentLessThanSignBangDash(t){t===u.HYPHEN_MINUS?this.state=A.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:(this.state=A.COMMENT_END_DASH,this._stateCommentEndDash(t))}_stateCommentLessThanSignBangDashDash(t){t!==u.GREATER_THAN_SIGN&&t!==u.EOF&&this._err(T.nestedComment),this.state=A.COMMENT_END,this._stateCommentEnd(t)}_stateCommentEndDash(t){let r=this.currentToken;switch(t){case u.HYPHEN_MINUS:{this.state=A.COMMENT_END;break}case u.EOF:{this._err(T.eofInComment),this.emitCurrentComment(r),this._emitEOFToken();break}default:r.data+="-",this.state=A.COMMENT,this._stateComment(t)}}_stateCommentEnd(t){let r=this.currentToken;switch(t){case u.GREATER_THAN_SIGN:{this.state=A.DATA,this.emitCurrentComment(r);break}case u.EXCLAMATION_MARK:{this.state=A.COMMENT_END_BANG;break}case u.HYPHEN_MINUS:{r.data+="-";break}case u.EOF:{this._err(T.eofInComment),this.emitCurrentComment(r),this._emitEOFToken();break}default:r.data+="--",this.state=A.COMMENT,this._stateComment(t)}}_stateCommentEndBang(t){let r=this.currentToken;switch(t){case u.HYPHEN_MINUS:{r.data+="--!",this.state=A.COMMENT_END_DASH;break}case u.GREATER_THAN_SIGN:{this._err(T.incorrectlyClosedComment),this.state=A.DATA,this.emitCurrentComment(r);break}case u.EOF:{this._err(T.eofInComment),this.emitCurrentComment(r),this._emitEOFToken();break}default:r.data+="--!",this.state=A.COMMENT,this._stateComment(t)}}_stateDoctype(t){switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:{this.state=A.BEFORE_DOCTYPE_NAME;break}case u.GREATER_THAN_SIGN:{this.state=A.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);break}case u.EOF:{this._err(T.eofInDoctype),this._createDoctypeToken(null);let r=this.currentToken;r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(T.missingWhitespaceBeforeDoctypeName),this.state=A.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t)}}_stateBeforeDoctypeName(t){if(bt(t))this._createDoctypeToken(String.fromCharCode(dr(t))),this.state=A.DOCTYPE_NAME;else switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:break;case u.NULL:{this._err(T.unexpectedNullCharacter),this._createDoctypeToken(M),this.state=A.DOCTYPE_NAME;break}case u.GREATER_THAN_SIGN:{this._err(T.missingDoctypeName),this._createDoctypeToken(null);let r=this.currentToken;r.forceQuirks=!0,this.emitCurrentDoctype(r),this.state=A.DATA;break}case u.EOF:{this._err(T.eofInDoctype),this._createDoctypeToken(null);let r=this.currentToken;r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._createDoctypeToken(String.fromCodePoint(t)),this.state=A.DOCTYPE_NAME}}_stateDoctypeName(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:{this.state=A.AFTER_DOCTYPE_NAME;break}case u.GREATER_THAN_SIGN:{this.state=A.DATA,this.emitCurrentDoctype(r);break}case u.NULL:{this._err(T.unexpectedNullCharacter),r.name+=M;break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:r.name+=String.fromCodePoint(bt(t)?dr(t):t)}}_stateAfterDoctypeName(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:break;case u.GREATER_THAN_SIGN:{this.state=A.DATA,this.emitCurrentDoctype(r);break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._consumeSequenceIfMatch(z.PUBLIC,!1)?this.state=A.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._consumeSequenceIfMatch(z.SYSTEM,!1)?this.state=A.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._ensureHibernation()||(this._err(T.invalidCharacterSequenceAfterDoctypeName),r.forceQuirks=!0,this.state=A.BOGUS_DOCTYPE,this._stateBogusDoctype(t))}}_stateAfterDoctypePublicKeyword(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:{this.state=A.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break}case u.QUOTATION_MARK:{this._err(T.missingWhitespaceAfterDoctypePublicKeyword),r.publicId="",this.state=A.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case u.APOSTROPHE:{this._err(T.missingWhitespaceAfterDoctypePublicKeyword),r.publicId="",this.state=A.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case u.GREATER_THAN_SIGN:{this._err(T.missingDoctypePublicIdentifier),r.forceQuirks=!0,this.state=A.DATA,this.emitCurrentDoctype(r);break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(T.missingQuoteBeforeDoctypePublicIdentifier),r.forceQuirks=!0,this.state=A.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateBeforeDoctypePublicIdentifier(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:break;case u.QUOTATION_MARK:{r.publicId="",this.state=A.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case u.APOSTROPHE:{r.publicId="",this.state=A.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case u.GREATER_THAN_SIGN:{this._err(T.missingDoctypePublicIdentifier),r.forceQuirks=!0,this.state=A.DATA,this.emitCurrentDoctype(r);break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(T.missingQuoteBeforeDoctypePublicIdentifier),r.forceQuirks=!0,this.state=A.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateDoctypePublicIdentifierDoubleQuoted(t){let r=this.currentToken;switch(t){case u.QUOTATION_MARK:{this.state=A.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case u.NULL:{this._err(T.unexpectedNullCharacter),r.publicId+=M;break}case u.GREATER_THAN_SIGN:{this._err(T.abruptDoctypePublicIdentifier),r.forceQuirks=!0,this.emitCurrentDoctype(r),this.state=A.DATA;break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:r.publicId+=String.fromCodePoint(t)}}_stateDoctypePublicIdentifierSingleQuoted(t){let r=this.currentToken;switch(t){case u.APOSTROPHE:{this.state=A.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case u.NULL:{this._err(T.unexpectedNullCharacter),r.publicId+=M;break}case u.GREATER_THAN_SIGN:{this._err(T.abruptDoctypePublicIdentifier),r.forceQuirks=!0,this.emitCurrentDoctype(r),this.state=A.DATA;break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:r.publicId+=String.fromCodePoint(t)}}_stateAfterDoctypePublicIdentifier(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:{this.state=A.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break}case u.GREATER_THAN_SIGN:{this.state=A.DATA,this.emitCurrentDoctype(r);break}case u.QUOTATION_MARK:{this._err(T.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),r.systemId="",this.state=A.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case u.APOSTROPHE:{this._err(T.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),r.systemId="",this.state=A.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(T.missingQuoteBeforeDoctypeSystemIdentifier),r.forceQuirks=!0,this.state=A.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateBetweenDoctypePublicAndSystemIdentifiers(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:break;case u.GREATER_THAN_SIGN:{this.emitCurrentDoctype(r),this.state=A.DATA;break}case u.QUOTATION_MARK:{r.systemId="",this.state=A.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case u.APOSTROPHE:{r.systemId="",this.state=A.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(T.missingQuoteBeforeDoctypeSystemIdentifier),r.forceQuirks=!0,this.state=A.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateAfterDoctypeSystemKeyword(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:{this.state=A.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break}case u.QUOTATION_MARK:{this._err(T.missingWhitespaceAfterDoctypeSystemKeyword),r.systemId="",this.state=A.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case u.APOSTROPHE:{this._err(T.missingWhitespaceAfterDoctypeSystemKeyword),r.systemId="",this.state=A.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case u.GREATER_THAN_SIGN:{this._err(T.missingDoctypeSystemIdentifier),r.forceQuirks=!0,this.state=A.DATA,this.emitCurrentDoctype(r);break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(T.missingQuoteBeforeDoctypeSystemIdentifier),r.forceQuirks=!0,this.state=A.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateBeforeDoctypeSystemIdentifier(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:break;case u.QUOTATION_MARK:{r.systemId="",this.state=A.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case u.APOSTROPHE:{r.systemId="",this.state=A.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case u.GREATER_THAN_SIGN:{this._err(T.missingDoctypeSystemIdentifier),r.forceQuirks=!0,this.state=A.DATA,this.emitCurrentDoctype(r);break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(T.missingQuoteBeforeDoctypeSystemIdentifier),r.forceQuirks=!0,this.state=A.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateDoctypeSystemIdentifierDoubleQuoted(t){let r=this.currentToken;switch(t){case u.QUOTATION_MARK:{this.state=A.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case u.NULL:{this._err(T.unexpectedNullCharacter),r.systemId+=M;break}case u.GREATER_THAN_SIGN:{this._err(T.abruptDoctypeSystemIdentifier),r.forceQuirks=!0,this.emitCurrentDoctype(r),this.state=A.DATA;break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:r.systemId+=String.fromCodePoint(t)}}_stateDoctypeSystemIdentifierSingleQuoted(t){let r=this.currentToken;switch(t){case u.APOSTROPHE:{this.state=A.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case u.NULL:{this._err(T.unexpectedNullCharacter),r.systemId+=M;break}case u.GREATER_THAN_SIGN:{this._err(T.abruptDoctypeSystemIdentifier),r.forceQuirks=!0,this.emitCurrentDoctype(r),this.state=A.DATA;break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:r.systemId+=String.fromCodePoint(t)}}_stateAfterDoctypeSystemIdentifier(t){let r=this.currentToken;switch(t){case u.SPACE:case u.LINE_FEED:case u.TABULATION:case u.FORM_FEED:break;case u.GREATER_THAN_SIGN:{this.emitCurrentDoctype(r),this.state=A.DATA;break}case u.EOF:{this._err(T.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(T.unexpectedCharacterAfterDoctypeSystemIdentifier),this.state=A.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateBogusDoctype(t){let r=this.currentToken;switch(t){case u.GREATER_THAN_SIGN:{this.emitCurrentDoctype(r),this.state=A.DATA;break}case u.NULL:{this._err(T.unexpectedNullCharacter);break}case u.EOF:{this.emitCurrentDoctype(r),this._emitEOFToken();break}default:}}_stateCdataSection(t){switch(t){case u.RIGHT_SQUARE_BRACKET:{this.state=A.CDATA_SECTION_BRACKET;break}case u.EOF:{this._err(T.eofInCdata),this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateCdataSectionBracket(t){t===u.RIGHT_SQUARE_BRACKET?this.state=A.CDATA_SECTION_END:(this._emitChars("]"),this.state=A.CDATA_SECTION,this._stateCdataSection(t))}_stateCdataSectionEnd(t){switch(t){case u.GREATER_THAN_SIGN:{this.state=A.DATA;break}case u.RIGHT_SQUARE_BRACKET:{this._emitChars("]");break}default:this._emitChars("]]"),this.state=A.CDATA_SECTION,this._stateCdataSection(t)}}_stateCharacterReference(){let t=this.entityDecoder.write(this.preprocessor.html,this.preprocessor.pos);if(t<0)if(this.preprocessor.lastChunkWritten)t=this.entityDecoder.end();else{this.active=!1,this.preprocessor.pos=this.preprocessor.html.length-1,this.consumedAfterSnapshot=0,this.preprocessor.endOfChunkHit=!0;return}t===0?(this.preprocessor.pos=this.entityStartPos,this._flushCodePointConsumedAsCharacterReference(u.AMPERSAND),this.state=!this._isCharacterReferenceInAttribute()&&Ks(this.preprocessor.peek(1))?A.AMBIGUOUS_AMPERSAND:this.returnState):this.state=this.returnState}_stateAmbiguousAmpersand(t){Ks(t)?this._flushCodePointConsumedAsCharacterReference(t):(t===u.SEMICOLON&&this._err(T.unknownNamedCharacterReference),this.state=this.returnState,this._callState(t))}};var Zs=new Set([i.DD,i.DT,i.LI,i.OPTGROUP,i.OPTION,i.P,i.RB,i.RP,i.RT,i.RTC]),Vs=new Set([...Zs,i.CAPTION,i.COLGROUP,i.TBODY,i.TD,i.TFOOT,i.TH,i.THEAD,i.TR]),ur=new Set([i.APPLET,i.CAPTION,i.HTML,i.MARQUEE,i.OBJECT,i.TABLE,i.TD,i.TEMPLATE,i.TH]),zc=new Set([...ur,i.OL,i.UL]),qc=new Set([...ur,i.BUTTON]),$s=new Set([i.ANNOTATION_XML,i.MI,i.MN,i.MO,i.MS,i.MTEXT]),Xs=new Set([i.DESC,i.FOREIGN_OBJECT,i.TITLE]),el=new Set([i.TR,i.TEMPLATE,i.HTML]),tl=new Set([i.TBODY,i.TFOOT,i.THEAD,i.TEMPLATE,i.HTML]),rl=new Set([i.TABLE,i.TEMPLATE,i.HTML]),nl=new Set([i.TD,i.TH]),Ar=class{get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}constructor(t,r,n){this.treeAdapter=r,this.handler=n,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=i.UNKNOWN,this.current=t}_indexOf(t){return this.items.lastIndexOf(t,this.stackTop)}_isInTemplate(){return this.currentTagId===i.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===b.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop]}push(t,r){this.stackTop++,this.items[this.stackTop]=t,this.current=t,this.tagIDs[this.stackTop]=r,this.currentTagId=r,this._isInTemplate()&&this.tmplCount++,this.handler.onItemPush(t,r,!0)}pop(){let t=this.current;this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,!0)}replace(t,r){let n=this._indexOf(t);this.items[n]=r,n===this.stackTop&&(this.current=r)}insertAfter(t,r,n){let s=this._indexOf(t)+1;this.items.splice(s,0,r),this.tagIDs.splice(s,0,n),this.stackTop++,s===this.stackTop&&this._updateCurrentElement(),this.current&&this.currentTagId!==void 0&&this.handler.onItemPush(this.current,this.currentTagId,s===this.stackTop)}popUntilTagNamePopped(t){let r=this.stackTop+1;do r=this.tagIDs.lastIndexOf(t,r-1);while(r>0&&this.treeAdapter.getNamespaceURI(this.items[r])!==b.HTML);this.shortenToLength(Math.max(r,0))}shortenToLength(t){for(;this.stackTop>=t;){let r=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(r,this.stackTop<t)}}popUntilElementPopped(t){let r=this._indexOf(t);this.shortenToLength(Math.max(r,0))}popUntilPopped(t,r){let n=this._indexOfTagNames(t,r);this.shortenToLength(Math.max(n,0))}popUntilNumberedHeaderPopped(){this.popUntilPopped(Tt,b.HTML)}popUntilTableCellPopped(){this.popUntilPopped(nl,b.HTML)}popAllUpToHtmlElement(){this.tmplCount=0,this.shortenToLength(1)}_indexOfTagNames(t,r){for(let n=this.stackTop;n>=0;n--)if(t.has(this.tagIDs[n])&&this.treeAdapter.getNamespaceURI(this.items[n])===r)return n;return-1}clearBackTo(t,r){let n=this._indexOfTagNames(t,r);this.shortenToLength(n+1)}clearBackToTableContext(){this.clearBackTo(rl,b.HTML)}clearBackToTableBodyContext(){this.clearBackTo(tl,b.HTML)}clearBackToTableRowContext(){this.clearBackTo(el,b.HTML)}remove(t){let r=this._indexOf(t);r>=0&&(r===this.stackTop?this.pop():(this.items.splice(r,1),this.tagIDs.splice(r,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,!1)))}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===i.BODY?this.items[1]:null}contains(t){return this._indexOf(t)>-1}getCommonAncestor(t){let r=this._indexOf(t)-1;return r>=0?this.items[r]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===i.HTML}hasInDynamicScope(t,r){for(let n=this.stackTop;n>=0;n--){let s=this.tagIDs[n];switch(this.treeAdapter.getNamespaceURI(this.items[n])){case b.HTML:{if(s===t)return!0;if(r.has(s))return!1;break}case b.SVG:{if(Xs.has(s))return!1;break}case b.MATHML:{if($s.has(s))return!1;break}}}return!0}hasInScope(t){return this.hasInDynamicScope(t,ur)}hasInListItemScope(t){return this.hasInDynamicScope(t,zc)}hasInButtonScope(t){return this.hasInDynamicScope(t,qc)}hasNumberedHeaderInScope(){for(let t=this.stackTop;t>=0;t--){let r=this.tagIDs[t];switch(this.treeAdapter.getNamespaceURI(this.items[t])){case b.HTML:{if(Tt.has(r))return!0;if(ur.has(r))return!1;break}case b.SVG:{if(Xs.has(r))return!1;break}case b.MATHML:{if($s.has(r))return!1;break}}}return!0}hasInTableScope(t){for(let r=this.stackTop;r>=0;r--)if(this.treeAdapter.getNamespaceURI(this.items[r])===b.HTML)switch(this.tagIDs[r]){case t:return!0;case i.TABLE:case i.HTML:return!1}return!0}hasTableBodyContextInTableScope(){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===b.HTML)switch(this.tagIDs[t]){case i.TBODY:case i.THEAD:case i.TFOOT:return!0;case i.TABLE:case i.HTML:return!1}return!0}hasInSelectScope(t){for(let r=this.stackTop;r>=0;r--)if(this.treeAdapter.getNamespaceURI(this.items[r])===b.HTML)switch(this.tagIDs[r]){case t:return!0;case i.OPTION:case i.OPTGROUP:break;default:return!1}return!0}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&Zs.has(this.currentTagId);)this.pop()}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&Vs.has(this.currentTagId);)this.pop()}generateImpliedEndTagsWithExclusion(t){for(;this.currentTagId!==void 0&&this.currentTagId!==t&&Vs.has(this.currentTagId);)this.pop()}};var Ae;(function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element"})(Ae||(Ae={}));var zs={type:Ae.Marker},pr=class{constructor(t){this.treeAdapter=t,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(t,r){let n=[],s=r.length,a=this.treeAdapter.getTagName(t),c=this.treeAdapter.getNamespaceURI(t);for(let l=0;l<this.entries.length;l++){let o=this.entries[l];if(o.type===Ae.Marker)break;let{element:d}=o;if(this.treeAdapter.getTagName(d)===a&&this.treeAdapter.getNamespaceURI(d)===c){let p=this.treeAdapter.getAttrList(d);p.length===s&&n.push({idx:l,attrs:p})}}return n}_ensureNoahArkCondition(t){if(this.entries.length<3)return;let r=this.treeAdapter.getAttrList(t),n=this._getNoahArkConditionCandidates(t,r);if(n.length<3)return;let s=new Map(r.map(c=>[c.name,c.value])),a=0;for(let c=0;c<n.length;c++){let l=n[c];l.attrs.every(o=>s.get(o.name)===o.value)&&(a+=1,a>=3&&this.entries.splice(l.idx,1))}}insertMarker(){this.entries.unshift(zs)}pushElement(t,r){this._ensureNoahArkCondition(t),this.entries.unshift({type:Ae.Element,element:t,token:r})}insertElementAfterBookmark(t,r){let n=this.entries.indexOf(this.bookmark);this.entries.splice(n,0,{type:Ae.Element,element:t,token:r})}removeEntry(t){let r=this.entries.indexOf(t);r!==-1&&this.entries.splice(r,1)}clearToLastMarker(){let t=this.entries.indexOf(zs);t===-1?this.entries.length=0:this.entries.splice(0,t+1)}getElementEntryInScopeWithTagName(t){let r=this.entries.find(n=>n.type===Ae.Marker||this.treeAdapter.getTagName(n.element)===t);return r&&r.type===Ae.Element?r:null}getElementEntry(t){return this.entries.find(r=>r.type===Ae.Element&&r.element===t)}};var pe={createDocument(){return{nodeName:"#document",mode:q.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:"#document-fragment",childNodes:[]}},createElement(e,t,r){return{nodeName:e,tagName:e,attrs:r,namespaceURI:t,childNodes:[],parentNode:null}},createCommentNode(e){return{nodeName:"#comment",data:e,parentNode:null}},createTextNode(e){return{nodeName:"#text",value:e,parentNode:null}},appendChild(e,t){e.childNodes.push(t),t.parentNode=e},insertBefore(e,t,r){let n=e.childNodes.indexOf(r);e.childNodes.splice(n,0,t),t.parentNode=e},setTemplateContent(e,t){e.content=t},getTemplateContent(e){return e.content},setDocumentType(e,t,r,n){let s=e.childNodes.find(a=>a.nodeName==="#documentType");if(s)s.name=t,s.publicId=r,s.systemId=n;else{let a={nodeName:"#documentType",name:t,publicId:r,systemId:n,parentNode:null};pe.appendChild(e,a)}},setDocumentMode(e,t){e.mode=t},getDocumentMode(e){return e.mode},detachNode(e){if(e.parentNode){let t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null}},insertText(e,t){if(e.childNodes.length>0){let r=e.childNodes[e.childNodes.length-1];if(pe.isTextNode(r)){r.value+=t;return}}pe.appendChild(e,pe.createTextNode(t))},insertTextBefore(e,t,r){let n=e.childNodes[e.childNodes.indexOf(r)-1];n&&pe.isTextNode(n)?n.value+=t:pe.insertBefore(e,pe.createTextNode(t),r)},adoptAttributes(e,t){let r=new Set(e.attrs.map(n=>n.name));for(let n=0;n<t.length;n++)r.has(t[n].name)||e.attrs.push(t[n])},getFirstChild(e){return e.childNodes[0]},getChildNodes(e){return e.childNodes},getParentNode(e){return e.parentNode},getAttrList(e){return e.attrs},getTagName(e){return e.tagName},getNamespaceURI(e){return e.namespaceURI},getTextNodeContent(e){return e.value},getCommentNodeContent(e){return e.data},getDocumentTypeNodeName(e){return e.name},getDocumentTypeNodePublicId(e){return e.publicId},getDocumentTypeNodeSystemId(e){return e.systemId},isTextNode(e){return e.nodeName==="#text"},isCommentNode(e){return e.nodeName==="#comment"},isDocumentTypeNode(e){return e.nodeName==="#documentType"},isElementNode(e){return Object.prototype.hasOwnProperty.call(e,"tagName")},setNodeSourceCodeLocation(e,t){e.sourceCodeLocation=t},getNodeSourceCodeLocation(e){return e.sourceCodeLocation},updateNodeSourceCodeLocation(e,t){e.sourceCodeLocation={...e.sourceCodeLocation,...t}}};var ei="html",sl="about:legacy-compat",il="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",ti=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],al=[...ti,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],ol=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),ri=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],cl=[...ri,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function qs(e,t){return t.some(r=>e.startsWith(r))}function ni(e){return e.name===ei&&e.publicId===null&&(e.systemId===null||e.systemId===sl)}function si(e){if(e.name!==ei)return q.QUIRKS;let{systemId:t}=e;if(t&&t.toLowerCase()===il)return q.QUIRKS;let{publicId:r}=e;if(r!==null){if(r=r.toLowerCase(),ol.has(r))return q.QUIRKS;let n=t===null?al:ti;if(qs(r,n))return q.QUIRKS;if(n=t===null?ri:cl,qs(r,n))return q.LIMITED_QUIRKS}return q.NO_QUIRKS}var ii={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},dl="definitionurl",ul="definitionURL",Al=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(e=>[e.toLowerCase(),e])),pl=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:b.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:b.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:b.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:b.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:b.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:b.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:b.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:b.XML}],["xml:space",{prefix:"xml",name:"space",namespace:b.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:b.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:b.XMLNS}]]),hl=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(e=>[e.toLowerCase(),e])),gl=new Set([i.B,i.BIG,i.BLOCKQUOTE,i.BODY,i.BR,i.CENTER,i.CODE,i.DD,i.DIV,i.DL,i.DT,i.EM,i.EMBED,i.H1,i.H2,i.H3,i.H4,i.H5,i.H6,i.HEAD,i.HR,i.I,i.IMG,i.LI,i.LISTING,i.MENU,i.META,i.NOBR,i.OL,i.P,i.PRE,i.RUBY,i.S,i.SMALL,i.SPAN,i.STRONG,i.STRIKE,i.SUB,i.SUP,i.TABLE,i.TT,i.U,i.UL,i.VAR]);function ai(e){let t=e.tagID;return t===i.FONT&&e.attrs.some(({name:n})=>n===be.COLOR||n===be.SIZE||n===be.FACE)||gl.has(t)}function fn(e){for(let t=0;t<e.attrs.length;t++)if(e.attrs[t].name===dl){e.attrs[t].name=ul;break}}function En(e){for(let t=0;t<e.attrs.length;t++){let r=Al.get(e.attrs[t].name);r!=null&&(e.attrs[t].name=r)}}function hr(e){for(let t=0;t<e.attrs.length;t++){let r=pl.get(e.attrs[t].name);r&&(e.attrs[t].prefix=r.prefix,e.attrs[t].name=r.name,e.attrs[t].namespace=r.namespace)}}function oi(e){let t=hl.get(e.tagName);t!=null&&(e.tagName=t,e.tagID=Pe(e.tagName))}function ml(e,t){return t===b.MATHML&&(e===i.MI||e===i.MO||e===i.MN||e===i.MS||e===i.MTEXT)}function fl(e,t,r){if(t===b.MATHML&&e===i.ANNOTATION_XML){for(let n=0;n<r.length;n++)if(r[n].name===be.ENCODING){let s=r[n].value.toLowerCase();return s===ii.TEXT_HTML||s===ii.APPLICATION_XML}}return t===b.SVG&&(e===i.FOREIGN_OBJECT||e===i.DESC||e===i.TITLE)}function ci(e,t,r,n){return(!n||n===b.HTML)&&fl(e,t,r)||(!n||n===b.MATHML)&&ml(e,t)}var El="hidden",Tl=8,bl=3,g;(function(e){e[e.INITIAL=0]="INITIAL",e[e.BEFORE_HTML=1]="BEFORE_HTML",e[e.BEFORE_HEAD=2]="BEFORE_HEAD",e[e.IN_HEAD=3]="IN_HEAD",e[e.IN_HEAD_NO_SCRIPT=4]="IN_HEAD_NO_SCRIPT",e[e.AFTER_HEAD=5]="AFTER_HEAD",e[e.IN_BODY=6]="IN_BODY",e[e.TEXT=7]="TEXT",e[e.IN_TABLE=8]="IN_TABLE",e[e.IN_TABLE_TEXT=9]="IN_TABLE_TEXT",e[e.IN_CAPTION=10]="IN_CAPTION",e[e.IN_COLUMN_GROUP=11]="IN_COLUMN_GROUP",e[e.IN_TABLE_BODY=12]="IN_TABLE_BODY",e[e.IN_ROW=13]="IN_ROW",e[e.IN_CELL=14]="IN_CELL",e[e.IN_SELECT=15]="IN_SELECT",e[e.IN_SELECT_IN_TABLE=16]="IN_SELECT_IN_TABLE",e[e.IN_TEMPLATE=17]="IN_TEMPLATE",e[e.AFTER_BODY=18]="AFTER_BODY",e[e.IN_FRAMESET=19]="IN_FRAMESET",e[e.AFTER_FRAMESET=20]="AFTER_FRAMESET",e[e.AFTER_AFTER_BODY=21]="AFTER_AFTER_BODY",e[e.AFTER_AFTER_FRAMESET=22]="AFTER_AFTER_FRAMESET"})(g||(g={}));var Cl={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},pi=new Set([i.TABLE,i.TBODY,i.TFOOT,i.THEAD,i.TR]),di={scriptingEnabled:!0,sourceCodeLocationInfo:!1,treeAdapter:pe,onParseError:null},Rt=class{constructor(t,r,n=null,s=null){this.fragmentContext=n,this.scriptHandler=s,this.currentToken=null,this.stopped=!1,this.insertionMode=g.INITIAL,this.originalInsertionMode=g.INITIAL,this.headElement=null,this.formElement=null,this.currentNotInHTML=!1,this.tmplInsertionModeStack=[],this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=!1,this.framesetOk=!0,this.skipNextNewLine=!1,this.fosterParentingEnabled=!1,this.options={...di,...t},this.treeAdapter=this.options.treeAdapter,this.onParseError=this.options.onParseError,this.onParseError&&(this.options.sourceCodeLocationInfo=!0),this.document=r??this.treeAdapter.createDocument(),this.tokenizer=new Ct(this.options,this),this.activeFormattingElements=new pr(this.treeAdapter),this.fragmentContextID=n?Pe(this.treeAdapter.getTagName(n)):i.UNKNOWN,this._setContextModes(n??this.document,this.fragmentContextID),this.openElements=new Ar(this.document,this.treeAdapter,this)}static parse(t,r){let n=new this(r);return n.tokenizer.write(t,!0),n.document}static getFragmentParser(t,r){let n={...di,...r};t??(t=n.treeAdapter.createElement(E.TEMPLATE,b.HTML,[]));let s=n.treeAdapter.createElement("documentmock",b.HTML,[]),a=new this(n,s,t);return a.fragmentContextID===i.TEMPLATE&&a.tmplInsertionModeStack.unshift(g.IN_TEMPLATE),a._initTokenizerForFragmentParsing(),a._insertFakeRootElement(),a._resetInsertionMode(),a._findFormInFragmentContext(),a}getFragment(){let t=this.treeAdapter.getFirstChild(this.document),r=this.treeAdapter.createDocumentFragment();return this._adoptNodes(t,r),r}_err(t,r,n){var s;if(!this.onParseError)return;let a=(s=t.location)!==null&&s!==void 0?s:Cl,c={code:r,startLine:a.startLine,startCol:a.startCol,startOffset:a.startOffset,endLine:n?a.startLine:a.endLine,endCol:n?a.startCol:a.endCol,endOffset:n?a.startOffset:a.endOffset};this.onParseError(c)}onItemPush(t,r,n){var s,a;(a=(s=this.treeAdapter).onItemPush)===null||a===void 0||a.call(s,t),n&&this.openElements.stackTop>0&&this._setContextModes(t,r)}onItemPop(t,r){var n,s;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(t,this.currentToken),(s=(n=this.treeAdapter).onItemPop)===null||s===void 0||s.call(n,t,this.openElements.current),r){let a,c;this.openElements.stackTop===0&&this.fragmentContext?(a=this.fragmentContext,c=this.fragmentContextID):{current:a,currentTagId:c}=this.openElements,this._setContextModes(a,c)}}_setContextModes(t,r){let n=t===this.document||t&&this.treeAdapter.getNamespaceURI(t)===b.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&t!==void 0&&r!==void 0&&!this._isIntegrationPoint(r,t)}_switchToTextParsing(t,r){this._insertElement(t,b.HTML),this.tokenizer.state=r,this.originalInsertionMode=this.insertionMode,this.insertionMode=g.TEXT}switchToPlaintextParsing(){this.insertionMode=g.TEXT,this.originalInsertionMode=g.IN_BODY,this.tokenizer.state=j.PLAINTEXT}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let t=this.fragmentContext;for(;t;){if(this.treeAdapter.getTagName(t)===E.FORM){this.formElement=t;break}t=this.treeAdapter.getParentNode(t)}}_initTokenizerForFragmentParsing(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==b.HTML))switch(this.fragmentContextID){case i.TITLE:case i.TEXTAREA:{this.tokenizer.state=j.RCDATA;break}case i.STYLE:case i.XMP:case i.IFRAME:case i.NOEMBED:case i.NOFRAMES:case i.NOSCRIPT:{this.tokenizer.state=j.RAWTEXT;break}case i.SCRIPT:{this.tokenizer.state=j.SCRIPT_DATA;break}case i.PLAINTEXT:{this.tokenizer.state=j.PLAINTEXT;break}default:}}_setDocumentType(t){let r=t.name||"",n=t.publicId||"",s=t.systemId||"";if(this.treeAdapter.setDocumentType(this.document,r,n,s),t.location){let c=this.treeAdapter.getChildNodes(this.document).find(l=>this.treeAdapter.isDocumentTypeNode(l));c&&this.treeAdapter.setNodeSourceCodeLocation(c,t.location)}}_attachElementToTree(t,r){if(this.options.sourceCodeLocationInfo){let n=r&&{...r,startTag:r};this.treeAdapter.setNodeSourceCodeLocation(t,n)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(t);else{let n=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(n??this.document,t)}}_appendElement(t,r){let n=this.treeAdapter.createElement(t.tagName,r,t.attrs);this._attachElementToTree(n,t.location)}_insertElement(t,r){let n=this.treeAdapter.createElement(t.tagName,r,t.attrs);this._attachElementToTree(n,t.location),this.openElements.push(n,t.tagID)}_insertFakeElement(t,r){let n=this.treeAdapter.createElement(t,b.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,r)}_insertTemplate(t){let r=this.treeAdapter.createElement(t.tagName,b.HTML,t.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(r,n),this._attachElementToTree(r,t.location),this.openElements.push(r,t.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null)}_insertFakeRootElement(){let t=this.treeAdapter.createElement(E.HTML,b.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(t,null),this.treeAdapter.appendChild(this.openElements.current,t),this.openElements.push(t,i.HTML)}_appendCommentNode(t,r){let n=this.treeAdapter.createCommentNode(t.data);this.treeAdapter.appendChild(r,n),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,t.location)}_insertCharacters(t){let r,n;if(this._shouldFosterParentOnInsertion()?({parent:r,beforeElement:n}=this._findFosterParentingLocation(),n?this.treeAdapter.insertTextBefore(r,t.chars,n):this.treeAdapter.insertText(r,t.chars)):(r=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(r,t.chars)),!t.location)return;let s=this.treeAdapter.getChildNodes(r),a=n?s.lastIndexOf(n):s.length,c=s[a-1];if(this.treeAdapter.getNodeSourceCodeLocation(c)){let{endLine:o,endCol:d,endOffset:p}=t.location;this.treeAdapter.updateNodeSourceCodeLocation(c,{endLine:o,endCol:d,endOffset:p})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(c,t.location)}_adoptNodes(t,r){for(let n=this.treeAdapter.getFirstChild(t);n;n=this.treeAdapter.getFirstChild(t))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(r,n)}_setEndLocation(t,r){if(this.treeAdapter.getNodeSourceCodeLocation(t)&&r.location){let n=r.location,s=this.treeAdapter.getTagName(t),a=r.type===v.END_TAG&&s===r.tagName?{endTag:{...n},endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(t,a)}}shouldProcessStartTagTokenInForeignContent(t){if(!this.currentNotInHTML)return!1;let r,n;return this.openElements.stackTop===0&&this.fragmentContext?(r=this.fragmentContext,n=this.fragmentContextID):{current:r,currentTagId:n}=this.openElements,t.tagID===i.SVG&&this.treeAdapter.getTagName(r)===E.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(r)===b.MATHML?!1:this.tokenizer.inForeignNode||(t.tagID===i.MGLYPH||t.tagID===i.MALIGNMARK)&&n!==void 0&&!this._isIntegrationPoint(n,r,b.HTML)}_processToken(t){switch(t.type){case v.CHARACTER:{this.onCharacter(t);break}case v.NULL_CHARACTER:{this.onNullCharacter(t);break}case v.COMMENT:{this.onComment(t);break}case v.DOCTYPE:{this.onDoctype(t);break}case v.START_TAG:{this._processStartTag(t);break}case v.END_TAG:{this.onEndTag(t);break}case v.EOF:{this.onEof(t);break}case v.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(t);break}}}_isIntegrationPoint(t,r,n){let s=this.treeAdapter.getNamespaceURI(r),a=this.treeAdapter.getAttrList(r);return ci(t,s,a,n)}_reconstructActiveFormattingElements(){let t=this.activeFormattingElements.entries.length;if(t){let r=this.activeFormattingElements.entries.findIndex(s=>s.type===Ae.Marker||this.openElements.contains(s.element)),n=r===-1?t-1:r-1;for(let s=n;s>=0;s--){let a=this.activeFormattingElements.entries[s];this._insertElement(a.token,this.treeAdapter.getNamespaceURI(a.element)),a.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=g.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(i.P),this.openElements.popUntilTagNamePopped(i.P)}_resetInsertionMode(){for(let t=this.openElements.stackTop;t>=0;t--)switch(t===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[t]){case i.TR:{this.insertionMode=g.IN_ROW;return}case i.TBODY:case i.THEAD:case i.TFOOT:{this.insertionMode=g.IN_TABLE_BODY;return}case i.CAPTION:{this.insertionMode=g.IN_CAPTION;return}case i.COLGROUP:{this.insertionMode=g.IN_COLUMN_GROUP;return}case i.TABLE:{this.insertionMode=g.IN_TABLE;return}case i.BODY:{this.insertionMode=g.IN_BODY;return}case i.FRAMESET:{this.insertionMode=g.IN_FRAMESET;return}case i.SELECT:{this._resetInsertionModeForSelect(t);return}case i.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case i.HTML:{this.insertionMode=this.headElement?g.AFTER_HEAD:g.BEFORE_HEAD;return}case i.TD:case i.TH:{if(t>0){this.insertionMode=g.IN_CELL;return}break}case i.HEAD:{if(t>0){this.insertionMode=g.IN_HEAD;return}break}}this.insertionMode=g.IN_BODY}_resetInsertionModeForSelect(t){if(t>0)for(let r=t-1;r>0;r--){let n=this.openElements.tagIDs[r];if(n===i.TEMPLATE)break;if(n===i.TABLE){this.insertionMode=g.IN_SELECT_IN_TABLE;return}}this.insertionMode=g.IN_SELECT}_isElementCausesFosterParenting(t){return pi.has(t)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let t=this.openElements.stackTop;t>=0;t--){let r=this.openElements.items[t];switch(this.openElements.tagIDs[t]){case i.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(r)===b.HTML)return{parent:this.treeAdapter.getTemplateContent(r),beforeElement:null};break}case i.TABLE:{let n=this.treeAdapter.getParentNode(r);return n?{parent:n,beforeElement:r}:{parent:this.openElements.items[t-1],beforeElement:null}}default:}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(t){let r=this._findFosterParentingLocation();r.beforeElement?this.treeAdapter.insertBefore(r.parent,t,r.beforeElement):this.treeAdapter.appendChild(r.parent,t)}_isSpecialElement(t,r){let n=this.treeAdapter.getNamespaceURI(t);return Ws[n].has(r)}onCharacter(t){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){Zd(this,t);return}switch(this.insertionMode){case g.INITIAL:{It(this,t);break}case g.BEFORE_HTML:{wt(this,t);break}case g.BEFORE_HEAD:{xt(this,t);break}case g.IN_HEAD:{St(this,t);break}case g.IN_HEAD_NO_SCRIPT:{Nt(this,t);break}case g.AFTER_HEAD:{_t(this,t);break}case g.IN_BODY:case g.IN_CAPTION:case g.IN_CELL:case g.IN_TEMPLATE:{gi(this,t);break}case g.TEXT:case g.IN_SELECT:case g.IN_SELECT_IN_TABLE:{this._insertCharacters(t);break}case g.IN_TABLE:case g.IN_TABLE_BODY:case g.IN_ROW:{Tn(this,t);break}case g.IN_TABLE_TEXT:{Ci(this,t);break}case g.IN_COLUMN_GROUP:{mr(this,t);break}case g.AFTER_BODY:{fr(this,t);break}case g.AFTER_AFTER_BODY:{gr(this,t);break}default:}}onNullCharacter(t){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){Xd(this,t);return}switch(this.insertionMode){case g.INITIAL:{It(this,t);break}case g.BEFORE_HTML:{wt(this,t);break}case g.BEFORE_HEAD:{xt(this,t);break}case g.IN_HEAD:{St(this,t);break}case g.IN_HEAD_NO_SCRIPT:{Nt(this,t);break}case g.AFTER_HEAD:{_t(this,t);break}case g.TEXT:{this._insertCharacters(t);break}case g.IN_TABLE:case g.IN_TABLE_BODY:case g.IN_ROW:{Tn(this,t);break}case g.IN_COLUMN_GROUP:{mr(this,t);break}case g.AFTER_BODY:{fr(this,t);break}case g.AFTER_AFTER_BODY:{gr(this,t);break}default:}}onComment(t){if(this.skipNextNewLine=!1,this.currentNotInHTML){bn(this,t);return}switch(this.insertionMode){case g.INITIAL:case g.BEFORE_HTML:case g.BEFORE_HEAD:case g.IN_HEAD:case g.IN_HEAD_NO_SCRIPT:case g.AFTER_HEAD:case g.IN_BODY:case g.IN_TABLE:case g.IN_CAPTION:case g.IN_COLUMN_GROUP:case g.IN_TABLE_BODY:case g.IN_ROW:case g.IN_CELL:case g.IN_SELECT:case g.IN_SELECT_IN_TABLE:case g.IN_TEMPLATE:case g.IN_FRAMESET:case g.AFTER_FRAMESET:{bn(this,t);break}case g.IN_TABLE_TEXT:{yt(this,t);break}case g.AFTER_BODY:{_l(this,t);break}case g.AFTER_AFTER_BODY:case g.AFTER_AFTER_FRAMESET:{Rl(this,t);break}default:}}onDoctype(t){switch(this.skipNextNewLine=!1,this.insertionMode){case g.INITIAL:{Ll(this,t);break}case g.BEFORE_HEAD:case g.IN_HEAD:case g.IN_HEAD_NO_SCRIPT:case g.AFTER_HEAD:{this._err(t,T.misplacedDoctype);break}case g.IN_TABLE_TEXT:{yt(this,t);break}default:}}onStartTag(t){this.skipNextNewLine=!1,this.currentToken=t,this._processStartTag(t),t.selfClosing&&!t.ackSelfClosing&&this._err(t,T.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(t){this.shouldProcessStartTagTokenInForeignContent(t)?zd(this,t):this._startTagOutsideForeignContent(t)}_startTagOutsideForeignContent(t){switch(this.insertionMode){case g.INITIAL:{It(this,t);break}case g.BEFORE_HTML:{Ol(this,t);break}case g.BEFORE_HEAD:{Dl(this,t);break}case g.IN_HEAD:{he(this,t);break}case g.IN_HEAD_NO_SCRIPT:{Pl(this,t);break}case g.AFTER_HEAD:{Ul(this,t);break}case g.IN_BODY:{V(this,t);break}case g.IN_TABLE:{qe(this,t);break}case g.IN_TABLE_TEXT:{yt(this,t);break}case g.IN_CAPTION:{kd(this,t);break}case g.IN_COLUMN_GROUP:{wn(this,t);break}case g.IN_TABLE_BODY:{br(this,t);break}case g.IN_ROW:{Cr(this,t);break}case g.IN_CELL:{Md(this,t);break}case g.IN_SELECT:{wi(this,t);break}case g.IN_SELECT_IN_TABLE:{Fd(this,t);break}case g.IN_TEMPLATE:{Qd(this,t);break}case g.AFTER_BODY:{Gd(this,t);break}case g.IN_FRAMESET:{Wd(this,t);break}case g.AFTER_FRAMESET:{Jd(this,t);break}case g.AFTER_AFTER_BODY:{Vd(this,t);break}case g.AFTER_AFTER_FRAMESET:{$d(this,t);break}default:}}onEndTag(t){this.skipNextNewLine=!1,this.currentToken=t,this.currentNotInHTML?qd(this,t):this._endTagOutsideForeignContent(t)}_endTagOutsideForeignContent(t){switch(this.insertionMode){case g.INITIAL:{It(this,t);break}case g.BEFORE_HTML:{vl(this,t);break}case g.BEFORE_HEAD:{kl(this,t);break}case g.IN_HEAD:{Bl(this,t);break}case g.IN_HEAD_NO_SCRIPT:{Ml(this,t);break}case g.AFTER_HEAD:{Fl(this,t);break}case g.IN_BODY:{Tr(this,t);break}case g.TEXT:{wd(this,t);break}case g.IN_TABLE:{Lt(this,t);break}case g.IN_TABLE_TEXT:{yt(this,t);break}case g.IN_CAPTION:{Bd(this,t);break}case g.IN_COLUMN_GROUP:{Pd(this,t);break}case g.IN_TABLE_BODY:{Cn(this,t);break}case g.IN_ROW:{yi(this,t);break}case g.IN_CELL:{Ud(this,t);break}case g.IN_SELECT:{xi(this,t);break}case g.IN_SELECT_IN_TABLE:{Hd(this,t);break}case g.IN_TEMPLATE:{Yd(this,t);break}case g.AFTER_BODY:{Ni(this,t);break}case g.IN_FRAMESET:{Kd(this,t);break}case g.AFTER_FRAMESET:{jd(this,t);break}case g.AFTER_AFTER_BODY:{gr(this,t);break}default:}}onEof(t){switch(this.insertionMode){case g.INITIAL:{It(this,t);break}case g.BEFORE_HTML:{wt(this,t);break}case g.BEFORE_HEAD:{xt(this,t);break}case g.IN_HEAD:{St(this,t);break}case g.IN_HEAD_NO_SCRIPT:{Nt(this,t);break}case g.AFTER_HEAD:{_t(this,t);break}case g.IN_BODY:case g.IN_TABLE:case g.IN_CAPTION:case g.IN_COLUMN_GROUP:case g.IN_TABLE_BODY:case g.IN_ROW:case g.IN_CELL:case g.IN_SELECT:case g.IN_SELECT_IN_TABLE:{Ti(this,t);break}case g.TEXT:{xd(this,t);break}case g.IN_TABLE_TEXT:{yt(this,t);break}case g.IN_TEMPLATE:{Si(this,t);break}case g.AFTER_BODY:case g.IN_FRAMESET:case g.AFTER_FRAMESET:case g.AFTER_AFTER_BODY:case g.AFTER_AFTER_FRAMESET:{yn(this,t);break}default:}}onWhitespaceCharacter(t){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,t.chars.charCodeAt(0)===u.LINE_FEED)){if(t.chars.length===1)return;t.chars=t.chars.substr(1)}if(this.tokenizer.inForeignNode){this._insertCharacters(t);return}switch(this.insertionMode){case g.IN_HEAD:case g.IN_HEAD_NO_SCRIPT:case g.AFTER_HEAD:case g.TEXT:case g.IN_COLUMN_GROUP:case g.IN_SELECT:case g.IN_SELECT_IN_TABLE:case g.IN_FRAMESET:case g.AFTER_FRAMESET:{this._insertCharacters(t);break}case g.IN_BODY:case g.IN_CAPTION:case g.IN_CELL:case g.IN_TEMPLATE:case g.AFTER_BODY:case g.AFTER_AFTER_BODY:case g.AFTER_AFTER_FRAMESET:{hi(this,t);break}case g.IN_TABLE:case g.IN_TABLE_BODY:case g.IN_ROW:{Tn(this,t);break}case g.IN_TABLE_TEXT:{bi(this,t);break}default:}}};function Il(e,t){let r=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return r?e.openElements.contains(r.element)?e.openElements.hasInScope(t.tagID)||(r=null):(e.activeFormattingElements.removeEntry(r),r=null):Ei(e,t),r}function yl(e,t){let r=null,n=e.openElements.stackTop;for(;n>=0;n--){let s=e.openElements.items[n];if(s===t.element)break;e._isSpecialElement(s,e.openElements.tagIDs[n])&&(r=s)}return r||(e.openElements.shortenToLength(Math.max(n,0)),e.activeFormattingElements.removeEntry(t)),r}function wl(e,t,r){let n=t,s=e.openElements.getCommonAncestor(t);for(let a=0,c=s;c!==r;a++,c=s){s=e.openElements.getCommonAncestor(c);let l=e.activeFormattingElements.getElementEntry(c),o=l&&a>=bl;!l||o?(o&&e.activeFormattingElements.removeEntry(l),e.openElements.remove(c)):(c=xl(e,l),n===t&&(e.activeFormattingElements.bookmark=l),e.treeAdapter.detachNode(n),e.treeAdapter.appendChild(c,n),n=c)}return n}function xl(e,t){let r=e.treeAdapter.getNamespaceURI(t.element),n=e.treeAdapter.createElement(t.token.tagName,r,t.token.attrs);return e.openElements.replace(t.element,n),t.element=n,n}function Sl(e,t,r){let n=e.treeAdapter.getTagName(t),s=Pe(n);if(e._isElementCausesFosterParenting(s))e._fosterParentElement(r);else{let a=e.treeAdapter.getNamespaceURI(t);s===i.TEMPLATE&&a===b.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,r)}}function Nl(e,t,r){let n=e.treeAdapter.getNamespaceURI(r.element),{token:s}=r,a=e.treeAdapter.createElement(s.tagName,n,s.attrs);e._adoptNodes(t,a),e.treeAdapter.appendChild(t,a),e.activeFormattingElements.insertElementAfterBookmark(a,s),e.activeFormattingElements.removeEntry(r),e.openElements.remove(r.element),e.openElements.insertAfter(t,a,s.tagID)}function In(e,t){for(let r=0;r<Tl;r++){let n=Il(e,t);if(!n)break;let s=yl(e,n);if(!s)break;e.activeFormattingElements.bookmark=n;let a=wl(e,s,n.element),c=e.openElements.getCommonAncestor(n.element);e.treeAdapter.detachNode(a),c&&Sl(e,c,a),Nl(e,s,n)}}function bn(e,t){e._appendCommentNode(t,e.openElements.currentTmplContentOrNode)}function _l(e,t){e._appendCommentNode(t,e.openElements.items[0])}function Rl(e,t){e._appendCommentNode(t,e.document)}function yn(e,t){if(e.stopped=!0,t.location){let r=e.fragmentContext?0:2;for(let n=e.openElements.stackTop;n>=r;n--)e._setEndLocation(e.openElements.items[n],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){let n=e.openElements.items[0],s=e.treeAdapter.getNodeSourceCodeLocation(n);if(s&&!s.endTag&&(e._setEndLocation(n,t),e.openElements.stackTop>=1)){let a=e.openElements.items[1],c=e.treeAdapter.getNodeSourceCodeLocation(a);c&&!c.endTag&&e._setEndLocation(a,t)}}}}function Ll(e,t){e._setDocumentType(t);let r=t.forceQuirks?q.QUIRKS:si(t);ni(t)||e._err(t,T.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,r),e.insertionMode=g.BEFORE_HTML}function It(e,t){e._err(t,T.missingDoctype,!0),e.treeAdapter.setDocumentMode(e.document,q.QUIRKS),e.insertionMode=g.BEFORE_HTML,e._processToken(t)}function Ol(e,t){t.tagID===i.HTML?(e._insertElement(t,b.HTML),e.insertionMode=g.BEFORE_HEAD):wt(e,t)}function vl(e,t){let r=t.tagID;(r===i.HTML||r===i.HEAD||r===i.BODY||r===i.BR)&&wt(e,t)}function wt(e,t){e._insertFakeRootElement(),e.insertionMode=g.BEFORE_HEAD,e._processToken(t)}function Dl(e,t){switch(t.tagID){case i.HTML:{V(e,t);break}case i.HEAD:{e._insertElement(t,b.HTML),e.headElement=e.openElements.current,e.insertionMode=g.IN_HEAD;break}default:xt(e,t)}}function kl(e,t){let r=t.tagID;r===i.HEAD||r===i.BODY||r===i.HTML||r===i.BR?xt(e,t):e._err(t,T.endTagWithoutMatchingOpenElement)}function xt(e,t){e._insertFakeElement(E.HEAD,i.HEAD),e.headElement=e.openElements.current,e.insertionMode=g.IN_HEAD,e._processToken(t)}function he(e,t){switch(t.tagID){case i.HTML:{V(e,t);break}case i.BASE:case i.BASEFONT:case i.BGSOUND:case i.LINK:case i.META:{e._appendElement(t,b.HTML),t.ackSelfClosing=!0;break}case i.TITLE:{e._switchToTextParsing(t,j.RCDATA);break}case i.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(t,j.RAWTEXT):(e._insertElement(t,b.HTML),e.insertionMode=g.IN_HEAD_NO_SCRIPT);break}case i.NOFRAMES:case i.STYLE:{e._switchToTextParsing(t,j.RAWTEXT);break}case i.SCRIPT:{e._switchToTextParsing(t,j.SCRIPT_DATA);break}case i.TEMPLATE:{e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=g.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(g.IN_TEMPLATE);break}case i.HEAD:{e._err(t,T.misplacedStartTagForHeadElement);break}default:St(e,t)}}function Bl(e,t){switch(t.tagID){case i.HEAD:{e.openElements.pop(),e.insertionMode=g.AFTER_HEAD;break}case i.BODY:case i.BR:case i.HTML:{St(e,t);break}case i.TEMPLATE:{Me(e,t);break}default:e._err(t,T.endTagWithoutMatchingOpenElement)}}function Me(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==i.TEMPLATE&&e._err(t,T.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(i.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,T.endTagWithoutMatchingOpenElement)}function St(e,t){e.openElements.pop(),e.insertionMode=g.AFTER_HEAD,e._processToken(t)}function Pl(e,t){switch(t.tagID){case i.HTML:{V(e,t);break}case i.BASEFONT:case i.BGSOUND:case i.HEAD:case i.LINK:case i.META:case i.NOFRAMES:case i.STYLE:{he(e,t);break}case i.NOSCRIPT:{e._err(t,T.nestedNoscriptInHead);break}default:Nt(e,t)}}function Ml(e,t){switch(t.tagID){case i.NOSCRIPT:{e.openElements.pop(),e.insertionMode=g.IN_HEAD;break}case i.BR:{Nt(e,t);break}default:e._err(t,T.endTagWithoutMatchingOpenElement)}}function Nt(e,t){let r=t.type===v.EOF?T.openElementsLeftAfterEof:T.disallowedContentInNoscriptInHead;e._err(t,r),e.openElements.pop(),e.insertionMode=g.IN_HEAD,e._processToken(t)}function Ul(e,t){switch(t.tagID){case i.HTML:{V(e,t);break}case i.BODY:{e._insertElement(t,b.HTML),e.framesetOk=!1,e.insertionMode=g.IN_BODY;break}case i.FRAMESET:{e._insertElement(t,b.HTML),e.insertionMode=g.IN_FRAMESET;break}case i.BASE:case i.BASEFONT:case i.BGSOUND:case i.LINK:case i.META:case i.NOFRAMES:case i.SCRIPT:case i.STYLE:case i.TEMPLATE:case i.TITLE:{e._err(t,T.abandonedHeadElementChild),e.openElements.push(e.headElement,i.HEAD),he(e,t),e.openElements.remove(e.headElement);break}case i.HEAD:{e._err(t,T.misplacedStartTagForHeadElement);break}default:_t(e,t)}}function Fl(e,t){switch(t.tagID){case i.BODY:case i.HTML:case i.BR:{_t(e,t);break}case i.TEMPLATE:{Me(e,t);break}default:e._err(t,T.endTagWithoutMatchingOpenElement)}}function _t(e,t){e._insertFakeElement(E.BODY,i.BODY),e.insertionMode=g.IN_BODY,Er(e,t)}function Er(e,t){switch(t.type){case v.CHARACTER:{gi(e,t);break}case v.WHITESPACE_CHARACTER:{hi(e,t);break}case v.COMMENT:{bn(e,t);break}case v.START_TAG:{V(e,t);break}case v.END_TAG:{Tr(e,t);break}case v.EOF:{Ti(e,t);break}default:}}function hi(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t)}function gi(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1}function Hl(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs)}function Ql(e,t){let r=e.openElements.tryPeekProperlyNestedBodyElement();r&&e.openElements.tmplCount===0&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(r,t.attrs))}function Yl(e,t){let r=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&r&&(e.treeAdapter.detachNode(r),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,b.HTML),e.insertionMode=g.IN_FRAMESET)}function Gl(e,t){e.openElements.hasInButtonScope(i.P)&&e._closePElement(),e._insertElement(t,b.HTML)}function Wl(e,t){e.openElements.hasInButtonScope(i.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&Tt.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,b.HTML)}function Kl(e,t){e.openElements.hasInButtonScope(i.P)&&e._closePElement(),e._insertElement(t,b.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function Jl(e,t){let r=e.openElements.tmplCount>0;(!e.formElement||r)&&(e.openElements.hasInButtonScope(i.P)&&e._closePElement(),e._insertElement(t,b.HTML),r||(e.formElement=e.openElements.current))}function jl(e,t){e.framesetOk=!1;let r=t.tagID;for(let n=e.openElements.stackTop;n>=0;n--){let s=e.openElements.tagIDs[n];if(r===i.LI&&s===i.LI||(r===i.DD||r===i.DT)&&(s===i.DD||s===i.DT)){e.openElements.generateImpliedEndTagsWithExclusion(s),e.openElements.popUntilTagNamePopped(s);break}if(s!==i.ADDRESS&&s!==i.DIV&&s!==i.P&&e._isSpecialElement(e.openElements.items[n],s))break}e.openElements.hasInButtonScope(i.P)&&e._closePElement(),e._insertElement(t,b.HTML)}function Vl(e,t){e.openElements.hasInButtonScope(i.P)&&e._closePElement(),e._insertElement(t,b.HTML),e.tokenizer.state=j.PLAINTEXT}function $l(e,t){e.openElements.hasInScope(i.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(i.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,b.HTML),e.framesetOk=!1}function Xl(e,t){let r=e.activeFormattingElements.getElementEntryInScopeWithTagName(E.A);r&&(In(e,t),e.openElements.remove(r.element),e.activeFormattingElements.removeEntry(r)),e._reconstructActiveFormattingElements(),e._insertElement(t,b.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function Zl(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,b.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function zl(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(i.NOBR)&&(In(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,b.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function ql(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,b.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function ed(e,t){e.treeAdapter.getDocumentMode(e.document)!==q.QUIRKS&&e.openElements.hasInButtonScope(i.P)&&e._closePElement(),e._insertElement(t,b.HTML),e.framesetOk=!1,e.insertionMode=g.IN_TABLE}function mi(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,b.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function fi(e){let t=cr(e,be.TYPE);return t!=null&&t.toLowerCase()===El}function td(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,b.HTML),fi(t)||(e.framesetOk=!1),t.ackSelfClosing=!0}function rd(e,t){e._appendElement(t,b.HTML),t.ackSelfClosing=!0}function nd(e,t){e.openElements.hasInButtonScope(i.P)&&e._closePElement(),e._appendElement(t,b.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function sd(e,t){t.tagName=E.IMG,t.tagID=i.IMG,mi(e,t)}function id(e,t){e._insertElement(t,b.HTML),e.skipNextNewLine=!0,e.tokenizer.state=j.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=g.TEXT}function ad(e,t){e.openElements.hasInButtonScope(i.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(t,j.RAWTEXT)}function od(e,t){e.framesetOk=!1,e._switchToTextParsing(t,j.RAWTEXT)}function ui(e,t){e._switchToTextParsing(t,j.RAWTEXT)}function cd(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,b.HTML),e.framesetOk=!1,e.insertionMode=e.insertionMode===g.IN_TABLE||e.insertionMode===g.IN_CAPTION||e.insertionMode===g.IN_TABLE_BODY||e.insertionMode===g.IN_ROW||e.insertionMode===g.IN_CELL?g.IN_SELECT_IN_TABLE:g.IN_SELECT}function ld(e,t){e.openElements.currentTagId===i.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,b.HTML)}function dd(e,t){e.openElements.hasInScope(i.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,b.HTML)}function ud(e,t){e.openElements.hasInScope(i.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(i.RTC),e._insertElement(t,b.HTML)}function Ad(e,t){e._reconstructActiveFormattingElements(),fn(t),hr(t),t.selfClosing?e._appendElement(t,b.MATHML):e._insertElement(t,b.MATHML),t.ackSelfClosing=!0}function pd(e,t){e._reconstructActiveFormattingElements(),En(t),hr(t),t.selfClosing?e._appendElement(t,b.SVG):e._insertElement(t,b.SVG),t.ackSelfClosing=!0}function Ai(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,b.HTML)}function V(e,t){switch(t.tagID){case i.I:case i.S:case i.B:case i.U:case i.EM:case i.TT:case i.BIG:case i.CODE:case i.FONT:case i.SMALL:case i.STRIKE:case i.STRONG:{Zl(e,t);break}case i.A:{Xl(e,t);break}case i.H1:case i.H2:case i.H3:case i.H4:case i.H5:case i.H6:{Wl(e,t);break}case i.P:case i.DL:case i.OL:case i.UL:case i.DIV:case i.DIR:case i.NAV:case i.MAIN:case i.MENU:case i.ASIDE:case i.CENTER:case i.FIGURE:case i.FOOTER:case i.HEADER:case i.HGROUP:case i.DIALOG:case i.DETAILS:case i.ADDRESS:case i.ARTICLE:case i.SEARCH:case i.SECTION:case i.SUMMARY:case i.FIELDSET:case i.BLOCKQUOTE:case i.FIGCAPTION:{Gl(e,t);break}case i.LI:case i.DD:case i.DT:{jl(e,t);break}case i.BR:case i.IMG:case i.WBR:case i.AREA:case i.EMBED:case i.KEYGEN:{mi(e,t);break}case i.HR:{nd(e,t);break}case i.RB:case i.RTC:{dd(e,t);break}case i.RT:case i.RP:{ud(e,t);break}case i.PRE:case i.LISTING:{Kl(e,t);break}case i.XMP:{ad(e,t);break}case i.SVG:{pd(e,t);break}case i.HTML:{Hl(e,t);break}case i.BASE:case i.LINK:case i.META:case i.STYLE:case i.TITLE:case i.SCRIPT:case i.BGSOUND:case i.BASEFONT:case i.TEMPLATE:{he(e,t);break}case i.BODY:{Ql(e,t);break}case i.FORM:{Jl(e,t);break}case i.NOBR:{zl(e,t);break}case i.MATH:{Ad(e,t);break}case i.TABLE:{ed(e,t);break}case i.INPUT:{td(e,t);break}case i.PARAM:case i.TRACK:case i.SOURCE:{rd(e,t);break}case i.IMAGE:{sd(e,t);break}case i.BUTTON:{$l(e,t);break}case i.APPLET:case i.OBJECT:case i.MARQUEE:{ql(e,t);break}case i.IFRAME:{od(e,t);break}case i.SELECT:{cd(e,t);break}case i.OPTION:case i.OPTGROUP:{ld(e,t);break}case i.NOEMBED:case i.NOFRAMES:{ui(e,t);break}case i.FRAMESET:{Yl(e,t);break}case i.TEXTAREA:{id(e,t);break}case i.NOSCRIPT:{e.options.scriptingEnabled?ui(e,t):Ai(e,t);break}case i.PLAINTEXT:{Vl(e,t);break}case i.COL:case i.TH:case i.TD:case i.TR:case i.HEAD:case i.FRAME:case i.TBODY:case i.TFOOT:case i.THEAD:case i.CAPTION:case i.COLGROUP:break;default:Ai(e,t)}}function hd(e,t){if(e.openElements.hasInScope(i.BODY)&&(e.insertionMode=g.AFTER_BODY,e.options.sourceCodeLocationInfo)){let r=e.openElements.tryPeekProperlyNestedBodyElement();r&&e._setEndLocation(r,t)}}function gd(e,t){e.openElements.hasInScope(i.BODY)&&(e.insertionMode=g.AFTER_BODY,Ni(e,t))}function md(e,t){let r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r))}function fd(e){let t=e.openElements.tmplCount>0,{formElement:r}=e;t||(e.formElement=null),(r||t)&&e.openElements.hasInScope(i.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(i.FORM):r&&e.openElements.remove(r))}function Ed(e){e.openElements.hasInButtonScope(i.P)||e._insertFakeElement(E.P,i.P),e._closePElement()}function Td(e){e.openElements.hasInListItemScope(i.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(i.LI),e.openElements.popUntilTagNamePopped(i.LI))}function bd(e,t){let r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilTagNamePopped(r))}function Cd(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}function Id(e,t){let r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r),e.activeFormattingElements.clearToLastMarker())}function yd(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(E.BR,i.BR),e.openElements.pop(),e.framesetOk=!1}function Ei(e,t){let r=t.tagName,n=t.tagID;for(let s=e.openElements.stackTop;s>0;s--){let a=e.openElements.items[s],c=e.openElements.tagIDs[s];if(n===c&&(n!==i.UNKNOWN||e.treeAdapter.getTagName(a)===r)){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.stackTop>=s&&e.openElements.shortenToLength(s);break}if(e._isSpecialElement(a,c))break}}function Tr(e,t){switch(t.tagID){case i.A:case i.B:case i.I:case i.S:case i.U:case i.EM:case i.TT:case i.BIG:case i.CODE:case i.FONT:case i.NOBR:case i.SMALL:case i.STRIKE:case i.STRONG:{In(e,t);break}case i.P:{Ed(e);break}case i.DL:case i.UL:case i.OL:case i.DIR:case i.DIV:case i.NAV:case i.PRE:case i.MAIN:case i.MENU:case i.ASIDE:case i.BUTTON:case i.CENTER:case i.FIGURE:case i.FOOTER:case i.HEADER:case i.HGROUP:case i.DIALOG:case i.ADDRESS:case i.ARTICLE:case i.DETAILS:case i.SEARCH:case i.SECTION:case i.SUMMARY:case i.LISTING:case i.FIELDSET:case i.BLOCKQUOTE:case i.FIGCAPTION:{md(e,t);break}case i.LI:{Td(e);break}case i.DD:case i.DT:{bd(e,t);break}case i.H1:case i.H2:case i.H3:case i.H4:case i.H5:case i.H6:{Cd(e);break}case i.BR:{yd(e);break}case i.BODY:{hd(e,t);break}case i.HTML:{gd(e,t);break}case i.FORM:{fd(e);break}case i.APPLET:case i.OBJECT:case i.MARQUEE:{Id(e,t);break}case i.TEMPLATE:{Me(e,t);break}default:Ei(e,t)}}function Ti(e,t){e.tmplInsertionModeStack.length>0?Si(e,t):yn(e,t)}function wd(e,t){var r;t.tagID===i.SCRIPT&&((r=e.scriptHandler)===null||r===void 0||r.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode}function xd(e,t){e._err(t,T.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t)}function Tn(e,t){if(e.openElements.currentTagId!==void 0&&pi.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=g.IN_TABLE_TEXT,t.type){case v.CHARACTER:{Ci(e,t);break}case v.WHITESPACE_CHARACTER:{bi(e,t);break}}else Ot(e,t)}function Sd(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,b.HTML),e.insertionMode=g.IN_CAPTION}function Nd(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,b.HTML),e.insertionMode=g.IN_COLUMN_GROUP}function _d(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(E.COLGROUP,i.COLGROUP),e.insertionMode=g.IN_COLUMN_GROUP,wn(e,t)}function Rd(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,b.HTML),e.insertionMode=g.IN_TABLE_BODY}function Ld(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(E.TBODY,i.TBODY),e.insertionMode=g.IN_TABLE_BODY,br(e,t)}function Od(e,t){e.openElements.hasInTableScope(i.TABLE)&&(e.openElements.popUntilTagNamePopped(i.TABLE),e._resetInsertionMode(),e._processStartTag(t))}function vd(e,t){fi(t)?e._appendElement(t,b.HTML):Ot(e,t),t.ackSelfClosing=!0}function Dd(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,b.HTML),e.formElement=e.openElements.current,e.openElements.pop())}function qe(e,t){switch(t.tagID){case i.TD:case i.TH:case i.TR:{Ld(e,t);break}case i.STYLE:case i.SCRIPT:case i.TEMPLATE:{he(e,t);break}case i.COL:{_d(e,t);break}case i.FORM:{Dd(e,t);break}case i.TABLE:{Od(e,t);break}case i.TBODY:case i.TFOOT:case i.THEAD:{Rd(e,t);break}case i.INPUT:{vd(e,t);break}case i.CAPTION:{Sd(e,t);break}case i.COLGROUP:{Nd(e,t);break}default:Ot(e,t)}}function Lt(e,t){switch(t.tagID){case i.TABLE:{e.openElements.hasInTableScope(i.TABLE)&&(e.openElements.popUntilTagNamePopped(i.TABLE),e._resetInsertionMode());break}case i.TEMPLATE:{Me(e,t);break}case i.BODY:case i.CAPTION:case i.COL:case i.COLGROUP:case i.HTML:case i.TBODY:case i.TD:case i.TFOOT:case i.TH:case i.THEAD:case i.TR:break;default:Ot(e,t)}}function Ot(e,t){let r=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,Er(e,t),e.fosterParentingEnabled=r}function bi(e,t){e.pendingCharacterTokens.push(t)}function Ci(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=!0}function yt(e,t){let r=0;if(e.hasNonWhitespacePendingCharacterToken)for(;r<e.pendingCharacterTokens.length;r++)Ot(e,e.pendingCharacterTokens[r]);else for(;r<e.pendingCharacterTokens.length;r++)e._insertCharacters(e.pendingCharacterTokens[r]);e.insertionMode=e.originalInsertionMode,e._processToken(t)}var Ii=new Set([i.CAPTION,i.COL,i.COLGROUP,i.TBODY,i.TD,i.TFOOT,i.TH,i.THEAD,i.TR]);function kd(e,t){let r=t.tagID;Ii.has(r)?e.openElements.hasInTableScope(i.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(i.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=g.IN_TABLE,qe(e,t)):V(e,t)}function Bd(e,t){let r=t.tagID;switch(r){case i.CAPTION:case i.TABLE:{e.openElements.hasInTableScope(i.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(i.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=g.IN_TABLE,r===i.TABLE&&Lt(e,t));break}case i.BODY:case i.COL:case i.COLGROUP:case i.HTML:case i.TBODY:case i.TD:case i.TFOOT:case i.TH:case i.THEAD:case i.TR:break;default:Tr(e,t)}}function wn(e,t){switch(t.tagID){case i.HTML:{V(e,t);break}case i.COL:{e._appendElement(t,b.HTML),t.ackSelfClosing=!0;break}case i.TEMPLATE:{he(e,t);break}default:mr(e,t)}}function Pd(e,t){switch(t.tagID){case i.COLGROUP:{e.openElements.currentTagId===i.COLGROUP&&(e.openElements.pop(),e.insertionMode=g.IN_TABLE);break}case i.TEMPLATE:{Me(e,t);break}case i.COL:break;default:mr(e,t)}}function mr(e,t){e.openElements.currentTagId===i.COLGROUP&&(e.openElements.pop(),e.insertionMode=g.IN_TABLE,e._processToken(t))}function br(e,t){switch(t.tagID){case i.TR:{e.openElements.clearBackToTableBodyContext(),e._insertElement(t,b.HTML),e.insertionMode=g.IN_ROW;break}case i.TH:case i.TD:{e.openElements.clearBackToTableBodyContext(),e._insertFakeElement(E.TR,i.TR),e.insertionMode=g.IN_ROW,Cr(e,t);break}case i.CAPTION:case i.COL:case i.COLGROUP:case i.TBODY:case i.TFOOT:case i.THEAD:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=g.IN_TABLE,qe(e,t));break}default:qe(e,t)}}function Cn(e,t){let r=t.tagID;switch(t.tagID){case i.TBODY:case i.TFOOT:case i.THEAD:{e.openElements.hasInTableScope(r)&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=g.IN_TABLE);break}case i.TABLE:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=g.IN_TABLE,Lt(e,t));break}case i.BODY:case i.CAPTION:case i.COL:case i.COLGROUP:case i.HTML:case i.TD:case i.TH:case i.TR:break;default:Lt(e,t)}}function Cr(e,t){switch(t.tagID){case i.TH:case i.TD:{e.openElements.clearBackToTableRowContext(),e._insertElement(t,b.HTML),e.insertionMode=g.IN_CELL,e.activeFormattingElements.insertMarker();break}case i.CAPTION:case i.COL:case i.COLGROUP:case i.TBODY:case i.TFOOT:case i.THEAD:case i.TR:{e.openElements.hasInTableScope(i.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=g.IN_TABLE_BODY,br(e,t));break}default:qe(e,t)}}function yi(e,t){switch(t.tagID){case i.TR:{e.openElements.hasInTableScope(i.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=g.IN_TABLE_BODY);break}case i.TABLE:{e.openElements.hasInTableScope(i.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=g.IN_TABLE_BODY,Cn(e,t));break}case i.TBODY:case i.TFOOT:case i.THEAD:{(e.openElements.hasInTableScope(t.tagID)||e.openElements.hasInTableScope(i.TR))&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=g.IN_TABLE_BODY,Cn(e,t));break}case i.BODY:case i.CAPTION:case i.COL:case i.COLGROUP:case i.HTML:case i.TD:case i.TH:break;default:Lt(e,t)}}function Md(e,t){let r=t.tagID;Ii.has(r)?(e.openElements.hasInTableScope(i.TD)||e.openElements.hasInTableScope(i.TH))&&(e._closeTableCell(),Cr(e,t)):V(e,t)}function Ud(e,t){let r=t.tagID;switch(r){case i.TD:case i.TH:{e.openElements.hasInTableScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=g.IN_ROW);break}case i.TABLE:case i.TBODY:case i.TFOOT:case i.THEAD:case i.TR:{e.openElements.hasInTableScope(r)&&(e._closeTableCell(),yi(e,t));break}case i.BODY:case i.CAPTION:case i.COL:case i.COLGROUP:case i.HTML:break;default:Tr(e,t)}}function wi(e,t){switch(t.tagID){case i.HTML:{V(e,t);break}case i.OPTION:{e.openElements.currentTagId===i.OPTION&&e.openElements.pop(),e._insertElement(t,b.HTML);break}case i.OPTGROUP:{e.openElements.currentTagId===i.OPTION&&e.openElements.pop(),e.openElements.currentTagId===i.OPTGROUP&&e.openElements.pop(),e._insertElement(t,b.HTML);break}case i.HR:{e.openElements.currentTagId===i.OPTION&&e.openElements.pop(),e.openElements.currentTagId===i.OPTGROUP&&e.openElements.pop(),e._appendElement(t,b.HTML),t.ackSelfClosing=!0;break}case i.INPUT:case i.KEYGEN:case i.TEXTAREA:case i.SELECT:{e.openElements.hasInSelectScope(i.SELECT)&&(e.openElements.popUntilTagNamePopped(i.SELECT),e._resetInsertionMode(),t.tagID!==i.SELECT&&e._processStartTag(t));break}case i.SCRIPT:case i.TEMPLATE:{he(e,t);break}default:}}function xi(e,t){switch(t.tagID){case i.OPTGROUP:{e.openElements.stackTop>0&&e.openElements.currentTagId===i.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===i.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===i.OPTGROUP&&e.openElements.pop();break}case i.OPTION:{e.openElements.currentTagId===i.OPTION&&e.openElements.pop();break}case i.SELECT:{e.openElements.hasInSelectScope(i.SELECT)&&(e.openElements.popUntilTagNamePopped(i.SELECT),e._resetInsertionMode());break}case i.TEMPLATE:{Me(e,t);break}default:}}function Fd(e,t){let r=t.tagID;r===i.CAPTION||r===i.TABLE||r===i.TBODY||r===i.TFOOT||r===i.THEAD||r===i.TR||r===i.TD||r===i.TH?(e.openElements.popUntilTagNamePopped(i.SELECT),e._resetInsertionMode(),e._processStartTag(t)):wi(e,t)}function Hd(e,t){let r=t.tagID;r===i.CAPTION||r===i.TABLE||r===i.TBODY||r===i.TFOOT||r===i.THEAD||r===i.TR||r===i.TD||r===i.TH?e.openElements.hasInTableScope(r)&&(e.openElements.popUntilTagNamePopped(i.SELECT),e._resetInsertionMode(),e.onEndTag(t)):xi(e,t)}function Qd(e,t){switch(t.tagID){case i.BASE:case i.BASEFONT:case i.BGSOUND:case i.LINK:case i.META:case i.NOFRAMES:case i.SCRIPT:case i.STYLE:case i.TEMPLATE:case i.TITLE:{he(e,t);break}case i.CAPTION:case i.COLGROUP:case i.TBODY:case i.TFOOT:case i.THEAD:{e.tmplInsertionModeStack[0]=g.IN_TABLE,e.insertionMode=g.IN_TABLE,qe(e,t);break}case i.COL:{e.tmplInsertionModeStack[0]=g.IN_COLUMN_GROUP,e.insertionMode=g.IN_COLUMN_GROUP,wn(e,t);break}case i.TR:{e.tmplInsertionModeStack[0]=g.IN_TABLE_BODY,e.insertionMode=g.IN_TABLE_BODY,br(e,t);break}case i.TD:case i.TH:{e.tmplInsertionModeStack[0]=g.IN_ROW,e.insertionMode=g.IN_ROW,Cr(e,t);break}default:e.tmplInsertionModeStack[0]=g.IN_BODY,e.insertionMode=g.IN_BODY,V(e,t)}}function Yd(e,t){t.tagID===i.TEMPLATE&&Me(e,t)}function Si(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(i.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):yn(e,t)}function Gd(e,t){t.tagID===i.HTML?V(e,t):fr(e,t)}function Ni(e,t){var r;if(t.tagID===i.HTML){if(e.fragmentContext||(e.insertionMode=g.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===i.HTML){e._setEndLocation(e.openElements.items[0],t);let n=e.openElements.items[1];n&&!(!((r=e.treeAdapter.getNodeSourceCodeLocation(n))===null||r===void 0)&&r.endTag)&&e._setEndLocation(n,t)}}else fr(e,t)}function fr(e,t){e.insertionMode=g.IN_BODY,Er(e,t)}function Wd(e,t){switch(t.tagID){case i.HTML:{V(e,t);break}case i.FRAMESET:{e._insertElement(t,b.HTML);break}case i.FRAME:{e._appendElement(t,b.HTML),t.ackSelfClosing=!0;break}case i.NOFRAMES:{he(e,t);break}default:}}function Kd(e,t){t.tagID===i.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==i.FRAMESET&&(e.insertionMode=g.AFTER_FRAMESET))}function Jd(e,t){switch(t.tagID){case i.HTML:{V(e,t);break}case i.NOFRAMES:{he(e,t);break}default:}}function jd(e,t){t.tagID===i.HTML&&(e.insertionMode=g.AFTER_AFTER_FRAMESET)}function Vd(e,t){t.tagID===i.HTML?V(e,t):gr(e,t)}function gr(e,t){e.insertionMode=g.IN_BODY,Er(e,t)}function $d(e,t){switch(t.tagID){case i.HTML:{V(e,t);break}case i.NOFRAMES:{he(e,t);break}default:}}function Xd(e,t){t.chars=M,e._insertCharacters(t)}function Zd(e,t){e._insertCharacters(t),e.framesetOk=!1}function _i(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==b.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop()}function zd(e,t){if(ai(t))_i(e),e._startTagOutsideForeignContent(t);else{let r=e._getAdjustedCurrentElement(),n=e.treeAdapter.getNamespaceURI(r);n===b.MATHML?fn(t):n===b.SVG&&(oi(t),En(t)),hr(t),t.selfClosing?e._appendElement(t,n):e._insertElement(t,n),t.ackSelfClosing=!0}}function qd(e,t){if(t.tagID===i.P||t.tagID===i.BR){_i(e),e._endTagOutsideForeignContent(t);return}for(let r=e.openElements.stackTop;r>0;r--){let n=e.openElements.items[r];if(e.treeAdapter.getNamespaceURI(n)===b.HTML){e._endTagOutsideForeignContent(t);break}let s=e.treeAdapter.getTagName(n);if(s.toLowerCase()===t.tagName){t.tagName=s,e.openElements.shortenToLength(r);break}}}var jg=new Set([E.AREA,E.BASE,E.BASEFONT,E.BGSOUND,E.BR,E.COL,E.EMBED,E.FRAME,E.HR,E.IMG,E.INPUT,E.KEYGEN,E.LINK,E.META,E.PARAM,E.SOURCE,E.TRACK,E.WBR]);function Ri(e,t){return Rt.parse(e,t)}function ce(e,t){return e.attrs?.find(r=>r.name.toLowerCase()===t.toLowerCase())?.value??null}function xn(e){return e.nodeName==="#text"?e.value??"":(e.childNodes??[]).map(xn).join("")}function xe(e){return e?.replace(/\s+/g," ").trim()||null}function Sn(e){let t=Ri(e),r={title:null,description:null,canonical:null,robots:null,lang:null,h1Count:0,openGraph:{title:null,description:null,image:null},twitter:{card:null,title:null,description:null,image:null},hreflang:[],jsonLd:[],images:[],links:[],wordCount:0,visibleText:""},n=[];function s(a,c=!1){let l=a.tagName?.toLowerCase(),o=c||l==="script"||l==="style"||l==="noscript"||l==="template";if(a.nodeName==="#text"&&!o){let d=xe(a.value);d&&n.push(d)}if(l==="html"&&r.lang===null&&(r.lang=xe(ce(a,"lang"))),l==="title"&&r.title===null&&(r.title=xe(xn(a))),l==="h1"&&(r.h1Count+=1),l==="meta"){let d=ce(a,"name")?.toLowerCase(),p=ce(a,"property")?.toLowerCase(),h=xe(ce(a,"content"));d==="description"&&r.description===null?r.description=h:d==="robots"&&r.robots===null?r.robots=h:p==="og:title"&&r.openGraph.title===null?r.openGraph.title=h:p==="og:description"&&r.openGraph.description===null?r.openGraph.description=h:p==="og:image"&&r.openGraph.image===null?r.openGraph.image=h:d==="twitter:card"&&r.twitter.card===null?r.twitter.card=h:d==="twitter:title"&&r.twitter.title===null?r.twitter.title=h:d==="twitter:description"&&r.twitter.description===null?r.twitter.description=h:d==="twitter:image"&&r.twitter.image===null&&(r.twitter.image=h)}if(l==="link"){let d=ce(a,"rel")?.toLowerCase().split(/\s+/).filter(Boolean)??[];if(d.includes("canonical")&&r.canonical===null&&(r.canonical=xe(ce(a,"href"))),d.includes("alternate")){let p=xe(ce(a,"hreflang")),h=xe(ce(a,"href"));p&&h&&r.hreflang.push({lang:p,url:h})}}if(l==="a"){let d=ce(a,"href");d&&r.links.push(d)}if(l==="img"&&r.images.push({src:xe(ce(a,"src")),alt:ce(a,"alt")}),l==="script"&&ce(a,"type")?.toLowerCase()==="application/ld+json"){let d=xn(a).trim();if(d)try{r.jsonLd.push({valid:!0,value:JSON.parse(d)})}catch(p){r.jsonLd.push({valid:!1,error:p instanceof Error?p.message:String(p)})}}for(let d of a.childNodes??[])s(d,o)}return s(t),r.visibleText=n.join(" "),r.wordCount=r.visibleText?r.visibleText.split(/\s+/u).length:0,r}function eu(e,t){return{url:e,finalUrl:null,status:null,contentType:null,blockedByRobots:!1,error:null,title:null,description:null,canonical:null,canonicalRaw:null,robots:null,xRobotsTag:null,lang:null,h1Count:0,openGraph:{title:null,description:null,image:null},twitter:{card:null,title:null,description:null,image:null},hreflang:[],jsonLd:[],images:[],links:[],internalLinks:[],externalLinks:[],wordCount:0,contentHash:null,depth:t,redirectChain:[],responseBytes:0}}async function et(e,t){await e.onEvent?.(t)}async function tu(e,t,r,n,s){let a=eu(e,t);if(n.respectRobots&&!ls(e,s))return a.blockedByRobots=!0,a;try{if(n.renderer){n.signal?.throwIfAborted(),await n.requestGate(e);let N=await n.renderer.render({url:e,timeout:n.timeout,maxResponseBytes:n.maxResponseBytes,userAgent:n.userAgent,...n.signal?{signal:n.signal}:{}});return ru(a,N,e,r,n.includeQuery)}let{response:c,redirectChain:l}=await Oe(e,{headers:{accept:"text/html,application/xhtml+xml;q=0.9,*/*;q=0.1","user-agent":n.userAgent}},{...n,gate:n.requestGate,onEvent:n.onEvent}),o=c.headers.get("content-type")??"",d=o.includes("text/html")||o.includes("application/xhtml+xml"),p=Y(c.url,void 0,{includeQuery:n.includeQuery});if(a.finalUrl=p,a.status=c.status,a.contentType=o||null,a.xRobotsTag=c.headers.get("x-robots-tag"),a.redirectChain=l,!d)return await c.body?.cancel(),a;let{text:h,bytes:f}=await ve(c,n.maxResponseBytes),m=Sn(h),y=p??e,w=m.canonical?Y(m.canonical,y,{includeQuery:!0}):null,I=[...new Set(m.links.map(N=>Y(N,y,{includeQuery:n.includeQuery})).filter(N=>!!N))].sort(),_=m.hreflang.map(N=>({lang:N.lang,url:Y(N.url,y,{includeQuery:!0})}));return Object.assign(a,{...m,visibleText:void 0,canonical:w,canonicalRaw:m.canonical,links:I,internalLinks:I.filter(N=>de(N,r)),externalLinks:I.filter(N=>!de(N,r)),hreflang:_,contentHash:m.visibleText?Li("sha256").update(m.visibleText.toLowerCase()).digest("hex"):null,responseBytes:f}),a}catch(c){if(n.signal?.aborted)throw c;return a.error=c instanceof Error?c.message:String(c),c instanceof fe&&(a.redirectChain=c.redirectChain),a}}function ru(e,t,r,n,s){let a=t.headers["content-type"]??"text/html",c=Y(t.finalUrl,void 0,{includeQuery:s});if(e.finalUrl=c,e.status=t.status,e.contentType=a,e.xRobotsTag=t.headers["x-robots-tag"]??null,e.redirectChain=t.redirectChain,!a.includes("text/html")&&!a.includes("application/xhtml+xml"))return e;let l=Sn(t.html),o=c??r,d=l.canonical?Y(l.canonical,o,{includeQuery:!0}):null,p=[...new Set(l.links.map(h=>Y(h,o,{includeQuery:s})).filter(h=>!!h))].sort();return Object.assign(e,{...l,visibleText:void 0,canonical:d,canonicalRaw:l.canonical,links:p,internalLinks:p.filter(h=>de(h,n)),externalLinks:p.filter(h=>!de(h,n)),hreflang:l.hreflang.map(h=>({lang:h.lang,url:Y(h.url,o,{includeQuery:!0})})),contentHash:l.visibleText?Li("sha256").update(l.visibleText.toLowerCase()).digest("hex"):null,responseBytes:t.responseBytes}),e}function nu(e={}){let t=e.requestDelay??e.delay??100,r=e.requestGate;return{...e,maxPages:e.maxPages??100,concurrency:Math.max(1,e.concurrency??5),timeout:e.timeout??1e4,includeQuery:e.includeQuery??!1,respectRobots:e.respectRobots??!0,sitemap:e.sitemap??null,sitemapData:e.sitemapData??null,userAgent:e.userAgent??_e,requestDelay:t,requestGate:r?async n=>r(n):Ge(t),maxRedirects:e.maxRedirects??10,maxResponseBytes:e.maxResponseBytes??5*1024*1024,retries:e.retries??2,fetch:e.fetch??globalThis.fetch,logger:e.logger??Wt}}async function su(e,t){let r=[],n=Array.from({length:e},async()=>{for(;;){let s=await t();if(s===null)return;r.push(s)}});return await Promise.all(n),r}async function Oi(e,t={}){let r=Date.now(),n=nu(t),s=Y(e,void 0,{includeQuery:n.includeQuery});if(!s)throw new Error(`invalid start URL: ${e}`);let a=new URL(s).origin;await et(n,{type:"scan-start",url:s,total:n.maxPages});let c=t.robots??await Kt(s,n),l=n.sitemapData;if(!l&&n.sitemap)try{l=await nr(n.sitemap,{...n,maxUrls:t.sitemapMaxUrls??5e4,siteOrigin:a})}catch(L){l={url:n.sitemap,urls:[],sitemapCount:0,truncated:!1,error:L instanceof Error?L.message:String(L)},n.logger.warn(`Could not load sitemap ${n.sitemap}: ${l.error}`)}let d=[...new Set([s,...l?.urls??[]])].slice(0,n.maxPages).map(L=>({url:L,depth:0})),p=new Set(d.map(L=>L.url)),h=new Map((t.cachedPages??[]).map(L=>[L.url,L])),f=new Map,m=Math.max(n.maxPages*10,n.maxPages),y=!1;for(;d.length>0&&f.size<n.maxPages&&!n.signal?.aborted;){d.sort((x,D)=>x.url.localeCompare(D.url));let L=n.maxPages-f.size,B=d.slice(0,L);d.length>B.length&&(y=!0);let R=0,P=await su(n.concurrency,async()=>{if(n.signal?.aborted||R>=B.length)return null;let x=B[R++];if(!x)return null;let D=h.get(x.url);if(!D)try{D=await tu(x.url,x.depth,a,n,c)}catch(F){if(n.signal?.aborted)return null;throw F}return f.set(x.url,D),h.has(x.url)||(await t.onBatch?.([D]),await n.storage?.saveCheckpoint?.(s,D),await et(n,{type:"checkpoint",page:D,completed:f.size,total:n.maxPages})),t.onProgress?.(f.size,n.maxPages),await et(n,{type:"page",completed:f.size,total:n.maxPages,page:D}),await et(n,{type:"progress",completed:f.size,total:n.maxPages,page:D}),{item:x,page:D}}),G=new Map;for(let{item:x,page:D}of P.sort((F,$)=>F.item.url.localeCompare($.item.url))){let F=D.internalLinks?.length?D.internalLinks:(D.links??[]).filter($=>de($,a));for(let $ of[...F].sort())p.size>=m||p.has($)||!tr($)||(p.add($),G.set($,{url:$,depth:x.depth+1}))}d=[...G.values()]}let w=[...f.values()].sort((L,B)=>L.url.localeCompare(B.url)),I=!!n.signal?.aborted,_=I||y||d.length>0||(l?l.urls.length>w.length:!1)||(l?.truncated??!1),N={startUrl:s,pages:w,robots:c,sitemap:l,truncated:_,partial:I,durationMs:Date.now()-r,options:n};return N.snapshot=Ie(N),I||await n.storage?.removeCheckpoint?.(s),I?await et(n,{type:"cancelled",completed:w.length,total:n.maxPages,partial:!0}):await et(n,{type:"complete",completed:w.length,total:n.maxPages}),N}function vi(e){return"planVersion"in e}function iu(e,t){return{schemaVersion:2,pageSchemaVersion:1,siteUrl:e.startUrl,sitemapUrl:e.sitemap?.url??null,includeQuery:e.config.includeQuery,respectRobots:e.config.respectRobots,timeout:e.config.timeout,maxRedirects:e.config.maxRedirects,maxResponseBytes:e.config.maxResponseBytes,userAgent:e.userAgent,...t?{rendererId:t}:{}}}function au(e){return!e.error&&(e.status===null||e.status<500)}async function tt(e,t={}){let r=null,n=null,s;try{s=vi(e)?e:await ue(e,{...t,async onEvent(m){m.type==="robots"&&(r=m.robots),m.type==="sitemap"&&(n=m.sitemap),await t.onEvent?.(m)}})}catch(m){if(vi(e)||!t.signal?.aborted)throw m;let y=Te(e),w=Y(y.url,void 0,{includeQuery:y.includeQuery});if(!w)throw new Error(`invalid start URL: ${y.url}`,{cause:m});let I=r??{url:new URL("/robots.txt",w).href,status:null,sha256:null,error:"Scan cancelled before robots.txt planning completed",denyAll:!1},_=Ie({startUrl:w,pages:[],robots:I,sitemap:n,options:y,partial:!0,truncated:!0});return await t.checkpointStore?.flush?.(),await t.onEvent?.({type:"cancelled",completed:0,total:y.maxPages,partial:!0}),{snapshot:_,startUrl:w,pages:[],robots:I,sitemap:n,truncated:!0,partial:!0,durationMs:0,options:y}}if(s.planVersion!==1)throw new Error(`unsupported scan plan version: ${String(s.planVersion)}`);let a=t.limit??s.config.maxPages;if(!Number.isInteger(a)||a<=0)throw new Error("scan limit must be a positive integer");let c={...s.config,maxPages:a},l=Ge(c.delay),o=iu(s,t.renderer?.id),d=t.checkpointStore&&t.resume!==!1?await t.checkpointStore.load(o):null,p=[...t.cachedPages??[],...d?.pages.filter(au)??[]],h=[...new Map(p.map(m=>[m.url,m])).values()];h.length>0&&await t.onEvent?.({type:"resume",completed:h.length,total:a});let f=await Oi(s.startUrl,{...t,maxPages:a,concurrency:c.concurrency,requestDelay:c.delay,timeout:c.timeout,respectRobots:c.respectRobots,includeQuery:c.includeQuery,maxRedirects:c.maxRedirects,maxResponseBytes:c.maxResponseBytes,enabledRules:c.enabledRules,severityOverrides:c.severityOverrides,suppressions:c.suppressions,regressionBudgets:c.regressionBudgets,report:c.report,requestGate:l,robots:s.robots,sitemap:s.sitemap?.url??null,sitemapData:s.sitemap,userAgent:s.userAgent,cachedPages:h,async onBatch(m){for(let y of m)await t.checkpointStore?.append(o,y);await t.onBatch?.(m)}});return await t.checkpointStore?.flush?.(),!f.partial&&!t.retainCheckpoint&&await t.checkpointStore?.clear(o),f}function Di(e){return/^\d+$/.test(e)?":id":/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e)?":uuid":/^\d{4}-\d{2}-\d{2}$/.test(e)?":date":/^[0-9a-f]{16,}$/i.test(e)?":hash":null}function ou(e){return e.flatMap(t=>{try{let r=new URL(t.url);return[{issue:t,url:r,segments:r.pathname.split("/").filter(Boolean)}]}catch{return[]}})}function cu(e){let t=new Map;for(let r of e)for(let n=1;n<r.segments.length;n+=1){if(Di(r.segments[n]))continue;let s=r.segments.slice(0,n).join("/"),a=`${r.url.origin}|${r.segments.length}|${n}|${s}`,c=t.get(a)??new Set;c.add(r.segments[n]),t.set(a,c)}return new Set([...t].filter(([,r])=>r.size>=2).map(([r])=>r))}function lu(e,t){let r=e.segments.map((n,s)=>{let a=Di(n);if(a)return a;let c=e.segments.slice(0,s).join("/"),l=`${e.url.origin}|${e.segments.length}|${s}|${c}`;return s>0&&t.has(l)?":slug":n});return`/${r.join("/")}${e.url.pathname.endsWith("/")&&r.length>0?"/":""}`}function vt(e){return Ir(e.map(t=>({url:t,ruleId:"",severity:"info",owner:"seo"}))).map(({origin:t,template:r,urls:n})=>({origin:t,template:r,urls:n}))}function Ir(e){let t=ou(e),r=cu(t),n=new Map;for(let s of t){let a=lu(s,r),c=`${s.url.origin}${a}`,l=n.get(c)??{origin:s.url.origin,template:a,issues:[],urls:new Set};l.issues.push(s.issue),l.urls.add(s.issue.url),n.set(c,l)}return[...n.values()].map(s=>{let a={error:0,warning:0,info:0},c={},l={};for(let d of s.issues)a[d.severity]+=1,c[d.ruleId]=(c[d.ruleId]??0)+1,l[d.owner]=(l[d.owner]??0)+1;let o=[...s.urls].sort();return{origin:s.origin,template:s.template,issueCount:s.issues.length,affectedPages:o.length,severities:a,rules:c,owners:l,urls:o,representativeUrls:o.slice(0,3)}}).sort((s,a)=>a.issueCount-s.issueCount||s.template.localeCompare(a.template)||s.origin.localeCompare(a.origin))}function ki(e){let t=e.replaceAll("-"," ");return t.charAt(0).toUpperCase()+t.slice(1)}var du={"page-unreachable":"\u041D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430","http-error":"HTTP-\u043F\u043E\u043C\u0438\u043B\u043A\u0430",noindex:"Noindex","x-robots-noindex":"Noindex \u0443 X-Robots-Tag","robots-blocked":"\u0417\u0430\u0431\u043B\u043E\u043A\u043E\u0432\u0430\u043D\u043E robots.txt","missing-canonical":"\u0412\u0456\u0434\u0441\u0443\u0442\u043D\u0456\u0439 canonical","invalid-canonical":"\u041D\u0435\u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0438\u0439 canonical","cross-domain-canonical":"Canonical \u043D\u0430 \u0456\u043D\u0448\u043E\u043C\u0443 \u0434\u043E\u043C\u0435\u043D\u0456","canonical-target-error":"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u0446\u0456\u043B\u0456 canonical","redirect-loop":"\u0426\u0438\u043A\u043B \u043F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u044C","long-redirect-chain":"\u0414\u043E\u0432\u0433\u0438\u0439 \u043B\u0430\u043D\u0446\u044E\u0436\u043E\u043A \u043F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u044C","sitemap-unavailable":"Sitemap \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439","noindex-in-sitemap":"Noindex \u0443 sitemap","redirect-in-sitemap":"\u041F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043D\u044F \u0443 sitemap","missing-title":"\u0412\u0456\u0434\u0441\u0443\u0442\u043D\u0456\u0439 title","duplicate-title":"\u0414\u0443\u0431\u043B\u044C\u043E\u0432\u0430\u043D\u0438\u0439 title","title-length":"\u0414\u043E\u0432\u0436\u0438\u043D\u0430 title","missing-description":"\u0412\u0456\u0434\u0441\u0443\u0442\u043D\u0456\u0439 description","duplicate-description":"\u0414\u0443\u0431\u043B\u044C\u043E\u0432\u0430\u043D\u0438\u0439 description","description-length":"\u0414\u043E\u0432\u0436\u0438\u043D\u0430 description","missing-h1":"\u0412\u0456\u0434\u0441\u0443\u0442\u043D\u0456\u0439 H1","broken-internal-link":"\u041D\u0435\u0440\u043E\u0431\u043E\u0447\u0435 \u0432\u043D\u0443\u0442\u0440\u0456\u0448\u043D\u0454 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F","orphan-sitemap-page":"\u0406\u0437\u043E\u043B\u044C\u043E\u0432\u0430\u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430 sitemap","crawlable-not-in-sitemap":"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u0432\u0456\u0434\u0441\u0443\u0442\u043D\u044F \u0443 sitemap","invalid-hreflang":"\u041D\u0435\u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0438\u0439 hreflang","malformed-json-ld":"\u041D\u0435\u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0438\u0439 JSON-LD","http-on-https-site":"HTTP URL \u043D\u0430 HTTPS-\u0441\u0430\u0439\u0442\u0456","invalid-language":"\u041D\u0435\u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0435 \u043E\u0433\u043E\u043B\u043E\u0448\u0435\u043D\u043D\u044F \u043C\u043E\u0432\u0438","duplicate-content":"\u0414\u0443\u0431\u043B\u044C\u043E\u0432\u0430\u043D\u0438\u0439 \u043A\u043E\u043D\u0442\u0435\u043D\u0442","multiple-h1":"\u041A\u0456\u043B\u044C\u043A\u0430 H1","missing-open-graph":"\u041D\u0435\u043F\u043E\u0432\u043D\u0456 Open Graph metadata","missing-twitter-metadata":"\u041D\u0435\u043F\u043E\u0432\u043D\u0456 Twitter metadata","image-missing-alt":"\u0417\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0431\u0435\u0437 alt","low-word-count":"\u041C\u0430\u043B\u043E \u0442\u0435\u043A\u0441\u0442\u0443","robots-changed":"robots.txt \u0437\u043C\u0456\u043D\u0435\u043D\u043E","page-missing":"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u043D\u0435 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u043E","status-regression":"\u0420\u0435\u0433\u0440\u0435\u0441\u0456\u044F HTTP-\u0441\u0442\u0430\u0442\u0443\u0441\u0443","new-noindex":"\u041D\u043E\u0432\u0438\u0439 noindex","title-removed":"Title \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E","title-changed":"Title \u0437\u043C\u0456\u043D\u0435\u043D\u043E","description-removed":"Description \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E","canonical-removed":"Canonical \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E","canonical-changed":"Canonical \u0437\u043C\u0456\u043D\u0435\u043D\u043E","h1-removed":"H1 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E","redirect-changed":"\u041F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043D\u044F \u0437\u043C\u0456\u043D\u0435\u043D\u043E","sitemap-url-count-drop":"\u0417\u043C\u0435\u043D\u0448\u0435\u043D\u043D\u044F URL \u0443 sitemap"},uu={"page-unreachable":"\u0412\u0456\u0434\u043D\u043E\u0432\u0456\u0442\u044C \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u0430\u0431\u043E \u043F\u0440\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u043D\u0430 \u043D\u0435\u0457.","http-error":"\u041F\u043E\u0432\u0435\u0440\u043D\u0456\u0442\u044C \u0443\u0441\u043F\u0456\u0448\u043D\u0443 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u044C \u0430\u0431\u043E \u0441\u0432\u0456\u0434\u043E\u043C\u0435 \u043F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043D\u044F.",noindex:"\u041F\u0440\u0438\u0431\u0435\u0440\u0456\u0442\u044C noindex, \u044F\u043A\u0449\u043E \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043C\u0430\u0454 \u0437\u2019\u044F\u0432\u043B\u044F\u0442\u0438\u0441\u044F \u0432 \u043F\u043E\u0448\u0443\u043A\u0443.","x-robots-noindex":"\u041F\u0440\u0438\u0431\u0435\u0440\u0456\u0442\u044C noindex \u0456\u0437 X-Robots-Tag, \u044F\u043A\u0449\u043E \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043C\u0430\u0454 \u0456\u043D\u0434\u0435\u043A\u0441\u0443\u0432\u0430\u0442\u0438\u0441\u044F.","robots-blocked":"\u0414\u043E\u0437\u0432\u043E\u043B\u044C\u0442\u0435 URL \u0443 robots.txt, \u044F\u043A\u0449\u043E \u0439\u043E\u0433\u043E \u043F\u043E\u0442\u0440\u0456\u0431\u043D\u043E \u0441\u043A\u0430\u043D\u0443\u0432\u0430\u0442\u0438.","missing-canonical":"\u0412\u043A\u0430\u0436\u0456\u0442\u044C \u0431\u0430\u0436\u0430\u043D\u0438\u0439 canonical URL, \u044F\u043A\u0449\u043E \u043C\u043E\u0436\u043B\u0438\u0432\u0456 \u0434\u0443\u0431\u043B\u0456\u043A\u0430\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0438.","invalid-canonical":"\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u0439\u0442\u0435 \u0430\u0431\u0441\u043E\u043B\u044E\u0442\u043D\u0438\u0439 \u0430\u0431\u043E \u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0438\u0439 \u0432\u0456\u0434\u043D\u043E\u0441\u043D\u0438\u0439 HTTP(S) canonical URL.","cross-domain-canonical":"\u041F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u044C\u0442\u0435 \u0437\u043E\u0432\u043D\u0456\u0448\u043D\u0456\u0439 canonical \u0430\u0431\u043E \u0432\u043A\u0430\u0436\u0456\u0442\u044C \u043F\u043E\u0442\u0440\u0456\u0431\u043D\u0438\u0439 URL \u0446\u044C\u043E\u0433\u043E \u0441\u0430\u0439\u0442\u0443.","canonical-target-error":"\u0421\u043F\u0440\u044F\u043C\u0443\u0439\u0442\u0435 canonical \u043D\u0430 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439 URL, \u0434\u043E\u0437\u0432\u043E\u043B\u0435\u043D\u0438\u0439 \u0434\u043B\u044F \u0456\u043D\u0434\u0435\u043A\u0441\u0430\u0446\u0456\u0457.","redirect-loop":"\u041F\u0440\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u0446\u0438\u043A\u043B\u0456\u0447\u043D\u0438\u0439 \u043C\u0430\u0440\u0448\u0440\u0443\u0442 \u043F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u044C.","long-redirect-chain":"\u041F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u044F\u0439\u0442\u0435 \u043E\u0434\u0440\u0430\u0437\u0443 \u043D\u0430 \u043A\u0456\u043D\u0446\u0435\u0432\u0443 \u0430\u0434\u0440\u0435\u0441\u0443.","sitemap-unavailable":"\u0412\u0456\u0434\u043D\u043E\u0432\u0456\u0442\u044C \u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0438\u0439 \u0456 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439 XML sitemap.","noindex-in-sitemap":"\u041F\u0440\u0438\u0431\u0435\u0440\u0456\u0442\u044C URL \u0456\u0437 sitemap \u0430\u0431\u043E \u0434\u043E\u0437\u0432\u043E\u043B\u044C\u0442\u0435 \u0439\u043E\u0433\u043E \u0456\u043D\u0434\u0435\u043A\u0441\u0430\u0446\u0456\u044E.","redirect-in-sitemap":"\u0417\u0430\u043C\u0456\u043D\u0456\u0442\u044C URL \u0443 sitemap \u043D\u0430 \u0439\u043E\u0433\u043E \u043A\u0456\u043D\u0446\u0435\u0432\u0443 canonical-\u0430\u0434\u0440\u0435\u0441\u0443.","missing-title":"\u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u0443\u043D\u0456\u043A\u0430\u043B\u044C\u043D\u0438\u0439 \u043E\u043F\u0438\u0441\u043E\u0432\u0438\u0439 HTML title.","duplicate-title":"\u041D\u0430\u043F\u0438\u0448\u0456\u0442\u044C title, \u044F\u043A\u0438\u0439 \u0443\u043D\u0456\u043A\u0430\u043B\u044C\u043D\u043E \u043E\u043F\u0438\u0441\u0443\u0454 \u0446\u044E \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443.","title-length":"\u0417\u0440\u043E\u0431\u0456\u0442\u044C title \u0441\u0442\u0438\u0441\u043B\u0438\u043C \u0456 \u0437\u043C\u0456\u0441\u0442\u043E\u0432\u043D\u0438\u043C, \u0437\u0430\u0437\u0432\u0438\u0447\u0430\u0439 10\u201360 \u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432.","missing-description":"\u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u043A\u043E\u0440\u0438\u0441\u043D\u0438\u0439 meta description.","duplicate-description":"\u041D\u0430\u043F\u0438\u0448\u0456\u0442\u044C \u0443\u043D\u0456\u043A\u0430\u043B\u044C\u043D\u0438\u0439 meta description \u0434\u043B\u044F \u0446\u0456\u0454\u0457 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438.","description-length":"\u0417\u0440\u043E\u0431\u0456\u0442\u044C description \u043A\u043E\u0440\u0438\u0441\u043D\u0438\u043C \u0456 \u0437\u0430\u0437\u0432\u0438\u0447\u0430\u0439 \u0434\u043E\u0432\u0436\u0438\u043D\u043E\u044E 50\u2013160 \u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432.","missing-h1":"\u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u043E\u0434\u0438\u043D \u0437\u0440\u043E\u0437\u0443\u043C\u0456\u043B\u0438\u0439 \u043E\u0441\u043D\u043E\u0432\u043D\u0438\u0439 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A.","broken-internal-link":"\u041E\u043D\u043E\u0432\u0456\u0442\u044C \u0430\u0431\u043E \u043F\u0440\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u0432\u043D\u0443\u0442\u0440\u0456\u0448\u043D\u0454 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u0447\u0438 \u0432\u0456\u0434\u043D\u043E\u0432\u0456\u0442\u044C \u0439\u043E\u0433\u043E \u0446\u0456\u043B\u044C.","orphan-sitemap-page":"\u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u0437\u043C\u0456\u0441\u0442\u043E\u0432\u043D\u0456 \u0432\u043D\u0443\u0442\u0440\u0456\u0448\u043D\u0456 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u0456\u0437 sitemap.","crawlable-not-in-sitemap":"\u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u0434\u043E sitemap \u0430\u0431\u043E \u0441\u0432\u0456\u0434\u043E\u043C\u043E \u0432\u0438\u043A\u043B\u044E\u0447\u0456\u0442\u044C \u0457\u0457.","invalid-hreflang":"\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u0439\u0442\u0435 \u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0456 \u043C\u043E\u0432\u043D\u0456 \u0442\u0435\u0433\u0438 \u0442\u0430 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0456 HTTP(S) alternate URL.","malformed-json-ld":"\u0412\u0438\u043F\u0440\u0430\u0432\u0442\u0435 JSON-\u0441\u0438\u043D\u0442\u0430\u043A\u0441\u0438\u0441 \u0443 \u0431\u043B\u043E\u0446\u0456 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u043E\u0432\u0430\u043D\u0438\u0445 \u0434\u0430\u043D\u0438\u0445.","http-on-https-site":"\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 HTTPS \u0434\u043B\u044F \u0432\u043D\u0443\u0442\u0440\u0456\u0448\u043D\u0456\u0445 URL \u0456 metadata.","invalid-language":"\u0412\u043A\u0430\u0436\u0456\u0442\u044C \u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0438\u0439 \u043C\u043E\u0432\u043D\u0438\u0439 \u0442\u0435\u0433 BCP 47 \u0432 \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456 html.","duplicate-content":"\u041E\u0431\u2019\u0454\u0434\u043D\u0430\u0439\u0442\u0435 \u0434\u0443\u0431\u043B\u044C\u043E\u0432\u0430\u043D\u0456 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \u0430\u0431\u043E \u0437\u0440\u043E\u0431\u0456\u0442\u044C \u0457\u0445\u043D\u0456\u0439 \u043E\u0441\u043D\u043E\u0432\u043D\u0438\u0439 \u043A\u043E\u043D\u0442\u0435\u043D\u0442 \u0432\u0456\u0434\u043C\u0456\u043D\u043D\u0438\u043C.","multiple-h1":"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435, \u0447\u0438 \u043E\u0434\u0438\u043D \u043E\u0441\u043D\u043E\u0432\u043D\u0438\u0439 H1 \u043D\u0435 \u0437\u0440\u043E\u0431\u0438\u0442\u044C \u0456\u0454\u0440\u0430\u0440\u0445\u0456\u044E \u0437\u0440\u043E\u0437\u0443\u043C\u0456\u043B\u0456\u0448\u043E\u044E.","missing-open-graph":"\u0414\u043E\u0434\u0430\u0439\u0442\u0435 Open Graph title, description \u0442\u0430 image \u0434\u043B\u044F \u043F\u043E\u0448\u0438\u0440\u0435\u043D\u043D\u044F \u0432 \u0441\u043E\u0446\u043C\u0435\u0440\u0435\u0436\u0430\u0445.","missing-twitter-metadata":"\u0414\u043E\u0434\u0430\u0439\u0442\u0435 Twitter card metadata, \u044F\u043A\u0449\u043E \u0432\u0430\u0436\u043B\u0438\u0432\u0456 \u0441\u043E\u0446\u0456\u0430\u043B\u044C\u043D\u0456 \u043F\u0440\u0435\u0432\u2019\u044E.","image-missing-alt":"\u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u0437\u043C\u0456\u0441\u0442\u043E\u0432\u043D\u0438\u0439 alt \u0430\u0431\u043E \u043F\u043E\u0440\u043E\u0436\u043D\u0456\u0439 alt \u0434\u043B\u044F \u0434\u0435\u043A\u043E\u0440\u0430\u0442\u0438\u0432\u043D\u0438\u0445 \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u044C.","low-word-count":"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435, \u0447\u0438 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u0434\u043E\u0441\u0442\u0430\u0442\u043D\u044C\u043E \u043A\u043E\u0440\u0438\u0441\u043D\u043E\u0433\u043E \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0433\u043E \u043A\u043E\u043D\u0442\u0435\u043D\u0442\u0443.","robots-changed":"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u0437\u043C\u0456\u043D\u0443 robots.txt \u0456 \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u044C\u0442\u0435, \u0449\u043E \u0434\u043E\u0441\u0442\u0443\u043F \u0434\u043B\u044F \u0441\u043A\u0430\u043D\u0443\u0432\u0430\u043D\u043D\u044F \u0437\u043C\u0456\u043D\u0435\u043D\u043E \u0441\u0432\u0456\u0434\u043E\u043C\u043E.","page-missing":"\u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u0434\u043E \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0438 \u0430\u0431\u043E \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u044C\u0442\u0435, \u0449\u043E \u0457\u0457 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E \u0441\u0432\u0456\u0434\u043E\u043C\u043E.","status-regression":"\u0412\u0456\u0434\u043D\u043E\u0432\u0456\u0442\u044C \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u044E \u0443\u0441\u043F\u0456\u0448\u043D\u0443 HTTP-\u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u044C.","new-noindex":"\u041F\u0440\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u043D\u043E\u0432\u0438\u0439 noindex, \u044F\u043A\u0449\u043E \u0439\u043E\u0433\u043E \u043D\u0435 \u0434\u043E\u0434\u0430\u043D\u043E \u043D\u0430\u0432\u043C\u0438\u0441\u043D\u043E.","title-removed":"\u0412\u0456\u0434\u043D\u043E\u0432\u0456\u0442\u044C \u0437\u043C\u0456\u0441\u0442\u043E\u0432\u043D\u0438\u0439 title.","title-changed":"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u0442\u0430 \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u044C\u0442\u0435 \u0437\u043C\u0456\u043D\u0435\u043D\u0438\u0439 title.","description-removed":"\u0412\u0456\u0434\u043D\u043E\u0432\u0456\u0442\u044C \u043A\u043E\u0440\u0438\u0441\u043D\u0438\u0439 meta description.","canonical-removed":"\u0412\u0456\u0434\u043D\u043E\u0432\u0456\u0442\u044C canonical.","canonical-changed":"\u041F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u044C\u0442\u0435, \u0449\u043E \u043D\u043E\u0432\u0430 \u0446\u0456\u043B\u044C canonical \u0441\u0432\u0456\u0434\u043E\u043C\u0430 \u0439 \u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0430.","h1-removed":"\u0412\u0456\u0434\u043D\u043E\u0432\u0456\u0442\u044C \u0437\u0440\u043E\u0437\u0443\u043C\u0456\u043B\u0438\u0439 \u043E\u0441\u043D\u043E\u0432\u043D\u0438\u0439 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A.","redirect-changed":"\u041F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u044C\u0442\u0435, \u0449\u043E \u043D\u043E\u0432\u0430 \u0446\u0456\u043B\u044C \u043F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043D\u044F \u0441\u0432\u0456\u0434\u043E\u043C\u0430.","sitemap-url-count-drop":"\u0414\u043E\u0441\u043B\u0456\u0434\u0456\u0442\u044C \u0432\u0442\u0440\u0430\u0442\u0443 URL \u0443 sitemap \u0456 \u043F\u043E\u0432\u0435\u0440\u043D\u0456\u0442\u044C \u043F\u0440\u043E\u043F\u0443\u0449\u0435\u043D\u0456 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \u0434\u043B\u044F \u0456\u043D\u0434\u0435\u043A\u0441\u0430\u0446\u0456\u0457."};function Au(e){return e.evidence?.actual??e.after}function pu(e,t){let r=Au(e);switch(t){case"page-unreachable":case"redirect-loop":return`\u0417\u0430\u043F\u0438\u0442 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0432\u0441\u044F \u043F\u043E\u043C\u0438\u043B\u043A\u043E\u044E: ${String(r??"\u043D\u0435\u0432\u0456\u0434\u043E\u043C\u0430 \u043F\u043E\u043C\u0438\u043B\u043A\u0430")}`;case"http-error":return`\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043F\u043E\u0432\u0435\u0440\u043D\u0443\u043B\u0430 HTTP ${String(r??"\u043D\u0435\u0432\u0456\u0434\u043E\u043C\u043E")}`;case"noindex":return"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u0434\u0438\u0440\u0435\u043A\u0442\u0438\u0432\u0443 noindex \u0443 meta";case"x-robots-noindex":return"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043C\u0456\u0441\u0442\u0438\u0442\u044C noindex \u0443 X-Robots-Tag";case"robots-blocked":return e.before===!1?"\u0422\u0435\u043F\u0435\u0440 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u0437\u0430\u0431\u043B\u043E\u043A\u043E\u0432\u0430\u043D\u043E \u0447\u0435\u0440\u0435\u0437 robots.txt":"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u0437\u0430\u0431\u043B\u043E\u043A\u043E\u0432\u0430\u043D\u043E \u0447\u0435\u0440\u0435\u0437 robots.txt";case"missing-canonical":return"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043D\u0435 \u043C\u0456\u0441\u0442\u0438\u0442\u044C canonical URL";case"invalid-canonical":return"Canonical URL \u043D\u0435\u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0438\u0439";case"cross-domain-canonical":return"Canonical \u0432\u043A\u0430\u0437\u0443\u0454 \u043D\u0430 \u0456\u043D\u0448\u0438\u0439 \u0434\u043E\u043C\u0435\u043D";case"canonical-target-error":return"\u0426\u0456\u043B\u044C canonical \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430";case"long-redirect-chain":return`\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0454 ${String(r??0)} \u043F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u044C`;case"sitemap-unavailable":return"\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u043D\u0430\u043B\u0430\u0448\u0442\u043E\u0432\u0430\u043D\u0438\u0439 sitemap";case"noindex-in-sitemap":return"URL \u0456\u0437 sitemap \u043F\u043E\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 noindex";case"redirect-in-sitemap":return"URL \u0456\u0437 sitemap \u043F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u044F\u0454\u0442\u044C\u0441\u044F";case"missing-title":return"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043D\u0435 \u043C\u0430\u0454 title";case"duplicate-title":return"\u041A\u0456\u043B\u044C\u043A\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A \u043C\u0430\u044E\u0442\u044C \u043E\u0434\u043D\u0430\u043A\u043E\u0432\u0438\u0439 title";case"title-length":return`\u0414\u043E\u0432\u0436\u0438\u043D\u0430 title \u2014 ${String(r??0)} \u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432`;case"missing-description":return"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043D\u0435 \u043C\u0430\u0454 meta description";case"duplicate-description":return"\u041A\u0456\u043B\u044C\u043A\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A \u043C\u0430\u044E\u0442\u044C \u043E\u0434\u043D\u0430\u043A\u043E\u0432\u0438\u0439 meta description";case"description-length":return`\u0414\u043E\u0432\u0436\u0438\u043D\u0430 description \u2014 ${String(r??0)} \u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432`;case"missing-h1":return"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043D\u0435 \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430 H1";case"multiple-h1":return`\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043C\u0456\u0441\u0442\u0438\u0442\u044C H1 \u0443 \u043A\u0456\u043B\u044C\u043A\u043E\u0441\u0442\u0456: ${String(r??0)}`;case"broken-internal-link":return"\u0412\u043D\u0443\u0442\u0440\u0456\u0448\u043D\u0454 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u0432\u0435\u0434\u0435 \u043D\u0430 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0443 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443";case"orphan-sitemap-page":return"\u041D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u0456\u0437 sitemap \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u0432\u043D\u0443\u0442\u0440\u0456\u0448\u043D\u0456\u0445 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u044C";case"crawlable-not-in-sitemap":return"\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0434\u043B\u044F \u0441\u043A\u0430\u043D\u0443\u0432\u0430\u043D\u043D\u044F \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u0432\u0456\u0434\u0441\u0443\u0442\u043D\u044F \u0443 sitemap";case"invalid-hreflang":return"\u041E\u0433\u043E\u043B\u043E\u0448\u0435\u043D\u043D\u044F hreflang \u043D\u0435\u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0435";case"malformed-json-ld":return"\u0411\u043B\u043E\u043A JSON-LD \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u043D\u0435\u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0438\u0439 JSON";case"http-on-https-site":return"HTTPS-\u0441\u0430\u0439\u0442 \u043F\u043E\u0441\u0438\u043B\u0430\u0454\u0442\u044C\u0441\u044F \u043D\u0430 \u0432\u043D\u0443\u0442\u0440\u0456\u0448\u043D\u0456\u0439 HTTP URL";case"invalid-language":return"\u041E\u0433\u043E\u043B\u043E\u0448\u0435\u043D\u043D\u044F \u043C\u043E\u0432\u0438 HTML \u043D\u0435\u043A\u043E\u0440\u0435\u043A\u0442\u043D\u0435";case"duplicate-content":return"\u041E\u0441\u043D\u043E\u0432\u043D\u0438\u0439 \u0442\u0435\u043A\u0441\u0442 \u0454 \u0442\u043E\u0447\u043D\u0438\u043C \u0434\u0443\u0431\u043B\u0435\u043C \u0456\u043D\u0448\u043E\u0457 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438";case"missing-open-graph":return"Open Graph metadata \u043D\u0435\u043F\u043E\u0432\u043D\u0456";case"missing-twitter-metadata":return"Twitter card metadata \u043D\u0435\u043F\u043E\u0432\u043D\u0456";case"image-missing-alt":return`${Array.isArray(r)?r.length:String(r??0)} \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u044C \u043D\u0435 \u043C\u0430\u044E\u0442\u044C \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 alt`;case"low-word-count":return`\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u043F\u0440\u0438\u0431\u043B\u0438\u0437\u043D\u043E ${String(r??0)} \u0432\u0438\u0434\u0438\u043C\u0438\u0445 \u0441\u043B\u0456\u0432`;case"robots-changed":return"\u0412\u043C\u0456\u0441\u0442 robots.txt \u0437\u043C\u0456\u043D\u0438\u0432\u0441\u044F";case"page-missing":return"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u043D\u0435 \u0431\u0443\u043B\u043E \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u043E";case"status-regression":return`HTTP-\u0441\u0442\u0430\u0442\u0443\u0441 \u043F\u043E\u0433\u0456\u0440\u0448\u0438\u0432\u0441\u044F \u0437 ${String(e.before??"\u043D\u0435\u0432\u0456\u0434\u043E\u043C\u043E")} \u0434\u043E ${String(e.after??"\u0432\u0456\u0434\u0441\u0443\u0442\u043D\u0456\u0439")}`;case"new-noindex":return"\u0422\u0435\u043F\u0435\u0440 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430 \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u0434\u0438\u0440\u0435\u043A\u0442\u0438\u0432\u0443 noindex";case"title-removed":return"Title \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E";case"title-changed":return"Title \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \u0437\u043C\u0456\u043D\u0435\u043D\u043E";case"description-removed":return"Meta description \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E";case"canonical-removed":return"Canonical URL \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E";case"canonical-changed":return"Canonical URL \u0437\u043C\u0456\u043D\u0435\u043D\u043E";case"h1-removed":return"\u0423\u0441\u0456 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0438 H1 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E";case"redirect-changed":return"\u041A\u0456\u043D\u0446\u0435\u0432\u0438\u0439 URL \u043F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043D\u044F \u0437\u043C\u0456\u043D\u0435\u043D\u043E";case"sitemap-url-count-drop":return`\u041A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C URL \u0443 sitemap \u0437\u043C\u0435\u043D\u0448\u0438\u043B\u0430\u0441\u044F \u043D\u0430 ${String((Number(e.before)||0)-(Number(e.after)||0))}`;default:return e.message??"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0443 \u0442\u0430 \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u044C\u0442\u0435 \u043E\u0447\u0456\u043A\u0443\u0432\u0430\u043D\u0443 \u043F\u043E\u0432\u0435\u0434\u0456\u043D\u043A\u0443."}}function Bi(e,t){let r=e.remediation??"Review the finding and confirm the intended behavior.";return{en:{rule:ki(t),message:e.message??"",remediation:r},uk:{rule:du[t]??ki(t),message:pu(e,t),remediation:uu[t]??"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0443 \u0442\u0430 \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u044C\u0442\u0435 \u043E\u0447\u0456\u043A\u0443\u0432\u0430\u043D\u0443 \u043F\u043E\u0432\u0435\u0434\u0456\u043D\u043A\u0443."}}}var Pi={en:{language:"Language",titles:{partial:"Partial SEO scan report",check:"SEO regression report",scan:"SEO baseline audit"},generated:"Generated",engine:"Engine",rules:"Rules",issueLifecycle:"Issue lifecycle",partialTitle:"Partial results.",partialMessage:"This report contains the pages saved so far. Run the same scan command again to resume without requesting them twice.",incompleteTitle:"Incomplete comparison.",incompleteMessage:"Regressions found on checked pages are shown, but unchecked pages are not marked missing or resolved.",previewTitle:"Preview deployment comparison.",production:"Production",preview:"Preview",cards:{pages:"Pages checked",error:"Errors",warning:"Warnings",info:"Info",affected:"Affected pages"},analytics:{title:"Issue statistics",hint:"Select a chart item to filter the issue table.",severity:"By severity",topRules:"Most frequent checks",owners:"By owner",lifecycle:"By lifecycle",templates:"Affected page templates",total:"Total issues",noData:"No issues to chart.",filterBy:"Filter by"},history:{title:"Local scan history",hint:"Issue trends from snapshots stored on this device.",chartLabel:"Issue trend across runs.",runs:"Runs",pages:"Latest pages",newIssues:"New issues",resolvedIssues:"Resolved issues",sitemapUrls:"Sitemap URLs",maxDepth:"Maximum crawl depth"},tabs:{current:"Current / all",new:"New",ongoing:"Ongoing",resolved:"Resolved",unchanged:"Unchanged"},filters:{search:"URL or text",searchPlaceholder:"URL, check, or message",severity:"Severity",rule:"Check",template:"Page template",owner:"Owner",rows:"Rows"},all:{severity:"All severities",rule:"All checks",template:"All templates",owner:"All owners"},severities:{error:"Error",warning:"Warning",info:"Info"},owners:{seo:"SEO",content:"Content",developer:"Developer"},rows:{100:"100 per page",250:"250 per page",500:"500 per page"},guide:{error:"Errors",errorText:"need attention first.",warning:"Warnings",warningText:"are important improvements.",info:"Info",infoText:"is useful context.",score:"No opaque SEO score is used."},exportCsv:"Export CSV",previous:"Previous",next:"Next",table:{severity:"Severity",lifecycle:"Lifecycle",ruleOwner:"Check / owner",page:"Page",finding:"What was found",change:"Change",before:"Before",evidence:"Evidence / after",remediation:"Remediation",fingerprint:"Fingerprint"},empty:{cleanTitle:"No SEO issues found",cleanMessage:"The scanned pages passed all current checks.",filteredTitle:"No matching issues",filteredMessage:"Try a different lifecycle tab or clear the selected filters.",clear:"Clear filters"},lifecycle:{current:"Current",new:"New",ongoing:"Ongoing",resolved:"Resolved",unchanged:"Unchanged"},notPresent:"Not present",page:"Page",of:"of",issue:"issue",issues:"issues",docs:"docs",footer:"Generated locally. No report data was uploaded."},uk:{language:"\u041C\u043E\u0432\u0430",titles:{partial:"\u0417\u0432\u0456\u0442 \u0447\u0430\u0441\u0442\u043A\u043E\u0432\u043E\u0433\u043E SEO-\u0441\u043A\u0430\u043D\u0443\u0432\u0430\u043D\u043D\u044F",check:"\u0417\u0432\u0456\u0442 \u043F\u0440\u043E SEO-\u0440\u0435\u0433\u0440\u0435\u0441\u0456\u0457",scan:"\u0411\u0430\u0437\u043E\u0432\u0438\u0439 SEO-\u0430\u0443\u0434\u0438\u0442"},generated:"\u0421\u0442\u0432\u043E\u0440\u0435\u043D\u043E",engine:"\u0420\u0443\u0448\u0456\u0439",rules:"\u041F\u0440\u0430\u0432\u0438\u043B\u0430",issueLifecycle:"\u0421\u0442\u0430\u043D\u0438 \u043F\u0440\u043E\u0431\u043B\u0435\u043C",partialTitle:"\u0427\u0430\u0441\u0442\u043A\u043E\u0432\u0456 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0438.",partialMessage:"\u0417\u0432\u0456\u0442 \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u0443\u0436\u0435 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043D\u0456 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438. \u0417\u0430\u043F\u0443\u0441\u0442\u0456\u0442\u044C \u0442\u0443 \u0441\u0430\u043C\u0443 \u043A\u043E\u043C\u0430\u043D\u0434\u0443 \u0449\u0435 \u0440\u0430\u0437, \u0449\u043E\u0431 \u043F\u0440\u043E\u0434\u043E\u0432\u0436\u0438\u0442\u0438 \u0431\u0435\u0437 \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u0438\u0445 \u0437\u0430\u043F\u0438\u0442\u0456\u0432.",incompleteTitle:"\u041D\u0435\u043F\u043E\u0432\u043D\u0435 \u043F\u043E\u0440\u0456\u0432\u043D\u044F\u043D\u043D\u044F.",incompleteMessage:"\u041F\u043E\u043A\u0430\u0437\u0430\u043D\u043E \u0440\u0435\u0433\u0440\u0435\u0441\u0456\u0457 \u043D\u0430 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u0438\u0445 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430\u0445, \u0430\u043B\u0435 \u043D\u0435\u043F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u0456 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \u043D\u0435 \u043F\u043E\u0437\u043D\u0430\u0447\u0435\u043D\u043E \u044F\u043A \u0432\u0456\u0434\u0441\u0443\u0442\u043D\u0456 \u0447\u0438 \u0432\u0438\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0456.",previewTitle:"\u041F\u043E\u0440\u0456\u0432\u043D\u044F\u043D\u043D\u044F production \u0456 preview.",production:"Production",preview:"Preview",cards:{pages:"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u043E \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A",error:"\u041F\u043E\u043C\u0438\u043B\u043A\u0438",warning:"\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u0436\u0435\u043D\u043D\u044F",info:"\u0406\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u044F",affected:"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \u0437 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0430\u043C\u0438"},analytics:{title:"\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0430 \u043F\u0440\u043E\u0431\u043B\u0435\u043C",hint:"\u041E\u0431\u0435\u0440\u0456\u0442\u044C \u0435\u043B\u0435\u043C\u0435\u043D\u0442 \u0433\u0440\u0430\u0444\u0456\u043A\u0430, \u0449\u043E\u0431 \u0432\u0456\u0434\u0444\u0456\u043B\u044C\u0442\u0440\u0443\u0432\u0430\u0442\u0438 \u0442\u0430\u0431\u043B\u0438\u0446\u044E \u043F\u0440\u043E\u0431\u043B\u0435\u043C.",severity:"\u0417\u0430 \u0432\u0430\u0436\u043B\u0438\u0432\u0456\u0441\u0442\u044E",topRules:"\u041D\u0430\u0439\u0447\u0430\u0441\u0442\u0456\u0448\u0456 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0438",owners:"\u0417\u0430 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u043B\u044C\u043D\u0438\u043C\u0438",lifecycle:"\u0417\u0430 \u0441\u0442\u0430\u043D\u043E\u043C",templates:"\u0428\u0430\u0431\u043B\u043E\u043D\u0438 \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A \u0456\u0437 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0430\u043C\u0438",total:"\u0423\u0441\u044C\u043E\u0433\u043E \u043F\u0440\u043E\u0431\u043B\u0435\u043C",noData:"\u041D\u0435\u043C\u0430\u0454 \u043F\u0440\u043E\u0431\u043B\u0435\u043C \u0434\u043B\u044F \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F.",filterBy:"\u0424\u0456\u043B\u044C\u0442\u0440\u0443\u0432\u0430\u0442\u0438 \u0437\u0430"},history:{title:"\u041B\u043E\u043A\u0430\u043B\u044C\u043D\u0430 \u0456\u0441\u0442\u043E\u0440\u0456\u044F \u0441\u043A\u0430\u043D\u0443\u0432\u0430\u043D\u044C",hint:"\u0414\u0438\u043D\u0430\u043C\u0456\u043A\u0430 \u043F\u0440\u043E\u0431\u043B\u0435\u043C \u0437\u0456 snapshot-\u0444\u0430\u0439\u043B\u0456\u0432, \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043D\u0438\u0445 \u043D\u0430 \u0446\u044C\u043E\u043C\u0443 \u043F\u0440\u0438\u0441\u0442\u0440\u043E\u0457.",chartLabel:"\u0414\u0438\u043D\u0430\u043C\u0456\u043A\u0430 \u043F\u0440\u043E\u0431\u043B\u0435\u043C \u0437\u0430 \u0437\u0430\u043F\u0443\u0441\u043A\u0430\u043C\u0438.",runs:"\u0417\u0430\u043F\u0443\u0441\u043A\u0438",pages:"\u0421\u0442\u043E\u0440\u0456\u043D\u043E\u043A \u0432\u043E\u0441\u0442\u0430\u043D\u043D\u0454",newIssues:"\u041D\u043E\u0432\u0456 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0438",resolvedIssues:"\u0412\u0438\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0456 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0438",sitemapUrls:"URL \u0443 sitemap",maxDepth:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430 \u0433\u043B\u0438\u0431\u0438\u043D\u0430"},tabs:{current:"\u041F\u043E\u0442\u043E\u0447\u043D\u0456 / \u0443\u0441\u0456",new:"\u041D\u043E\u0432\u0456",ongoing:"\u0422\u0440\u0438\u0432\u0430\u044E\u0442\u044C",resolved:"\u0412\u0438\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0456",unchanged:"\u0411\u0435\u0437 \u0437\u043C\u0456\u043D"},filters:{search:"URL \u0430\u0431\u043E \u0442\u0435\u043A\u0441\u0442",searchPlaceholder:"URL, \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 \u0430\u0431\u043E \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F",severity:"\u0412\u0430\u0436\u043B\u0438\u0432\u0456\u0441\u0442\u044C",rule:"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430",template:"\u0428\u0430\u0431\u043B\u043E\u043D \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438",owner:"\u0412\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u043B\u044C\u043D\u0438\u0439",rows:"\u0420\u044F\u0434\u043A\u0438"},all:{severity:"\u0423\u0441\u0456 \u0440\u0456\u0432\u043D\u0456",rule:"\u0423\u0441\u0456 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0438",template:"\u0423\u0441\u0456 \u0448\u0430\u0431\u043B\u043E\u043D\u0438",owner:"\u0423\u0441\u0456 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u043B\u044C\u043D\u0456"},severities:{error:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430",warning:"\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u0436\u0435\u043D\u043D\u044F",info:"\u0406\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u044F"},owners:{seo:"SEO",content:"\u041A\u043E\u043D\u0442\u0435\u043D\u0442",developer:"\u0420\u043E\u0437\u0440\u043E\u0431\u043D\u0438\u043A"},rows:{100:"100 \u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443",250:"250 \u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443",500:"500 \u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443"},guide:{error:"\u041F\u043E\u043C\u0438\u043B\u043A\u0438",errorText:"\u043F\u043E\u0442\u0440\u0435\u0431\u0443\u044E\u0442\u044C \u043F\u0435\u0440\u0448\u043E\u0447\u0435\u0440\u0433\u043E\u0432\u043E\u0457 \u0443\u0432\u0430\u0433\u0438.",warning:"\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u0436\u0435\u043D\u043D\u044F",warningText:"\u043F\u043E\u0437\u043D\u0430\u0447\u0430\u044E\u0442\u044C \u0432\u0430\u0436\u043B\u0438\u0432\u0456 \u043F\u043E\u043A\u0440\u0430\u0449\u0435\u043D\u043D\u044F.",info:"\u0406\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u044F",infoText:"\u0434\u0430\u0454 \u043A\u043E\u0440\u0438\u0441\u043D\u0438\u0439 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442.",score:"\u041D\u0435\u043F\u0440\u043E\u0437\u043E\u0440\u0430 SEO-\u043E\u0446\u0456\u043D\u043A\u0430 \u043D\u0435 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0454\u0442\u044C\u0441\u044F."},exportCsv:"\u0415\u043A\u0441\u043F\u043E\u0440\u0442 CSV",previous:"\u041D\u0430\u0437\u0430\u0434",next:"\u0414\u0430\u043B\u0456",table:{severity:"\u0412\u0430\u0436\u043B\u0438\u0432\u0456\u0441\u0442\u044C",lifecycle:"\u0421\u0442\u0430\u043D",ruleOwner:"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 / \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u043B\u044C\u043D\u0438\u0439",page:"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430",finding:"\u0429\u043E \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E",change:"\u0417\u043C\u0456\u043D\u0430",before:"\u0411\u0443\u043B\u043E",evidence:"\u0414\u043E\u043A\u0430\u0437 / \u0441\u0442\u0430\u043B\u043E",remediation:"\u042F\u043A \u0432\u0438\u043F\u0440\u0430\u0432\u0438\u0442\u0438",fingerprint:"\u0412\u0456\u0434\u0431\u0438\u0442\u043E\u043A"},empty:{cleanTitle:"SEO-\u043F\u0440\u043E\u0431\u043B\u0435\u043C \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E",cleanMessage:"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u0456 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \u043F\u0440\u043E\u0439\u0448\u043B\u0438 \u0432\u0441\u0456 \u0430\u043A\u0442\u0438\u0432\u043D\u0456 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0438.",filteredTitle:"\u0417\u0431\u0456\u0433\u0456\u0432 \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E",filteredMessage:"\u041E\u0431\u0435\u0440\u0456\u0442\u044C \u0456\u043D\u0448\u0438\u0439 \u0441\u0442\u0430\u043D \u0430\u0431\u043E \u043E\u0447\u0438\u0441\u0442\u044C\u0442\u0435 \u0444\u0456\u043B\u044C\u0442\u0440\u0438.",clear:"\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0444\u0456\u043B\u044C\u0442\u0440\u0438"},lifecycle:{current:"\u041F\u043E\u0442\u043E\u0447\u043D\u0430",new:"\u041D\u043E\u0432\u0430",ongoing:"\u0422\u0440\u0438\u0432\u0430\u0454",resolved:"\u0412\u0438\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0430",unchanged:"\u0411\u0435\u0437 \u0437\u043C\u0456\u043D"},notPresent:"\u0412\u0456\u0434\u0441\u0443\u0442\u043D\u0454",page:"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0430",of:"\u0437",issue:"\u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0430",issues:"\u043F\u0440\u043E\u0431\u043B\u0435\u043C",docs:"\u0434\u043E\u0432\u0456\u0434\u043A\u0430",footer:"\u0421\u0442\u0432\u043E\u0440\u0435\u043D\u043E \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u043E. \u0414\u0430\u043D\u0456 \u0437\u0432\u0456\u0442\u0443 \u043D\u0456\u043A\u0443\u0434\u0438 \u043D\u0435 \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0443\u0432\u0430\u043B\u0438\u0441\u044F."}};function yr(e,t){try{let r=new URL(e,t);return r.protocol!=="http:"&&r.protocol!=="https:"?null:(r.hash="",r.href)}catch{return null}}function Mi(e){let t=new Map,r=new Map,n=new Map;for(let s of e){let a=yr(s.url);a&&t.set(a,s),r.set(s.url,{incoming:[],broken:[],redirects:[]})}for(let s of e){let a=r.get(s.url),c=new Set(s.internalLinks.map(l=>yr(l,s.finalUrl??s.url)));for(let l of c){if(!l||l===yr(s.url)||l===yr(s.finalUrl??s.url))continue;let o=t.get(l);if(!o)continue;let d=n.get(o.url)??new Set;d.add(s.url),n.set(o.url,d),!o.blockedByRobots&&(o.error||o.status!==null&&o.status>=400)&&a.broken.push(o.url),(o.redirectChain.length||o.finalUrl&&o.finalUrl!==o.url||o.status!==null&&o.status>=300&&o.status<400)&&a.redirects.push(o.url)}}for(let[s,a]of r)a.incoming=[...n.get(s)??[]].sort(),a.broken.sort(),a.redirects.sort();return r}var Ue=e=>String(e??"").replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#039;"),U=(e,t)=>`<span class="locale-en">${Ue(e)}</span><span class="locale-uk">${Ue(t)}</span>`;function Ui(e,t){let r=[...e].sort((n,s)=>s.counts.new+s.counts.resolved+s.counts.ongoing-(n.counts.new+n.counts.resolved+n.counts.ongoing)||n.id.localeCompare(s.id));return r.slice(0,20).map(n=>`<tr><td><button type="button" data-comparison-${t}="${Ue(n.id)}">${Ue(n.id)}</button></td><td>${n.counts.new}</td><td>${n.counts.ongoing}</td><td>${n.counts.resolved}</td><td>${n.affectedPages}</td></tr>`).join("")+(r.length>20?`<tr><td colspan="5">${U(`${r.length-20} more groups in the JSON summary`,`\u0429\u0435 ${r.length-20} \u0433\u0440\u0443\u043F \u0443 JSON-\u0437\u0432\u0435\u0434\u0435\u043D\u043D\u0456`)}</td></tr>`:"")}function Fi(e){let t=e.coverage,r=e.warnings.length>0?`<p class="comparison-warning">${U("Comparison warnings","\u0417\u0430\u0441\u0442\u0435\u0440\u0435\u0436\u0435\u043D\u043D\u044F \u043F\u043E\u0440\u0456\u0432\u043D\u044F\u043D\u043D\u044F")}: ${Ue(e.warnings.join(", "))}</p>`:"",n=e.unverified.length>0?`<p class="comparison-warning">${e.unverified.length} ${U("apparent resolutions lack sufficient evidence and are not counted as resolved","\u043F\u043E\u0442\u0435\u043D\u0446\u0456\u0439\u043D\u0438\u0445 \u0432\u0438\u0440\u0456\u0448\u0435\u043D\u044C \u043D\u0435 \u043C\u0430\u044E\u0442\u044C \u0434\u043E\u0441\u0442\u0430\u0442\u043D\u0456\u0445 \u0434\u043E\u043A\u0430\u0437\u0456\u0432 \u0456 \u043D\u0435 \u0432\u0440\u0430\u0445\u043E\u0432\u0430\u043D\u0456 \u044F\u043A \u0432\u0438\u0440\u0456\u0448\u0435\u043D\u0456")}</p>`:"",s=`<thead><tr><th>${U("Group","\u0413\u0440\u0443\u043F\u0430")}</th><th>${U("New","\u041D\u043E\u0432\u0456")}</th><th>${U("Ongoing","\u0422\u0440\u0438\u0432\u0430\u044E\u0442\u044C")}</th><th>${U("Resolved","\u0412\u0438\u0440\u0456\u0448\u0435\u043D\u0456")}</th><th>${U("Pages","\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0438")}</th></tr></thead>`;return`<section id="local-comparison" class="analytics" aria-labelledby="local-comparison-title"><h2 id="local-comparison-title">${U("Local run comparison","\u041F\u043E\u0440\u0456\u0432\u043D\u044F\u043D\u043D\u044F \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u0438\u0445 \u0437\u0430\u043F\u0443\u0441\u043A\u0456\u0432")}</h2>
8
+ <div class="comparison-runs"><div><strong>${U("Before","\u0414\u043E")}</strong><time>${Ue(e.from.generatedAt)}</time><span>${e.from.pages} ${U("checked pages","\u043F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u0438\u0445 \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A")}</span></div><div><strong>${U("After","\u041F\u0456\u0441\u043B\u044F")}</strong><time>${Ue(e.to.generatedAt)}</time><span>${e.to.pages} ${U("checked pages","\u043F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u0438\u0445 \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A")}</span></div></div>
9
+ <p>${U("Coverage","\u041E\u0445\u043E\u043F\u043B\u0435\u043D\u043D\u044F")}: ${t.common} ${U("common","\u0441\u043F\u0456\u043B\u044C\u043D\u0438\u0445")}, ${t.onlyBefore} ${U("only before","\u043B\u0438\u0448\u0435 \u0434\u043E")}, ${t.onlyAfter} ${U("only after","\u043B\u0438\u0448\u0435 \u043F\u0456\u0441\u043B\u044F")} \xB7 ${t.complete?U("complete","\u043F\u043E\u0432\u043D\u0435"):U("incomplete","\u043D\u0435\u043F\u043E\u0432\u043D\u0435")}</p>
10
+ <div class="comparison-counts"><div><strong>${e.lifecycle.new}</strong>${U("New","\u041D\u043E\u0432\u0456")}</div><div><strong>${e.lifecycle.ongoing}</strong>${U("Ongoing","\u0422\u0440\u0438\u0432\u0430\u044E\u0442\u044C")}</div><div><strong>${e.lifecycle.resolved}</strong>${U("Resolved on checked pages","\u0412\u0438\u0440\u0456\u0448\u0435\u043D\u0456 \u043D\u0430 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u0438\u0445 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430\u0445")}</div><div><strong>${e.unverified.length}</strong>${U("Unverified","\u041D\u0435 \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0436\u0435\u043D\u043E")}</div></div>
11
+ ${r}${n}
12
+ <div class="comparison-groups"><div><h3>${U("By rule","\u0417\u0430 \u043F\u0440\u0430\u0432\u0438\u043B\u043E\u043C")}</h3><div class="table-wrap"><table>${s}<tbody>${Ui(e.byRule,"rule")}</tbody></table></div></div><div><h3>${U("By page template","\u0417\u0430 \u0448\u0430\u0431\u043B\u043E\u043D\u043E\u043C \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438")}</h3><div class="table-wrap"><table>${s}<tbody>${Ui(e.byTemplate,"template")}</tbody></table></div></div></div>
13
+ <p class="meta">${U("Findings are re-evaluated with the selected current policy. A lower count is not proof of improvement when coverage differs.","\u041F\u0440\u043E\u0431\u043B\u0435\u043C\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u043E \u043E\u0446\u0456\u043D\u0435\u043D\u043E \u0437\u0430 \u043F\u043E\u043B\u0456\u0442\u0438\u043A\u043E\u044E \u0432\u0438\u0431\u0440\u0430\u043D\u043E\u0433\u043E \u043F\u043E\u0442\u043E\u0447\u043D\u043E\u0433\u043E \u0437\u0430\u043F\u0443\u0441\u043A\u0443. \u041C\u0435\u043D\u0448\u0430 \u043A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u043D\u0435 \u0434\u043E\u0432\u043E\u0434\u0438\u0442\u044C \u043F\u043E\u043A\u0440\u0430\u0449\u0435\u043D\u043D\u044F, \u044F\u043A\u0449\u043E \u043E\u0445\u043E\u043F\u043B\u0435\u043D\u043D\u044F \u0440\u0456\u0437\u043D\u0438\u0442\u044C\u0441\u044F.")}</p>
14
+ </section>`}var hu="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Crect width='64' height='64' rx='16' fill='%233157d5'/%3E%3Ccircle cx='27' cy='27' r='13' fill='none' stroke='white' stroke-width='6'/%3E%3Cpath d='m37 37 12 12' fill='none' stroke='white' stroke-linecap='round' stroke-width='6'/%3E%3Cpath d='m21 27 5 5 9-11' fill='none' stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='4'/%3E%3C/svg%3E";function se(e){return String(e??"").replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#039;")}function gu(e){return JSON.stringify(e).replaceAll("<","\\u003c").replaceAll(">","\\u003e").replaceAll("&","\\u0026")}function mu(e){let t=[],r=new Map,n=s=>{let a=r.get(s);if(a!==void 0)return a;let c=t.length;return t.push(s),r.set(s,c),c};return{strings:t,rows:e.map(s=>[s.fingerprint,n(s.ruleId),n(s.rule),n(s.severity),n(s.scope),s.url,s.message,s.evidence,n(s.owner),n(s.remediation),n(s.documentationUrl),s.before??null,s.after??null,n(s.lifecycle),n(s.template),n(s.localized.en.rule),s.localized.en.message,n(s.localized.en.remediation),n(s.localized.uk.rule),s.localized.uk.message,n(s.localized.uk.remediation),(s.before!==void 0?1:0)|(s.after!==void 0?2:0)])}}function fu(){return'<svg class="logo product-mark" viewBox="0 0 64 64" role="img" aria-label="SEO Crawl Audit logo"><rect width="64" height="64" rx="16" fill="var(--accent)"/><circle cx="27" cy="27" r="13" fill="none" stroke="#fff" stroke-width="6"/><path d="m37 37 12 12" fill="none" stroke="#fff" stroke-linecap="round" stroke-width="6"/><path d="m21 27 5 5 9-11" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="4"/></svg>'}function Dt(e,t="current"){let r=e.ruleId??e.rule??"unknown";return{fingerprint:e.fingerprint??"legacy",ruleId:r,rule:e.rule??e.ruleId??"unknown",severity:e.severity??"info",scope:e.scope??"page",url:e.url??"",message:e.message??"",evidence:e.evidence??{actual:e.after},owner:e.owner??"seo",remediation:e.remediation??"Review the finding and confirm the intended behavior.",documentationUrl:e.documentationUrl??"https://github.com/MelnixDev/seo-crawl-audit/blob/main/docs/rules.md",before:e.before,after:e.after,lifecycle:e.lifecycle??t,template:"",localized:Bi(e,r)}}function Nn(e,t){return e.reduce((r,n)=>{let s=String(n[t]);return r[s]=(r[s]??0)+1,r},{})}function Eu(e){if(e.blockedByRobots)return"blocked";if(e.error||e.status!==null&&e.status>=400)return"error";if(e.status===null)return"unknown";if(e.redirectChain.length>0||e.finalUrl!==null&&e.finalUrl!==e.url||e.status>=300)return"redirect";if(!e.contentType)return"unknown";if(!/(?:text\/html|application\/xhtml\+xml)/i.test(e.contentType))return"non-html";let t=`${e.robots??""},${e.xRobotsTag??""}`.toLowerCase();return/(^|[:,\s])(?:noindex|none)($|[:,\s])/.test(t)?"noindex":"allowed"}function Tu(e,t,r){let n=[],s=new Map,a=h=>{if(h===null||h==="")return null;let f=s.get(h);if(f!==void 0)return f;let m=n.length;return n.push(h),s.set(h,m),m},c=new Map;r.forEach((h,f)=>{if(h.scope!=="page"||h.lifecycle==="resolved")return;let m=c.get(h.url)??{indexes:[],error:0,warning:0,info:0};m.indexes.push(f),m[h.severity]+=1,c.set(h.url,m)});let l=t?.map(h=>({url:h.url}))??e??[],o=t?Mi(t):null,d=vt(l.map(h=>h.url)),p=new Map(d.flatMap((h,f)=>h.urls.map(m=>[m,f])));return{detailed:!!t,templates:d.map(({origin:h,template:f,urls:m})=>({label:h+f,count:m.length})),urls:n,pages:l.map((h,f)=>{let m=t?.[f]??null,y=c.get(h.url)??{indexes:[],error:0,warning:0,info:0};return{u:a(h.url),template:p.get(h.url)??null,f:a(m?.finalUrl??null),s:m?.status??null,ct:m?.contentType??null,b:m?.blockedByRobots??!1,e:m?.error??null,t:m?.title??null,d:m?.description??null,c:a(m?.canonical??null),cr:a(m?.canonicalRaw??null),r:m?.robots??null,xr:m?.xRobotsTag??null,l:m?.lang??null,h:m?.h1Count??null,w:m?.wordCount??null,z:m?.responseBytes??null,depth:m?.depth??null,incoming:o?.get(h.url)?.incoming.map(a)??null,broken:o?.get(h.url)?.broken.map(a)??null,redirects:o?.get(h.url)?.redirects.map(a)??null,ix:m?Eu(m):"unknown",il:m?.internalLinks.map(a)??[],el:m?.externalLinks.map(a)??[],rc:m?.redirectChain.map(w=>({u:a(w.url),s:w.status,l:a(w.location)}))??[],issues:y.indexes,counts:{error:y.error,warning:y.warning,info:y.info}}})}}function Hi(e,t={}){let r=e.mode??"scan",n=e.pages??[],s=(e.issues??[]).map(S=>Dt(S)),a=[...(e.newIssues??[]).map(S=>Dt(S,"new")),...(e.ongoingIssues??[]).map(S=>Dt(S,"ongoing")),...(e.resolvedIssues??[]).map(S=>Dt(S,"resolved")),...(e.unchangedIssues??[]).map(S=>Dt(S,"unchanged"))],c=a.length>0?a:s,l=e.comparison?.kind==="local",o=l?vt([...(e.previousPages??[]).map(S=>S.url),...n.map(S=>S.url)]):null,d=Ir(c),p=new Map((o??d).flatMap(S=>S.urls.map(k=>[k,l?S.origin+S.template:S.template])));for(let S of c)S.template=p.get(S.url)??"";let h=new Map;if(l)for(let S of c){if(!S.template)continue;let k=h.get(S.template)??{count:0,urls:new Set};k.count+=1,k.urls.add(S.url),h.set(S.template,k)}let f=l?[...h].map(([S,k])=>({template:S,issueCount:k.count,affectedPages:k.urls.size})):d,m=c.reduce((S,k)=>(S[k.severity]+=1,S),{error:0,warning:0,info:0}),y=new Set(c.map(S=>S.url)).size,w=Nn(c,"rule"),I={error:0,warning:1,info:2},_=new Map;for(let S of c.filter(k=>k.lifecycle!=="resolved")){let k=_.get(S.rule);k?(k.count+=1,k.urls.add(S.url),I[S.severity]<I[k.severity]&&(k.severity=S.severity)):_.set(S.rule,{rule:S.rule,severity:S.severity,owner:S.owner,count:1,urls:new Set([S.url])})}let N=[..._.values()].map(S=>({rule:S.rule,severity:S.severity,owner:S.owner,count:S.count,affectedPages:S.urls.size})).sort((S,k)=>I[S.severity]-I[k.severity]||k.affectedPages-S.affectedPages||k.count-S.count||S.rule.localeCompare(k.rule)).slice(0,5),L={total:c.length,pagesChecked:n.length,targetPages:e.targetPages??null,affectedPages:y,severity:m,rules:Object.entries(w).map(([S,k])=>({id:S,count:k})).sort((S,k)=>k.count-S.count||S.id.localeCompare(k.id)),owners:Nn(c,"owner"),lifecycle:Nn(c,"lifecycle"),templates:f.map(({template:S,issueCount:k,affectedPages:Qa})=>({template:S,issueCount:k,affectedPages:Qa})),priorities:N},B=e.partial??!1,R=B||e.complete===!1,P=r==="check"&&e.complete===!1,G=B?"Partial SEO scan report":r==="check"?"SEO regression report":"SEO baseline audit",x={...e.branding??{},...t.branding??{}},D=/^#[0-9a-f]{6}$/i.test(x.primaryColor??"")?x.primaryColor:"#3157d5",F=x.logo&&(/^data:image\//.test(x.logo)||/^https:\/\//.test(x.logo))?`<img class="logo" src="${se(x.logo)}" alt="${se(x.agencyName??"Report logo")}">`:fu(),$=e.generatedAt??new Date().toISOString(),Ma=e.startUrl??"",Zn=e.targetPages??null,Fr=r==="check",Ua=c.length>25e3,Fa=Tu(n,e.pageDetails,c),zn=mu(c),Ha=gu({mode:r,issueRows:zn.rows,issueStrings:zn.strings,statistics:L,pageExplorer:Fa,copy:Pi,partial:B,incompleteComparison:P,comparison:e.comparison??null,history:e.history??null,siteMetrics:e.siteMetrics??null});return`<!doctype html>
8
15
  <html lang="en">
9
16
  <head>
10
17
  <meta charset="utf-8">
11
18
  <meta name="viewport" content="width=device-width, initial-scale=1">
12
- <link rel="icon" href="${eu}" type="image/svg+xml">
13
- <title>${ne(L)} \xB7 SEO Crawl Audit</title>
19
+ <link rel="icon" href="${hu}" type="image/svg+xml">
20
+ <title>${se(G)} \xB7 SEO Crawl Audit</title>
14
21
  <style>
15
- :root { color-scheme: light; --bg:#f5f7fb; --surface:#fff; --muted:#64748b; --text:#172033; --line:#dbe2ea; --accent:${S}; --error:#b42318; --warning:#9a6700; --info:#175cd3; --chart-error:#d92d20; --chart-warning:#f79009; --chart-info:#2e90fa; --chart-resolved:#12b76a; }
22
+ :root { color-scheme: light; --bg:#f5f7fb; --surface:#fff; --muted:#64748b; --text:#172033; --line:#dbe2ea; --accent:${D}; --error:#b42318; --warning:#9a6700; --info:#175cd3; --chart-error:#d92d20; --chart-warning:#f79009; --chart-info:#2e90fa; --chart-resolved:#12b76a; }
16
23
  *{box-sizing:border-box}[hidden]{display:none!important}body{margin:0;background:var(--bg);color:var(--text);font:14px/1.5 Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif}main{width:min(1600px,calc(100% - 32px));margin:32px auto 64px}header{display:flex;justify-content:space-between;gap:24px;margin-bottom:22px}.brand{display:flex;align-items:flex-start;gap:14px}.logo{width:52px;max-width:72px;height:52px;max-height:52px;object-fit:contain;flex:0 0 auto}.product-mark{filter:drop-shadow(0 8px 16px rgba(49,87,213,.2))}.eyebrow{color:var(--accent);font-weight:800;letter-spacing:.08em;text-transform:uppercase}h1{margin:4px 0 8px;font-size:clamp(27px,4vw,40px);line-height:1.1}.meta{color:var(--muted);overflow-wrap:anywhere}.header-meta{text-align:right}.language-control{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin-top:10px}.language-control span{margin:0}.language-control select{width:auto;min-height:32px;padding:4px 28px 4px 8px}.notice{margin-bottom:18px;padding:12px 14px;border:1px solid #b2ccff;border-radius:12px;background:#eef4ff;color:#1849a9}.cards{display:grid;grid-template-columns:repeat(5,minmax(120px,1fr));gap:12px;margin-bottom:18px}.card,.panel,.analytics{background:var(--surface);border:1px solid var(--line);box-shadow:0 12px 36px rgba(31,42,68,.07)}.card{padding:15px;border-radius:14px}.card strong{display:block;font-size:27px}.card span{color:var(--muted)}.error strong,.badge.error{color:var(--error)}.warning strong,.badge.warning{color:var(--warning)}.info strong,.badge.info{color:var(--info)}.analytics{margin-bottom:18px;padding:18px;border-radius:16px}.analytics-header{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:15px}.analytics h2,.analytics h3{margin:0}.analytics h2{font-size:20px}.analytics h3{font-size:14px}.analytics-grid{display:grid;grid-template-columns:repeat(4,minmax(240px,1fr));gap:14px}.chart-card{min-width:0;padding:15px;border:1px solid var(--line);border-radius:12px;background:#fbfcfe}.chart-title{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:13px}.chart-title span{color:var(--muted);font-size:12px}.severity-layout{display:grid;grid-template-columns:114px minmax(0,1fr);align-items:center;gap:12px}.donut{display:grid;width:112px;height:112px;padding:12px;border-radius:50%;background:#e2e8f0;place-items:center}.donut-inner{display:grid;width:100%;height:100%;border-radius:50%;background:var(--surface);place-content:center;text-align:center}.donut-inner strong{font-size:24px;line-height:1}.donut-inner span{max-width:76px;margin-top:5px;color:var(--muted);font-size:10px}.chart-list{display:grid;gap:7px}.chart-button{display:grid;width:100%;padding:6px 7px;border-color:transparent;background:transparent;text-align:left}.chart-button:hover,.chart-button:focus-visible{border-color:var(--line);background:#fff}.chart-button[aria-pressed="true"]{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.chart-label{display:flex;align-items:center;justify-content:space-between;gap:10px;min-width:0}.chart-label-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chart-label strong{font-variant-numeric:tabular-nums}.chart-key{display:inline-block;width:9px;height:9px;margin-right:7px;border-radius:50%}.chart-key.error{background:var(--chart-error)}.chart-key.warning{background:var(--chart-warning)}.chart-key.info{background:var(--chart-info)}.chart-track{height:7px;margin-top:6px;overflow:hidden;border-radius:999px;background:#e8edf3}.chart-fill{display:block;height:100%;min-width:2px;border-radius:inherit;background:var(--accent)}.chart-fill.error{background:var(--chart-error)}.chart-fill.warning{background:var(--chart-warning)}.chart-fill.info{background:var(--chart-info)}.chart-fill.resolved{background:var(--chart-resolved)}.chart-empty{display:grid;min-height:126px;color:var(--muted);place-items:center;text-align:center}.panel{overflow:hidden;border-radius:16px}.tabs{display:flex;gap:6px;padding:12px 16px;border-bottom:1px solid var(--line);overflow:auto}.tabs button[aria-selected="true"]{background:var(--accent);border-color:var(--accent);color:#fff}.filters{display:grid;grid-template-columns:minmax(220px,2fr) repeat(5,minmax(125px,1fr));gap:10px;padding:15px;background:#f8fafc;border-bottom:1px solid var(--line)}label span{display:block;margin-bottom:4px}input,select,button{font:inherit}input,select{width:100%;min-height:40px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--text)}button{padding:7px 11px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--text);cursor:pointer}button:disabled{opacity:.45}.guide,.results-bar{display:flex;justify-content:space-between;gap:14px;padding:10px 16px;color:var(--muted);border-bottom:1px solid var(--line)}.actions,.pagination{display:flex;align-items:center;gap:8px}.table-wrap{overflow:auto}table{width:100%;min-width:1260px;border-collapse:collapse}th{position:sticky;top:0;background:#f8fafc;color:var(--muted);font-size:11px;letter-spacing:.05em;text-align:left;text-transform:uppercase}th,td{padding:11px 12px;border-top:1px solid var(--line);vertical-align:top}.badge{display:inline-flex;padding:3px 8px;border-radius:999px;background:#f1f5f9;font-size:11px;font-weight:800;text-transform:uppercase}.badge.resolved{color:#067647;background:#ecfdf3}a{color:var(--accent);text-decoration:none;overflow-wrap:anywhere}code{display:block;max-width:320px;white-space:pre-wrap;overflow-wrap:anywhere;color:#344054;font:11px/1.45 ui-monospace,SFMono-Regular,Menlo,monospace}.remediation{max-width:260px}.fingerprint{font-size:10px;color:var(--muted)}.empty{padding:50px 20px;text-align:center;color:var(--muted)}.empty strong{display:block;color:var(--text);font-size:17px}.empty button{margin-top:14px}footer{margin-top:16px;color:var(--muted);text-align:center}
17
24
  .trend-layout{display:grid;grid-template-columns:minmax(0,3fr) minmax(220px,1fr);gap:18px;align-items:center}.trend-chart{width:100%;height:auto;min-height:220px;overflow:visible}.trend-grid{stroke:#dbe2ea;stroke-width:1}.trend-line{fill:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}.trend-point{stroke:#fff;stroke-width:2}.trend-error{stroke:var(--chart-error);fill:var(--chart-error)}.trend-warning{stroke:var(--chart-warning);fill:var(--chart-warning)}.trend-info{stroke:var(--chart-info);fill:var(--chart-info)}.trend-summary{display:grid;gap:9px}.trend-summary div{display:flex;justify-content:space-between;gap:12px;padding:9px 10px;border-radius:9px;background:#f8fafc}.trend-legend{display:flex;gap:14px;flex-wrap:wrap;margin-top:10px;color:var(--muted)}
25
+ html[lang="en"] .locale-uk,html[lang="uk"] .locale-en{display:none}.comparison-runs,.comparison-counts,.comparison-groups{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:14px 0}.comparison-runs>div,.comparison-counts>div{padding:12px;border:1px solid var(--line);border-radius:10px;background:#fbfcfe}.comparison-runs strong,.comparison-runs time,.comparison-runs span,.comparison-counts strong{display:block}.comparison-counts{grid-template-columns:repeat(4,minmax(0,1fr))}.comparison-counts strong{font-size:24px}.comparison-groups h3{margin:0 0 8px}.comparison-groups table{min-width:550px}.comparison-warning{padding:8px 10px;border-radius:8px;background:#fff7ed;color:#9a6700}
18
26
  .report-nav{display:flex;gap:8px;margin-bottom:18px;padding:7px;border:1px solid var(--line);border-radius:14px;background:var(--surface);box-shadow:0 12px 36px rgba(31,42,68,.05)}.report-nav button{border-color:transparent;font-weight:700}.report-nav button[aria-selected="true"]{background:var(--accent);color:#fff}.priority-list{display:grid;grid-template-columns:repeat(5,minmax(170px,1fr));gap:10px}.priority-item{display:block;width:100%;padding:13px;border-color:var(--line);background:#fbfcfe;text-align:left}.priority-item:hover{border-color:var(--accent)}.priority-item strong,.priority-item span{display:block}.priority-item span{margin-top:5px;color:var(--muted);font-size:11px}
19
27
  .metrics-hero{display:grid;grid-template-columns:repeat(4,minmax(190px,1fr));gap:14px;margin-bottom:16px}.metric-card{position:relative;min-width:0;padding:16px;border:1px solid var(--line);border-radius:14px;background:#fbfcfe}.metric-card.featured{min-height:150px;padding:20px;background:linear-gradient(145deg,#fff 0%,#f7f9ff 100%);box-shadow:0 10px 28px rgba(31,42,68,.06);overflow:hidden}.metric-card.featured:before{position:absolute;inset:0 auto 0 0;width:4px;background:var(--accent);content:""}.metric-card.featured strong{font-size:34px}.metric-label{display:flex;align-items:center;justify-content:space-between;gap:8px;color:#475467;font-weight:700}.metric-card strong{display:block;margin:7px 0;font-size:25px;line-height:1.15;overflow-wrap:anywhere}.metric-source,.metric-detail{color:var(--muted);font-size:11px}.metric-source a{color:inherit}.metric-detail{margin-top:7px}.metric-status{display:inline-flex;flex:0 0 auto;padding:2px 7px;border-radius:999px;background:#eef2ff;color:var(--accent);font-size:9px;font-weight:800;letter-spacing:.04em;text-transform:uppercase}
20
28
  .metrics-insights{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:20px}.metric-insight{padding:17px;border:1px solid var(--line);border-radius:14px;background:#fbfcfe}.metric-insight-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:13px}.metric-insight h3{margin:0;font-size:15px}.metric-insight-head strong{font-size:22px}.coverage-track,.http-track{display:flex;height:12px;overflow:hidden;border-radius:999px;background:#e8edf3}.coverage-track span{background:var(--accent)}.http-track span{min-width:2px}.http-2xx{background:#12b76a}.http-3xx{background:#2e90fa}.http-4xx{background:#f79009}.http-5xx{background:#d92d20}.metric-legend{display:flex;flex-wrap:wrap;gap:8px 14px;margin-top:11px;color:var(--muted);font-size:11px}.metric-legend i{display:inline-block;width:8px;height:8px;margin-right:5px;border-radius:50%}
@@ -27,14 +35,15 @@ ${Pr(n??null)}`).digest("hex").slice(0,24)}function R(e,t,r,n={},s){let a=Oa.get
27
35
  </style>
28
36
  </head>
29
37
  <body><main>
30
- <header><div class="brand">${v}<div><div class="eyebrow">${ne(D.agencyName??"SEO Crawl Audit")}</div><h1 id="report-title">${ne(L)}</h1><div class="meta">${ne(F)}</div></div></div><div class="meta header-meta"><span id="generated-label">Generated</span> <time id="generated-at" datetime="${ne(Y)}">${ne(Y)}</time><br><span id="engine-label">Engine</span> ${ne(e.engineVersion??V)} \xB7 <span id="rules-label">Rules</span> ${ne(e.ruleSetVersion??st)}<label class="language-control"><span id="language-label">Language</span><select id="language" aria-label="Language"><option value="en">English</option><option value="uk">\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430</option></select></label></div></header>
31
- ${I?' <div class="notice"><strong id="partial-title">Partial results.</strong> <span id="partial-message">This report contains the pages saved so far. Run the same scan command again to resume without requesting them twice.</span></div>':""}
32
- ${x?' <div class="notice"><strong id="incomplete-title">Incomplete comparison.</strong> <span id="incomplete-message">Regressions found on checked pages are shown, but unchecked pages are not marked missing or resolved.</span></div>':""}
33
- ${e.comparison?.kind==="preview"?` <div class="notice"><strong id="preview-title">Preview deployment comparison.</strong> <span id="production-label">Production</span>: <a href="${ne(e.comparison.productionUrl)}">${ne(e.comparison.productionUrl)}</a> \xB7 <span id="preview-label">Preview</span>: <a href="${ne(e.comparison.previewUrl)}">${ne(e.comparison.previewUrl)}</a></div>`:""}
34
- ${q?' <div id="large-report-notice" class="notice">This report contains more than 25,000 issues. Filters and pagination render only the visible rows to keep the report responsive.</div>':""}
38
+ <header><div class="brand">${F}<div><div class="eyebrow">${se(x.agencyName??"SEO Crawl Audit")}</div><h1 id="report-title">${se(G)}</h1><div class="meta">${se(Ma)}</div></div></div><div class="meta header-meta"><span id="generated-label">Generated</span> <time id="generated-at" datetime="${se($)}">${se($)}</time><br><span id="engine-label">Engine</span> ${se(e.engineVersion??X)} \xB7 <span id="rules-label">Rules</span> ${se(e.ruleSetVersion??ot)}<label class="language-control"><span id="language-label">Language</span><select id="language" aria-label="Language"><option value="en">English</option><option value="uk">\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430</option></select></label></div></header>
39
+ ${B?' <div class="notice"><strong id="partial-title">Partial results.</strong> <span id="partial-message">This report contains the pages saved so far. Run the same scan command again to resume without requesting them twice.</span></div>':""}
40
+ ${P?' <div class="notice"><strong id="incomplete-title">Incomplete comparison.</strong> <span id="incomplete-message">Regressions found on checked pages are shown, but unchecked pages are not marked missing or resolved.</span></div>':""}
41
+ ${e.comparison?.kind==="preview"?` <div class="notice"><strong id="preview-title">Preview deployment comparison.</strong> <span id="production-label">Production</span>: <a href="${se(e.comparison.productionUrl)}">${se(e.comparison.productionUrl)}</a> \xB7 <span id="preview-label">Preview</span>: <a href="${se(e.comparison.previewUrl)}">${se(e.comparison.previewUrl)}</a></div>`:""}
42
+ ${e.comparison?.kind==="local"?Fi(e.comparison.summary):""}
43
+ ${Ua?' <div id="large-report-notice" class="notice">This report contains more than 25,000 issues. Filters and pagination render only the visible rows to keep the report responsive.</div>':""}
35
44
  <nav class="report-nav" aria-label="Report sections"><button type="button" data-view="overview" aria-selected="true">Overview</button><button type="button" data-view="metrics" aria-selected="false">Site Metrics</button><button type="button" data-view="pages" aria-selected="false">Pages</button><button type="button" data-view="issues" aria-selected="false">Issues</button></nav>
36
45
  <div id="overview-view" data-report-view="overview">
37
- <section class="cards"><div class="card"><strong id="pages-count">${n.length.toLocaleString("en-US")}${P?` / ${P.toLocaleString("en-US")}`:""}</strong><span id="pages-label">Pages checked</span></div><div class="card error"><strong id="errors-count">${d.error}</strong><span id="errors-label">Errors</span></div><div class="card warning"><strong id="warnings-count">${d.warning}</strong><span id="warnings-label">Warnings</span></div><div class="card info"><strong id="info-count">${d.info}</strong><span id="info-label">Info</span></div><div class="card"><strong id="affected-count">${p.toLocaleString("en-US")}</strong><span id="affected-label">Affected pages</span></div></section>
46
+ <section class="cards"><div class="card"><strong id="pages-count">${n.length.toLocaleString("en-US")}${Zn?` / ${Zn.toLocaleString("en-US")}`:""}</strong><span id="pages-label">Pages checked</span></div><div class="card error"><strong id="errors-count">${m.error}</strong><span id="errors-label">Errors</span></div><div class="card warning"><strong id="warnings-count">${m.warning}</strong><span id="warnings-label">Warnings</span></div><div class="card info"><strong id="info-count">${m.info}</strong><span id="info-label">Info</span></div><div class="card"><strong id="affected-count">${y.toLocaleString("en-US")}</strong><span id="affected-label">Affected pages</span></div></section>
38
47
  <section class="analytics" aria-labelledby="priority-title"><div class="analytics-header"><div><h2 id="priority-title">What to fix first</h2><div id="priority-hint" class="meta">Ordered by risk and affected pages, without an opaque score.</div></div></div><div id="priority-list" class="priority-list"></div></section>
39
48
  ${e.history&&e.history.points.length>0?' <section id="history-panel" class="analytics" aria-labelledby="history-title"><div class="analytics-header"><div><h2 id="history-title">Local scan history</h2><div id="history-hint" class="meta">Issue trends from snapshots stored on this device.</div></div></div><div class="trend-layout"><div><svg id="history-chart" class="trend-chart" viewBox="0 0 760 240" role="img"></svg><div class="trend-legend"><span><i class="chart-key error"></i><span id="history-errors-label">Errors</span></span><span><i class="chart-key warning"></i><span id="history-warnings-label">Warnings</span></span><span><i class="chart-key info"></i><span id="history-info-label">Info</span></span></div></div><div id="history-summary" class="trend-summary"></div></div></section>':""}
40
49
  <section id="analytics" class="analytics" aria-labelledby="analytics-title">
@@ -42,14 +51,14 @@ ${e.history&&e.history.points.length>0?' <section id="history-panel" class="ana
42
51
  <div class="analytics-grid">
43
52
  <article class="chart-card"><div class="chart-title"><h3 id="severity-chart-title">By severity</h3></div><div id="severity-chart"></div></article>
44
53
  <article class="chart-card"><div class="chart-title"><h3 id="rules-chart-title">Most frequent checks</h3><span id="rules-chart-summary"></span></div><div id="rules-chart" class="chart-list"></div></article>
45
- <article class="chart-card"><div class="chart-title"><h3 id="distribution-chart-title">${B?"By lifecycle":"By owner"}</h3></div><div id="distribution-chart" class="chart-list"></div></article>
54
+ <article class="chart-card"><div class="chart-title"><h3 id="distribution-chart-title">${Fr?"By lifecycle":"By owner"}</h3></div><div id="distribution-chart" class="chart-list"></div></article>
46
55
  <article class="chart-card"><div class="chart-title"><h3 id="templates-chart-title">Affected page templates</h3><span id="templates-chart-summary"></span></div><div id="templates-chart" class="chart-list"></div></article>
47
56
  </div>
48
57
  </section>
49
58
  </div>
50
59
  <section id="metrics-view" data-report-view="metrics" class="analytics" hidden><div class="analytics-header"><div><h2 id="metrics-title">Site Metrics</h2><div id="metrics-hint" class="meta">Local crawl measurements and clearly labelled external estimates.</div></div></div><div id="metrics-hero" class="metrics-hero"></div><div id="metrics-insights" class="metrics-insights"></div><div id="metrics-groups" class="metrics-groups"></div></section>
51
60
  <section id="pages-view" data-report-view="pages" class="panel" hidden>
52
- ${_?'<div id="pages-partial" class="notice pages-limited">Only pages completed by this incomplete crawl are listed.</div>':""}
61
+ ${R?'<div id="pages-partial" class="notice pages-limited">Only pages completed by this incomplete crawl are listed.</div>':""}
53
62
  <div class="pages-toolbar"><label><span id="page-search-label" class="meta">URL or title</span><input id="page-search" type="search" placeholder="Search pages"></label><label><span id="page-status-label" class="meta">HTTP status</span><select id="page-status"><option value="">All statuses</option><option value="2">2xx</option><option value="3">3xx</option><option value="4">4xx</option><option value="5">5xx</option><option value="none">No response</option></select></label><label><span id="page-indexability-label" class="meta">Indexability</span><select id="page-indexability"><option value="">All states</option><option value="allowed">No restriction detected</option><option value="noindex">Noindex</option><option value="blocked">Blocked by robots</option><option value="redirect">Redirect</option><option value="error">HTTP / network error</option><option value="non-html">Non-HTML</option><option value="unknown">Unknown</option></select></label><label><span id="page-issues-label" class="meta">Issues</span><select id="page-issues"><option value="">All pages</option><option value="yes">With issues</option><option value="no">Without issues</option><option value="error">With errors</option><option value="warning">With warnings</option><option value="info">With info</option></select></label><label><span id="page-rows-label" class="meta">Rows</span><select id="page-page-size"><option value="50">50 per page</option><option value="100" selected>100 per page</option><option value="250">250 per page</option></select></label></div>
54
63
  <div class="filters"><label><span id="page-architecture-label">Site architecture</span><select id="page-architecture"><option value="">All pages</option><option value="zero">No observed inlinks</option><option value="one">One observed inlink</option><option value="broken">Links to errors</option><option value="redirects">Links through redirects</option><option value="deep">Depth 4+</option></select></label><label><span id="page-template-label">URL template</span><input id="page-template-filter" list="page-template-options" placeholder="Filter by template"><datalist id="page-template-options"></datalist></label><span id="page-architecture-notice" class="meta">Only links from checked pages are counted. Unchecked targets are not classified as broken.</span></div>
55
64
  ${e.pageDetails?"":'<div id="pages-limited" class="notice pages-limited">This report contains URLs only. Detailed page fields are unavailable.</div>'}
@@ -61,12 +70,14 @@ ${e.history&&e.history.points.length>0?' <section id="history-panel" class="ana
61
70
  <div class="filters"><label><span id="search-label" class="meta">URL or text</span><input id="search" type="search" placeholder="URL, check, or message"></label><label><span id="severity-label" class="meta">Severity</span><select id="severity"><option value="">All severities</option><option value="error">Error</option><option value="warning">Warning</option><option value="info">Info</option></select></label><label><span id="rule-label" class="meta">Check</span><select id="rule"><option value="">All checks</option></select></label><label><span id="template-label" class="meta">Page template</span><select id="template"><option value="">All templates</option></select></label><label><span id="owner-label" class="meta">Owner</span><select id="owner"><option value="">All owners</option><option value="seo">SEO</option><option value="content">Content</option><option value="developer">Developer</option></select></label><label><span id="rows-label" class="meta">Rows</span><select id="page-size"><option value="100">100 per page</option><option value="250">250 per page</option><option value="500">500 per page</option></select></label></div>
62
71
  <div class="guide"><span><strong id="guide-error">Errors</strong> <span id="guide-error-text">need attention first.</span> <strong id="guide-warning">Warnings</strong> <span id="guide-warning-text">are important improvements.</span> <strong id="guide-info">Info</strong> <span id="guide-info-text">is useful context.</span></span><span id="score-note">No opaque SEO score is used.</span></div>
63
72
  <div class="results-bar"><span id="result-count" aria-live="polite"></span><div class="actions"><button id="export-csv" type="button">Export CSV</button><div id="pagination" class="pagination"><button id="previous" type="button">Previous</button><span id="page-info"></span><button id="next" type="button">Next</button></div></div></div>
64
- <div id="table-wrap" class="table-wrap"><table><thead><tr><th id="th-severity">Severity</th><th id="th-lifecycle">Lifecycle</th><th id="th-rule-owner">Check / owner</th><th id="th-page">Page</th><th id="th-finding">${B?"Change":"What was found"}</th>${B?'<th id="th-before">Before</th>':""}<th id="th-evidence">Evidence / after</th><th id="th-remediation">Remediation</th><th id="th-fingerprint">Fingerprint</th></tr></thead><tbody id="issues"></tbody></table></div>
73
+ <div id="table-wrap" class="table-wrap"><table><thead><tr><th id="th-severity">Severity</th><th id="th-lifecycle">Lifecycle</th><th id="th-rule-owner">Check / owner</th><th id="th-page">Page</th><th id="th-finding">${Fr?"Change":"What was found"}</th>${Fr?'<th id="th-before">Before</th>':""}<th id="th-evidence">Evidence / after</th><th id="th-remediation">Remediation</th><th id="th-fingerprint">Fingerprint</th></tr></thead><tbody id="issues"></tbody></table></div>
65
74
  <div id="empty" class="empty" hidden><strong id="empty-title">No SEO issues found</strong><span id="empty-message">The scanned pages passed all current checks.</span><button id="clear-filters" type="button">Clear filters</button></div>
66
75
  </section><div id="page-dialog-backdrop" class="page-dialog-backdrop" hidden></div><aside id="page-dialog" class="page-dialog" role="dialog" aria-modal="true" aria-labelledby="page-dialog-title" hidden><div class="page-dialog-head"><h2 id="page-dialog-title">Page details</h2><button id="page-dialog-close" type="button" aria-label="Close">\xD7</button></div><div id="page-dialog-content"></div></aside><footer id="report-footer">Generated locally. No report data was uploaded.</footer>
67
76
  </main>
68
77
  <script>
69
- const report=${Na};
78
+ const report=${Ha};
79
+ const issueString=(id)=>report.issueStrings[id];
80
+ report.issues=report.issueRows.map((row)=>{const issue={fingerprint:row[0],ruleId:issueString(row[1]),rule:issueString(row[2]),severity:issueString(row[3]),scope:issueString(row[4]),url:row[5],message:row[6],evidence:row[7],owner:issueString(row[8]),remediation:issueString(row[9]),documentationUrl:issueString(row[10]),lifecycle:issueString(row[13]),template:issueString(row[14]),localized:{en:{rule:issueString(row[15]),message:row[16],remediation:issueString(row[17])},uk:{rule:issueString(row[18]),message:row[19],remediation:issueString(row[20])}}};if(row[21]&1)issue.before=row[11];if(row[21]&2)issue.after=row[12];return issue});delete report.issueRows;delete report.issueStrings;
70
81
  const byId=(id)=>document.querySelector("#"+id); const generatedAt=byId("generated-at"); const language=byId("language"); const search=byId("search"); const severity=byId("severity"); const rule=byId("rule"); const template=byId("template"); const owner=byId("owner"); const pageSize=byId("page-size"); const tbody=byId("issues"); const empty=byId("empty"); const emptyTitle=byId("empty-title"); const emptyMessage=byId("empty-message"); const clearFilters=byId("clear-filters"); const tableWrap=byId("table-wrap"); const resultCount=byId("result-count"); const pagination=byId("pagination"); const previous=byId("previous"); const next=byId("next"); const pageInfo=byId("page-info"); const severityChart=byId("severity-chart"); const rulesChart=byId("rules-chart"); const distributionChart=byId("distribution-chart"); const templatesChart=byId("templates-chart"); const historyChart=byId("history-chart"); const historySummary=byId("history-summary"); const metricsHero=byId("metrics-hero"); const metricsInsights=byId("metrics-insights"); const metricsGroups=byId("metrics-groups"); const priorityList=byId("priority-list"); const pageSearch=byId("page-search");const pageStatus=byId("page-status");const pageIndexability=byId("page-indexability");const pageIssues=byId("page-issues");const pagePageSize=byId("page-page-size");const pagesBody=byId("pages-body");const pagesEmpty=byId("pages-empty");const pagesTableWrap=byId("pages-table-wrap");const pageResultCount=byId("page-result-count");const pagePagination=byId("page-pagination");const pagePrevious=byId("page-previous");const pageNext=byId("page-next");const pagePageInfo=byId("page-page-info");const pageDialog=byId("page-dialog");const pageDialogBackdrop=byId("page-dialog-backdrop");const pageDialogContent=byId("page-dialog-content");const pageDialogClose=byId("page-dialog-close"); let locale="en"; let currentPage=1; let activeTab=""; let exactIssueUrl=null;let lastFiltered=[];let pagesCurrentPage=1;let pagesFiltered=[];let pageSort={key:"url",direction:1};let pageReturnFocus=null;
71
82
  const generatedDate=new Date(generatedAt.dateTime); const copy=()=>report.copy[locale]; const issueText=(issue)=>issue.localized[locale]||issue.localized.en; const number=(value)=>Number(value).toLocaleString(locale==="uk"?"uk-UA":"en-US");
72
83
  const safeHttpUrl=(value)=>{try{const url=new URL(value);return url.protocol==="http:"||url.protocol==="https:"?url.href:null}catch{return null}};
@@ -165,17 +176,20 @@ ${e.history&&e.history.points.length>0?' <section id="history-panel" class="ana
165
176
  }
166
177
  let searchTimer;search.addEventListener("input",()=>{exactIssueUrl=null;clearTimeout(searchTimer);searchTimer=setTimeout(()=>{currentPage=1;render()},150)});for(const element of [severity,rule,template,owner,pageSize]){element.addEventListener("change",()=>{currentPage=1;render()})}for(const tab of document.querySelectorAll("[data-tab]")){tab.addEventListener("click",()=>{exactIssueUrl=null;setActiveTab(tab.dataset.tab);currentPage=1;render()})}for(const button of document.querySelectorAll("[data-view]")){button.addEventListener("click",()=>{for(const view of document.querySelectorAll("[data-report-view]"))view.hidden=view.dataset.reportView!==button.dataset.view;for(const candidate of document.querySelectorAll("[data-view]"))candidate.setAttribute("aria-selected",String(candidate===button));if(button.dataset.view==="pages")renderPages()})}previous.addEventListener("click",()=>{currentPage-=1;render()});next.addEventListener("click",()=>{currentPage+=1;render()});clearFilters.addEventListener("click",()=>{exactIssueUrl=null;search.value="";severity.value="";rule.value="";template.value="";owner.value="";setActiveTab("");currentPage=1;render()});language.addEventListener("change",()=>{locale=language.value;applyLocale()});let pageSearchTimer;pageSearch.addEventListener("input",()=>{clearTimeout(pageSearchTimer);pageSearchTimer=setTimeout(()=>{pagesCurrentPage=1;renderPages()},200)});for(const element of [pageStatus,pageIndexability,pageIssues,pagePageSize,byId("page-architecture")])element.addEventListener("change",()=>{pagesCurrentPage=1;renderPages()});for(const button of document.querySelectorAll("[data-page-sort]"))button.addEventListener("click",()=>{const key=button.dataset.pageSort;if(pageSort.key===key)pageSort.direction*=-1;else pageSort={key,direction:1};pagesCurrentPage=1;renderPages()});pagePrevious.addEventListener("click",()=>{pagesCurrentPage-=1;renderPages()});pageNext.addEventListener("click",()=>{pagesCurrentPage+=1;renderPages()});pageDialogClose.addEventListener("click",closePage);pageDialogBackdrop.addEventListener("click",closePage);document.addEventListener("keydown",(event)=>{if(pageDialog.hidden)return;if(event.key==="Escape"){event.preventDefault();closePage();return}if(event.key==="Tab"){const focusable=[...pageDialog.querySelectorAll('button:not([disabled]),a[href],input,select')];if(!focusable.length)return;const first=focusable[0],last=focusable.at(-1);if(event.shiftKey&&document.activeElement===first){event.preventDefault();last.focus()}else if(!event.shiftKey&&document.activeElement===last){event.preventDefault();first.focus()}}});
167
178
  byId("export-pages-csv").addEventListener("click",()=>{const text=pageCopy();const quote=(value)=>'"'+csvSafe(value).replaceAll('"','""')+'"';const headers=["URL",text.status,text.indexability,text.title,"URL template",text.depth,architectureCopy().incoming,architectureCopy().broken,architectureCopy().redirects,text.errors,text.warnings,text.info];const rows=pagesFiltered.map((page)=>[pageUrl(page.u),page.s??text.noResponse,text.states[page.ix],page.t??"",report.pageExplorer.templates[page.template]?.label??"",page.depth??"",page.incoming?.length??"",page.broken?.length??"",page.redirects?.length??"",page.counts.error,page.counts.warning,page.counts.info]);const csv=[headers,...rows].map((row)=>row.map(quote).join(",")).join("\\n");const link=document.createElement("a");link.href=URL.createObjectURL(new Blob(["\\uFEFF",csv],{type:"text/csv;charset=utf-8"}));link.download="seo-crawl-audit-pages-"+locale+".csv";link.click();URL.revokeObjectURL(link.href)});
168
- byId("export-csv").addEventListener("click",()=>{const text=copy();const quote=(value)=>'"'+csvSafe(typeof value==="object"?JSON.stringify(value):value).replaceAll('"','""')+'"';const headers=[text.table.severity,text.table.lifecycle,text.table.ruleOwner,text.table.page,report.mode==="check"?text.table.change:text.table.finding,text.table.before,text.table.evidence,text.table.remediation,text.table.fingerprint];const rows=lastFiltered.map((item)=>{const localized=issueText(item);return [text.severities[item.severity],text.lifecycle[item.lifecycle]||item.lifecycle,localized.rule+" \xB7 "+text.owners[item.owner],item.url,localized.message,valueText(item.before),valueText(item.after!==undefined?item.after:item.evidence),localized.remediation,item.fingerprint]});const csv=[headers,...rows].map((row)=>row.map(quote).join(",")).join("\\n");const link=document.createElement("a");link.href=URL.createObjectURL(new Blob(["\\uFEFF",csv],{type:"text/csv;charset=utf-8"}));link.download="seo-crawl-audit-"+locale+".csv";link.click();URL.revokeObjectURL(link.href)});applyLocale();
169
- </script></body></html>`}function iu(e){return e.reduce((t,r)=>(t[r.severity]+=1,t),{error:0,warning:0,info:0})}function Lt(e){if(e.length===0)return null;let r=[...new Map(e.map(c=>[`${c.generatedAt}|${c.configurationHash}|${c.pages.length}`,c])).values()].sort((c,l)=>c.generatedAt.localeCompare(l.generatedAt)),n=r.at(-1).siteUrl,s=r.filter(c=>c.siteUrl===n),a=s.map((c,l)=>{let o=_e(c),d=iu(o),p=l>0?s[l-1]:void 0,m=p?Ut(p,c):null;return{generatedAt:c.generatedAt,siteUrl:c.siteUrl,pages:c.pages.length,affectedPages:new Set(o.map(f=>f.url)).size,errors:d.error,warnings:d.warning,info:d.info,newIssues:m?.newIssues.length??0,resolvedIssues:m?.resolvedIssues.length??0,sitemapUrls:c.sitemap?.urls.length??0,maxDepth:c.pages.reduce((f,g)=>Math.max(f,g.depth),0),partial:c.partial||c.truncated}});return{siteUrl:n,points:a}}function W(e,t,r,n,s="count",a){return{id:e,label:t,value:r,unit:s,source:{id:"crawl",label:"SEO Crawl Audit"},observedAt:n,confidence:"high",status:"available",...a?{detail:a}:{}}}function Oi(e,t,r,n,s){return{id:e,label:t,value:null,unit:"count",source:r,observedAt:n,confidence:"high",status:"not-connected",...s?{detail:s}:{}}}function au(e,t,r,n,s){return{id:e,label:t,value:r,unit:"count",source:{id:"crawl-estimate",label:"SEO Crawl Audit"},observedAt:n,confidence:"low",status:"estimate",...s?{detail:s}:{}}}function Di(e){return[e.robots,e.xRobotsTag].some(t=>/(^|[\s,])noindex($|[\s,])/i.test(t??""))}function wn(e,t){if(Array.isArray(e))return e.reduce((a,c)=>a+wn(c,t),0);if(!e||typeof e!="object")return 0;let r=e,n=r["@type"];return(Array.isArray(n)?n.filter(a=>a===t).length:n===t?1:0)+Object.entries(r).filter(([a])=>a!=="@type").reduce((a,[,c])=>a+wn(c,t),0)}function br(e,t,r){return e.filter(n=>n.status!==null&&n.status>=t&&n.status<=r).length}function ze(e){let t=e.pages,r=e.generatedAt,n=t.filter(f=>/(?:text\/html|application\/xhtml\+xml)/i.test(f.contentType??"")),s=t.filter(Di),a=n.filter(f=>!f.error&&!f.blockedByRobots&&f.status!==null&&f.status>=200&&f.status<300&&!Di(f)),c=e.sitemap?.urls.length??0,l=c>t.length&&t.length>0?Math.min(c,Math.round(a.length/t.length*c)):a.length,o=new Set(t.flatMap(f=>f.images.map(g=>g.src).filter(g=>!!g))),d=t.reduce((f,g)=>f+g.jsonLd.reduce((y,w)=>y+(w.valid?wn(w.value,"Product"):0),0),0),p=t.reduce((f,g)=>f+g.responseBytes,0),m=t.length>0?Math.round(e.statistics.durationMs/t.length):0;return{schemaVersion:1,siteUrl:e.siteUrl,observedAt:r,metrics:[W("pages.sitemap",{en:"Sitemap URLs",uk:"URL \u0443 sitemap"},c,r),W("pages.checked",{en:"Pages checked",uk:"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u043E \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A"},t.length,r),W("pages.html",{en:"HTML pages",uk:"HTML-\u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438"},n.length,r),W("pages.indexable",{en:"Crawlable HTML pages",uk:"\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u0456 HTML-\u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438"},a.length,r,"count",{en:"Successful HTML pages without a detected noindex directive. This is not the Google index count.",uk:"\u0423\u0441\u043F\u0456\u0448\u043D\u0456 HTML-\u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \u0431\u0435\u0437 \u0432\u0438\u044F\u0432\u043B\u0435\u043D\u043E\u0457 \u0434\u0438\u0440\u0435\u043A\u0442\u0438\u0432\u0438 noindex. \u0426\u0435 \u043D\u0435 \u043A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A \u0432 \u0456\u043D\u0434\u0435\u043A\u0441\u0456 Google."}),au("search.indexable-estimate",{en:"Estimated indexable pages",uk:"\u041E\u0440\u0456\u0454\u043D\u0442\u043E\u0432\u043D\u0430 \u043A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0456\u043D\u0434\u0435\u043A\u0441\u043E\u0432\u0430\u043D\u0438\u0445 \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A"},l,r,{en:"Estimated from the crawlable-page ratio and sitemap size. This is not the number indexed by Google.",uk:"\u041E\u0446\u0456\u043D\u043A\u0430 \u0437\u0430 \u0447\u0430\u0441\u0442\u043A\u043E\u044E \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0445 \u0434\u043B\u044F \u0456\u043D\u0434\u0435\u043A\u0441\u0430\u0446\u0456\u0457 \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A \u0456 \u0440\u043E\u0437\u043C\u0456\u0440\u043E\u043C sitemap. \u0426\u0435 \u043D\u0435 \u043A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A \u0432 \u0456\u043D\u0434\u0435\u043A\u0441\u0456 Google."}),Oi("search.google-indexed",{en:"Indexed by Google",uk:"\u041F\u0440\u043E\u0456\u043D\u0434\u0435\u043A\u0441\u043E\u0432\u0430\u043D\u043E Google"},{id:"google-search-console",label:"Google Search Console"},r,{en:"Connect an authoritative provider to confirm this value; crawlability is not proof of indexing.",uk:"\u041F\u0456\u0434\u043A\u043B\u044E\u0447\u0456\u0442\u044C \u0430\u0432\u0442\u043E\u0440\u0438\u0442\u0435\u0442\u043D\u0435 \u0434\u0436\u0435\u0440\u0435\u043B\u043E \u0434\u043B\u044F \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0436\u0435\u043D\u043D\u044F; \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0456\u0441\u0442\u044C \u0434\u043B\u044F crawl \u043D\u0435 \u0434\u043E\u0432\u043E\u0434\u0438\u0442\u044C \u0456\u043D\u0434\u0435\u043A\u0441\u0430\u0446\u0456\u044E."}),Oi("search.bing-indexed",{en:"Indexed by Bing",uk:"\u041F\u0440\u043E\u0456\u043D\u0434\u0435\u043A\u0441\u043E\u0432\u0430\u043D\u043E Bing"},{id:"bing-webmaster",label:"Bing Webmaster Tools"},r,{en:"Connect an authoritative provider to confirm this value.",uk:"\u041F\u0456\u0434\u043A\u043B\u044E\u0447\u0456\u0442\u044C \u0430\u0432\u0442\u043E\u0440\u0438\u0442\u0435\u0442\u043D\u0435 \u0434\u0436\u0435\u0440\u0435\u043B\u043E \u0434\u043B\u044F \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0436\u0435\u043D\u043D\u044F \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F."}),W("pages.noindex",{en:"Noindex pages",uk:"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0438 noindex"},s.length,r),W("pages.robots-blocked",{en:"Blocked by robots.txt",uk:"\u0417\u0430\u0431\u043B\u043E\u043A\u043E\u0432\u0430\u043D\u043E robots.txt"},t.filter(f=>f.blockedByRobots).length,r),W("assets.images",{en:"Unique images",uk:"\u0423\u043D\u0456\u043A\u0430\u043B\u044C\u043D\u0456 \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F"},o.size,r),W("commerce.products",{en:"Product entities",uk:"\u0422\u043E\u0432\u0430\u0440\u0438 Product"},d,r),W("links.internal",{en:"Internal links",uk:"\u0412\u043D\u0443\u0442\u0440\u0456\u0448\u043D\u0456 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F"},e.linkGraph.internalEdges,r),W("links.external",{en:"External links",uk:"\u0417\u043E\u0432\u043D\u0456\u0448\u043D\u0456 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F"},e.linkGraph.externalEdges,r),W("crawl.max-depth",{en:"Maximum crawl depth",uk:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430 \u0433\u043B\u0438\u0431\u0438\u043D\u0430"},Math.max(0,...t.map(f=>f.depth)),r),W("crawl.transfer",{en:"HTML transferred",uk:"\u041F\u0435\u0440\u0435\u0434\u0430\u043D\u043E HTML"},p,r,"bytes"),W("crawl.average-time",{en:"Average crawl time per page",uk:"\u0421\u0435\u0440\u0435\u0434\u043D\u0456\u0439 \u0447\u0430\u0441 \u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443"},m,r,"milliseconds"),W("status.2xx",{en:"HTTP 2xx",uk:"HTTP 2xx"},br(t,200,299),r),W("status.3xx",{en:"HTTP 3xx",uk:"HTTP 3xx"},br(t,300,399),r),W("status.4xx",{en:"HTTP 4xx",uk:"HTTP 4xx"},br(t,400,499),r),W("status.5xx",{en:"HTTP 5xx",uk:"HTTP 5xx"},br(t,500,599),r)]}}function et(e,t={}){return _e(e,t)}function Cr(e,t,r={}){return Ut(e,t,r)}import{access as uu,mkdir as Au,readFile as _n,readdir as pu,rename as ki,writeFile as vi}from"node:fs/promises";import{randomUUID as Pi}from"node:crypto";import{join as Mi,resolve as yr}from"node:path";var ou=Object.freeze({"search.google-site-estimate":["google-site-search","google-site-search-manual"],"domain.registration-date":["rdap"],"domain.expiration-date":["rdap"],"domain.registrar":["rdap"]});function cu(e){return ou[e.id]?.includes(e.source.id)===!0}function Ir(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${t} must be an object`);return e}function Te(e,t){if(typeof e!="string"||e==="")throw new Error(`${t} must be a non-empty string`);return e}function Bi(e,t){let r=Ir(e,t);return{en:Te(r.en,`${t}.en`),uk:Te(r.uk,`${t}.uk`)}}function lu(e,t){let r=Ir(e,`metrics[${t}]`),n=["count","bytes","milliseconds","date","text"],s=["high","medium","low"],a=["available","estimate","unavailable","not-connected","error"],c=Ir(r.source,`metrics[${t}].source`);if(!n.includes(String(r.unit)))throw new Error(`metrics[${t}].unit is invalid`);if(!s.includes(String(r.confidence)))throw new Error(`metrics[${t}].confidence is invalid`);if(!a.includes(String(r.status)))throw new Error(`metrics[${t}].status is invalid`);if(r.value!==null&&typeof r.value!="string"&&typeof r.value!="number")throw new Error(`metrics[${t}].value must be a number, string, or null`);let l=Te(r.observedAt,`metrics[${t}].observedAt`);if(Number.isNaN(Date.parse(l)))throw new Error(`metrics[${t}].observedAt must be an ISO date`);let o=c.url===void 0?void 0:Te(c.url,`metrics[${t}].source.url`);return{id:Te(r.id,`metrics[${t}].id`),label:Bi(r.label,`metrics[${t}].label`),value:r.value,unit:r.unit,source:{id:Te(c.id,`metrics[${t}].source.id`),label:Te(c.label,`metrics[${t}].source.label`),...o?{url:o}:{}},observedAt:l,confidence:r.confidence,status:r.status,...r.stale===!0?{stale:!0}:{},...r.detail===void 0?{}:{detail:Bi(r.detail,`metrics[${t}].detail`)}}}function xn(e){let t=Ir(e,"site metrics state");if(t.schemaVersion!==1)throw new Error("site metrics state schemaVersion must be 1");let r=Te(t.siteUrl,"site metrics state.siteUrl"),n=new URL(r);if(!["http:","https:"].includes(n.protocol))throw new Error("site metrics state.siteUrl must use HTTP(S)");let s=Te(t.updatedAt,"site metrics state.updatedAt");if(Number.isNaN(Date.parse(s)))throw new Error("site metrics state.updatedAt must be an ISO date");if(!Array.isArray(t.metrics))throw new Error("site metrics state.metrics must be an array");return{schemaVersion:1,siteUrl:n.href,updatedAt:s,metrics:t.metrics.map(lu)}}function du(e){return e.source.id==="rdap"?6048e5:e.id==="search.google-site-estimate"?2592e6:null}function Nn(e,t=new Date){let r=t.getTime();return{...e,metrics:e.metrics.map(n=>{let s=du(n);return s!==null&&r-Date.parse(n.observedAt)>s?{...n,stale:!0}:{...n,stale:!1}})}}function Sn(e,t){if(!t||new URL(e.siteUrl).origin!==new URL(t.siteUrl).origin)return e;let r=t.metrics.filter(cu),n=new Map(r.map(a=>[a.id,a])),s=new Set(e.metrics.map(a=>a.id));return{...e,observedAt:t.updatedAt>e.observedAt?t.updatedAt:e.observedAt,metrics:[...e.metrics.map(a=>a.source.id==="crawl"?a:n.get(a.id)??a),...r.filter(a=>!s.has(a.id))]}}async function wr(e=process.cwd()){let t=yr(e,Fr);try{return await uu(t),t}catch{return null}}async function Ot(e){let t=e?yr(e):await wr();if(!t)return{};try{return Hr(JSON.parse(await _n(t,"utf8")))}catch(r){throw new Error(`invalid config ${t}: ${r instanceof Error?r.message:String(r)}`,{cause:r})}}async function xr(e,t){let r=`${e}.${process.pid}.${Pi()}.tmp`;await vi(r,`${JSON.stringify(t,null,2)}
170
- `,"utf8"),await ki(r,e)}async function ye(e){try{return Ne(JSON.parse(await _n(e,"utf8")))}catch(t){throw t instanceof SyntaxError?new Error(`invalid snapshot JSON: ${e}`,{cause:t}):t instanceof Error&&t.message.startsWith("unsupported")?new Error(`unsupported or invalid baseline: ${e}`,{cause:t}):t}}async function Ui(e,t,r=new Date){let n;try{n=JSON.parse(await _n(e,"utf8"))}catch(a){if(a&&typeof a=="object"&&"code"in a&&a.code==="ENOENT")return null;throw a instanceof SyntaxError?new Error(`invalid site metrics JSON: ${e}`,{cause:a}):a}let s=Nn(xn(n),r);return t&&new URL(s.siteUrl).origin!==new URL(t).origin?null:s}async function Rn(e,t,r={}){let n=ze(e);try{return Sn(n,await Ui(t,e.siteUrl,r.now))}catch(s){return r.onWarning?.(`Could not load site metrics from ${t}: ${s instanceof Error?s.message:String(s)}`),n}}async function Nr(e,t,r={}){let n=`${e}.${process.pid}.${Pi()}.tmp`;await vi(n,Li(t,r),"utf8"),await ki(n,e)}function hu(e){return`${e.generatedAt.replaceAll(":","-").replaceAll(".","-")}-${e.configurationHash.slice(0,8)}.snapshot.json`}async function Ln(e,t){let r=yr(e);await Au(r,{recursive:!0});let n=Mi(r,hu(t));return await xr(n,t),n}async function Dt(e,t){let r=yr(e),n;try{n=await pu(r)}catch(a){if(a&&typeof a=="object"&&"code"in a&&a.code==="ENOENT")return[];throw a}let s=[];for(let a of n.filter(c=>c.endsWith(".snapshot.json")).sort()){let c=Mi(r,a),l=await ye(c);(!t||l.siteUrl===t)&&s.push({path:c,snapshot:l})}return s.sort((a,c)=>a.snapshot.generatedAt.localeCompare(c.snapshot.generatedAt)||a.path.localeCompare(c.path))}import{appendFile as mu,rename as gu,stat as Hi,unlink as fu,writeFile as Eu}from"node:fs/promises";import{createReadStream as Qi}from"node:fs";import{createInterface as Yi}from"node:readline";function Tu(e){return{type:"seo-audit-checkpoint",schemaVersion:2,identity:e}}function Fi(e,t){if(!e||typeof e!="object")return!1;let r=e;if(r.type!=="seo-audit-checkpoint")return!1;if(r.schemaVersion===2)return JSON.stringify(r.identity)===JSON.stringify(t);if(r.schemaVersion!==1)return!1;let n=r.source;return n?.startUrl===t.siteUrl&&(n.sitemap??null)===t.sitemapUrl&&(n.includeQuery??!1)===t.includeQuery&&(n.respectRobots??!0)===t.respectRobots}var Sr=class{path;#e=null;#t=Promise.resolve();constructor(t){this.path=t}async#r(t){let r=`${this.path}.${process.pid}.${Date.now()}.tmp`;await Eu(r,`${JSON.stringify(Tu(t))}
171
- `,"utf8"),await gu(r,this.path),this.#e=t}async load(t){await this.flush();try{await Hi(this.path)}catch(d){if(d.code!=="ENOENT")throw d;return await this.#r(t),null}let r=Qi(this.path,{encoding:"utf8"}),n=Yi({input:r,crlfDelay:1/0}),s=new Map,a,c=0,l=null,o=(d,p)=>{try{let m=JSON.parse(d);m.type==="page"&&typeof m.page?.url=="string"&&s.set(m.page.url,m.page)}catch(m){throw new Error(`corrupt checkpoint record ${p} in ${this.path}`,{cause:m})}};for await(let d of n){if(c+=1,c===1){try{a=JSON.parse(d)}catch{a=null}if(!Fi(a,t))return n.close(),r.destroy(),await this.#r(t),null;this.#e=t;continue}d.trim()&&(l&&o(l.line,l.lineNumber),l={line:d,lineNumber:c})}if(c===0||!Fi(a,t))return await this.#r(t),null;if(l)try{o(l.line,l.lineNumber)}catch{}return{identity:t,pages:[...s.values()]}}append(t,r){return this.#t=this.#t.then(async()=>{(!this.#e||JSON.stringify(this.#e)!==JSON.stringify(t))&&await this.#r(t),await mu(this.path,`${JSON.stringify({type:"page",page:r})}
172
- `,"utf8")}),this.#t}async clear(t){if(await this.flush(),!(this.#e&&JSON.stringify(this.#e)!==JSON.stringify(t))){try{await fu(this.path)}catch(r){if(r.code!=="ENOENT")throw r}this.#e=null}}async clearCurrent(){this.#e&&await this.clear(this.#e)}async flush(){await this.#t}};function On(e){return new Sr(e)}async function Dn(e){let t;try{t=(await Hi(e)).mtime.toISOString()}catch(f){if(f.code==="ENOENT")return{path:e,status:"missing",schemaVersion:null,siteUrl:null,completedPages:0,updatedAt:null,resumable:!1,message:null};throw f}let r=Qi(e,{encoding:"utf8"}),n=Yi({input:r,crlfDelay:1/0}),s,a=new Set,c=0,l=null,o=(f,g)=>{try{let y=JSON.parse(f);y.type==="page"&&typeof y.page?.url=="string"&&a.add(y.page.url)}catch{return{path:e,status:"corrupt",schemaVersion:null,siteUrl:null,completedPages:a.size,updatedAt:t,resumable:!1,message:`checkpoint record ${g} is corrupt`}}return null};for await(let f of n){if(c+=1,c===1){try{s=JSON.parse(f)}catch{s=null}continue}if(f.trim()){if(l){let g=o(l.line,l.lineNumber);if(g)return g}l={line:f,lineNumber:c}}}if(!s)return{path:e,status:"corrupt",schemaVersion:null,siteUrl:null,completedPages:0,updatedAt:t,resumable:!1,message:"checkpoint header is not valid JSON"};if(typeof s!="object"||s.type!=="seo-audit-checkpoint")return{path:e,status:"incompatible",schemaVersion:null,siteUrl:null,completedPages:0,updatedAt:t,resumable:!1,message:"file is not an SEO Crawl Audit checkpoint"};let d=s,p=d.schemaVersion===1||d.schemaVersion===2?d.schemaVersion:null;if(p===null)return{path:e,status:"incompatible",schemaVersion:null,siteUrl:null,completedPages:0,updatedAt:t,resumable:!1,message:"checkpoint schema is not supported"};let m=p===2?d.identity?.siteUrl??null:d.source?.startUrl??null;if(l)try{let f=JSON.parse(l.line);f.type==="page"&&typeof f.page?.url=="string"&&a.add(f.page.url)}catch{}return{path:e,status:"ready",schemaVersion:p,siteUrl:m,completedPages:a.size,updatedAt:t,resumable:a.size>0,message:null}}import{extname as bu}from"node:path";function _r(e){let t=bu(e);return t?`${e.slice(0,-t.length)}.checkpoint.ndjson`:`${e}.checkpoint.ndjson`}import{parseArgs as Cu}from"node:util";function Gi(e){return Cu({args:e,allowPositionals:!0,strict:!0,options:{baseline:{type:"string"},config:{type:"string"},output:{type:"string"},report:{type:"string"},"no-report":{type:"boolean"},"no-cache":{type:"boolean"},pages:{type:"string"},all:{type:"boolean"},"max-pages":{type:"string"},concurrency:{type:"string"},delay:{type:"string"},timeout:{type:"string"},sitemap:{type:"string"},"no-sitemap":{type:"boolean"},"include-query":{type:"boolean"},"ignore-robots":{type:"boolean"},strict:{type:"boolean"},json:{type:"boolean"},help:{type:"boolean"},version:{type:"boolean"},production:{type:"string"},preview:{type:"string"},"headers-env":{type:"string"},"production-headers-env":{type:"string"},"preview-headers-env":{type:"string"},"history-dir":{type:"string"},"no-history":{type:"boolean"},from:{type:"string"},to:{type:"string"},directory:{type:"string"},workflow:{type:"string"},yes:{type:"boolean"},force:{type:"boolean"},offline:{type:"boolean"},platform:{type:"string"},port:{type:"string"},"no-open":{type:"boolean"},render:{type:"string"}}})}function Wi(e,t){return{...e,__config:t}}function Rr(e,t,r,n=!1){if(e===void 0)return r;let s=Number.parseInt(e,10);if(!Number.isInteger(s)||s<(n?0:1))throw new Error(`${t} must be a ${n?"non-negative":"positive"} integer`);return s}function Bt(e,t,r){if(t.sitemap&&t["no-sitemap"])throw new Error("--sitemap and --no-sitemap cannot be used together");let n=r?.config??{},s=t.__config??{},a={url:e,schemaVersion:1,maxPages:Rr(t.pages??t["max-pages"],t.pages!==void 0?"--pages":"--max-pages",s.maxPages??n.maxPages??100),concurrency:Rr(t.concurrency,"--concurrency",s.concurrency??n.concurrency??5),delay:Rr(t.delay,"--delay",s.delay??n.delay??100,!0),timeout:Rr(t.timeout,"--timeout",s.timeout??n.timeout??1e4)};return t["no-sitemap"]?a.sitemap="none":t.sitemap&&(a.sitemap=t.sitemap),t["include-query"]!==void 0&&(a.includeQuery=t["include-query"]),t["ignore-robots"]!==void 0&&(a.respectRobots=!t["ignore-robots"]),fe(a,s,n)}import{dirname as qi,join as zi,resolve as se}from"node:path";import{Buffer as Iu}from"node:buffer";async function yu(e){if(e)return e;try{return await import("playwright")}catch(t){throw new Error("Playwright is not installed. Run: npm install --save-dev playwright && npx playwright install chromium",{cause:t})}}function wu(e){let t=0,r=[];return async function(){return t>=e&&await new Promise(s=>r.push(s)),t+=1,()=>{t-=1,r.shift()?.()}}}async function xu(e){let t=[],r=e.request().redirectedFrom();for(;r;){let n=await r.response(),s=await n?.headers();t.unshift({url:r.url(),status:n?.status()??0,location:s?.location??null}),r=r.redirectedFrom()}return t}async function Ki(e={}){let t=e.concurrency??2;if(!Number.isInteger(t)||t<1)throw new Error("Playwright renderer concurrency must be a positive integer");let r=await yu(e.playwright),n;try{n=await r.chromium.launch({headless:e.headless??!0})}catch(o){throw new Error("Chromium could not start. Run: npx playwright install chromium",{cause:o})}let s=null,a=null,c=wu(t),l=!1;return{id:"playwright-chromium-v1",async render(o){if(l)throw new Error("Playwright renderer is closed");let d=await c(),p=null;try{if(o.signal?.throwIfAborted(),!s)s=await n.newContext({userAgent:o.userAgent,acceptDownloads:!1}),a=o.userAgent;else if(a!==o.userAgent)throw new Error("A Playwright renderer cannot mix user agents in one browser context");p=await s.newPage(),await p.route("**/*",async f=>{f.request().resourceType()==="media"?await f.abort():await f.continue()}),p.on("download",f=>{f.cancel()});let m=()=>{p?.close()};o.signal?.addEventListener("abort",m,{once:!0});try{let f=await p.goto(o.url,{waitUntil:"domcontentloaded",timeout:o.timeout});if(!f)throw new Error(`Playwright did not receive a document response for ${o.url}`);if((e.networkIdleTimeout??2e3)>0)try{await p.waitForLoadState("networkidle",{timeout:Math.min(o.timeout,e.networkIdleTimeout??2e3)})}catch(I){if(o.signal?.aborted)throw I}o.signal?.throwIfAborted();let g=await p.content(),y=Iu.byteLength(g);if(y>o.maxResponseBytes)throw new Error(`rendered HTML exceeds ${o.maxResponseBytes} bytes`);let w=await f.headers();return{finalUrl:p.url(),status:f.status(),headers:w,html:g,responseBytes:y,redirectChain:await xu(f)}}finally{o.signal?.removeEventListener("abort",m)}}finally{await p?.close().catch(()=>{}),d()}},async close(){l||(l=!0,await s?.close(),await n.close())}}}var Nu=process.stdout.isTTY&&!process.env.NO_COLOR;function Lr(e,t){return Nu?`\x1B[${e}m${t}\x1B[0m`:t}function kt(e){return e.reduce((t,r)=>(t[r.severity]+=1,t),{error:0,warning:0,info:0})}function Or(e){if(e.length===0){console.log(Lr("32","\u2713 No SEO regressions detected."));return}for(let r of e){let n=r.severity==="error"?Lr("31","\u2716 error"):r.severity==="warning"?Lr("33","\u26A0 warning"):Lr("34","\u2139 info");console.log(`${n} ${r.rule} ${r.url}`),console.log(` ${r.message}`),(r.before!==void 0||r.after!==void 0)&&(console.log(` before: ${JSON.stringify(r.before)}`),console.log(` after: ${JSON.stringify(r.after)}`))}let t=kt(e);console.log(`
173
- ${t.error} error(s), ${t.warning} warning(s) detected.`)}import{createHash as Su}from"node:crypto";function Dr(e){if(!e)return{};let t=process.env[e];if(!t)throw new Error(`environment variable ${e} is empty or missing`);let r;try{r=JSON.parse(t)}catch(s){throw new Error(`environment variable ${e} must contain a JSON object`,{cause:s})}if(!r||typeof r!="object"||Array.isArray(r))throw new Error(`environment variable ${e} must contain a JSON object`);let n={};for(let[s,a]of Object.entries(r)){if(typeof a!="string")throw new Error(`header ${s} in ${e} must be a string`);try{new Headers({[s]:a})}catch(c){throw new Error(`header ${s} in ${e} is invalid`,{cause:c})}n[s]=a}return n}function Bn(e,t,r=globalThis.fetch){if(Object.keys(e).length===0)return r;let n=new URL(t).origin;return(s,a)=>{let c=s instanceof Request?s.url:String(s);if(new URL(c).origin!==n)return r(s,a);let l=new Headers(s instanceof Request?s.headers:void 0);new Headers(a?.headers).forEach((o,d)=>l.set(d,o));for(let[o,d]of Object.entries(e))l.set(o,d);return r(s,{...a,headers:l})}}function vt(e,t,r=globalThis.fetch){return Bn(Dr(e),t,r)}function kn(e,t){if(!t)return e;let r=Su("sha256").update(t).digest("hex").slice(0,12);return e.endsWith(".ndjson")?`${e.slice(0,-7)}.auth-${r}.ndjson`:`${e}.auth-${r}`}import{createInterface as _u}from"node:readline/promises";function ji(e,t){let r=e.trim().toLowerCase();if(r===""||r==="1")return{mode:"fixed",target:Math.min(100,t)};if(r==="2"||r==="all")return{mode:"all",target:t};if(r==="3"||r==="step")return{mode:"step",target:t};let n=Number.parseInt(r,10);return/^\d+$/.test(r)&&n>0?{mode:"fixed",target:Math.min(n,t)}:null}async function Me(e){let t=_u({input:process.stdin,output:process.stdout});try{return(await t.question(e)).trim()}finally{t.close()}}async function Vi(e){for(;;){console.log(`
174
- Sitemap contains ${e.toLocaleString("en-US")} page(s).`),console.log("How many pages should be scanned?"),console.log(" 1) First 100"),console.log(` 2) All ${e.toLocaleString("en-US")}`),console.log(" 3) 100 at a time with confirmation"),console.log(" Or enter an exact number, for example 500.");let t=ji(await Me("Choose [1]: "),e);if(!t){console.log("Enter 1, 2, 3, all, step, or a positive number.");continue}if(t.mode==="all"){let r=await Me(`This will request ${e.toLocaleString("en-US")} pages. Continue? [y/N] `);if(!["y","yes"].includes(r.toLowerCase()))continue}return t}}function Ji(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;let r=Math.floor(t/60),n=t%60;return`${r}m ${n}s`}function Ru(e,t,r){let n=t===0?1:Math.min(e/t,1),s=(n*100).toFixed(n<.1?1:0),a=Math.round(n*20),c=`[${"\u2588".repeat(a)}${"\u2591".repeat(20-a)}] ${s}% \xB7 ${e.toLocaleString("en-US")} / ${t.toLocaleString("en-US")} pages`;if(!r)return c;let l=r.elapsedMs/6e4,o=l>0?e/l:0,d=Math.max(0,t-e),p=o>0?d/o*6e4:null,m=[`elapsed ${Ji(r.elapsedMs)}`,`${o.toFixed(o<10?1:0)} pages/min`,`ETA ${p===null?"\u2014":Ji(p)}`,`retries ${r.retries}`,`errors ${r.errors}`];if(r.currentUrl){let f=r.currentUrl.length>60?`${r.currentUrl.slice(0,57)}\u2026`:r.currentUrl;m.push(f)}return`${c} \xB7 ${m.join(" \xB7 ")}`}function Pt(e,t,r=!1,n=process.stdout,s){let a=Ru(e,t,s),c=n===process.stderr?console.error:console.log;n.isTTY&&!r?(n.write(`\r${a}`),e>=t&&n.write(`
175
- `)):(n.isTTY||e>=t||e%1e3===0)&&c(a)}function Xi(e,t,r,n=process.stdout){let s=e.sitemap?`found, ${(e.candidateCount??e.sitemap.urls.length).toLocaleString("en-US")} URL(s)`:"not found; internal links",a=["Scan plan",` Target: ${e.startUrl}`,` Sitemap: ${s}`,` Robots: ${e.config.respectRobots?"respected":"ignored"}`,` Limit: ${t.target.toLocaleString("en-US")} page(s)`,` Concurrency: ${e.config.concurrency}`,` Delay: ${e.config.delay} ms`,` Checkpoint: ${r?"enabled":"disabled"}`];t.target>1e3&&a.push(" Notice: this is a large scan and may take a long time."),ce(a.join(`
176
- `),n)}function Zi(e,t,r=process.stdout,n=Date.now){let s=n(),a=0,c=0,l=new Set;return{retry(){a+=1},progress(o,d){(o.error||o.status!==null&&o.status>=400)&&!l.has(o.url)&&(l.add(o.url),c+=1);let p=(()=>{try{return new URL(o.url).pathname||"/"}catch{return o.url}})();Pt(d,e,t,r,{elapsedMs:n()-s,retries:a,errors:c,currentUrl:p})}}}function ce(e,t=process.stdout){t.isTTY&&t.write("\r\x1B[2K"),t===process.stderr?console.error(e):console.log(e)}function vn(e){return e.reduce((t,r)=>((r.error||r.blockedByRobots||(r.status??500)>=400)&&(t.unavailable+=1),r.title||(t.missingTitle+=1),r.description||(t.missingDescription+=1),r.canonical||(t.missingCanonical+=1),r.h1Count===0&&(t.missingH1+=1),/(^|[\s,])noindex($|[\s,])/i.test(r.robots??"")&&(t.noindex+=1),t),{unavailable:0,missingTitle:0,missingDescription:0,missingCanonical:0,missingH1:0,noindex:0})}function Pn(e){console.log(`Current health: ${e.unavailable} unavailable, ${e.missingTitle} missing title, ${e.missingDescription} missing description, ${e.missingCanonical} missing canonical, ${e.missingH1} missing H1, ${e.noindex} noindex.`)}var Mt=".seo-audit.json",ea="seo-audit-report.html",$i=".seo-audit/history";function kr(e){if(e.render!==void 0&&e.render!=="http"&&e.render!=="playwright")throw new Error("--render must be http or playwright")}async function Br(e){if(kr(e),(e.render??"http")!=="http")return Ki()}async function ta(e,t){let r=se(e??t.output??Mt),n=kn(_r(r),t["headers-env"]),s=await Dn(n),a=null;try{a=await ye(r)}catch(l){if(l.code!=="ENOENT")throw l}let c={command:"status",snapshot:a?{path:r,siteUrl:a.siteUrl,pages:a.pages.length,generatedAt:a.generatedAt,partial:a.partial,truncated:a.truncated}:null,checkpoint:s};return t.json?(console.log(JSON.stringify(c,null,2)),0):(console.log("SEO Crawl Audit status"),a?(console.log(` Snapshot: ${r}`),console.log(` Site: ${a.siteUrl}`),console.log(` Last completed result: ${a.pages.length.toLocaleString("en-US")} page(s) at ${a.generatedAt}`)):console.log(` Snapshot: not found (${r})`),s.status==="missing"?console.log(` Checkpoint: not found (${n})`):(console.log(` Checkpoint: ${s.status} (${n})`),s.siteUrl&&console.log(` Checkpoint site: ${s.siteUrl}`),console.log(` Saved pages: ${s.completedPages.toLocaleString("en-US")}`),s.updatedAt&&console.log(` Updated: ${s.updatedAt}`),s.message&&console.log(` Detail: ${s.message}`),s.resumable&&console.log(" Resume: run the same scan command again to reuse saved pages.")),0)}function ra(e,t=!1){return t||!e["no-report"]&&(e.report!==void 0||process.stdin.isTTY&&process.stdout.isTTY&&!e.json)}async function tt(e,t,r=!1){if(!ra(e,r))return null;let n=se(e.report??ea);return await Nr(n,t),n}function ae(e,t,r){if(!e)return e;try{let n=new URL(t),s=new URL(r),a=new URL(e);if(a.origin!==n.origin)return e;a.protocol=s.protocol,a.host=s.host;let c=n.pathname.replace(/\/$/,""),l=s.pathname.replace(/\/$/,"");return c&&a.pathname.startsWith(c)&&(a.pathname=`${l}${a.pathname.slice(c.length)}`||"/"),a.href}catch{return e}}function Lu(e,t,r){let n=s=>s.map(a=>ae(a,t,r)??a).sort();return{...e,url:ae(e.url,t,r)??e.url,finalUrl:ae(e.finalUrl,t,r),canonical:ae(e.canonical,t,r),canonicalRaw:ae(e.canonicalRaw,t,r),links:n(e.links),internalLinks:n(e.internalLinks),externalLinks:n(e.externalLinks),images:e.images.map(s=>({...s,src:ae(s.src,t,r)})),hreflang:e.hreflang.map(s=>({...s,url:ae(s.url,t,r)})),redirectChain:e.redirectChain.map(s=>({...s,url:ae(s.url,t,r)??s.url,location:ae(s.location,t,r)}))}}function Ou(e,t,r=et(e),n={}){return{mode:t,startUrl:e.siteUrl,generatedAt:e.generatedAt,pages:e.pages,pageDetails:e.pages,issues:r,partial:e.partial,complete:!e.partial&&!e.truncated,engineVersion:e.engineVersion,ruleSetVersion:e.ruleSetVersion,branding:e.config.report,siteMetrics:ze(e),...n}}async function Ue(e,t,r,n,s={}){let a=zi(qi(n),".seo-audit.metrics.json"),c=await Rn(e,a,{onWarning:l=>console.error(`Warning: ${l}`)});return Ou(e,t,r,{...s,siteMetrics:c})}function na(e,t){return e["history-dir"]?se(e["history-dir"]):t?zi(qi(t),$i):se($i)}async function Mn(e,t,r,n){if(e["no-history"])return;let s=na(e,r);n&&!t.partial&&await Ln(s,t);let a=await Dt(s,t.siteUrl);return Lt(a.map(c=>c.snapshot))??void 0}async function Du(e,t,r,n,s){let a=Bt(e,t,r),c=t.json?process.stderr:process.stdout,l=d=>{d.type==="plan-start"&&ce(`Preparing crawl plan for ${d.url}`,c),d.type==="robots"&&ce(d.robots.error?`robots.txt check failed: ${d.robots.error}`:`robots.txt checked (${d.robots.status??"unknown status"})`,c),d.type==="sitemap"&&ce(d.sitemap?`Sitemap loaded: ${d.candidateCount??d.sitemap.urls.length} candidate URL(s)`:"No sitemap found; internal-link discovery will be used",c)},o=await de(a,{signal:s,fetch:n,onEvent:l});if(o.mode==="links"&&a.sitemap==="auto"&&process.stdin.isTTY&&process.stdout.isTTY&&!t.json){let d=await Me("Sitemap was not found. Enter its full URL, or press Enter to crawl internal links: ");d&&(a={...a,sitemap:d},o=await de(a,{signal:s,fetch:n,onEvent:l}))}return o}function sa(e,t){if(e.candidateCount===null){if(t.all)throw new Error("--all requires a sitemap");return{mode:"fixed",target:e.config.maxPages}}return t.all?{mode:"all",target:e.candidateCount}:t.pages!==void 0||t["max-pages"]!==void 0?{mode:"fixed",target:Math.min(e.config.maxPages,e.candidateCount)}:process.stdin.isTTY&&process.stdout.isTTY&&!t.json?Vi(e.candidateCount):{mode:"fixed",target:Math.min(100,e.candidateCount)}}async function ia(e,t,r){if(!e)throw new Error("scan requires a URL");kr(t);let n=se(t.output??Mt),s=vt(t["headers-env"],e),a=await Du(e,t,void 0,s,r),c=await sa(a,t),l=kn(_r(n),t["headers-env"]),o=t["no-cache"]?void 0:On(l),d=t.json?process.stderr:process.stdout;Xi(a,c,!!o,d);let p=new Map,m=ra(t)?se(t.report??ea):null,f=0,g=-1,y=async(Y=!1)=>{if(!m||p.size===0)return;let F=Date.now();if(!Y&&p.size-g<100&&F-f<5e3)return;let P=Ne({schemaVersion:1,startUrl:a.startUrl,robots:a.robots,sitemap:a.sitemap,options:{...a.config,maxPages:c.target},pages:[...p.values()],partial:!0,truncated:!0});await Nr(m,await Ue(P,"scan",et(P),n,{partial:!0,targetPages:c.target})),f=F,g=p.size},w=c.mode==="step"?Math.min(100,c.target):c.target,I=null,_=!1,x=await Br(t);try{for(;w>0;){let Y=Zi(w,c.mode==="step",d);I=await qe(a,{signal:r,fetch:s,renderer:x,limit:w,checkpointStore:o,retainCheckpoint:!!o,async onBatch(B){for(let q of B)p.set(q.url,q);await y()},onEvent(B){B.type==="scan-start"&&ce(`Starting crawl: up to ${B.total.toLocaleString("en-US")} page(s)`,t.json?process.stderr:process.stdout),B.type==="resume"&&ce(`Resuming from checkpoint: ${B.completed.toLocaleString("en-US")} page(s) already available`,t.json?process.stderr:process.stdout),B.type==="retry"&&(Y.retry(),ce(`Retrying request (attempt ${B.attempt}) after ${B.delayMs} ms`,d)),B.type==="progress"&&Y.progress(B.page,B.completed),B.type==="cancelled"&&ce(`Scan interrupted after ${B.completed.toLocaleString("en-US")} page(s)`,t.json?process.stderr:process.stdout)}});for(let B of I.pages)p.set(B.url,B);if(await y(!0),I.partial||c.mode!=="step"||w>=c.target)break;Pn(vn(I.pages));let F=Math.min(100,c.target-w),P=await Me(`Check the next ${F} page(s)? [y/N] `);if(!["y","yes"].includes(P.toLowerCase())){_=!0;break}w=Math.min(c.target,w+100)}}finally{await x?.close?.()}if(!I)throw new Error("scan did not produce a result");await xr(n,I.snapshot);let L=I.partial||_,D=await Mn(t,I.snapshot,n,!L),S=L?m:await tt(t,await Ue(I.snapshot,"scan",et(I.snapshot),n,D?{history:D}:{}));L||await o?.clearCurrent();let v=vn(I.snapshot.pages);return t.json?console.log(JSON.stringify({command:"scan",pages:I.snapshot.pages.length,truncated:I.snapshot.truncated,health:v,output:n,report:S,checkpoint:L&&o?l:null},null,2)):(console.log(`Crawled ${I.snapshot.pages.length} page(s)${I.snapshot.truncated?" (limit reached)":""}.`),I.snapshot.sitemap&&console.log(`Loaded ${I.snapshot.sitemap.sitemapCount} sitemap file(s) from ${I.snapshot.sitemap.url}.`),Pn(v),console.log(`Baseline saved to ${n}`),S&&console.log(`HTML report saved to ${S}`),L&&o&&console.log(`Resume checkpoint saved to ${l}`)),I.partial?130:0}async function aa(e,t,r){kr(t);let n=se(t.baseline??Mt),s=await ye(n),a=e??s.siteUrl,c=vt(t["headers-env"],a),l=await de({...Bt(a,t,s),sitemap:"none"},{signal:r,fetch:c}),o=s.pages.map(S=>({baselineUrl:S.url,targetUrl:ae(S.url,s.siteUrl,l.startUrl)??S.url})),d=[...new Set(o.map(({targetUrl:S})=>S))],p={...l,mode:"sitemap",candidateUrls:d,candidateCount:d.length,sitemap:{url:`${l.origin}/.seo-audit-targets`,urls:d,sitemapCount:0,truncated:!1,error:null}},m=await Br(t),f;try{f=await qe(p,{signal:r,fetch:c,renderer:m,limit:d.length,onEvent(S){S.type==="scan-start"&&ce(`Starting regression check: ${S.total.toLocaleString("en-US")} page(s)`,t.json?process.stderr:process.stdout),S.type==="progress"&&Pt(S.completed,d.length,!1,t.json?process.stderr:process.stdout)}})}finally{await m?.close?.()}let g=new Map(f.pages.map(S=>[S.url,S])),y=o.flatMap(({baselineUrl:S,targetUrl:v})=>{let Y=g.get(v);return Y?[{...Y,url:S,finalUrl:ae(Y.finalUrl,l.startUrl,s.siteUrl)}]:[]}),w=Ne({...f.snapshot,siteUrl:s.siteUrl,config:{...f.snapshot.config,url:s.siteUrl},sitemap:s.sitemap,pages:y}),I=Cr(s,w,{enabledRules:w.config.enabledRules,severityOverrides:w.config.severityOverrides,suppressions:w.config.suppressions}),_=I.newIssues,x=kt(_),L=await Mn(t,w,n,!f.partial),D=await tt(t,await Ue(w,"check",_,n,{...I,...L?{history:L}:{}}));return t.json?console.log(JSON.stringify({command:"check",baseline:n,pages:w.pages.length,summary:x,issues:_,lifecycle:I,report:D},null,2)):(console.log(`Checked ${w.pages.length} page(s).
177
- `),Or(_),D&&console.log(`HTML report saved to ${D}`)),f.partial?130:x.error>0||I.budgetExceeded.length>0||t.strict&&x.warning>0?1:0}async function oa(e,t){kr(e);let r=e.production,n=e.preview;if(!r||!n)throw new Error("compare requires --production and --preview URLs");let s=vt(e["production-headers-env"],r),a=vt(e["preview-headers-env"],n),c=await de(Bt(r,e),{signal:t,fetch:s}),l=await sa(c,e),o=await Br(e),d;try{d=await qe(c,{signal:t,fetch:s,renderer:o,limit:l.target,onEvent(S){S.type==="scan-start"&&ce(`Starting production crawl: up to ${S.total.toLocaleString("en-US")} page(s)`,e.json?process.stderr:process.stdout),S.type==="progress"&&Pt(S.completed,l.target,!1,e.json?process.stderr:process.stdout)}})}finally{await o?.close?.()}if(d.partial)return 130;let p=await de({...Bt(n,e),sitemap:"none"},{signal:t,fetch:a}),m=d.snapshot.pages.map(S=>ae(S.url,r,n)??S.url),f={...p,mode:"sitemap",candidateUrls:[...new Set(m)].sort(),candidateCount:m.length,sitemap:{url:`${p.origin}/.seo-audit-preview-targets`,urls:[...new Set(m)].sort(),sitemapCount:0,truncated:!1,error:null}},g=await Br(e),y;try{y=await qe(f,{signal:t,fetch:a,renderer:g,limit:m.length,onEvent(S){S.type==="scan-start"&&ce(`Starting preview crawl: ${S.total.toLocaleString("en-US")} page(s)`,e.json?process.stderr:process.stdout),S.type==="progress"&&Pt(S.completed,m.length,!1,e.json?process.stderr:process.stdout)}})}finally{await g?.close?.()}let w=y.snapshot.pages.map(S=>Lu(S,n,r)),I=Ne({...y.snapshot,siteUrl:d.snapshot.siteUrl,startUrl:d.snapshot.siteUrl,config:{...y.snapshot.config,url:d.snapshot.siteUrl},robots:{...y.snapshot.robots,url:ae(y.snapshot.robots.url,n,r)??y.snapshot.robots.url},sitemap:d.snapshot.sitemap,pages:w,partial:y.snapshot.partial}),_=Cr(d.snapshot,I,{enabledRules:I.config.enabledRules,severityOverrides:I.config.severityOverrides,suppressions:I.config.suppressions}),x=_.newIssues,L=kt(x),D=await tt(e,await Ue(I,"check",x,se(Mt),{..._,comparison:{kind:"preview",productionUrl:r,previewUrl:n}}),!0);return e.json?console.log(JSON.stringify({command:"compare",production:r,preview:n,pages:I.pages.length,summary:L,issues:x,lifecycle:_,report:D},null,2)):(console.log(`Compared ${I.pages.length} production page(s) with preview.`),Or(x),D&&console.log(`HTML report saved to ${D}`)),y.partial?130:L.error>0||_.budgetExceeded.length>0||e.strict&&L.warning>0?1:0}async function ca(e,t){let r=se(e??t.baseline??Mt),n=await ye(r),s=await Mn(t,n,r,!1),a=await tt(t,await Ue(n,"scan",et(n),r,s?{history:s}:{}),!0);return t.json?console.log(JSON.stringify({command:"report",baseline:r,pages:n.pages.length,report:a},null,2)):console.log(`HTML report saved to ${a}`),0}async function la(e,t){if(!!t.from!=!!t.to)throw new Error("history comparison requires both --from and --to");let r=na(t);if(t.from&&t.to){let d=await ye(se(t.from)),p=await ye(se(t.to));if(d.siteUrl!==p.siteUrl)throw new Error("history snapshots must belong to the same site URL");let m=await Dt(r,p.siteUrl),f=Lt([...m.map(I=>I.snapshot),d,p]),g=Cr(d,p,{enabledRules:p.config.enabledRules,severityOverrides:p.config.severityOverrides,suppressions:p.config.suppressions}),y=await tt(t,await Ue(p,"check",g.newIssues,se(t.to),{...g,...f?{history:f}:{}}),!0),w=kt(g.newIssues);return t.json?console.log(JSON.stringify({command:"history",from:se(t.from),to:se(t.to),summary:w,lifecycle:g,report:y},null,2)):(console.log(`Compared local snapshots from ${d.generatedAt} to ${p.generatedAt}.`),Or(g.newIssues),y&&console.log(`HTML report saved to ${y}`)),0}let n;if(e)try{n=new URL(e).href}catch{throw new Error("history URL must be an HTTP(S) URL")}let s=await Dt(r,n);if(s.length===0)throw new Error(`no local history snapshots found in ${r}`);if(!n){let d=s.at(-1).snapshot.siteUrl;s=s.filter(p=>p.snapshot.siteUrl===d)}let a=s.at(-1),c=Lt(s.map(d=>d.snapshot)),l=await tt(t,await Ue(a.snapshot,"scan",et(a.snapshot),a.path,c?{history:c}:{}),!0),o=c?.points??[];if(t.json)console.log(JSON.stringify({command:"history",directory:r,snapshots:s.map((d,p)=>({path:d.path,...o[p]})),report:l},null,2));else{console.log(`Local history for ${a.snapshot.siteUrl}:`);for(let[d,p]of s.entries()){let m=o[d];console.log(` ${p.snapshot.generatedAt} ${m?.pages??p.snapshot.pages.length} pages ${m?.errors??0} errors ${m?.warnings??0} warnings ${p.path}`)}l&&console.log(`HTML report saved to ${l}`)}return 0}import{mkdir as Aa,readFile as Bu,writeFile as pa}from"node:fs/promises";import{dirname as ha,isAbsolute as ku,join as Un,resolve as da}from"node:path";var vu="https://raw.githubusercontent.com/MelnixDev/seo-crawl-audit/v0/packages/core/config.schema.json",Pu="seo-audit.config.json",Mu=".github/workflows/seo-audit.yml",Uu=[".seo-audit.checkpoint.ndjson",".seo-audit.metrics.json",".seo-audit/history/","seo-audit-report.html","seo-audit-report.html.json"];function Fu(e){let t;try{t=new URL(e)}catch(r){throw new Error("init URL must be a full HTTP(S) URL",{cause:r})}if(!["http:","https:"].includes(t.protocol))throw new Error("init URL must be a full HTTP(S) URL");return t.hash="",t.href}function Hu(e){let t=(e??"none").trim().toLowerCase(),n={"":"none",none:"none",manual:"manual",scheduled:"scheduled",schedule:"scheduled","pull-request":"pull-request",pull_request:"pull-request",pr:"pull-request"}[t];if(!n)throw new Error("--workflow must be none, manual, scheduled, or pull-request");return n}function Qu(e){return`${JSON.stringify({$schema:vu,url:e,sitemap:"auto",maxPages:100,concurrency:5,delay:100,timeout:1e4,respectRobots:!0,includeQuery:!1,maxRedirects:10,maxResponseBytes:5*1024*1024,enabledRules:null,severityOverrides:{},suppressions:[],regressionBudgets:{error:0},report:{}},null,2)}
178
- `}function Fn(e="",t=""){return` - uses: actions/checkout@v6${t}
179
+ byId("export-csv").addEventListener("click",()=>{const text=copy();const quote=(value)=>'"'+csvSafe(typeof value==="object"?JSON.stringify(value):value).replaceAll('"','""')+'"';const headers=[text.table.severity,text.table.lifecycle,text.table.ruleOwner,text.table.page,report.mode==="check"?text.table.change:text.table.finding,text.table.before,text.table.evidence,text.table.remediation,text.table.fingerprint];const rows=lastFiltered.map((item)=>{const localized=issueText(item);return [text.severities[item.severity],text.lifecycle[item.lifecycle]||item.lifecycle,localized.rule+" \xB7 "+text.owners[item.owner],item.url,localized.message,valueText(item.before),valueText(item.after!==undefined?item.after:item.evidence),localized.remediation,item.fingerprint]});const csv=[headers,...rows].map((row)=>row.map(quote).join(",")).join("\\n");const link=document.createElement("a");link.href=URL.createObjectURL(new Blob(["\\uFEFF",csv],{type:"text/csv;charset=utf-8"}));link.download="seo-crawl-audit-"+locale+".csv";link.click();URL.revokeObjectURL(link.href)});
180
+ for(const button of document.querySelectorAll("[data-comparison-rule]")){button.addEventListener("click",()=>{const sample=report.issues.find((issue)=>issue.ruleId===button.dataset.comparisonRule);if(!sample)return;rule.value=sample.rule;currentPage=1;document.querySelector('[data-view="issues"]').click();render()})}
181
+ for(const button of document.querySelectorAll("[data-comparison-template]")){button.addEventListener("click",()=>{template.value=button.dataset.comparisonTemplate;currentPage=1;document.querySelector('[data-view="issues"]').click();render()})}
182
+ applyLocale();
183
+ </script></body></html>`}function bu(e){return e.reduce((t,r)=>(t[r.severity]+=1,t),{error:0,warning:0,info:0})}function kt(e){if(e.length===0)return null;let r=[...new Map(e.map(c=>[`${c.generatedAt}|${c.configurationHash}|${c.pages.length}`,c])).values()].sort((c,l)=>c.generatedAt.localeCompare(l.generatedAt)),n=r.at(-1).siteUrl,s=r.filter(c=>c.siteUrl===n),a=s.map((c,l)=>{let o=me(c),d=bu(o),p=l>0?s[l-1]:void 0,h=p?Ye(p,c):null;return{generatedAt:c.generatedAt,siteUrl:c.siteUrl,pages:c.pages.length,affectedPages:new Set(o.map(f=>f.url)).size,errors:d.error,warnings:d.warning,info:d.info,newIssues:h?.newIssues.length??0,resolvedIssues:h?.resolvedIssues.length??0,sitemapUrls:c.sitemap?.urls.length??0,maxDepth:c.pages.reduce((f,m)=>Math.max(f,m.depth),0),partial:c.partial||c.truncated}});return{siteUrl:n,points:a}}function Qi(e){return{generatedAt:e.generatedAt,siteUrl:e.siteUrl,pages:e.pages.length,partial:e.partial,truncated:e.truncated,configurationHash:e.configurationHash,engineVersion:e.engineVersion,ruleSetVersion:e.ruleSetVersion}}function Yi(e){let t={error:0,warning:0,info:0};for(let r of e)t[r.severity]+=1;return t}function Bt(){return{new:0,ongoing:0,resolved:0,unchanged:0}}var Cu=new Set(["page-unreachable","http-error","robots-blocked","redirect-loop","long-redirect-chain","status-regression","page-missing","redirect-changed"]),Iu=new Set(["noindex","x-robots-noindex","missing-canonical","invalid-canonical","cross-domain-canonical","canonical-target-error","noindex-in-sitemap","redirect-in-sitemap","missing-title","duplicate-title","title-length","missing-description","duplicate-description","description-length","missing-h1","broken-internal-link","orphan-sitemap-page","crawlable-not-in-sitemap","invalid-hreflang","malformed-json-ld","http-on-https-site","invalid-language","duplicate-content","multiple-h1","missing-open-graph","missing-twitter-metadata","image-missing-alt","low-word-count","new-noindex","title-removed","title-changed","description-removed","canonical-removed","canonical-changed","h1-removed"]);function yu(e,t,r,n){if(e.scope==="site")return t.partial||t.truncated||r.partial||r.truncated?"incomplete-site":null;let s=n.get(e.url);return s?s.blockedByRobots?"robots-blocked":s.error||s.status===null||s.status>=400?"request-failed":Cu.has(e.ruleId)?null:s.status>=300||!s.contentType||!/(?:text\/html|application\/xhtml\+xml)/i.test(s.contentType)?"html-unavailable":Iu.has(e.ruleId)?null:"unknown-evidence":"not-checked"}function Gi(e,t){let r=new Map;for(let{lifecycle:n,issue:s}of e){let a=t(s),c=r.get(a)??{counts:Bt(),pages:new Set};c.counts[n]+=1,s.scope==="page"&&c.pages.add(s.url),r.set(a,c)}return[...r].map(([n,s])=>({id:n,counts:s.counts,affectedPages:s.pages.size})).sort((n,s)=>n.id.localeCompare(s.id))}function _n(e,t,r){if(e.siteUrl!==t.siteUrl)throw new Error("local history snapshots must have the same site URL");let n=t.config,s=x=>({...x,config:{...x.config,enabledRules:n.enabledRules,severityOverrides:n.severityOverrides,suppressions:n.suppressions,regressionBudgets:n.regressionBudgets}}),a=s(e),c=s(t),l={now:r.evaluatedAt},o=me(a,l),d=me(c,l),p=Ye(a,c,l),h=[],f=new Map(t.pages.map(x=>[x.url,x])),m=p.resolvedIssues.filter(x=>{let D=yu(x,e,t,f);return D&&h.push({fingerprint:x.fingerprint,ruleId:x.ruleId,url:x.url,reason:D}),!D}),y={...p,resolvedIssues:m},w=new Set(e.pages.map(x=>x.url)),I=new Set(t.pages.map(x=>x.url)),_=[...w].filter(x=>I.has(x)).length,N=[];(e.partial||e.truncated)&&N.push("incomplete-before"),(t.partial||t.truncated)&&N.push("incomplete-after"),e.configurationHash!==t.configurationHash&&N.push("configuration-changed"),e.config.includeQuery!==t.config.includeQuery&&N.push("url-policy-changed"),e.ruleSetVersion!==t.ruleSetVersion&&N.push("rule-set-changed"),e.generatedAt===t.generatedAt&&N.push("same-timestamp"),(JSON.stringify(e.config.enabledRules)!==JSON.stringify(n.enabledRules)||JSON.stringify(e.config.severityOverrides)!==JSON.stringify(n.severityOverrides)||JSON.stringify(e.config.suppressions)!==JSON.stringify(n.suppressions))&&N.push("evaluation-policy-changed");let L=[...y.newIssues.map(x=>({lifecycle:"new",issue:x})),...y.ongoingIssues.map(x=>({lifecycle:"ongoing",issue:x})),...y.resolvedIssues.map(x=>({lifecycle:"resolved",issue:x})),...y.unchangedIssues.map(x=>({lifecycle:"unchanged",issue:x}))],B=Bt(),R={error:Bt(),warning:Bt(),info:Bt()};for(let x of L)B[x.lifecycle]+=1,R[x.issue.severity][x.lifecycle]+=1;let P=vt([...new Set([...w,...I])]),G=new Map(P.flatMap(x=>x.urls.map(D=>[D,x.origin+x.template])));return{diff:y,summary:{schemaVersion:1,evaluatedAt:r.evaluatedAt,from:Qi(e),to:Qi(t),coverage:{common:_,onlyBefore:w.size-_,onlyAfter:I.size-_,complete:!(e.partial||e.truncated||t.partial||t.truncated)},evaluationPolicy:{source:"after",enabledRules:n.enabledRules?[...n.enabledRules]:null,severityOverrides:{...n.severityOverrides},suppressions:n.suppressions.map(x=>({...x})),regressionBudgets:{...n.regressionBudgets}},warnings:N,beforeFindings:Yi(o),afterFindings:Yi(d),lifecycle:B,lifecycleBySeverity:R,budgetExceeded:y.budgetExceeded,byRule:Gi(L,x=>x.ruleId),byTemplate:Gi(L,x=>x.scope==="site"?"@site":G.get(x.url)??"@unknown"),unverified:h.sort((x,D)=>x.url.localeCompare(D.url)||x.ruleId.localeCompare(D.ruleId))}}}function K(e,t,r,n,s="count",a){return{id:e,label:t,value:r,unit:s,source:{id:"crawl",label:"SEO Crawl Audit"},observedAt:n,confidence:"high",status:"available",...a?{detail:a}:{}}}function Wi(e,t,r,n,s){return{id:e,label:t,value:null,unit:"count",source:r,observedAt:n,confidence:"high",status:"not-connected",...s?{detail:s}:{}}}function wu(e,t,r,n,s){return{id:e,label:t,value:r,unit:"count",source:{id:"crawl-estimate",label:"SEO Crawl Audit"},observedAt:n,confidence:"low",status:"estimate",...s?{detail:s}:{}}}function Ki(e){return[e.robots,e.xRobotsTag].some(t=>/(^|[\s,])noindex($|[\s,])/i.test(t??""))}function Rn(e,t){if(Array.isArray(e))return e.reduce((a,c)=>a+Rn(c,t),0);if(!e||typeof e!="object")return 0;let r=e,n=r["@type"];return(Array.isArray(n)?n.filter(a=>a===t).length:n===t?1:0)+Object.entries(r).filter(([a])=>a!=="@type").reduce((a,[,c])=>a+Rn(c,t),0)}function wr(e,t,r){return e.filter(n=>n.status!==null&&n.status>=t&&n.status<=r).length}function rt(e){let t=e.pages,r=e.generatedAt,n=t.filter(f=>/(?:text\/html|application\/xhtml\+xml)/i.test(f.contentType??"")),s=t.filter(Ki),a=n.filter(f=>!f.error&&!f.blockedByRobots&&f.status!==null&&f.status>=200&&f.status<300&&!Ki(f)),c=e.sitemap?.urls.length??0,l=c>t.length&&t.length>0?Math.min(c,Math.round(a.length/t.length*c)):a.length,o=new Set(t.flatMap(f=>f.images.map(m=>m.src).filter(m=>!!m))),d=t.reduce((f,m)=>f+m.jsonLd.reduce((y,w)=>y+(w.valid?Rn(w.value,"Product"):0),0),0),p=t.reduce((f,m)=>f+m.responseBytes,0),h=t.length>0?Math.round(e.statistics.durationMs/t.length):0;return{schemaVersion:1,siteUrl:e.siteUrl,observedAt:r,metrics:[K("pages.sitemap",{en:"Sitemap URLs",uk:"URL \u0443 sitemap"},c,r),K("pages.checked",{en:"Pages checked",uk:"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u043E \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A"},t.length,r),K("pages.html",{en:"HTML pages",uk:"HTML-\u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438"},n.length,r),K("pages.indexable",{en:"Crawlable HTML pages",uk:"\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u0456 HTML-\u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438"},a.length,r,"count",{en:"Successful HTML pages without a detected noindex directive. This is not the Google index count.",uk:"\u0423\u0441\u043F\u0456\u0448\u043D\u0456 HTML-\u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \u0431\u0435\u0437 \u0432\u0438\u044F\u0432\u043B\u0435\u043D\u043E\u0457 \u0434\u0438\u0440\u0435\u043A\u0442\u0438\u0432\u0438 noindex. \u0426\u0435 \u043D\u0435 \u043A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A \u0432 \u0456\u043D\u0434\u0435\u043A\u0441\u0456 Google."}),wu("search.indexable-estimate",{en:"Estimated indexable pages",uk:"\u041E\u0440\u0456\u0454\u043D\u0442\u043E\u0432\u043D\u0430 \u043A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0456\u043D\u0434\u0435\u043A\u0441\u043E\u0432\u0430\u043D\u0438\u0445 \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A"},l,r,{en:"Estimated from the crawlable-page ratio and sitemap size. This is not the number indexed by Google.",uk:"\u041E\u0446\u0456\u043D\u043A\u0430 \u0437\u0430 \u0447\u0430\u0441\u0442\u043A\u043E\u044E \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0445 \u0434\u043B\u044F \u0456\u043D\u0434\u0435\u043A\u0441\u0430\u0446\u0456\u0457 \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A \u0456 \u0440\u043E\u0437\u043C\u0456\u0440\u043E\u043C sitemap. \u0426\u0435 \u043D\u0435 \u043A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0441\u0442\u043E\u0440\u0456\u043D\u043E\u043A \u0432 \u0456\u043D\u0434\u0435\u043A\u0441\u0456 Google."}),Wi("search.google-indexed",{en:"Indexed by Google",uk:"\u041F\u0440\u043E\u0456\u043D\u0434\u0435\u043A\u0441\u043E\u0432\u0430\u043D\u043E Google"},{id:"google-search-console",label:"Google Search Console"},r,{en:"Connect an authoritative provider to confirm this value; crawlability is not proof of indexing.",uk:"\u041F\u0456\u0434\u043A\u043B\u044E\u0447\u0456\u0442\u044C \u0430\u0432\u0442\u043E\u0440\u0438\u0442\u0435\u0442\u043D\u0435 \u0434\u0436\u0435\u0440\u0435\u043B\u043E \u0434\u043B\u044F \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0436\u0435\u043D\u043D\u044F; \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0456\u0441\u0442\u044C \u0434\u043B\u044F crawl \u043D\u0435 \u0434\u043E\u0432\u043E\u0434\u0438\u0442\u044C \u0456\u043D\u0434\u0435\u043A\u0441\u0430\u0446\u0456\u044E."}),Wi("search.bing-indexed",{en:"Indexed by Bing",uk:"\u041F\u0440\u043E\u0456\u043D\u0434\u0435\u043A\u0441\u043E\u0432\u0430\u043D\u043E Bing"},{id:"bing-webmaster",label:"Bing Webmaster Tools"},r,{en:"Connect an authoritative provider to confirm this value.",uk:"\u041F\u0456\u0434\u043A\u043B\u044E\u0447\u0456\u0442\u044C \u0430\u0432\u0442\u043E\u0440\u0438\u0442\u0435\u0442\u043D\u0435 \u0434\u0436\u0435\u0440\u0435\u043B\u043E \u0434\u043B\u044F \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0436\u0435\u043D\u043D\u044F \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F."}),K("pages.noindex",{en:"Noindex pages",uk:"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0438 noindex"},s.length,r),K("pages.robots-blocked",{en:"Blocked by robots.txt",uk:"\u0417\u0430\u0431\u043B\u043E\u043A\u043E\u0432\u0430\u043D\u043E robots.txt"},t.filter(f=>f.blockedByRobots).length,r),K("assets.images",{en:"Unique images",uk:"\u0423\u043D\u0456\u043A\u0430\u043B\u044C\u043D\u0456 \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F"},o.size,r),K("commerce.products",{en:"Product entities",uk:"\u0422\u043E\u0432\u0430\u0440\u0438 Product"},d,r),K("links.internal",{en:"Internal links",uk:"\u0412\u043D\u0443\u0442\u0440\u0456\u0448\u043D\u0456 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F"},e.linkGraph.internalEdges,r),K("links.external",{en:"External links",uk:"\u0417\u043E\u0432\u043D\u0456\u0448\u043D\u0456 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F"},e.linkGraph.externalEdges,r),K("crawl.max-depth",{en:"Maximum crawl depth",uk:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430 \u0433\u043B\u0438\u0431\u0438\u043D\u0430"},Math.max(0,...t.map(f=>f.depth)),r),K("crawl.transfer",{en:"HTML transferred",uk:"\u041F\u0435\u0440\u0435\u0434\u0430\u043D\u043E HTML"},p,r,"bytes"),K("crawl.average-time",{en:"Average crawl time per page",uk:"\u0421\u0435\u0440\u0435\u0434\u043D\u0456\u0439 \u0447\u0430\u0441 \u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443"},h,r,"milliseconds"),K("status.2xx",{en:"HTTP 2xx",uk:"HTTP 2xx"},wr(t,200,299),r),K("status.3xx",{en:"HTTP 3xx",uk:"HTTP 3xx"},wr(t,300,399),r),K("status.4xx",{en:"HTTP 4xx",uk:"HTTP 4xx"},wr(t,400,499),r),K("status.5xx",{en:"HTTP 5xx",uk:"HTTP 5xx"},wr(t,500,599),r)]}}function nt(e,t={}){return me(e,t)}function Ln(e,t,r={}){return Ye(e,t,r)}import{access as Ru,mkdir as Lu,readFile as kn,readdir as Ou,rename as ji,writeFile as Vi}from"node:fs/promises";import{randomUUID as Bn}from"node:crypto";import{join as $i,resolve as Sr}from"node:path";var xu=Object.freeze({"search.google-site-estimate":["google-site-search","google-site-search-manual"],"domain.registration-date":["rdap"],"domain.expiration-date":["rdap"],"domain.registrar":["rdap"]});function Su(e){return xu[e.id]?.includes(e.source.id)===!0}function xr(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${t} must be an object`);return e}function Ce(e,t){if(typeof e!="string"||e==="")throw new Error(`${t} must be a non-empty string`);return e}function Ji(e,t){let r=xr(e,t);return{en:Ce(r.en,`${t}.en`),uk:Ce(r.uk,`${t}.uk`)}}function Nu(e,t){let r=xr(e,`metrics[${t}]`),n=["count","bytes","milliseconds","date","text"],s=["high","medium","low"],a=["available","estimate","unavailable","not-connected","error"],c=xr(r.source,`metrics[${t}].source`);if(!n.includes(String(r.unit)))throw new Error(`metrics[${t}].unit is invalid`);if(!s.includes(String(r.confidence)))throw new Error(`metrics[${t}].confidence is invalid`);if(!a.includes(String(r.status)))throw new Error(`metrics[${t}].status is invalid`);if(r.value!==null&&typeof r.value!="string"&&typeof r.value!="number")throw new Error(`metrics[${t}].value must be a number, string, or null`);let l=Ce(r.observedAt,`metrics[${t}].observedAt`);if(Number.isNaN(Date.parse(l)))throw new Error(`metrics[${t}].observedAt must be an ISO date`);let o=c.url===void 0?void 0:Ce(c.url,`metrics[${t}].source.url`);return{id:Ce(r.id,`metrics[${t}].id`),label:Ji(r.label,`metrics[${t}].label`),value:r.value,unit:r.unit,source:{id:Ce(c.id,`metrics[${t}].source.id`),label:Ce(c.label,`metrics[${t}].source.label`),...o?{url:o}:{}},observedAt:l,confidence:r.confidence,status:r.status,...r.stale===!0?{stale:!0}:{},...r.detail===void 0?{}:{detail:Ji(r.detail,`metrics[${t}].detail`)}}}function On(e){let t=xr(e,"site metrics state");if(t.schemaVersion!==1)throw new Error("site metrics state schemaVersion must be 1");let r=Ce(t.siteUrl,"site metrics state.siteUrl"),n=new URL(r);if(!["http:","https:"].includes(n.protocol))throw new Error("site metrics state.siteUrl must use HTTP(S)");let s=Ce(t.updatedAt,"site metrics state.updatedAt");if(Number.isNaN(Date.parse(s)))throw new Error("site metrics state.updatedAt must be an ISO date");if(!Array.isArray(t.metrics))throw new Error("site metrics state.metrics must be an array");return{schemaVersion:1,siteUrl:n.href,updatedAt:s,metrics:t.metrics.map(Nu)}}function _u(e){return e.source.id==="rdap"?6048e5:e.id==="search.google-site-estimate"?2592e6:null}function vn(e,t=new Date){let r=t.getTime();return{...e,metrics:e.metrics.map(n=>{let s=_u(n);return s!==null&&r-Date.parse(n.observedAt)>s?{...n,stale:!0}:{...n,stale:!1}})}}function Dn(e,t){if(!t||new URL(e.siteUrl).origin!==new URL(t.siteUrl).origin)return e;let r=t.metrics.filter(Su),n=new Map(r.map(a=>[a.id,a])),s=new Set(e.metrics.map(a=>a.id));return{...e,observedAt:t.updatedAt>e.observedAt?t.updatedAt:e.observedAt,metrics:[...e.metrics.map(a=>a.source.id==="crawl"?a:n.get(a.id)??a),...r.filter(a=>!s.has(a.id))]}}async function Nr(e=process.cwd()){let t=Sr(e,Gr);try{return await Ru(t),t}catch{return null}}async function Pt(e){let t=e?Sr(e):await Nr();if(!t)return{};try{return Wr(JSON.parse(await kn(t,"utf8")))}catch(r){throw new Error(`invalid config ${t}: ${r instanceof Error?r.message:String(r)}`,{cause:r})}}async function _r(e,t){let r=`${e}.${process.pid}.${Bn()}.tmp`;await Vi(r,`${JSON.stringify(t,null,2)}
184
+ `,"utf8"),await ji(r,e)}async function Se(e){try{return ye(JSON.parse(await kn(e,"utf8")))}catch(t){throw t instanceof SyntaxError?new Error(`invalid snapshot JSON: ${e}`,{cause:t}):t instanceof Error&&t.message.startsWith("unsupported")?new Error(`unsupported or invalid baseline: ${e}`,{cause:t}):t}}async function Xi(e,t,r=new Date){let n;try{n=JSON.parse(await kn(e,"utf8"))}catch(a){if(a&&typeof a=="object"&&"code"in a&&a.code==="ENOENT")return null;throw a instanceof SyntaxError?new Error(`invalid site metrics JSON: ${e}`,{cause:a}):a}let s=vn(On(n),r);return t&&new URL(s.siteUrl).origin!==new URL(t).origin?null:s}async function Pn(e,t,r={}){let n=rt(e);try{return Dn(n,await Xi(t,e.siteUrl,r.now))}catch(s){return r.onWarning?.(`Could not load site metrics from ${t}: ${s instanceof Error?s.message:String(s)}`),n}}async function Rr(e,t,r={}){let n=`${e}.${process.pid}.${Bn()}.tmp`;await Vi(n,Hi(t,r),"utf8"),await ji(n,e)}function vu(e){return`${e.generatedAt.replaceAll(":","-").replaceAll(".","-")}-${e.configurationHash.slice(0,8)}-${Bn()}.snapshot.json`}async function Mn(e,t){let r=Sr(e);await Lu(r,{recursive:!0});let n=$i(r,vu(t));return await _r(n,t),n}async function Mt(e,t){let r=Sr(e),n;try{n=await Ou(r)}catch(a){if(a&&typeof a=="object"&&"code"in a&&a.code==="ENOENT")return[];throw a}let s=[];for(let a of n.filter(c=>c.endsWith(".snapshot.json")).sort()){let c=$i(r,a),l=await Se(c);(!t||l.siteUrl===t)&&s.push({path:c,snapshot:l})}return s.sort((a,c)=>a.snapshot.generatedAt.localeCompare(c.snapshot.generatedAt)||a.path.localeCompare(c.path))}import{appendFile as Du,rename as ku,stat as zi,unlink as Bu,writeFile as Pu}from"node:fs/promises";import{createReadStream as qi}from"node:fs";import{createInterface as ea}from"node:readline";function Mu(e){return{type:"seo-audit-checkpoint",schemaVersion:2,identity:e}}function Zi(e,t){if(!e||typeof e!="object")return!1;let r=e;if(r.type!=="seo-audit-checkpoint")return!1;if(r.schemaVersion===2)return JSON.stringify(r.identity)===JSON.stringify(t);if(r.schemaVersion!==1)return!1;let n=r.source;return n?.startUrl===t.siteUrl&&(n.sitemap??null)===t.sitemapUrl&&(n.includeQuery??!1)===t.includeQuery&&(n.respectRobots??!0)===t.respectRobots}var Lr=class{path;#e=null;#t=Promise.resolve();constructor(t){this.path=t}async#r(t){let r=`${this.path}.${process.pid}.${Date.now()}.tmp`;await Pu(r,`${JSON.stringify(Mu(t))}
185
+ `,"utf8"),await ku(r,this.path),this.#e=t}async load(t){await this.flush();try{await zi(this.path)}catch(d){if(d.code!=="ENOENT")throw d;return await this.#r(t),null}let r=qi(this.path,{encoding:"utf8"}),n=ea({input:r,crlfDelay:1/0}),s=new Map,a,c=0,l=null,o=(d,p)=>{try{let h=JSON.parse(d);h.type==="page"&&typeof h.page?.url=="string"&&s.set(h.page.url,h.page)}catch(h){throw new Error(`corrupt checkpoint record ${p} in ${this.path}`,{cause:h})}};for await(let d of n){if(c+=1,c===1){try{a=JSON.parse(d)}catch{a=null}if(!Zi(a,t))return n.close(),r.destroy(),await this.#r(t),null;this.#e=t;continue}d.trim()&&(l&&o(l.line,l.lineNumber),l={line:d,lineNumber:c})}if(c===0||!Zi(a,t))return await this.#r(t),null;if(l)try{o(l.line,l.lineNumber)}catch{}return{identity:t,pages:[...s.values()]}}append(t,r){return this.#t=this.#t.then(async()=>{(!this.#e||JSON.stringify(this.#e)!==JSON.stringify(t))&&await this.#r(t),await Du(this.path,`${JSON.stringify({type:"page",page:r})}
186
+ `,"utf8")}),this.#t}async clear(t){if(await this.flush(),!(this.#e&&JSON.stringify(this.#e)!==JSON.stringify(t))){try{await Bu(this.path)}catch(r){if(r.code!=="ENOENT")throw r}this.#e=null}}async clearCurrent(){this.#e&&await this.clear(this.#e)}async flush(){await this.#t}};function Un(e){return new Lr(e)}async function Fn(e){let t;try{t=(await zi(e)).mtime.toISOString()}catch(f){if(f.code==="ENOENT")return{path:e,status:"missing",schemaVersion:null,siteUrl:null,completedPages:0,updatedAt:null,resumable:!1,message:null};throw f}let r=qi(e,{encoding:"utf8"}),n=ea({input:r,crlfDelay:1/0}),s,a=new Set,c=0,l=null,o=(f,m)=>{try{let y=JSON.parse(f);y.type==="page"&&typeof y.page?.url=="string"&&a.add(y.page.url)}catch{return{path:e,status:"corrupt",schemaVersion:null,siteUrl:null,completedPages:a.size,updatedAt:t,resumable:!1,message:`checkpoint record ${m} is corrupt`}}return null};for await(let f of n){if(c+=1,c===1){try{s=JSON.parse(f)}catch{s=null}continue}if(f.trim()){if(l){let m=o(l.line,l.lineNumber);if(m)return m}l={line:f,lineNumber:c}}}if(!s)return{path:e,status:"corrupt",schemaVersion:null,siteUrl:null,completedPages:0,updatedAt:t,resumable:!1,message:"checkpoint header is not valid JSON"};if(typeof s!="object"||s.type!=="seo-audit-checkpoint")return{path:e,status:"incompatible",schemaVersion:null,siteUrl:null,completedPages:0,updatedAt:t,resumable:!1,message:"file is not an SEO Crawl Audit checkpoint"};let d=s,p=d.schemaVersion===1||d.schemaVersion===2?d.schemaVersion:null;if(p===null)return{path:e,status:"incompatible",schemaVersion:null,siteUrl:null,completedPages:0,updatedAt:t,resumable:!1,message:"checkpoint schema is not supported"};let h=p===2?d.identity?.siteUrl??null:d.source?.startUrl??null;if(l)try{let f=JSON.parse(l.line);f.type==="page"&&typeof f.page?.url=="string"&&a.add(f.page.url)}catch{}return{path:e,status:"ready",schemaVersion:p,siteUrl:h,completedPages:a.size,updatedAt:t,resumable:a.size>0,message:null}}import{extname as Uu}from"node:path";function Or(e){let t=Uu(e);return t?`${e.slice(0,-t.length)}.checkpoint.ndjson`:`${e}.checkpoint.ndjson`}import{parseArgs as Fu}from"node:util";function ta(e){return Fu({args:e,allowPositionals:!0,strict:!0,options:{baseline:{type:"string"},config:{type:"string"},output:{type:"string"},report:{type:"string"},"no-report":{type:"boolean"},"no-cache":{type:"boolean"},pages:{type:"string"},all:{type:"boolean"},"max-pages":{type:"string"},concurrency:{type:"string"},delay:{type:"string"},timeout:{type:"string"},sitemap:{type:"string"},"no-sitemap":{type:"boolean"},"include-query":{type:"boolean"},"ignore-robots":{type:"boolean"},strict:{type:"boolean"},json:{type:"boolean"},help:{type:"boolean"},version:{type:"boolean"},production:{type:"string"},preview:{type:"string"},"headers-env":{type:"string"},"production-headers-env":{type:"string"},"preview-headers-env":{type:"string"},"history-dir":{type:"string"},"no-history":{type:"boolean"},from:{type:"string"},to:{type:"string"},directory:{type:"string"},workflow:{type:"string"},yes:{type:"boolean"},force:{type:"boolean"},offline:{type:"boolean"},platform:{type:"string"},port:{type:"string"},"no-open":{type:"boolean"},render:{type:"string"}}})}function ra(e,t){return{...e,__config:t}}function vr(e,t,r,n=!1){if(e===void 0)return r;let s=Number.parseInt(e,10);if(!Number.isInteger(s)||s<(n?0:1))throw new Error(`${t} must be a ${n?"non-negative":"positive"} integer`);return s}function Ut(e,t,r){if(t.sitemap&&t["no-sitemap"])throw new Error("--sitemap and --no-sitemap cannot be used together");let n=r?.config??{},s=t.__config??{},a={url:e,schemaVersion:1,maxPages:vr(t.pages??t["max-pages"],t.pages!==void 0?"--pages":"--max-pages",s.maxPages??n.maxPages??100),concurrency:vr(t.concurrency,"--concurrency",s.concurrency??n.concurrency??5),delay:vr(t.delay,"--delay",s.delay??n.delay??100,!0),timeout:vr(t.timeout,"--timeout",s.timeout??n.timeout??1e4)};return t["no-sitemap"]?a.sitemap="none":t.sitemap&&(a.sitemap=t.sitemap),t["include-query"]!==void 0&&(a.includeQuery=t["include-query"]),t["ignore-robots"]!==void 0&&(a.respectRobots=!t["ignore-robots"]),Te(a,s,n)}import{dirname as da,join as ua,resolve as ie}from"node:path";import{Buffer as Hu}from"node:buffer";async function Qu(e){if(e)return e;try{return await import("playwright")}catch(t){throw new Error("Playwright is not installed. Run: npm install --save-dev playwright && npx playwright install chromium",{cause:t})}}function Yu(e){let t=0,r=[];return async function(){return t>=e&&await new Promise(s=>r.push(s)),t+=1,()=>{t-=1,r.shift()?.()}}}async function Gu(e){let t=[],r=e.request().redirectedFrom();for(;r;){let n=await r.response(),s=await n?.headers();t.unshift({url:r.url(),status:n?.status()??0,location:s?.location??null}),r=r.redirectedFrom()}return t}async function na(e={}){let t=e.concurrency??2;if(!Number.isInteger(t)||t<1)throw new Error("Playwright renderer concurrency must be a positive integer");let r=await Qu(e.playwright),n;try{n=await r.chromium.launch({headless:e.headless??!0})}catch(o){throw new Error("Chromium could not start. Run: npx playwright install chromium",{cause:o})}let s=null,a=null,c=Yu(t),l=!1;return{id:"playwright-chromium-v1",async render(o){if(l)throw new Error("Playwright renderer is closed");let d=await c(),p=null;try{if(o.signal?.throwIfAborted(),!s)s=await n.newContext({userAgent:o.userAgent,acceptDownloads:!1}),a=o.userAgent;else if(a!==o.userAgent)throw new Error("A Playwright renderer cannot mix user agents in one browser context");p=await s.newPage(),await p.route("**/*",async f=>{f.request().resourceType()==="media"?await f.abort():await f.continue()}),p.on("download",f=>{f.cancel()});let h=()=>{p?.close()};o.signal?.addEventListener("abort",h,{once:!0});try{let f=await p.goto(o.url,{waitUntil:"domcontentloaded",timeout:o.timeout});if(!f)throw new Error(`Playwright did not receive a document response for ${o.url}`);if((e.networkIdleTimeout??2e3)>0)try{await p.waitForLoadState("networkidle",{timeout:Math.min(o.timeout,e.networkIdleTimeout??2e3)})}catch(I){if(o.signal?.aborted)throw I}o.signal?.throwIfAborted();let m=await p.content(),y=Hu.byteLength(m);if(y>o.maxResponseBytes)throw new Error(`rendered HTML exceeds ${o.maxResponseBytes} bytes`);let w=await f.headers();return{finalUrl:p.url(),status:f.status(),headers:w,html:m,responseBytes:y,redirectChain:await Gu(f)}}finally{o.signal?.removeEventListener("abort",h)}}finally{await p?.close().catch(()=>{}),d()}},async close(){l||(l=!0,await s?.close(),await n.close())}}}var Wu=process.stdout.isTTY&&!process.env.NO_COLOR;function Dr(e,t){return Wu?`\x1B[${e}m${t}\x1B[0m`:t}function Ft(e){return e.reduce((t,r)=>(t[r.severity]+=1,t),{error:0,warning:0,info:0})}function kr(e){if(e.length===0){console.log(Dr("32","\u2713 No SEO regressions detected."));return}for(let r of e){let n=r.severity==="error"?Dr("31","\u2716 error"):r.severity==="warning"?Dr("33","\u26A0 warning"):Dr("34","\u2139 info");console.log(`${n} ${r.rule} ${r.url}`),console.log(` ${r.message}`),(r.before!==void 0||r.after!==void 0)&&(console.log(` before: ${JSON.stringify(r.before)}`),console.log(` after: ${JSON.stringify(r.after)}`))}let t=Ft(e);console.log(`
187
+ ${t.error} error(s), ${t.warning} warning(s) detected.`)}import{createHash as Ku}from"node:crypto";function Br(e){if(!e)return{};let t=process.env[e];if(!t)throw new Error(`environment variable ${e} is empty or missing`);let r;try{r=JSON.parse(t)}catch(s){throw new Error(`environment variable ${e} must contain a JSON object`,{cause:s})}if(!r||typeof r!="object"||Array.isArray(r))throw new Error(`environment variable ${e} must contain a JSON object`);let n={};for(let[s,a]of Object.entries(r)){if(typeof a!="string")throw new Error(`header ${s} in ${e} must be a string`);try{new Headers({[s]:a})}catch(c){throw new Error(`header ${s} in ${e} is invalid`,{cause:c})}n[s]=a}return n}function Hn(e,t,r=globalThis.fetch){if(Object.keys(e).length===0)return r;let n=new URL(t).origin;return(s,a)=>{let c=s instanceof Request?s.url:String(s);if(new URL(c).origin!==n)return r(s,a);let l=new Headers(s instanceof Request?s.headers:void 0);new Headers(a?.headers).forEach((o,d)=>l.set(d,o));for(let[o,d]of Object.entries(e))l.set(o,d);return r(s,{...a,headers:l})}}function Ht(e,t,r=globalThis.fetch){return Hn(Br(e),t,r)}function Qn(e,t){if(!t)return e;let r=Ku("sha256").update(t).digest("hex").slice(0,12);return e.endsWith(".ndjson")?`${e.slice(0,-7)}.auth-${r}.ndjson`:`${e}.auth-${r}`}import{createInterface as Ju}from"node:readline/promises";function ia(e,t){let r=e.trim().toLowerCase();if(r===""||r==="1")return{mode:"fixed",target:Math.min(100,t)};if(r==="2"||r==="all")return{mode:"all",target:t};if(r==="3"||r==="step")return{mode:"step",target:t};let n=Number.parseInt(r,10);return/^\d+$/.test(r)&&n>0?{mode:"fixed",target:Math.min(n,t)}:null}async function Fe(e){let t=Ju({input:process.stdin,output:process.stdout});try{return(await t.question(e)).trim()}finally{t.close()}}async function aa(e){for(;;){console.log(`
188
+ Sitemap contains ${e.toLocaleString("en-US")} page(s).`),console.log("How many pages should be scanned?"),console.log(" 1) First 100"),console.log(` 2) All ${e.toLocaleString("en-US")}`),console.log(" 3) 100 at a time with confirmation"),console.log(" Or enter an exact number, for example 500.");let t=ia(await Fe("Choose [1]: "),e);if(!t){console.log("Enter 1, 2, 3, all, step, or a positive number.");continue}if(t.mode==="all"){let r=await Fe(`This will request ${e.toLocaleString("en-US")} pages. Continue? [y/N] `);if(!["y","yes"].includes(r.toLowerCase()))continue}return t}}function sa(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;let r=Math.floor(t/60),n=t%60;return`${r}m ${n}s`}function ju(e,t,r){let n=t===0?1:Math.min(e/t,1),s=(n*100).toFixed(n<.1?1:0),a=Math.round(n*20),c=`[${"\u2588".repeat(a)}${"\u2591".repeat(20-a)}] ${s}% \xB7 ${e.toLocaleString("en-US")} / ${t.toLocaleString("en-US")} pages`;if(!r)return c;let l=r.elapsedMs/6e4,o=l>0?e/l:0,d=Math.max(0,t-e),p=o>0?d/o*6e4:null,h=[`elapsed ${sa(r.elapsedMs)}`,`${o.toFixed(o<10?1:0)} pages/min`,`ETA ${p===null?"\u2014":sa(p)}`,`retries ${r.retries}`,`errors ${r.errors}`];if(r.currentUrl){let f=r.currentUrl.length>60?`${r.currentUrl.slice(0,57)}\u2026`:r.currentUrl;h.push(f)}return`${c} \xB7 ${h.join(" \xB7 ")}`}function Qt(e,t,r=!1,n=process.stdout,s){let a=ju(e,t,s),c=n===process.stderr?console.error:console.log;n.isTTY&&!r?(n.write(`\r${a}`),e>=t&&n.write(`
189
+ `)):(n.isTTY||e>=t||e%1e3===0)&&c(a)}function oa(e,t,r,n=process.stdout){let s=e.sitemap?`found, ${(e.candidateCount??e.sitemap.urls.length).toLocaleString("en-US")} URL(s)`:"not found; internal links",a=["Scan plan",` Target: ${e.startUrl}`,` Sitemap: ${s}`,` Robots: ${e.config.respectRobots?"respected":"ignored"}`,` Limit: ${t.target.toLocaleString("en-US")} page(s)`,` Concurrency: ${e.config.concurrency}`,` Delay: ${e.config.delay} ms`,` Checkpoint: ${r?"enabled":"disabled"}`];t.target>1e3&&a.push(" Notice: this is a large scan and may take a long time."),le(a.join(`
190
+ `),n)}function ca(e,t,r=process.stdout,n=Date.now){let s=n(),a=0,c=0,l=new Set;return{retry(){a+=1},progress(o,d){(o.error||o.status!==null&&o.status>=400)&&!l.has(o.url)&&(l.add(o.url),c+=1);let p=(()=>{try{return new URL(o.url).pathname||"/"}catch{return o.url}})();Qt(d,e,t,r,{elapsedMs:n()-s,retries:a,errors:c,currentUrl:p})}}}function le(e,t=process.stdout){t.isTTY&&t.write("\r\x1B[2K"),t===process.stderr?console.error(e):console.log(e)}function Yn(e){return e.reduce((t,r)=>((r.error||r.blockedByRobots||(r.status??500)>=400)&&(t.unavailable+=1),r.title||(t.missingTitle+=1),r.description||(t.missingDescription+=1),r.canonical||(t.missingCanonical+=1),r.h1Count===0&&(t.missingH1+=1),/(^|[\s,])noindex($|[\s,])/i.test(r.robots??"")&&(t.noindex+=1),t),{unavailable:0,missingTitle:0,missingDescription:0,missingCanonical:0,missingH1:0,noindex:0})}function Gn(e){console.log(`Current health: ${e.unavailable} unavailable, ${e.missingTitle} missing title, ${e.missingDescription} missing description, ${e.missingCanonical} missing canonical, ${e.missingH1} missing H1, ${e.noindex} noindex.`)}var Yt=".seo-audit.json",Aa="seo-audit-report.html",la=".seo-audit/history";function Mr(e){if(e.render!==void 0&&e.render!=="http"&&e.render!=="playwright")throw new Error("--render must be http or playwright")}async function Pr(e){if(Mr(e),(e.render??"http")!=="http")return na()}async function pa(e,t){let r=ie(e??t.output??Yt),n=Qn(Or(r),t["headers-env"]),s=await Fn(n),a=null;try{a=await Se(r)}catch(l){if(l.code!=="ENOENT")throw l}let c={command:"status",snapshot:a?{path:r,siteUrl:a.siteUrl,pages:a.pages.length,generatedAt:a.generatedAt,partial:a.partial,truncated:a.truncated}:null,checkpoint:s};return t.json?(console.log(JSON.stringify(c,null,2)),0):(console.log("SEO Crawl Audit status"),a?(console.log(` Snapshot: ${r}`),console.log(` Site: ${a.siteUrl}`),console.log(` Last completed result: ${a.pages.length.toLocaleString("en-US")} page(s) at ${a.generatedAt}`)):console.log(` Snapshot: not found (${r})`),s.status==="missing"?console.log(` Checkpoint: not found (${n})`):(console.log(` Checkpoint: ${s.status} (${n})`),s.siteUrl&&console.log(` Checkpoint site: ${s.siteUrl}`),console.log(` Saved pages: ${s.completedPages.toLocaleString("en-US")}`),s.updatedAt&&console.log(` Updated: ${s.updatedAt}`),s.message&&console.log(` Detail: ${s.message}`),s.resumable&&console.log(" Resume: run the same scan command again to reuse saved pages.")),0)}function ha(e,t=!1){return t||!e["no-report"]&&(e.report!==void 0||process.stdin.isTTY&&process.stdout.isTTY&&!e.json)}async function st(e,t,r=!1){if(!ha(e,r))return null;let n=ie(e.report??Aa);return await Rr(n,t),n}function oe(e,t,r){if(!e)return e;try{let n=new URL(t),s=new URL(r),a=new URL(e);if(a.origin!==n.origin)return e;a.protocol=s.protocol,a.host=s.host;let c=n.pathname.replace(/\/$/,""),l=s.pathname.replace(/\/$/,"");return c&&a.pathname.startsWith(c)&&(a.pathname=`${l}${a.pathname.slice(c.length)}`||"/"),a.href}catch{return e}}function Vu(e,t,r){let n=s=>s.map(a=>oe(a,t,r)??a).sort();return{...e,url:oe(e.url,t,r)??e.url,finalUrl:oe(e.finalUrl,t,r),canonical:oe(e.canonical,t,r),canonicalRaw:oe(e.canonicalRaw,t,r),links:n(e.links),internalLinks:n(e.internalLinks),externalLinks:n(e.externalLinks),images:e.images.map(s=>({...s,src:oe(s.src,t,r)})),hreflang:e.hreflang.map(s=>({...s,url:oe(s.url,t,r)})),redirectChain:e.redirectChain.map(s=>({...s,url:oe(s.url,t,r)??s.url,location:oe(s.location,t,r)}))}}function $u(e,t,r=nt(e),n={}){return{mode:t,startUrl:e.siteUrl,generatedAt:e.generatedAt,pages:e.pages,pageDetails:e.pages,issues:r,partial:e.partial,complete:!e.partial&&!e.truncated,engineVersion:e.engineVersion,ruleSetVersion:e.ruleSetVersion,branding:e.config.report,siteMetrics:rt(e),...n}}async function He(e,t,r,n,s={}){let a=ua(da(n),".seo-audit.metrics.json"),c=await Pn(e,a,{onWarning:l=>console.error(`Warning: ${l}`)});return $u(e,t,r,{...s,siteMetrics:c})}function ga(e,t){return e["history-dir"]?ie(e["history-dir"]):t?ua(da(t),la):ie(la)}async function Wn(e,t,r,n){if(e["no-history"])return;let s=ga(e,r);n&&!t.partial&&await Mn(s,t);let a=await Mt(s,t.siteUrl);return kt(a.map(c=>c.snapshot))??void 0}async function Xu(e,t,r,n,s){let a=Ut(e,t,r),c=t.json?process.stderr:process.stdout,l=d=>{d.type==="plan-start"&&le(`Preparing crawl plan for ${d.url}`,c),d.type==="robots"&&le(d.robots.error?`robots.txt check failed: ${d.robots.error}`:`robots.txt checked (${d.robots.status??"unknown status"})`,c),d.type==="sitemap"&&le(d.sitemap?`Sitemap loaded: ${d.candidateCount??d.sitemap.urls.length} candidate URL(s)`:"No sitemap found; internal-link discovery will be used",c)},o=await ue(a,{signal:s,fetch:n,onEvent:l});if(o.mode==="links"&&a.sitemap==="auto"&&process.stdin.isTTY&&process.stdout.isTTY&&!t.json){let d=await Fe("Sitemap was not found. Enter its full URL, or press Enter to crawl internal links: ");d&&(a={...a,sitemap:d},o=await ue(a,{signal:s,fetch:n,onEvent:l}))}return o}function ma(e,t){if(e.candidateCount===null){if(t.all)throw new Error("--all requires a sitemap");return{mode:"fixed",target:e.config.maxPages}}return t.all?{mode:"all",target:e.candidateCount}:t.pages!==void 0||t["max-pages"]!==void 0?{mode:"fixed",target:Math.min(e.config.maxPages,e.candidateCount)}:process.stdin.isTTY&&process.stdout.isTTY&&!t.json?aa(e.candidateCount):{mode:"fixed",target:Math.min(100,e.candidateCount)}}async function fa(e,t,r){if(!e)throw new Error("scan requires a URL");Mr(t);let n=ie(t.output??Yt),s=Ht(t["headers-env"],e),a=await Xu(e,t,void 0,s,r),c=await ma(a,t),l=Qn(Or(n),t["headers-env"]),o=t["no-cache"]?void 0:Un(l),d=t.json?process.stderr:process.stdout;oa(a,c,!!o,d);let p=new Map,h=ha(t)?ie(t.report??Aa):null,f=0,m=-1,y=async(G=!1)=>{if(!h||p.size===0)return;let x=Date.now();if(!G&&p.size-m<100&&x-f<5e3)return;let D=ye({schemaVersion:1,startUrl:a.startUrl,robots:a.robots,sitemap:a.sitemap,options:{...a.config,maxPages:c.target},pages:[...p.values()],partial:!0,truncated:!0});await Rr(h,await He(D,"scan",nt(D),n,{partial:!0,targetPages:c.target})),f=x,m=p.size},w=c.mode==="step"?Math.min(100,c.target):c.target,I=null,_=!1,N=await Pr(t);try{for(;w>0;){let G=ca(w,c.mode==="step",d);I=await tt(a,{signal:r,fetch:s,renderer:N,limit:w,checkpointStore:o,retainCheckpoint:!!o,async onBatch(F){for(let $ of F)p.set($.url,$);await y()},onEvent(F){F.type==="scan-start"&&le(`Starting crawl: up to ${F.total.toLocaleString("en-US")} page(s)`,t.json?process.stderr:process.stdout),F.type==="resume"&&le(`Resuming from checkpoint: ${F.completed.toLocaleString("en-US")} page(s) already available`,t.json?process.stderr:process.stdout),F.type==="retry"&&(G.retry(),le(`Retrying request (attempt ${F.attempt}) after ${F.delayMs} ms`,d)),F.type==="progress"&&G.progress(F.page,F.completed),F.type==="cancelled"&&le(`Scan interrupted after ${F.completed.toLocaleString("en-US")} page(s)`,t.json?process.stderr:process.stdout)}});for(let F of I.pages)p.set(F.url,F);if(await y(!0),I.partial||c.mode!=="step"||w>=c.target)break;Gn(Yn(I.pages));let x=Math.min(100,c.target-w),D=await Fe(`Check the next ${x} page(s)? [y/N] `);if(!["y","yes"].includes(D.toLowerCase())){_=!0;break}w=Math.min(c.target,w+100)}}finally{await N?.close?.()}if(!I)throw new Error("scan did not produce a result");await _r(n,I.snapshot);let L=I.partial||_,B=await Wn(t,I.snapshot,n,!L),R=L?h:await st(t,await He(I.snapshot,"scan",nt(I.snapshot),n,B?{history:B}:{}));L||await o?.clearCurrent();let P=Yn(I.snapshot.pages);return t.json?console.log(JSON.stringify({command:"scan",pages:I.snapshot.pages.length,truncated:I.snapshot.truncated,health:P,output:n,report:R,checkpoint:L&&o?l:null},null,2)):(console.log(`Crawled ${I.snapshot.pages.length} page(s)${I.snapshot.truncated?" (limit reached)":""}.`),I.snapshot.sitemap&&console.log(`Loaded ${I.snapshot.sitemap.sitemapCount} sitemap file(s) from ${I.snapshot.sitemap.url}.`),Gn(P),console.log(`Baseline saved to ${n}`),R&&console.log(`HTML report saved to ${R}`),L&&o&&console.log(`Resume checkpoint saved to ${l}`)),I.partial?130:0}async function Ea(e,t,r){Mr(t);let n=ie(t.baseline??Yt),s=await Se(n),a=e??s.siteUrl,c=Ht(t["headers-env"],a),l=await ue({...Ut(a,t,s),sitemap:"none"},{signal:r,fetch:c}),o=s.pages.map(R=>({baselineUrl:R.url,targetUrl:oe(R.url,s.siteUrl,l.startUrl)??R.url})),d=[...new Set(o.map(({targetUrl:R})=>R))],p={...l,mode:"sitemap",candidateUrls:d,candidateCount:d.length,sitemap:{url:`${l.origin}/.seo-audit-targets`,urls:d,sitemapCount:0,truncated:!1,error:null}},h=await Pr(t),f;try{f=await tt(p,{signal:r,fetch:c,renderer:h,limit:d.length,onEvent(R){R.type==="scan-start"&&le(`Starting regression check: ${R.total.toLocaleString("en-US")} page(s)`,t.json?process.stderr:process.stdout),R.type==="progress"&&Qt(R.completed,d.length,!1,t.json?process.stderr:process.stdout)}})}finally{await h?.close?.()}let m=new Map(f.pages.map(R=>[R.url,R])),y=o.flatMap(({baselineUrl:R,targetUrl:P})=>{let G=m.get(P);return G?[{...G,url:R,finalUrl:oe(G.finalUrl,l.startUrl,s.siteUrl)}]:[]}),w=ye({...f.snapshot,siteUrl:s.siteUrl,config:{...f.snapshot.config,url:s.siteUrl},sitemap:s.sitemap,pages:y}),I=Ln(s,w,{enabledRules:w.config.enabledRules,severityOverrides:w.config.severityOverrides,suppressions:w.config.suppressions}),_=I.newIssues,N=Ft(_),L=await Wn(t,w,n,!f.partial),B=await st(t,await He(w,"check",_,n,{...I,...L?{history:L}:{}}));return t.json?console.log(JSON.stringify({command:"check",baseline:n,pages:w.pages.length,summary:N,issues:_,lifecycle:I,report:B},null,2)):(console.log(`Checked ${w.pages.length} page(s).
191
+ `),kr(_),B&&console.log(`HTML report saved to ${B}`)),f.partial?130:N.error>0||I.budgetExceeded.length>0||t.strict&&N.warning>0?1:0}async function Ta(e,t){Mr(e);let r=e.production,n=e.preview;if(!r||!n)throw new Error("compare requires --production and --preview URLs");let s=Ht(e["production-headers-env"],r),a=Ht(e["preview-headers-env"],n),c=await ue(Ut(r,e),{signal:t,fetch:s}),l=await ma(c,e),o=await Pr(e),d;try{d=await tt(c,{signal:t,fetch:s,renderer:o,limit:l.target,onEvent(R){R.type==="scan-start"&&le(`Starting production crawl: up to ${R.total.toLocaleString("en-US")} page(s)`,e.json?process.stderr:process.stdout),R.type==="progress"&&Qt(R.completed,l.target,!1,e.json?process.stderr:process.stdout)}})}finally{await o?.close?.()}if(d.partial)return 130;let p=await ue({...Ut(n,e),sitemap:"none"},{signal:t,fetch:a}),h=d.snapshot.pages.map(R=>oe(R.url,r,n)??R.url),f={...p,mode:"sitemap",candidateUrls:[...new Set(h)].sort(),candidateCount:h.length,sitemap:{url:`${p.origin}/.seo-audit-preview-targets`,urls:[...new Set(h)].sort(),sitemapCount:0,truncated:!1,error:null}},m=await Pr(e),y;try{y=await tt(f,{signal:t,fetch:a,renderer:m,limit:h.length,onEvent(R){R.type==="scan-start"&&le(`Starting preview crawl: ${R.total.toLocaleString("en-US")} page(s)`,e.json?process.stderr:process.stdout),R.type==="progress"&&Qt(R.completed,h.length,!1,e.json?process.stderr:process.stdout)}})}finally{await m?.close?.()}let w=y.snapshot.pages.map(R=>Vu(R,n,r)),I=ye({...y.snapshot,siteUrl:d.snapshot.siteUrl,startUrl:d.snapshot.siteUrl,config:{...y.snapshot.config,url:d.snapshot.siteUrl},robots:{...y.snapshot.robots,url:oe(y.snapshot.robots.url,n,r)??y.snapshot.robots.url},sitemap:d.snapshot.sitemap,pages:w,partial:y.snapshot.partial}),_=Ln(d.snapshot,I,{enabledRules:I.config.enabledRules,severityOverrides:I.config.severityOverrides,suppressions:I.config.suppressions}),N=_.newIssues,L=Ft(N),B=await st(e,await He(I,"check",N,ie(Yt),{..._,comparison:{kind:"preview",productionUrl:r,previewUrl:n}}),!0);return e.json?console.log(JSON.stringify({command:"compare",production:r,preview:n,pages:I.pages.length,summary:L,issues:N,lifecycle:_,report:B},null,2)):(console.log(`Compared ${I.pages.length} production page(s) with preview.`),kr(N),B&&console.log(`HTML report saved to ${B}`)),y.partial?130:L.error>0||_.budgetExceeded.length>0||e.strict&&L.warning>0?1:0}async function ba(e,t){let r=ie(e??t.baseline??Yt),n=await Se(r),s=await Wn(t,n,r,!1),a=await st(t,await He(n,"scan",nt(n),r,s?{history:s}:{}),!0);return t.json?console.log(JSON.stringify({command:"report",baseline:r,pages:n.pages.length,report:a},null,2)):console.log(`HTML report saved to ${a}`),0}async function Ca(e,t){if(!!t.from!=!!t.to)throw new Error("history comparison requires both --from and --to");let r=ga(t);if(t.from&&t.to){let d=await Se(ie(t.from)),p=await Se(ie(t.to));if(d.siteUrl!==p.siteUrl)throw new Error("history snapshots must belong to the same site URL");let h=await Mt(r,p.siteUrl),f=kt([...h.map(_=>_.snapshot),d,p]),{diff:m,summary:y}=_n(d,p,{evaluatedAt:new Date().toISOString()}),w=await st(t,await He(p,"check",m.newIssues,ie(t.to),{...m,...f?{history:f}:{}}),!0),I=Ft(m.newIssues);return t.json?console.log(JSON.stringify({command:"history",from:ie(t.from),to:ie(t.to),summary:I,lifecycle:m,comparisonSummary:y,report:w},null,2)):(console.log(`Compared local snapshots from ${d.generatedAt} to ${p.generatedAt}.`),console.log(`Coverage: ${y.coverage.common} common pages; ${y.coverage.onlyBefore} only before; ${y.coverage.onlyAfter} only after.`),y.warnings.length>0&&console.log(`Comparison warnings: ${y.warnings.join(", ")}`),y.unverified.length>0&&console.log(`${y.unverified.length} apparent resolution(s) could not be verified.`),kr(m.newIssues),w&&console.log(`HTML report saved to ${w}`)),0}let n;if(e)try{n=new URL(e).href}catch{throw new Error("history URL must be an HTTP(S) URL")}let s=await Mt(r,n);if(s.length===0)throw new Error(`no local history snapshots found in ${r}`);if(!n){let d=s.at(-1).snapshot.siteUrl;s=s.filter(p=>p.snapshot.siteUrl===d)}let a=s.at(-1),c=kt(s.map(d=>d.snapshot)),l=await st(t,await He(a.snapshot,"scan",nt(a.snapshot),a.path,c?{history:c}:{}),!0),o=c?.points??[];if(t.json)console.log(JSON.stringify({command:"history",directory:r,snapshots:s.map((d,p)=>({path:d.path,...o[p]})),report:l},null,2));else{console.log(`Local history for ${a.snapshot.siteUrl}:`);for(let[d,p]of s.entries()){let h=o[d];console.log(` ${p.snapshot.generatedAt} ${h?.pages??p.snapshot.pages.length} pages ${h?.errors??0} errors ${h?.warnings??0} warnings ${p.path}`)}l&&console.log(`HTML report saved to ${l}`)}return 0}import{mkdir as wa,readFile as Zu,writeFile as xa}from"node:fs/promises";import{dirname as Sa,isAbsolute as zu,join as Kn,resolve as Ia}from"node:path";var qu="https://raw.githubusercontent.com/MelnixDev/seo-crawl-audit/v0/packages/core/config.schema.json",eA="seo-audit.config.json",tA=".github/workflows/seo-audit.yml",rA=[".seo-audit.checkpoint.ndjson",".seo-audit.metrics.json",".seo-audit/history/","seo-audit-report.html","seo-audit-report.html.json"];function nA(e){let t;try{t=new URL(e)}catch(r){throw new Error("init URL must be a full HTTP(S) URL",{cause:r})}if(!["http:","https:"].includes(t.protocol))throw new Error("init URL must be a full HTTP(S) URL");return t.hash="",t.href}function sA(e){let t=(e??"none").trim().toLowerCase(),n={"":"none",none:"none",manual:"manual",scheduled:"scheduled",schedule:"scheduled","pull-request":"pull-request",pull_request:"pull-request",pr:"pull-request"}[t];if(!n)throw new Error("--workflow must be none, manual, scheduled, or pull-request");return n}function iA(e){return`${JSON.stringify({$schema:qu,url:e,sitemap:"auto",maxPages:100,concurrency:5,delay:100,timeout:1e4,respectRobots:!0,includeQuery:!1,maxRedirects:10,maxResponseBytes:5*1024*1024,enabledRules:null,severityOverrides:{},suppressions:[],regressionBudgets:{error:0},report:{}},null,2)}
192
+ `}function Jn(e="",t=""){return` - uses: actions/checkout@v6${t}
179
193
  - name: Run SEO Crawl Audit
180
194
  id: seo
181
195
  uses: MelnixDev/seo-crawl-audit@v0
@@ -192,7 +206,7 @@ Sitemap contains ${e.toLocaleString("en-US")} page(s).`),console.log("How many p
192
206
  \${{ steps.seo.outputs.report }}
193
207
  \${{ steps.seo.outputs.summary }}
194
208
  if-no-files-found: warn
195
- `}function Yu(e){return e==="manual"?`name: SEO audit
209
+ `}function aA(e){return e==="manual"?`name: SEO audit
196
210
 
197
211
  on:
198
212
  workflow_dispatch:
@@ -204,7 +218,7 @@ jobs:
204
218
  audit:
205
219
  runs-on: ubuntu-latest
206
220
  steps:
207
- ${Fn()}`:e==="scheduled"?`name: Scheduled SEO audit
221
+ ${Jn()}`:e==="scheduled"?`name: Scheduled SEO audit
208
222
 
209
223
  on:
210
224
  workflow_dispatch:
@@ -218,7 +232,7 @@ jobs:
218
232
  audit:
219
233
  runs-on: ubuntu-latest
220
234
  steps:
221
- ${Fn()}`:`name: SEO preview regression check
235
+ ${Jn()}`:`name: SEO preview regression check
222
236
 
223
237
  on:
224
238
  pull_request:
@@ -230,7 +244,7 @@ jobs:
230
244
  audit:
231
245
  runs-on: ubuntu-latest
232
246
  steps:
233
- ${Fn(`
247
+ ${Jn(`
234
248
  url: \${{ vars.SEO_AUDIT_PREVIEW_URL }}
235
249
  baseline: .seo-audit.json`,`
236
250
  - name: Validate preview audit setup
@@ -244,20 +258,20 @@ ${Fn(`
244
258
  if [ ! -f .seo-audit.json ]; then
245
259
  echo "Commit .seo-audit.json as the production baseline." >&2
246
260
  exit 1
247
- fi`)}`}function ma(e){return e&&typeof e=="object"&&"code"in e&&typeof e.code=="string"?e.code:void 0}async function ga(e){try{return await Bu(e,"utf8")}catch(t){if(ma(t)==="ENOENT")return null;throw t}}async function Gu(e,t){if(t.force)return!0;if(!t.interactive||!t.ask)return!1;let r=await t.ask(`${e} already exists. Replace it? [y/N] `);return["y","yes"].includes(r.trim().toLowerCase())}async function ua(e,t,r){let n=await ga(e);if(n===t)return{path:e,status:"unchanged"};if(n!==null&&!await Gu(e,r))return{path:e,status:"skipped"};await Aa(ha(e),{recursive:!0});try{await pa(e,t,n===null?{encoding:"utf8",flag:"wx"}:{encoding:"utf8"})}catch(s){if(n===null&&ma(s)==="EEXIST")return{path:e,status:"skipped"};throw s}return{path:e,status:n===null?"created":"updated"}}async function Wu(e,t){let r=await ga(e),n=new Set((r??"").split(/\r?\n/u)),s=Uu.filter(o=>!n.has(o));if(s.length===0)return{path:e,status:"unchanged"};if(r!==null&&!t.force&&!t.yes){if(!t.interactive||!t.ask)return{path:e,status:"skipped"};let o=await t.ask(`Add SEO Crawl Audit recommendations to ${e}? [Y/n] `);if(["n","no"].includes(o.trim().toLowerCase()))return{path:e,status:"skipped"}}let a=r&&!r.endsWith(`
261
+ fi`)}`}function Na(e){return e&&typeof e=="object"&&"code"in e&&typeof e.code=="string"?e.code:void 0}async function _a(e){try{return await Zu(e,"utf8")}catch(t){if(Na(t)==="ENOENT")return null;throw t}}async function oA(e,t){if(t.force)return!0;if(!t.interactive||!t.ask)return!1;let r=await t.ask(`${e} already exists. Replace it? [y/N] `);return["y","yes"].includes(r.trim().toLowerCase())}async function ya(e,t,r){let n=await _a(e);if(n===t)return{path:e,status:"unchanged"};if(n!==null&&!await oA(e,r))return{path:e,status:"skipped"};await wa(Sa(e),{recursive:!0});try{await xa(e,t,n===null?{encoding:"utf8",flag:"wx"}:{encoding:"utf8"})}catch(s){if(n===null&&Na(s)==="EEXIST")return{path:e,status:"skipped"};throw s}return{path:e,status:n===null?"created":"updated"}}async function cA(e,t){let r=await _a(e),n=new Set((r??"").split(/\r?\n/u)),s=rA.filter(o=>!n.has(o));if(s.length===0)return{path:e,status:"unchanged"};if(r!==null&&!t.force&&!t.yes){if(!t.interactive||!t.ask)return{path:e,status:"skipped"};let o=await t.ask(`Add SEO Crawl Audit recommendations to ${e}? [Y/n] `);if(["n","no"].includes(o.trim().toLowerCase()))return{path:e,status:"skipped"}}let a=r&&!r.endsWith(`
248
262
  `)?`
249
263
  `:"",c=r===null||!r.includes("# SEO Crawl Audit")?`# SEO Crawl Audit
250
264
  `:"",l=`${a}${c}${s.join(`
251
265
  `)}
252
- `;return await Aa(ha(e),{recursive:!0}),await pa(e,`${r??""}${l}`,"utf8"),{path:e,status:r===null?"created":"updated"}}async function Ku(e={}){let t=da(e.directory??process.cwd()),r=e.interactive??!!(process.stdin.isTTY&&process.stdout.isTTY),n=e.ask??Me,s=e.url?.trim()??"";if(!s&&r&&!e.yes&&(s=await n("Full site URL: ")),!s)throw new Error("init requires a full site URL");let a=Fu(s),c=e.workflow;c===void 0&&r&&!e.yes&&(c=await n("GitHub workflow [none/manual/scheduled/pull-request] (none): "));let l=Hu(c),o=e.configPath?ku(e.configPath)?e.configPath:da(t,e.configPath):Un(t,Pu),d={force:e.force??!1,yes:e.yes??!1,interactive:r,ask:n},p=[await ua(o,Qu(a),d),await Wu(Un(t,".gitignore"),d)];return l!=="none"&&p.push(await ua(Un(t,Mu),Yu(l),d)),{directory:t,url:a,workflow:l,files:p}}async function fa(e,t){let r=await Ku({...t.directory!==void 0?{directory:t.directory}:{},...e!==void 0?{url:e}:{},...t.config!==void 0?{configPath:t.config}:{},...t.workflow!==void 0?{workflow:t.workflow}:{},...t.yes!==void 0?{yes:t.yes}:{},...t.force!==void 0?{force:t.force}:{}});if(t.json)return console.log(JSON.stringify({command:"init",...r},null,2)),0;console.log(`Initialized SEO Crawl Audit for ${r.url}`);for(let n of r.files)console.log(` ${n.status.padEnd(9)} ${n.path}`);return r.workflow==="pull-request"&&console.log("Set the SEO_AUDIT_PREVIEW_URL repository variable and commit .seo-audit.json before enabling the PR check."),console.log("Review seo-audit.config.json, then run: seo-audit scan"),0}import{access as Ju,stat as ju}from"node:fs/promises";import{constants as Vu}from"node:fs";import{dirname as Hn,isAbsolute as Xu,resolve as Qn}from"node:path";var Ea=[20,19,0],Zu=".seo-audit.json",$u="seo-audit-report.html",qu=".seo-audit/history";function zu(e){let t=/^(\d+)\.(\d+)\.(\d+)/u.exec(e);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:[0,0,0]}function eA(e){let t=zu(e);for(let r=0;r<Ea.length;r+=1){let n=t[r]??0,s=Ea[r]??0;if(n>s)return!0;if(n<s)return!1}return!0}function tA(e){try{let t=new URL(e);return["http:","https:"].includes(t.protocol)?(t.hash="",t.href):null}catch{return null}}function vr(e,t){return Xu(t)?t:Qn(e,t)}async function rA(e){let t=Qn(e);for(;;){try{if((await ju(t)).isDirectory())return t}catch(n){if(!n||typeof n!="object"||!("code"in n)||n.code!=="ENOENT")throw n}let r=Hn(t);if(r===t)throw new Error(`no existing parent directory for ${e}`);t=r}}async function nA(e,t){let r=[Hn(vr(e,t.outputPath??Zu)),...t.reportEnabled===!1?[]:[Hn(vr(e,t.reportPath??$u))],...t.historyEnabled===!1?[]:[vr(e,t.historyPath??qu)]];try{let n=[...new Set(await Promise.all(r.map(rA)))];return await Promise.all(n.map(s=>Ju(s,Vu.W_OK))),{id:"storage",status:"pass",message:`Output locations are writable through ${n.join(", ")}`,evidence:{directories:n}}}catch(n){return{id:"storage",status:"fail",message:n instanceof Error?n.message:String(n),remediation:"Create the output directory or grant the current user write access."}}}function sA(e,t){let r=AbortSignal.timeout(e);return t?AbortSignal.any([t,r]):r}async function iA(e,t,r,n){try{let s=await r(e,{headers:{accept:"text/html,application/xhtml+xml;q=0.9,*/*;q=0.1","user-agent":`SEO-Crawl-Audit-Doctor/${V}`},redirect:"follow",signal:sA(t.timeout,n)}),a=s.headers.get("content-type")??"";return await s.body?.cancel(),s.status>=400?{id:"homepage",status:"fail",message:`Start URL returned HTTP ${s.status}`,remediation:s.status===401||s.status===403?"Configure authenticated request headers before auditing this site.":"Confirm that the URL is correct and publicly reachable.",evidence:{status:s.status,contentType:a}}:a.toLowerCase().includes("html")?{id:"homepage",status:"pass",message:`Start URL returned HTTP ${s.status} HTML`,evidence:{status:s.status,contentType:a}}:{id:"homepage",status:"warning",message:`Start URL returned ${a||"an unknown content type"}`,remediation:"Use a URL that returns server-rendered HTML.",evidence:{status:s.status,contentType:a}}}catch(s){return n?.throwIfAborted(),{id:"homepage",status:"fail",message:`Could not request the start URL: ${s instanceof Error?s.message:String(s)}`,remediation:"Check DNS, TLS, firewall access, and the configured timeout."}}}function aA(e){return e.reduce((t,r)=>(t[r.status]+=1,t),{pass:0,warning:0,fail:0,skipped:0})}async function oA(e={}){let t=Qn(e.directory??process.cwd()),r=[],n=e.runtimeVersion??process.versions.node;r.push(eA(n)?{id:"runtime",status:"pass",message:`Node.js ${n} satisfies >=20.19`}:{id:"runtime",status:"fail",message:`Node.js ${n} is older than 20.19`,remediation:"Install Node.js 20.19 or newer on the machine running SEO Crawl Audit."});let a=(e.configPath?vr(t,e.configPath):null)??await wr(t),c={};if(!a)r.push({id:"config",status:"warning",message:"seo-audit.config.json was not found",remediation:"Run seo-audit init <url> to create a safe project configuration."});else try{c=await Ot(a),r.push({id:"config",status:"pass",message:`Configuration is valid: ${a}`,evidence:{path:a}})}catch(m){r.push({id:"config",status:"fail",message:m instanceof Error?m.message:String(m),remediation:"Fix the reported property or regenerate the file with seo-audit init --force."})}let l=e.url??c.url??"",o=tA(l);o?r.push({id:"target",status:"pass",message:`Target URL is ${o}`,evidence:{url:o}}):r.push({id:"target",status:"fail",message:l?"Target is not a full HTTP(S) URL":"No target URL was provided",remediation:"Pass seo-audit doctor https://example.com/ or set url in seo-audit.config.json."}),r.push(await nA(t,e));let d=e.offline??!1;if(d||!o){let m=d?"Skipped by --offline":"Skipped because the target URL is invalid";for(let f of["homepage","robots","sitemap"])r.push({id:f,status:"skipped",message:m})}else{let m=fe({url:o},c),f=Bn(e.requestHeaders??{},o,e.fetch??globalThis.fetch);r.push(await iA(o,m,f,e.signal));try{let g=await de(m,{fetch:f,signal:e.signal});g.robots.denyAll&&m.respectRobots?r.push({id:"robots",status:"fail",message:`robots.txt returned HTTP ${g.robots.status??"unknown"} and blocks crawling`,remediation:"Allow the audit user agent or explicitly choose --ignore-robots when authorized.",evidence:{url:g.robots.url,status:g.robots.status,denyAll:!0}}):g.robots.error||g.robots.status===null||(g.robots.status??500)>=400?r.push({id:"robots",status:"warning",message:g.robots.error??`robots.txt returned HTTP ${g.robots.status??"unknown"}`,remediation:"Publish a readable robots.txt when crawler policy needs to be explicit.",evidence:{url:g.robots.url,status:g.robots.status}}):r.push({id:"robots",status:"pass",message:`robots.txt returned HTTP ${g.robots.status}`,evidence:{url:g.robots.url,status:g.robots.status,denyAll:g.robots.denyAll??!1}}),m.sitemap==="none"?r.push({id:"sitemap",status:"skipped",message:"Sitemap discovery is disabled by configuration"}):g.sitemap?g.sitemap.error?r.push({id:"sitemap",status:m.sitemap==="auto"?"warning":"fail",message:g.sitemap.error,remediation:"Check the sitemap URL, XML syntax, response size, and HTTP status.",evidence:{url:g.sitemap.url}}):g.sitemap.urls.length===0?r.push({id:"sitemap",status:"warning",message:`Sitemap contains no crawlable same-origin URLs: ${g.sitemap.url}`,remediation:"Add canonical site URLs to the sitemap or verify the configured site origin."}):r.push({id:"sitemap",status:"pass",message:`Loaded ${g.sitemap.urls.length} URL(s) from ${g.sitemap.sitemapCount} sitemap file(s)`,evidence:{url:g.sitemap.url,urls:g.sitemap.urls.length,sitemapCount:g.sitemap.sitemapCount,truncated:g.sitemap.truncated}}):r.push({id:"sitemap",status:"warning",message:"No sitemap was discovered",remediation:"Publish a sitemap or set sitemap to none when link-only crawling is intentional."})}catch(g){e.signal?.throwIfAborted(),r.push({id:"robots",status:"fail",message:`Planning failed: ${g instanceof Error?g.message:String(g)}`,remediation:"Check network access, robots.txt redirects, sitemap responses, and timeout settings."}),r.push({id:"sitemap",status:"skipped",message:"Skipped because scan planning failed"})}}let p=aA(r);return{healthy:p.fail===0,offline:d,url:o,checks:r,summary:p}}function cA(e){console.log("SEO Crawl Audit doctor");let t={pass:"PASS",warning:"WARN",fail:"FAIL",skipped:"SKIP"};for(let r of e.checks)console.log(`[${t[r.status]}] ${r.id}: ${r.message}`),r.remediation&&console.log(` Fix: ${r.remediation}`);console.log(e.healthy?`Ready with ${e.summary.warning} warning(s) and ${e.summary.skipped} skipped check(s).`:`Not ready: ${e.summary.fail} check(s) failed.`)}async function Ta(e,t,r){let n=await oA({...t.directory!==void 0?{directory:t.directory}:{},...e!==void 0?{url:e}:{},...t.config!==void 0?{configPath:t.config}:{},...t.output!==void 0?{outputPath:t.output}:{},...t.report!==void 0?{reportPath:t.report}:{},...t["history-dir"]!==void 0?{historyPath:t["history-dir"]}:{},reportEnabled:t["no-report"]!==!0,historyEnabled:t["no-history"]!==!0,offline:t.offline===!0,requestHeaders:Dr(t["headers-env"]),...r!==void 0?{signal:r}:{}});return t.json?console.log(JSON.stringify({command:"doctor",...n},null,2)):cA(n),n.healthy?0:1}import{lstat as lA,mkdir as Ca,readFile as Yn,realpath as ba,writeFile as Ia}from"node:fs/promises";import{dirname as Gn,join as he,relative as dA,resolve as ya}from"node:path";import{fileURLToPath as uA}from"node:url";var AA=ya(uA(new URL("../agent-skill/seo-crawl-audit",import.meta.url)));async function pA(e,t){let r=await ba(e),n=t;for(;;)try{let s=await ba(n),a=dA(r,s);if(a===".."||a.startsWith(`..${process.platform==="win32"?"\\":"/"}`))throw new Error(`generated agent path escapes the project through a symlink: ${t}`);return}catch(s){if(s.code!=="ENOENT")throw s;try{if((await lA(n)).isSymbolicLink())throw new Error(`generated agent path escapes the project through an unresolved symlink: ${t}`)}catch(c){if(c.code!=="ENOENT")throw c}let a=Gn(n);if(a===n)throw s;n=a}}function hA(e){let t=(e??"all").toLowerCase();if(t==="all")return["codex","claude","opencode"];if(["codex","claude","opencode"].includes(t))return[t];throw new Error("--platform must be codex, claude, opencode, or all")}async function mA(e,t,r){let n=null;try{n=await Yn(t,"utf8")}catch(a){if(a.code!=="ENOENT")throw a}let s=await Yn(e,"utf8");return n===s?{path:t,status:"unchanged"}:n!==null&&!r?{path:t,status:"skipped"}:(await Ca(Gn(t),{recursive:!0}),await Ia(t,s,"utf8"),{path:t,status:n===null?"created":"updated"})}async function gA(e,t,r){let n=null;try{n=await Yn(e,"utf8")}catch(s){if(s.code!=="ENOENT")throw s}return n===t?{path:e,status:"unchanged"}:n!==null&&!r?{path:e,status:"skipped"}:(await Ca(Gn(e),{recursive:!0}),await Ia(e,t,"utf8"),{path:e,status:n===null?"created":"updated"})}function fA(){return`[mcp_servers.seo-crawl-audit]
266
+ `;return await wa(Sa(e),{recursive:!0}),await xa(e,`${r??""}${l}`,"utf8"),{path:e,status:r===null?"created":"updated"}}async function lA(e={}){let t=Ia(e.directory??process.cwd()),r=e.interactive??!!(process.stdin.isTTY&&process.stdout.isTTY),n=e.ask??Fe,s=e.url?.trim()??"";if(!s&&r&&!e.yes&&(s=await n("Full site URL: ")),!s)throw new Error("init requires a full site URL");let a=nA(s),c=e.workflow;c===void 0&&r&&!e.yes&&(c=await n("GitHub workflow [none/manual/scheduled/pull-request] (none): "));let l=sA(c),o=e.configPath?zu(e.configPath)?e.configPath:Ia(t,e.configPath):Kn(t,eA),d={force:e.force??!1,yes:e.yes??!1,interactive:r,ask:n},p=[await ya(o,iA(a),d),await cA(Kn(t,".gitignore"),d)];return l!=="none"&&p.push(await ya(Kn(t,tA),aA(l),d)),{directory:t,url:a,workflow:l,files:p}}async function Ra(e,t){let r=await lA({...t.directory!==void 0?{directory:t.directory}:{},...e!==void 0?{url:e}:{},...t.config!==void 0?{configPath:t.config}:{},...t.workflow!==void 0?{workflow:t.workflow}:{},...t.yes!==void 0?{yes:t.yes}:{},...t.force!==void 0?{force:t.force}:{}});if(t.json)return console.log(JSON.stringify({command:"init",...r},null,2)),0;console.log(`Initialized SEO Crawl Audit for ${r.url}`);for(let n of r.files)console.log(` ${n.status.padEnd(9)} ${n.path}`);return r.workflow==="pull-request"&&console.log("Set the SEO_AUDIT_PREVIEW_URL repository variable and commit .seo-audit.json before enabling the PR check."),console.log("Review seo-audit.config.json, then run: seo-audit scan"),0}import{access as dA,stat as uA}from"node:fs/promises";import{constants as AA}from"node:fs";import{dirname as jn,isAbsolute as pA,resolve as Vn}from"node:path";var La=[20,19,0],hA=".seo-audit.json",gA="seo-audit-report.html",mA=".seo-audit/history";function fA(e){let t=/^(\d+)\.(\d+)\.(\d+)/u.exec(e);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:[0,0,0]}function EA(e){let t=fA(e);for(let r=0;r<La.length;r+=1){let n=t[r]??0,s=La[r]??0;if(n>s)return!0;if(n<s)return!1}return!0}function TA(e){try{let t=new URL(e);return["http:","https:"].includes(t.protocol)?(t.hash="",t.href):null}catch{return null}}function Ur(e,t){return pA(t)?t:Vn(e,t)}async function bA(e){let t=Vn(e);for(;;){try{if((await uA(t)).isDirectory())return t}catch(n){if(!n||typeof n!="object"||!("code"in n)||n.code!=="ENOENT")throw n}let r=jn(t);if(r===t)throw new Error(`no existing parent directory for ${e}`);t=r}}async function CA(e,t){let r=[jn(Ur(e,t.outputPath??hA)),...t.reportEnabled===!1?[]:[jn(Ur(e,t.reportPath??gA))],...t.historyEnabled===!1?[]:[Ur(e,t.historyPath??mA)]];try{let n=[...new Set(await Promise.all(r.map(bA)))];return await Promise.all(n.map(s=>dA(s,AA.W_OK))),{id:"storage",status:"pass",message:`Output locations are writable through ${n.join(", ")}`,evidence:{directories:n}}}catch(n){return{id:"storage",status:"fail",message:n instanceof Error?n.message:String(n),remediation:"Create the output directory or grant the current user write access."}}}function IA(e,t){let r=AbortSignal.timeout(e);return t?AbortSignal.any([t,r]):r}async function yA(e,t,r,n){try{let s=await r(e,{headers:{accept:"text/html,application/xhtml+xml;q=0.9,*/*;q=0.1","user-agent":`SEO-Crawl-Audit-Doctor/${X}`},redirect:"follow",signal:IA(t.timeout,n)}),a=s.headers.get("content-type")??"";return await s.body?.cancel(),s.status>=400?{id:"homepage",status:"fail",message:`Start URL returned HTTP ${s.status}`,remediation:s.status===401||s.status===403?"Configure authenticated request headers before auditing this site.":"Confirm that the URL is correct and publicly reachable.",evidence:{status:s.status,contentType:a}}:a.toLowerCase().includes("html")?{id:"homepage",status:"pass",message:`Start URL returned HTTP ${s.status} HTML`,evidence:{status:s.status,contentType:a}}:{id:"homepage",status:"warning",message:`Start URL returned ${a||"an unknown content type"}`,remediation:"Use a URL that returns server-rendered HTML.",evidence:{status:s.status,contentType:a}}}catch(s){return n?.throwIfAborted(),{id:"homepage",status:"fail",message:`Could not request the start URL: ${s instanceof Error?s.message:String(s)}`,remediation:"Check DNS, TLS, firewall access, and the configured timeout."}}}function wA(e){return e.reduce((t,r)=>(t[r.status]+=1,t),{pass:0,warning:0,fail:0,skipped:0})}async function xA(e={}){let t=Vn(e.directory??process.cwd()),r=[],n=e.runtimeVersion??process.versions.node;r.push(EA(n)?{id:"runtime",status:"pass",message:`Node.js ${n} satisfies >=20.19`}:{id:"runtime",status:"fail",message:`Node.js ${n} is older than 20.19`,remediation:"Install Node.js 20.19 or newer on the machine running SEO Crawl Audit."});let a=(e.configPath?Ur(t,e.configPath):null)??await Nr(t),c={};if(!a)r.push({id:"config",status:"warning",message:"seo-audit.config.json was not found",remediation:"Run seo-audit init <url> to create a safe project configuration."});else try{c=await Pt(a),r.push({id:"config",status:"pass",message:`Configuration is valid: ${a}`,evidence:{path:a}})}catch(h){r.push({id:"config",status:"fail",message:h instanceof Error?h.message:String(h),remediation:"Fix the reported property or regenerate the file with seo-audit init --force."})}let l=e.url??c.url??"",o=TA(l);o?r.push({id:"target",status:"pass",message:`Target URL is ${o}`,evidence:{url:o}}):r.push({id:"target",status:"fail",message:l?"Target is not a full HTTP(S) URL":"No target URL was provided",remediation:"Pass seo-audit doctor https://example.com/ or set url in seo-audit.config.json."}),r.push(await CA(t,e));let d=e.offline??!1;if(d||!o){let h=d?"Skipped by --offline":"Skipped because the target URL is invalid";for(let f of["homepage","robots","sitemap"])r.push({id:f,status:"skipped",message:h})}else{let h=Te({url:o},c),f=Hn(e.requestHeaders??{},o,e.fetch??globalThis.fetch);r.push(await yA(o,h,f,e.signal));try{let m=await ue(h,{fetch:f,signal:e.signal});m.robots.denyAll&&h.respectRobots?r.push({id:"robots",status:"fail",message:`robots.txt returned HTTP ${m.robots.status??"unknown"} and blocks crawling`,remediation:"Allow the audit user agent or explicitly choose --ignore-robots when authorized.",evidence:{url:m.robots.url,status:m.robots.status,denyAll:!0}}):m.robots.error||m.robots.status===null||(m.robots.status??500)>=400?r.push({id:"robots",status:"warning",message:m.robots.error??`robots.txt returned HTTP ${m.robots.status??"unknown"}`,remediation:"Publish a readable robots.txt when crawler policy needs to be explicit.",evidence:{url:m.robots.url,status:m.robots.status}}):r.push({id:"robots",status:"pass",message:`robots.txt returned HTTP ${m.robots.status}`,evidence:{url:m.robots.url,status:m.robots.status,denyAll:m.robots.denyAll??!1}}),h.sitemap==="none"?r.push({id:"sitemap",status:"skipped",message:"Sitemap discovery is disabled by configuration"}):m.sitemap?m.sitemap.error?r.push({id:"sitemap",status:h.sitemap==="auto"?"warning":"fail",message:m.sitemap.error,remediation:"Check the sitemap URL, XML syntax, response size, and HTTP status.",evidence:{url:m.sitemap.url}}):m.sitemap.urls.length===0?r.push({id:"sitemap",status:"warning",message:`Sitemap contains no crawlable same-origin URLs: ${m.sitemap.url}`,remediation:"Add canonical site URLs to the sitemap or verify the configured site origin."}):r.push({id:"sitemap",status:"pass",message:`Loaded ${m.sitemap.urls.length} URL(s) from ${m.sitemap.sitemapCount} sitemap file(s)`,evidence:{url:m.sitemap.url,urls:m.sitemap.urls.length,sitemapCount:m.sitemap.sitemapCount,truncated:m.sitemap.truncated}}):r.push({id:"sitemap",status:"warning",message:"No sitemap was discovered",remediation:"Publish a sitemap or set sitemap to none when link-only crawling is intentional."})}catch(m){e.signal?.throwIfAborted(),r.push({id:"robots",status:"fail",message:`Planning failed: ${m instanceof Error?m.message:String(m)}`,remediation:"Check network access, robots.txt redirects, sitemap responses, and timeout settings."}),r.push({id:"sitemap",status:"skipped",message:"Skipped because scan planning failed"})}}let p=wA(r);return{healthy:p.fail===0,offline:d,url:o,checks:r,summary:p}}function SA(e){console.log("SEO Crawl Audit doctor");let t={pass:"PASS",warning:"WARN",fail:"FAIL",skipped:"SKIP"};for(let r of e.checks)console.log(`[${t[r.status]}] ${r.id}: ${r.message}`),r.remediation&&console.log(` Fix: ${r.remediation}`);console.log(e.healthy?`Ready with ${e.summary.warning} warning(s) and ${e.summary.skipped} skipped check(s).`:`Not ready: ${e.summary.fail} check(s) failed.`)}async function Oa(e,t,r){let n=await xA({...t.directory!==void 0?{directory:t.directory}:{},...e!==void 0?{url:e}:{},...t.config!==void 0?{configPath:t.config}:{},...t.output!==void 0?{outputPath:t.output}:{},...t.report!==void 0?{reportPath:t.report}:{},...t["history-dir"]!==void 0?{historyPath:t["history-dir"]}:{},reportEnabled:t["no-report"]!==!0,historyEnabled:t["no-history"]!==!0,offline:t.offline===!0,requestHeaders:Br(t["headers-env"]),...r!==void 0?{signal:r}:{}});return t.json?console.log(JSON.stringify({command:"doctor",...n},null,2)):SA(n),n.healthy?0:1}import{lstat as NA,mkdir as Da,readFile as $n,realpath as va,writeFile as ka}from"node:fs/promises";import{dirname as Xn,join as ge,relative as _A,resolve as Ba}from"node:path";import{fileURLToPath as RA}from"node:url";var LA=Ba(RA(new URL("../agent-skill/seo-crawl-audit",import.meta.url)));async function OA(e,t){let r=await va(e),n=t;for(;;)try{let s=await va(n),a=_A(r,s);if(a===".."||a.startsWith(`..${process.platform==="win32"?"\\":"/"}`))throw new Error(`generated agent path escapes the project through a symlink: ${t}`);return}catch(s){if(s.code!=="ENOENT")throw s;try{if((await NA(n)).isSymbolicLink())throw new Error(`generated agent path escapes the project through an unresolved symlink: ${t}`)}catch(c){if(c.code!=="ENOENT")throw c}let a=Xn(n);if(a===n)throw s;n=a}}function vA(e){let t=(e??"all").toLowerCase();if(t==="all")return["codex","claude","opencode"];if(["codex","claude","opencode"].includes(t))return[t];throw new Error("--platform must be codex, claude, opencode, or all")}async function DA(e,t,r){let n=null;try{n=await $n(t,"utf8")}catch(a){if(a.code!=="ENOENT")throw a}let s=await $n(e,"utf8");return n===s?{path:t,status:"unchanged"}:n!==null&&!r?{path:t,status:"skipped"}:(await Da(Xn(t),{recursive:!0}),await ka(t,s,"utf8"),{path:t,status:n===null?"created":"updated"})}async function kA(e,t,r){let n=null;try{n=await $n(e,"utf8")}catch(s){if(s.code!=="ENOENT")throw s}return n===t?{path:e,status:"unchanged"}:n!==null&&!r?{path:e,status:"skipped"}:(await Da(Xn(e),{recursive:!0}),await ka(e,t,"utf8"),{path:e,status:n===null?"created":"updated"})}function BA(){return`[mcp_servers.seo-crawl-audit]
253
267
  command = "npx"
254
268
  args = ["-y", "seo-crawl-audit@0.9", "mcp"]
255
269
  tool_timeout_sec = 600
256
- `}function EA(){return`${JSON.stringify({mcpServers:{"seo-crawl-audit":{command:"npx",args:["-y","seo-crawl-audit@0.9","mcp"]}}},null,2)}
257
- `}function TA(){return`${JSON.stringify({$schema:"https://opencode.ai/config.json",mcp:{"seo-crawl-audit":{type:"local",command:["npx","-y","seo-crawl-audit@0.9","mcp"],enabled:!0,timeout:6e5}}},null,2)}
258
- `}async function bA(e={}){let t=ya(e.directory??process.cwd()),r=hA(e.platform),n=[],s=[],a=new Set,c=new Set;for(let l of r)c.add(l==="claude"?he(t,".claude/skills/seo-crawl-audit/SKILL.md"):he(t,".agents/skills/seo-crawl-audit/SKILL.md")),c.add(l==="codex"?he(t,".codex/config.toml"):l==="claude"?he(t,".mcp.json"):he(t,"opencode.json"));await Promise.all([...c].map(l=>pA(t,l)));for(let l of r){let o=l==="claude"?he(t,".claude/skills/seo-crawl-audit/SKILL.md"):he(t,".agents/skills/seo-crawl-audit/SKILL.md");a.has(o)||(n.push(await mA(he(AA,"SKILL.md"),o,e.force??!1)),a.add(o));let d=l==="codex"?he(t,".codex/config.toml"):l==="claude"?he(t,".mcp.json"):he(t,"opencode.json"),p=l==="codex"?fA():l==="claude"?EA():TA(),m=await gA(d,p,e.force??!1);n.push(m),m.status==="skipped"&&s.push(`${l} config snippet:
259
- ${p}`)}return{directory:t,platform:e.platform==="all"||!e.platform?"all":r[0],files:n,snippets:s}}async function wa(e){let t=await bA({directory:e.directory,platform:e.platform,force:e.force});if(e.json)return console.log(JSON.stringify({command:"agent-init",...t},null,2)),0;console.log(`Prepared SEO Crawl Audit agent integration in ${t.directory}`);for(let r of t.files)console.log(` ${r.status.padEnd(7)} ${r.path}`);for(let r of t.snippets)console.log(`
260
- ${r}`);return console.log("Restart the agent client after enabling its project MCP configuration."),0}var we=`seo-audit ${V}
270
+ `}function PA(){return`${JSON.stringify({mcpServers:{"seo-crawl-audit":{command:"npx",args:["-y","seo-crawl-audit@0.9","mcp"]}}},null,2)}
271
+ `}function MA(){return`${JSON.stringify({$schema:"https://opencode.ai/config.json",mcp:{"seo-crawl-audit":{type:"local",command:["npx","-y","seo-crawl-audit@0.9","mcp"],enabled:!0,timeout:6e5}}},null,2)}
272
+ `}async function UA(e={}){let t=Ba(e.directory??process.cwd()),r=vA(e.platform),n=[],s=[],a=new Set,c=new Set;for(let l of r)c.add(l==="claude"?ge(t,".claude/skills/seo-crawl-audit/SKILL.md"):ge(t,".agents/skills/seo-crawl-audit/SKILL.md")),c.add(l==="codex"?ge(t,".codex/config.toml"):l==="claude"?ge(t,".mcp.json"):ge(t,"opencode.json"));await Promise.all([...c].map(l=>OA(t,l)));for(let l of r){let o=l==="claude"?ge(t,".claude/skills/seo-crawl-audit/SKILL.md"):ge(t,".agents/skills/seo-crawl-audit/SKILL.md");a.has(o)||(n.push(await DA(ge(LA,"SKILL.md"),o,e.force??!1)),a.add(o));let d=l==="codex"?ge(t,".codex/config.toml"):l==="claude"?ge(t,".mcp.json"):ge(t,"opencode.json"),p=l==="codex"?BA():l==="claude"?PA():MA(),h=await kA(d,p,e.force??!1);n.push(h),h.status==="skipped"&&s.push(`${l} config snippet:
273
+ ${p}`)}return{directory:t,platform:e.platform==="all"||!e.platform?"all":r[0],files:n,snippets:s}}async function Pa(e){let t=await UA({directory:e.directory,platform:e.platform,force:e.force});if(e.json)return console.log(JSON.stringify({command:"agent-init",...t},null,2)),0;console.log(`Prepared SEO Crawl Audit agent integration in ${t.directory}`);for(let r of t.files)console.log(` ${r.status.padEnd(7)} ${r.path}`);for(let r of t.snippets)console.log(`
274
+ ${r}`);return console.log("Restart the agent client after enabling its project MCP configuration."),0}var Ne=`seo-audit ${X}
261
275
 
262
276
  Local-first SEO crawler, audit, and regression checker.
263
277
 
@@ -336,8 +350,8 @@ Exit codes:
336
350
  1 SEO regressions detected
337
351
  2 Invalid input or crawler failure
338
352
  130 Scan interrupted after saving partial results
339
- `;async function zf(e=process.argv.slice(2),t={}){let r;try{r=Gi(e)}catch(o){return console.error(`${o instanceof Error?o.message:String(o)}
353
+ `;async function RE(e=process.argv.slice(2),t={}){let r;try{r=ta(e)}catch(o){return console.error(`${o instanceof Error?o.message:String(o)}
340
354
 
341
- ${we}`),2}let{values:n}=r,{positionals:s}=r;if(s[0]==="init"){if(n.help)return console.log(we),0;if(n.version)return console.log(V),0;if(s.length>2)return console.error(`Unexpected argument: ${s[2]}`),2;try{return await fa(s[1],n)}catch(o){return console.error(`seo-audit: ${o instanceof Error?o.message:String(o)}`),2}}if(s[0]==="doctor"){if(s.length>2)return console.error(`Unexpected argument: ${s[2]}`),2;if(n.help)return console.log(we),0;if(n.version)return console.log(V),0;try{return await Ta(s[1],n,t.signal)}catch(o){return console.error(`seo-audit: ${o instanceof Error?o.message:String(o)}`),t.signal?.aborted?130:2}}if(s[0]==="agent-init"){if(s.length>1)return console.error(`Unexpected argument: ${s[1]}`),2;if(n.help)return console.log(we),0;if(n.version)return console.log(V),0;try{return await wa(n)}catch(o){return console.error(`seo-audit: ${o instanceof Error?o.message:String(o)}`),2}}if(s[0]==="status"){if(s.length>2)return console.error(`Unexpected argument: ${s[2]}`),2;if(n.help)return console.log(we),0;if(n.version)return console.log(V),0;try{return await ta(s[1],n)}catch(o){return console.error(`seo-audit: ${o instanceof Error?o.message:String(o)}`),2}}if(s[0]==="serve"){if(s.length>2)return console.error(`Unexpected argument: ${s[2]}`),2;if(n.help)return console.log(we),0;let o=n.port===void 0?4179:Number.parseInt(n.port,10);if(!Number.isInteger(o)||o<0||o>65535)return console.error("seo-audit: --port must be an integer between 0 and 65535"),2;let d=s[1];if(d)try{let p=new URL(d);if(p.protocol!=="http:"&&p.protocol!=="https:")throw new Error("unsupported protocol")}catch{return console.error("seo-audit: serve URL must be a complete http:// or https:// URL"),2}try{let{serveCommand:p}=await import("./server.js");return await p(o,t.signal,{openBrowser:!n["no-open"],...d?{initialUrl:d}:{}})}catch(p){return console.error(`seo-audit: ${p instanceof Error?p.message:String(p)}`),2}}try{n=Wi(n,await Ot(n.config))}catch(o){return console.error(`seo-audit: ${o instanceof Error?o.message:String(o)}`),2}if(n.version)return console.log(V),0;if(n.help||s.length===0)return console.log(we),0;let[a,c,...l]=s;if(a&&/^https?:\/\//i.test(a)&&(l=s.slice(1),c=a,a="scan"),(a==="scan"||a==="check")&&!c&&n.__config?.url&&(c=n.__config.url),l.length>0)return console.error(`Unexpected argument: ${l[0]}`),2;try{return a==="scan"?await ia(c,n,t.signal):a==="check"?await aa(c,n,t.signal):a==="compare"?await oa(n,t.signal):a==="history"?await la(c,n):a==="report"?await ca(c,n):(console.error(`Unknown command: ${String(a)}
355
+ ${Ne}`),2}let{values:n}=r,{positionals:s}=r;if(s[0]==="init"){if(n.help)return console.log(Ne),0;if(n.version)return console.log(X),0;if(s.length>2)return console.error(`Unexpected argument: ${s[2]}`),2;try{return await Ra(s[1],n)}catch(o){return console.error(`seo-audit: ${o instanceof Error?o.message:String(o)}`),2}}if(s[0]==="doctor"){if(s.length>2)return console.error(`Unexpected argument: ${s[2]}`),2;if(n.help)return console.log(Ne),0;if(n.version)return console.log(X),0;try{return await Oa(s[1],n,t.signal)}catch(o){return console.error(`seo-audit: ${o instanceof Error?o.message:String(o)}`),t.signal?.aborted?130:2}}if(s[0]==="agent-init"){if(s.length>1)return console.error(`Unexpected argument: ${s[1]}`),2;if(n.help)return console.log(Ne),0;if(n.version)return console.log(X),0;try{return await Pa(n)}catch(o){return console.error(`seo-audit: ${o instanceof Error?o.message:String(o)}`),2}}if(s[0]==="status"){if(s.length>2)return console.error(`Unexpected argument: ${s[2]}`),2;if(n.help)return console.log(Ne),0;if(n.version)return console.log(X),0;try{return await pa(s[1],n)}catch(o){return console.error(`seo-audit: ${o instanceof Error?o.message:String(o)}`),2}}if(s[0]==="serve"){if(s.length>2)return console.error(`Unexpected argument: ${s[2]}`),2;if(n.help)return console.log(Ne),0;let o=n.port===void 0?4179:Number.parseInt(n.port,10);if(!Number.isInteger(o)||o<0||o>65535)return console.error("seo-audit: --port must be an integer between 0 and 65535"),2;let d=s[1];if(d)try{let p=new URL(d);if(p.protocol!=="http:"&&p.protocol!=="https:")throw new Error("unsupported protocol")}catch{return console.error("seo-audit: serve URL must be a complete http:// or https:// URL"),2}try{let{serveCommand:p}=await import("./server.js");return await p(o,t.signal,{openBrowser:!n["no-open"],...d?{initialUrl:d}:{}})}catch(p){return console.error(`seo-audit: ${p instanceof Error?p.message:String(p)}`),2}}try{n=ra(n,await Pt(n.config))}catch(o){return console.error(`seo-audit: ${o instanceof Error?o.message:String(o)}`),2}if(n.version)return console.log(X),0;if(n.help||s.length===0)return console.log(Ne),0;let[a,c,...l]=s;if(a&&/^https?:\/\//i.test(a)&&(l=s.slice(1),c=a,a="scan"),(a==="scan"||a==="check")&&!c&&n.__config?.url&&(c=n.__config.url),l.length>0)return console.error(`Unexpected argument: ${l[0]}`),2;try{return a==="scan"?await fa(c,n,t.signal):a==="check"?await Ea(c,n,t.signal):a==="compare"?await Ta(n,t.signal):a==="history"?await Ca(c,n):a==="report"?await ba(c,n):(console.error(`Unknown command: ${String(a)}
342
356
 
343
- ${we}`),2)}catch(o){return console.error(`seo-audit: ${o instanceof Error?o.message:String(o)}`),t.signal?.aborted?130:2}}export{zf as main,ji as parseScanMenuSelection};
357
+ ${Ne}`),2)}catch(o){return console.error(`seo-audit: ${o instanceof Error?o.message:String(o)}`),t.signal?.aborted?130:2}}export{RE as main,ia as parseScanMenuSelection};