@dtect/security-sdk-js 0.0.32 → 0.1.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/dist/index.d.mts CHANGED
@@ -88,6 +88,8 @@ interface ISecurityResultResponse {
88
88
  isTorDetected: boolean;
89
89
  isHighActivityDevice: boolean;
90
90
  isIncognito: boolean;
91
+ isAIUsageDetected?: boolean | null;
92
+ isQualityRejected?: boolean | null;
91
93
  };
92
94
  }
93
95
  interface ISecurityTokenResponse {
@@ -119,6 +121,7 @@ interface ISecurityAPIInitProps {
119
121
  apiKey: string;
120
122
  endpoint?: string;
121
123
  includeResults?: boolean;
124
+ autoFlagAIUsage?: boolean;
122
125
  }
123
126
 
124
127
  interface Idtect {
package/dist/index.d.ts CHANGED
@@ -88,6 +88,8 @@ interface ISecurityResultResponse {
88
88
  isTorDetected: boolean;
89
89
  isHighActivityDevice: boolean;
90
90
  isIncognito: boolean;
91
+ isAIUsageDetected?: boolean | null;
92
+ isQualityRejected?: boolean | null;
91
93
  };
92
94
  }
93
95
  interface ISecurityTokenResponse {
@@ -119,6 +121,7 @@ interface ISecurityAPIInitProps {
119
121
  apiKey: string;
120
122
  endpoint?: string;
121
123
  includeResults?: boolean;
124
+ autoFlagAIUsage?: boolean;
122
125
  }
123
126
 
124
127
  interface Idtect {
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
- "use strict";var Oe=Object.defineProperty;var Rn=Object.getOwnPropertyDescriptor;var bn=Object.getOwnPropertyNames;var Tn=Object.prototype.hasOwnProperty;var Sn=(e,t)=>{for(var n in t)Oe(e,n,{get:t[n],enumerable:!0})},An=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of bn(t))!Tn.call(e,o)&&o!==n&&Oe(e,o,{get:()=>t[o],enumerable:!(r=Rn(t,o))||r.enumerable});return e};var Pn=e=>An(Oe({},"__esModule",{value:!0}),e);var xo={};Sn(xo,{LanguageCodes:()=>J,QualityQuestionsRespondentTypes:()=>X,SecurityAPIError:()=>vn,checkQualityQuestions:()=>Ie,default:()=>_o,getQualityQuestions:()=>ye,getSecurityResult:()=>pe,getSecurityToken:()=>he,hasCredentials:()=>wo,init:()=>wn,isAIUsageDetected:()=>ge});module.exports=Pn(xo);var Dn={UNAUTHORIZED:"Unauthorized"},On={EXPIRED:"EXPIRED_TOKEN",INVALID_API_KEY:"INVALID_API_KEY",MISSING_AUTHENTICATION_TOKEN:"MISSING_AUTHENTICATION_TOKEN"},lt={INTERNAL_SERVER_ERROR:"Internal Server Error during API Request",MISSING_CREDENTIALS:"Missing Public Client ID or Public API Key",MAINTENANCE_MODE:"API Under Maintenance",RATE_LIMIT_REACHED:"Too many requests. Rate limit exceeded"},dt={SDK_INIT_ERROR:"Internal Server Error during SDK Initialization",DUPLICATE_INITIALIZATION:"Multiple SDK Initializations Detected",NOT_INITIALIZED:"SDK Not Initialized"},mt={INVALID_CREDENTIALS:"Invalid Public Client ID or Public API Key"},ft={FAILED_TO_GET_SECURITY_RESULT:"Failed to Retrieve Security Result"},pt={FAILED_TO_GET_SECURITY_TOKEN:" Failed to Generate Security Token"},v={...Dn,...On,...lt,...dt,...mt,...ft,...pt},ht={...lt,...dt,...mt,...ft,...pt};var J=(h=>(h.AR="ar",h.BN="bn",h.DE="de",h.EN="en",h.ES="es",h.FR="fr",h.HI="hi",h.ID="id",h.IT="it",h.JA="ja",h.KO="ko",h.MS="ms",h.NL="nl",h.PT="pt",h.RU="ru",h.YU="yu",h.ZH="zh",h))(J||{}),X=(E=>(E.GeneralConsumer="general-consumer",E.HRManagerDirector="hr-manager-director",E.WebDeveloper="web-developer",E.SoftwareEngineer="software-engineer",E.ITDirector="it-director",E.BusinessAdministrator="business-administrator",E.AccountsPayableManager="accounts-payable-manager",E.Accountant="accountant",E.FinanceDirector="finance-director",E.SmallBusinessOwner="small-business-owner",E.GeneralContractor="general-contractor",E.MarketingManagerDirector="marketing-manager-director",E.ConsumerShopper="consumer-shopper",E.Travel="travel",E.Entertainment="entertainment",E.FinanceAndBanking="finance-and-banking",E.General="general",E.B2BWhiteCollar="b2b-white-collar",E.B2BBlueCollar="b2b-blue-collar",E.Lawyer="lawyer",E))(X||{});var S=[];for(let e=0;e<256;++e)S.push((e+256).toString(16).slice(1));function gt(e,t=0){return(S[e[t+0]]+S[e[t+1]]+S[e[t+2]]+S[e[t+3]]+"-"+S[e[t+4]]+S[e[t+5]]+"-"+S[e[t+6]]+S[e[t+7]]+"-"+S[e[t+8]]+S[e[t+9]]+"-"+S[e[t+10]]+S[e[t+11]]+S[e[t+12]]+S[e[t+13]]+S[e[t+14]]+S[e[t+15]]).toLowerCase()}var _e,_n=new Uint8Array(16);function xe(){if(!_e){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");_e=crypto.getRandomValues.bind(crypto)}return _e(_n)}var xn=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),ke={randomUUID:xn};function kn(e,t,n){if(ke.randomUUID&&!t&&!e)return ke.randomUUID();e=e||{};let r=e.random??e.rng?.()??xe();if(r.length<16)throw new Error("Random bytes length must be >= 16");if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,t){if(n=n||0,n<0||n+16>t.length)throw new RangeError(`UUID byte range ${n}:${n+15} is out of buffer bounds`);for(let o=0;o<16;++o)t[n+o]=r[o];return t}return gt(r)}var F=kn;var yt="dtect_security_sdk_state",It=typeof window<"u",Et={isLoading:!1,token:"",visitorId:"",projectId:"",questionData:null,clientData:null,aiCheckData:null,tokens:null},ie={state:{...Et},securityKeys:{behaviorKey:"bwDZ0V3Zrb4SB6g4lZwW",automationKey:"7166bf18-b91e-407a-84fc-d57ac104de98",usingFpjs:!1,usingHcaptcha:!1}};function vt(){if(!It)return ie;try{let e=sessionStorage.getItem(yt);if(!e)return ie;let t=JSON.parse(e);return t.expiresAt&&t.expiresAt<Date.now()?ie:{state:{...Et,...t.state},securityKeys:t.securityKeys||{behaviorKey:"",automationKey:"",usingFpjs:!1,usingHcaptcha:!1}}}catch{return ie}}function wt(e){if(It)try{let t=Date.now()+864e5,n={...e,expiresAt:t};sessionStorage.setItem(yt,JSON.stringify(n))}catch{}}function Rt(e){return e||F()}function Mn(e,t){return function(n,r){return Object.prototype.hasOwnProperty.call(n,r)}(e,t)?e[t]:void 0}function Nn(e,t,n,r){let o=document,i="securitypolicyviolation",a,s=d=>{let u=new URL(e,location.href),{blockedURI:l}=d;l!==u.href&&l!==u.protocol.slice(0,-1)&&l!==u.origin||(a=d,c())};o.addEventListener(i,s);let c=()=>o.removeEventListener(i,s);return r?.then(c,c),Promise.resolve().then(t).then(d=>(c(),d),d=>new Promise(u=>{let l=new MessageChannel;l.port1.onmessage=()=>u(),l.port2.postMessage(null)}).then(()=>{if(c(),a)return n(a);throw d}))}function N(e){let t="";for(let n=0;n<e.length;++n)if(n>0){let r=e[n].toLowerCase();r!==e[n]?t+=` ${r}`:t+=e[n]}else t+=e[n].toUpperCase();return t}var Cn={default:"endpoint"},Ln={default:"tlsEndpoint"},Fn="Client timeout",Un="Network connection error",Bn="Network request aborted",qn="Response cannot be parsed",Me="Blocked by CSP",Ne="The endpoint parameter is not a valid URL",Kn="Handle on demand agent data error",Gn=N("WrongRegion"),jn=N("SubscriptionNotActive"),Vn=N("UnsupportedVersion"),Qn=N("InstallationMethodRestricted"),Wn=N("HostnameRestricted"),$n=N("IntegrationFailed"),zn=N("NetworkRestricted"),Yn=N("InvalidProxyIntegrationSecret"),Jn=N("InvalidProxyIntegrationHeaders"),Xn=N("ProxyIntegrationSecretEnvironmentMismatch"),Ce="API key required",bt="API key not found",Tt="API key expired",Zn="Request cannot be parsed",Hn="Request failed",er="Request failed to process",tr="Too many requests, rate limit exceeded",nr="Not available for this origin",rr="Not available with restricted header",or=Ce,ir=bt,sr=Tt,ar="3.12.0",se="Failed to load the JS script of the agent",Le="9319";function cr(e,t){let n=[],[r,o]=function(s){let c=function(l){let m=[...l];return{current:()=>m[0],postpone(){let y=m.shift();y!==void 0&&m.push(y)},exclude(){m.shift()}}}(s),d=function(l,m){let y=0;return()=>Math.random()*Math.min(m,l*Math.pow(2,y++))}(100,3e3),u=new Set;return[c.current(),(l,m)=>{let y,g=m instanceof Error?m.message:"";if(g===Me||g===Ne)c.exclude(),y=0;else if(g===Le)c.exclude();else if(g===se){let I=Date.now()-l.getTime()<50,h=c.current();h&&I&&!u.has(h)&&(u.add(h),y=0),c.postpone()}else c.postpone();let f=c.current();return f===void 0?void 0:[f,y??l.getTime()+d()-Date.now()]}]}(e),i;if(r===void 0)return Promise.reject(new TypeError("The list of script URL patterns is empty"));let a=s=>{let c=new Date,d=l=>n.push({url:s,startedAt:c,finishedAt:new Date,error:l}),u=t(s);return u.then(()=>d(),d),u.catch(l=>{if(i!=null||(i=l),n.length>=5)throw i;let m=o(c,l);if(!m)throw i;let[y,g]=m;return(f=g,new Promise(I=>setTimeout(I,f))).then(()=>a(y));var f})};return a(r).then(s=>[s,n])}var St="https://fpnpmcdn.net/v<version>/<apiKey>/loader_v<loaderVersion>.js",ur=St;function lr(e){var t,n;let{picked:r,rest:o}=function(u,l){let m={},y={};for(let[g,f]of Object.entries(u))l.includes(g)?m[g]=f:y[g]=f;return{picked:m,rest:y}}(e,["scriptUrlPattern","token","apiKey"]),i=r.token,a=(t=r.apiKey)!==null&&t!==void 0?t:i,s=(n=Mn(e,"scriptUrlPattern"))!==null&&n!==void 0?n:St,[c,d]=function(){let u=[],l=()=>{u.push({time:new Date,state:document.visibilityState})},m=function(y,g,f,I){return y.addEventListener(g,f,I),()=>y.removeEventListener(g,f,I)}(document,"visibilitychange",l);return l(),[u,m]}();return Promise.resolve().then(()=>{if(!a||typeof a!="string")throw new Error(Ce);let u=function(l,m){return(Array.isArray(l)?l:[l]).map(y=>function(g,f){let I=encodeURIComponent;return g.replace(/<[^<>]+>/g,h=>h==="<version>"?"3":h==="<apiKey>"?I(f):h==="<loaderVersion>"?I(ar):h)}(String(y),m))}(s,a);return cr(u,dr)}).catch(u=>{throw d(),function(l){return l instanceof Error&&l.message===Le?new Error(se):l}(u)}).then(([u,l])=>(d(),u.load({...o,ldi:{attempts:l,visibilityStates:c}})))}function dr(e){return Nn(e,()=>function(t){return new Promise((n,r)=>{if(function(s){if(URL.prototype)try{return new URL(s,location.href),!1}catch(c){if(c instanceof Error&&c.name==="TypeError")return!0;throw c}}(t))throw new Error(Ne);let o=document.createElement("script"),i=()=>{var s;return(s=o.parentNode)===null||s===void 0?void 0:s.removeChild(o)},a=document.head||document.getElementsByTagName("head")[0];o.onload=()=>{i(),n()},o.onerror=()=>{i(),r(new Error(se))},o.async=!0,o.src=t,a.appendChild(o)})}(e),()=>{throw new Error(Me)}).then(mr)}function mr(){let e=window,t="__fpjs_p_l_b",n=e[t];if(function(r,o){var i;let a=(i=Object.getOwnPropertyDescriptor)===null||i===void 0?void 0:i.call(Object,r,o);a?.configurable?delete r[o]:a&&!a.writable||(r[o]=void 0)}(e,t),typeof n?.load!="function")throw new Error(Le);return n}var K={load:lr,defaultScriptUrlPattern:ur,ERROR_SCRIPT_LOAD_FAIL:se,ERROR_API_KEY_EXPIRED:Tt,ERROR_API_KEY_INVALID:bt,ERROR_API_KEY_MISSING:Ce,ERROR_BAD_REQUEST_FORMAT:Zn,ERROR_BAD_RESPONSE_FORMAT:qn,ERROR_CLIENT_TIMEOUT:Fn,ERROR_CSP_BLOCK:Me,ERROR_FORBIDDEN_ENDPOINT:Wn,ERROR_FORBIDDEN_HEADER:rr,ERROR_FORBIDDEN_ORIGIN:nr,ERROR_GENERAL_SERVER_FAILURE:Hn,ERROR_HANDLE_AGENT_DATA:Kn,ERROR_INSTALLATION_METHOD_RESTRICTED:Qn,ERROR_INTEGRATION_FAILURE:$n,ERROR_INVALID_ENDPOINT:Ne,ERROR_INVALID_PROXY_INTEGRATION_HEADERS:Jn,ERROR_INVALID_PROXY_INTEGRATION_SECRET:Yn,ERROR_NETWORK_ABORT:Bn,ERROR_NETWORK_CONNECTION:Un,ERROR_NETWORK_RESTRICTED:zn,ERROR_PROXY_INTEGRATION_SECRET_ENVIRONMENT_MISMATCH:Xn,ERROR_RATE_LIMIT:tr,ERROR_SERVER_TIMEOUT:er,ERROR_SUBSCRIPTION_NOT_ACTIVE:jn,ERROR_TOKEN_EXPIRED:sr,ERROR_TOKEN_INVALID:ir,ERROR_TOKEN_MISSING:or,ERROR_UNSUPPORTED_VERSION:Vn,ERROR_WRONG_REGION:Gn,defaultEndpoint:Cn,defaultTlsEndpoint:Ln};async function R(e,t="info",n={}){let r=`${n.endpoint??"https://api.dtect.io/security"}/log`,o={message:e,type:t,payload:n};navigator.sendBeacon(r,JSON.stringify(o))}var fr="20000000-aaaa-bbbb-cccc-000000000002",G=()=>window?.location?.href?.includes("localhost")||window?.location?.href?.includes("file:///");function pr(){return G()?Promise.resolve(fr):window?.hcaptcha?.execute({async:!0}).then(e=>e?.response)}function At(e,t,n,r){let o=(performance.now()-e).toFixed();R(`getTokens finishes in ${o}ms`,"info",{function:"getTokens",endpoint:n,diff:o,token:t,clientId:r})}async function Pt(){let e=performance.now(),{state:t,fpjs:n,config:r}=w();if(t.tokens)return At(e,t.token,r?.endpoint,r?.clientId),t.tokens;let[o,i]=await Promise.all([r?.usingHcaptcha?pr():"",n?.get()]),a={behaviorRequestId:i?.requestId,behaviorToken:i?.sealedResult,automationToken:o};return P(s=>({...s,state:{...s.state,tokens:a}})),At(e,t.token,r?.endpoint,r?.clientId),a}function hr(){let e=performance.now(),t=document.querySelector("head");document.querySelector("body")?.insertAdjacentHTML("beforeend",'<div id="dtect-h-captcha" ></div>');let r=document.createElement("script");r.setAttribute("src","https://js.hcaptcha.com/1/api.js"),r.setAttribute("async","true"),r.setAttribute("defer","true"),t?.append(r);let i=(performance.now()-e).toFixed()}function gr(){return new Promise(e=>{let t=()=>{window?.hcaptcha?e():requestAnimationFrame(t)};t()})}async function Dt({usingFpjs:e,behaviorKey:t}){if(!e)return;let{config:n,state:r}=w(),o=performance.now(),i=await K.load({apiKey:t,endpoint:["https://fp.dtect.io",K.defaultEndpoint],scriptUrlPattern:["https://fp.dtect.io/web/v<version>/<apiKey>/loader_v<loaderVersion>.js",K.defaultScriptUrlPattern]});P(s=>({...s,fpjs:i}));let a=(performance.now()-o).toFixed();if(R(`FingerprintJS loaded in ${a}ms`,"info",{function:"fpjs load",endpoint:n?.endpoint,diff:a,token:r.token,clientId:n?.clientId}),!i)throw new Error(v.SDK_INIT_ERROR)}async function Ot(e){if(G()||!e.usingHcaptcha)return;let{securityKeys:t}=w();hr(),await gr(),await window.hcaptcha.render("dtect-h-captcha",{sitekey:t.automationKey,size:"invisible"})}var yr="0.0.32",U={...vt(),fpjs:void 0,monitor:void 0,version:yr};function w(){return U}function P(e){U=e(U),wt({state:U.state,securityKeys:U.securityKeys})}function Fe(){return U.state.tokens}function _t(){return U.securityKeys}function Z(){let{fpjs:e,config:t}=w(),n=Fe(),r=G(),o=document.querySelector("#dtect-h-captcha"),i=!!(!t?.usingFpjs||e&&n?.behaviorToken),a=!!(!t?.usingHcaptcha||r||o&&n?.automationToken);return i&&a}function B(){let{config:e,securityKeys:t}=w(),n=e?.endpoint||"https://api.dtect.io/security",r=e?.includeResults?`${n}/client/check/result`:`${n}/client/check`;return{endpoint:n,clientId:e?.clientId,apiKey:e?.apiKey,checkResultEndpoint:r,usingHcaptcha:e?.usingHcaptcha}}function q(e){if(e instanceof Error){if(e?.message?.includes("maintenance_mode"))throw new Error(v.MAINTENANCE_MODE);if(e?.message?.includes("rate-limited"))throw new Error(v.RATE_LIMIT_REACHED);switch(e?.message){case K.ERROR_RATE_LIMIT:throw new Error(v.RATE_LIMIT_REACHED);default:throw new Error(v.INTERNAL_SERVER_ERROR)}}throw new Error(v.FAILED_TO_GET_SECURITY_TOKEN)}function xt(e,t){let{state:n,config:r}=w();if(e instanceof Error){if(R(e.message,"error",{function:"init",endpoint:r?.endpoint,error:e,token:n.token,clientId:t.clientId}),e.message.includes("maintenance_mode"))throw new Error(v.MAINTENANCE_MODE);if([v.INVALID_API_KEY,v.UNAUTHORIZED].includes(e.message))throw new Error(v.INVALID_CREDENTIALS)}throw new Error(v.SDK_INIT_ERROR)}function kt(e){let t=e?.qbc||!1,n=e?.mas||!1,r=e?.apd||!1,o=e?.scb||null,i=0,a=()=>{t=!1,n=!1,r=!1,o=void 0,i=0},s=()=>{let l=window?.getSelection()?.toString();l&&l.length>0&&(i=Date.now(),t=!0)},c=u=>{let l=u.clipboardData?.getData("text"),m=u.target instanceof HTMLInputElement||u.target instanceof HTMLTextAreaElement;l&&m&&(r=!0)},d=()=>{n=!0;let u=Date.now();if(i){let l=(u-i)/1e3;(o===void 0||l<o)&&(o=l)}};return document?.addEventListener("copy",s),document?.addEventListener("paste",c),window?.addEventListener("blur",d),{get qbc(){return t},get mas(){return n},get apd(){return r},get scb(){return o},reset:a,destroy(){document?.removeEventListener("copy",s),document?.removeEventListener("paste",c),window?.removeEventListener("blur",d)}}}function Mt(e){P(t=>{let n=kt(t.state.aiCheckData);return{...t,monitor:n,state:{...t.state,isLoading:!0,token:e||""}}})}function Nt(e){P(t=>({...t,state:{...t.state,isLoading:!1,token:e||""}}))}var j={exclude:[],include:[],stabilize:["private","iframe"],logging:!0,timeout:5e3,cache_api_call:!0,performance:!1,experimental:!1},bi={...j},Ue={private:[{exclude:["canvas"],browsers:["firefox","safari>=17","brave"]},{exclude:["audio"],browsers:["samsungbrowser","safari"]},{exclude:["fonts"],browsers:["firefox"]},{exclude:["audio.sampleHash","hardware.deviceMemory","header.acceptLanguage.q","system.hardwareConcurrency","plugins"],browsers:["brave"]},{exclude:["tls.extensions"],browsers:["firefox","chrome","safari"]},{exclude:["header.acceptLanguage"],browsers:["edge","chrome"]}],iframe:[{exclude:["system.applePayVersion","system.cookieEnabled"],browsers:["safari"]},{exclude:["permissions"]}],vpn:[{exclude:["ip"]}]};async function Be(){return Ir()}async function Ir(){return new Promise((t,n)=>{try{let i=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,5e3,44100),a=i?.createBufferSource(),s=i.createOscillator();s.frequency.value=1e3;let c=i.createDynamicsCompressor();c.threshold.value=-50,c.knee.value=40,c.ratio.value=12,c.attack.value=0,c.release.value=.2,s.connect(c),c.connect(i.destination),s.start();let d;i.oncomplete=u=>{d=u.renderedBuffer.getChannelData(0),t({sampleHash:Er(d),maxChannels:i.destination.maxChannelCount,channelCountMode:a.channelCountMode})},i.startRendering()}catch(r){console.error("Error creating audio fingerprint:",r),n(r)}})}function Er(e){let t=0;for(let n=0;n<e.length;++n)t+=Math.abs(e[n]);return t}function ae(e,t,n){let r=[];for(let a=0;a<e[0].data.length;a++){let s=[];for(let c=0;c<e.length;c++)s.push(e[c].data[a]);r.push(vr(s))}let o=r,i=new Uint8ClampedArray(o);return new ImageData(i,t,n)}function vr(e){if(e.length===0)return 0;let t={};for(let r of e)t[r]=(t[r]||0)+1;let n=e[0];for(let r in t)t[r]>t[n]&&(n=parseInt(r,10));return n}function wr(e){return new TextEncoder().encode(e).buffer}function ce(e){return e^=e>>>16,e=Math.imul(e,2246822507),e^=e>>>13,e=Math.imul(e,3266489909),e^=e>>>16,e>>>0}var D=new Uint32Array([597399067,2869860233,951274213,2716044179]);function M(e,t){return e<<t|e>>>32-t}function Rr(e,t){let n=e.byteLength/16|0,r=new Uint32Array(e,0,n*4);for(let o=0;o<n;o++){let i=r.subarray(o*4,(o+1)*4);i[0]=Math.imul(i[0],D[0]),i[0]=M(i[0],15),i[0]=Math.imul(i[0],D[1]),t[0]=t[0]^i[0],t[0]=M(t[0],19),t[0]=t[0]+t[1],t[0]=Math.imul(t[0],5)+1444728091,i[1]=Math.imul(i[1],D[1]),i[1]=M(i[1],16),i[1]=Math.imul(i[1],D[2]),t[1]=t[1]^i[1],t[1]=M(t[1],17),t[1]=t[1]+t[2],t[1]=Math.imul(t[1],5)+197830471,i[2]=Math.imul(i[2],D[2]),i[2]=M(i[2],17),i[2]=Math.imul(i[2],D[3]),t[2]=t[2]^i[2],t[2]=M(t[2],15),t[2]=t[2]+t[3],t[2]=Math.imul(t[2],5)+2530024501,i[3]=Math.imul(i[3],D[3]),i[3]=M(i[3],18),i[3]=Math.imul(i[3],D[0]),t[3]=t[3]^i[3],t[3]=M(t[3],13),t[3]=t[3]+t[0],t[3]=Math.imul(t[3],5)+850148119}}function br(e,t){let n=e.byteLength/16|0,r=e.byteLength%16,o=new Uint32Array(4),i=new Uint8Array(e,n*16,r);switch(r){case 15:o[3]=o[3]^i[14]<<16;case 14:o[3]=o[3]^i[13]<<8;case 13:o[3]=o[3]^i[12]<<0,o[3]=Math.imul(o[3],D[3]),o[3]=M(o[3],18),o[3]=Math.imul(o[3],D[0]),t[3]=t[3]^o[3];case 12:o[2]=o[2]^i[11]<<24;case 11:o[2]=o[2]^i[10]<<16;case 10:o[2]=o[2]^i[9]<<8;case 9:o[2]=o[2]^i[8]<<0,o[2]=Math.imul(o[2],D[2]),o[2]=M(o[2],17),o[2]=Math.imul(o[2],D[3]),t[2]=t[2]^o[2];case 8:o[1]=o[1]^i[7]<<24;case 7:o[1]=o[1]^i[6]<<16;case 6:o[1]=o[1]^i[5]<<8;case 5:o[1]=o[1]^i[4]<<0,o[1]=Math.imul(o[1],D[1]),o[1]=M(o[1],16),o[1]=Math.imul(o[1],D[2]),t[1]=t[1]^o[1];case 4:o[0]=o[0]^i[3]<<24;case 3:o[0]=o[0]^i[2]<<16;case 2:o[0]=o[0]^i[1]<<8;case 1:o[0]=o[0]^i[0]<<0,o[0]=Math.imul(o[0],D[0]),o[0]=M(o[0],15),o[0]=Math.imul(o[0],D[1]),t[0]=t[0]^o[0]}}function Tr(e,t){t[0]=t[0]^e.byteLength,t[1]=t[1]^e.byteLength,t[2]=t[2]^e.byteLength,t[3]=t[3]^e.byteLength,t[0]=t[0]+t[1]|0,t[0]=t[0]+t[2]|0,t[0]=t[0]+t[3]|0,t[1]=t[1]+t[0]|0,t[2]=t[2]+t[0]|0,t[3]=t[3]+t[0]|0,t[0]=ce(t[0]),t[1]=ce(t[1]),t[2]=ce(t[2]),t[3]=ce(t[3]),t[0]=t[0]+t[1]|0,t[0]=t[0]+t[2]|0,t[0]=t[0]+t[3]|0,t[1]=t[1]+t[0]|0,t[2]=t[2]+t[0]|0,t[3]=t[3]+t[0]|0}function A(e,t=0){if(t=t?t|0:0,typeof e=="string"&&(e=wr(e)),!(e instanceof ArrayBuffer))throw new TypeError("Expected key to be ArrayBuffer or string");let n=new Uint32Array([t,t,t,t]);Rr(e,n),br(e,n),Tr(e,n);let r=new Uint8Array(n.buffer);return Array.from(r).map(o=>o.toString(16).padStart(2,"0")).join("")}var Sr=3,Ct=280,Lt=20;async function qe(){return Ar()}function Ar(){return new Promise(e=>{let t=Array.from({length:Sr},()=>Pr()),n=ae(t,Ct,Lt);e({commonPixelsHash:A(n.data.toString()).toString()})})}function Pr(){let e=document.createElement("canvas"),t=e.getContext("2d");if(!t)return new ImageData(1,1);e.width=Ct,e.height=Lt;let n=t.createLinearGradient(0,0,e.width,e.height);n.addColorStop(0,"red"),n.addColorStop(1/6,"orange"),n.addColorStop(2/6,"yellow"),n.addColorStop(3/6,"green"),n.addColorStop(4/6,"blue"),n.addColorStop(5/6,"indigo"),n.addColorStop(1,"violet"),t.fillStyle=n,t.fillRect(0,0,e.width,e.height);let r="Random Text WMwmil10Oo";return t.font="23.123px Arial",t.fillStyle="black",t.fillText(r,-5,15),t.fillStyle="rgba(0, 0, 255, 0.5)",t.fillText(r,-3.3,17.7),t.beginPath(),t.moveTo(0,0),t.lineTo(e.width*2/7,e.height),t.strokeStyle="white",t.lineWidth=2,t.stroke(),t.getImageData(0,0,e.width,e.height)}async function ue(e){for(;!document.body;)await Dr(50);let t=document.createElement("iframe");t.setAttribute("frameBorder","0");let n=t.style;n.setProperty("position","fixed"),n.setProperty("display","block","important"),n.setProperty("visibility","visible"),n.setProperty("border","0"),n.setProperty("opacity","0"),t.src="about:blank",document.body.appendChild(t);let r=t.contentDocument||t.contentWindow?.document;if(!r)throw new Error("Iframe document is not accessible");e({iframe:r}),setTimeout(()=>{document.body.removeChild(t)},0)}function Dr(e,t){return new Promise(n=>setTimeout(n,e,t))}var Or=["Arial","Arial Black","Arial Narrow","Arial Rounded MT","Arimo","Archivo","Barlow","Bebas Neue","Bitter","Bookman","Calibri","Cabin","Candara","Century","Century Gothic","Comic Sans MS","Constantia","Courier","Courier New","Crimson Text","DM Mono","DM Sans","DM Serif Display","DM Serif Text","Dosis","Droid Sans","Exo","Fira Code","Fira Sans","Franklin Gothic Medium","Garamond","Geneva","Georgia","Gill Sans","Helvetica","Impact","Inconsolata","Indie Flower","Inter","Josefin Sans","Karla","Lato","Lexend","Lucida Bright","Lucida Console","Lucida Sans Unicode","Manrope","Merriweather","Merriweather Sans","Montserrat","Myriad","Noto Sans","Nunito","Nunito Sans","Open Sans","Optima","Orbitron","Oswald","Pacifico","Palatino","Perpetua","PT Sans","PT Serif","Poppins","Prompt","Public Sans","Quicksand","Rajdhani","Recursive","Roboto","Roboto Condensed","Rockwell","Rubik","Segoe Print","Segoe Script","Segoe UI","Sora","Source Sans Pro","Space Mono","Tahoma","Taviraj","Times","Times New Roman","Titillium Web","Trebuchet MS","Ubuntu","Varela Round","Verdana","Work Sans"],_r=["monospace","sans-serif","serif"];async function Ke(e){return xr()}function xr(){return new Promise((e,t)=>{try{ue(async({iframe:n})=>{let o=n.createElement("canvas").getContext("2d"),i=_r.map(s=>Ft(o,s)),a={};Or.forEach(s=>{let c=Ft(o,s);i.includes(c)||(a[s]=c)}),e(a)})}catch{t({error:"unsupported"})}})}function Ft(e,t){if(!e)return null;let n="WwMmLli0Oo";return e.font=`72px ${t}`,e.measureText(n).width}function Ge(){return new Promise((e,t)=>{let n=navigator.deviceMemory!==void 0?navigator.deviceMemory:0,r=window.performance&&window.performance.memory?window.performance.memory:0;e({videocard:kr(),architecture:Mr(),deviceMemory:n.toString()||"undefined",jsHeapSizeLimit:r.jsHeapSizeLimit||0})})}function kr(){let e=document.createElement("canvas"),t=e.getContext("webgl")??e.getContext("experimental-webgl");if(t&&"getParameter"in t)try{let n=(t.getParameter(t.VENDOR)||"").toString(),r=(t.getParameter(t.RENDERER)||"").toString(),o={vendor:n,renderer:r,version:(t.getParameter(t.VERSION)||"").toString(),shadingLanguageVersion:(t.getParameter(t.SHADING_LANGUAGE_VERSION)||"").toString()};if(!r.length||!n.length){let i=t.getExtension("WEBGL_debug_renderer_info");if(i){let a=(t.getParameter(i.UNMASKED_VENDOR_WEBGL)||"").toString(),s=(t.getParameter(i.UNMASKED_RENDERER_WEBGL)||"").toString();a&&(o.vendorUnmasked=a),s&&(o.rendererUnmasked=s)}}return o}catch{}return"undefined"}function Mr(){let e=new Float32Array(1),t=new Uint8Array(e.buffer);return e[0]=1/0,e[0]=e[0]-e[0],t[3]}function je(){return new Promise(e=>{e({languages:Nr(),timezone:Cr()})})}function Nr(){let e=[];return navigator.language}function Cr(){return Intl.DateTimeFormat().resolvedOptions().timeZone}var le=(e,t,n,r)=>{let o=(n-t)/r,i=0;for(let a=0;a<r;a++){let s=t+(a+.5)*o;i+=e(s)}return i*o};function Ve(){return new Promise(e=>{e({acos:Math.acos(.5),asin:le(Math.asin,-1,1,97),cos:le(Math.cos,0,Math.PI,97),largeCos:Math.cos(1e20),largeSin:Math.sin(1e20),largeTan:Math.tan(1e20),sin:le(Math.sin,-Math.PI,Math.PI,97),tan:le(Math.tan,0,2*Math.PI,97)})})}function Lr(e){if(e.length===0)return null;let t={};e.forEach(o=>{let i=String(o);t[i]=(t[i]||0)+1});let n=e[0],r=1;return Object.keys(t).forEach(o=>{t[o]>r&&(n=o,r=t[o])}),n}function Ut(e,t){let n={};return t.forEach(r=>{let o=e.map(a=>r in a?a[r]:void 0).filter(a=>a!==void 0),i=Lr(o);i&&(n[r]=i)}),n}var Fr=["accelerometer","accessibility","accessibility-events","ambient-light-sensor","background-fetch","background-sync","bluetooth","camera","clipboard-read","clipboard-write","device-info","display-capture","gyroscope","geolocation","local-fonts","magnetometer","microphone","midi","nfc","notifications","payment-handler","persistent-storage","push","speaker","storage-access","top-level-storage-access","window-management","query"];async function Qe(e){let t=e?.permissions_to_check||Fr,r=await Promise.all(Array.from({length:3},()=>Ur(t)));return Ut(r,t)}async function Ur(e){let t={};for(let n of e)try{let r=await navigator.permissions.query({name:n});t[n]=r.state.toString()}catch{}return t}async function We(){let e=[];if(navigator.plugins)for(let t=0;t<navigator.plugins.length;t++){let n=navigator.plugins[t];e.push([n.name,n.filename,n.description].join("|"))}return new Promise(t=>{t({plugins:e})})}function V(){if(typeof navigator>"u")return{name:"unknown",version:"unknown"};let e=navigator.userAgent,t=[/(?<name>SamsungBrowser)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>EdgA|EdgiOS|Edg)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>OPR|OPX)\/(?<version>\d+(?:\.\d+)+)/,/Opera[\s\/](?<version>\d+(?:\.\d+)+)/,/Opera Mini\/(?<version>\d+(?:\.\d+)+)/,/Opera Mobi\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Vivaldi)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Brave)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>CriOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>FxiOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Chrome|Chromium)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Firefox|Waterfox|Iceweasel|IceCat)\/(?<version>\d+(?:\.\d+)+)/,/Version\/(?<version1>[\d.]+).*Safari\/[\d.]+|(?<name>Safari)\/(?<version2>[\d.]+)/,/(?<name>MSIE|Trident|IEMobile).+?(?<version>\d+(?:\.\d+)+)/,/(?<name>[A-Za-z]+)\/(?<version>\d+(?:\.\d+)+)/],n={edg:"Edge",edga:"Edge",edgios:"Edge",opr:"Opera",opx:"Opera",crios:"Chrome",fxios:"Firefox",samsung:"SamsungBrowser",vivaldi:"Vivaldi",brave:"Brave"};for(let r of t){let o=e.match(r);if(o){let i=o.groups?.name,a=o.groups?.version||o.groups?.version1||o.groups?.version2;if(!i&&(o.groups?.version1||o.groups?.version2)&&(i="Safari"),!i&&r.source.includes("Opera Mini")&&(i="Opera Mini"),!i&&r.source.includes("Opera Mobi")&&(i="Opera Mobi"),!i&&r.source.includes("Opera")&&(i="Opera"),!i&&o[1]&&(i=o[1]),!a&&o[2]&&(a=o[2]),i)return{name:n[i.toLowerCase()]||i,version:a||"unknown"}}}return{name:"unknown",version:"unknown"}}function de(){if(typeof navigator>"u"||!navigator.userAgent)return!1;let e=navigator.userAgent;return/Mobi|Android|iPhone|iPod|IEMobile|Opera Mini|Opera Mobi|webOS|BlackBerry|Windows Phone/i.test(e)&&!/iPad/i.test(e)}function $e(){return new Promise(e=>{let t={is_touchscreen:navigator.maxTouchPoints>0,maxTouchPoints:navigator.maxTouchPoints,colorDepth:screen.colorDepth,mediaMatches:qr()};de()&&navigator.maxTouchPoints>0&&(t.resolution=Br()),e(t)})}function Br(){let e=window.screen.width,t=window.screen.height,n=Math.max(e,t).toString(),r=Math.min(e,t).toString();return`${n}x${r}`}function qr(){let e=[],t={"prefers-contrast":["high","more","low","less","forced","no-preference"],"any-hover":["hover","none"],"any-pointer":["none","coarse","fine"],pointer:["none","coarse","fine"],hover:["hover","none"],update:["fast","slow"],"inverted-colors":["inverted","none"],"prefers-reduced-motion":["reduce","no-preference"],"prefers-reduced-transparency":["reduce","no-preference"],scripting:["none","initial-only","enabled"],"forced-colors":["active","none"]};return Object.keys(t).forEach(n=>{t[n].forEach(r=>{matchMedia(`(${n}: ${r})`).matches&&e.push(`${n}: ${r}`)})}),e}function ze(){return new Promise(e=>{let t=V(),n=navigator.userAgent,r={platform:window.navigator.platform,productSub:navigator.productSub,product:navigator.product,useragent:navigator.userAgent,hardwareConcurrency:navigator.hardwareConcurrency,browser:{name:t.name,version:t.version},mobile:de(),applePayVersion:Kr(),cookieEnabled:window.navigator.cookieEnabled};e(r)})}function Kr(){if(window.location.protocol==="https:"&&typeof window.ApplePaySession=="function")try{let e=window.ApplePaySession.supportsVersion;for(let t=15;t>0;t--)if(e(t))return t}catch{return 0}return 0}var Gr=V().name!=="SamsungBrowser"?1:3,O,p=null;function jr(){typeof document<"u"&&(O=document.createElement("canvas"),O.width=200,O.height=100,p=O.getContext("webgl"))}async function Ye(){jr();try{if(!p)throw new Error("WebGL not supported");let e=Array.from({length:Gr},()=>Vr()),t=ae(e,O.width,O.height);return{commonPixelsHash:A(t.data.toString()).toString()}}catch{return{webgl:"unsupported"}}}function Vr(){try{if(!p)throw new Error("WebGL not supported");let e=`
1
+ "use strict";var se=Object.defineProperty;var It=Object.getOwnPropertyDescriptor;var vt=Object.getOwnPropertyNames;var Et=Object.prototype.hasOwnProperty;var bt=(t,e)=>{for(var n in e)se(t,n,{get:e[n],enumerable:!0})},Tt=(t,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of vt(e))!Et.call(t,r)&&r!==n&&se(t,r,{get:()=>e[r],enumerable:!(o=It(e,r))||o.enumerable});return t};var Rt=t=>Tt(se({},"__esModule",{value:!0}),t);var Mn={};bt(Mn,{LanguageCodes:()=>G,QualityQuestionsRespondentTypes:()=>V,SecurityAPIError:()=>yt,checkQualityQuestions:()=>re,default:()=>On,getQualityQuestions:()=>ne,getSecurityResult:()=>ee,getSecurityToken:()=>te,hasCredentials:()=>Tn,init:()=>ht,isAIUsageDetected:()=>$});module.exports=Rt(Mn);var xt={UNAUTHORIZED:"Unauthorized"},At={EXPIRED:"EXPIRED_TOKEN",INVALID_API_KEY:"INVALID_API_KEY",MISSING_AUTHENTICATION_TOKEN:"MISSING_AUTHENTICATION_TOKEN"},ke={INTERNAL_SERVER_ERROR:"Internal Server Error during API Request",MISSING_CREDENTIALS:"Missing Public Client ID or Public API Key",MAINTENANCE_MODE:"API Under Maintenance",RATE_LIMIT_REACHED:"Too many requests. Rate limit exceeded"},Pe={SDK_INIT_ERROR:"Internal Server Error during SDK Initialization",DUPLICATE_INITIALIZATION:"Multiple SDK Initializations Detected",NOT_INITIALIZED:"SDK Not Initialized"},_e={INVALID_CREDENTIALS:"Invalid Public Client ID or Public API Key"},Oe={FAILED_TO_GET_SECURITY_RESULT:"Failed to Retrieve Security Result"},Me={FAILED_TO_GET_SECURITY_TOKEN:" Failed to Generate Security Token"},h={...xt,...At,...ke,...Pe,..._e,...Oe,...Me},Ne={...ke,...Pe,..._e,...Oe,...Me};var G=(p=>(p.AR="ar",p.BN="bn",p.DE="de",p.EN="en",p.ES="es",p.FR="fr",p.HI="hi",p.ID="id",p.IT="it",p.JA="ja",p.KO="ko",p.MS="ms",p.NL="nl",p.PT="pt",p.RU="ru",p.YU="yu",p.ZH="zh",p))(G||{}),V=(y=>(y.GeneralConsumer="general-consumer",y.HRManagerDirector="hr-manager-director",y.WebDeveloper="web-developer",y.SoftwareEngineer="software-engineer",y.ITDirector="it-director",y.BusinessAdministrator="business-administrator",y.AccountsPayableManager="accounts-payable-manager",y.Accountant="accountant",y.FinanceDirector="finance-director",y.SmallBusinessOwner="small-business-owner",y.GeneralContractor="general-contractor",y.MarketingManagerDirector="marketing-manager-director",y.ConsumerShopper="consumer-shopper",y.Travel="travel",y.Entertainment="entertainment",y.FinanceAndBanking="finance-and-banking",y.General="general",y.B2BWhiteCollar="b2b-white-collar",y.B2BBlueCollar="b2b-blue-collar",y.Lawyer="lawyer",y))(V||{});var E=[];for(let t=0;t<256;++t)E.push((t+256).toString(16).slice(1));function Le(t,e=0){return(E[t[e+0]]+E[t[e+1]]+E[t[e+2]]+E[t[e+3]]+"-"+E[t[e+4]]+E[t[e+5]]+"-"+E[t[e+6]]+E[t[e+7]]+"-"+E[t[e+8]]+E[t[e+9]]+"-"+E[t[e+10]]+E[t[e+11]]+E[t[e+12]]+E[t[e+13]]+E[t[e+14]]+E[t[e+15]]).toLowerCase()}var ce,Dt=new Uint8Array(16);function ue(){if(!ce){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");ce=crypto.getRandomValues.bind(crypto)}return ce(Dt)}var St=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),le={randomUUID:St};function kt(t,e,n){if(le.randomUUID&&!e&&!t)return le.randomUUID();t=t||{};let o=t.random??t.rng?.()??ue();if(o.length<16)throw new Error("Random bytes length must be >= 16");if(o[6]=o[6]&15|64,o[8]=o[8]&63|128,e){if(n=n||0,n<0||n+16>e.length)throw new RangeError(`UUID byte range ${n}:${n+15} is out of buffer bounds`);for(let r=0;r<16;++r)e[n+r]=o[r];return e}return Le(o)}var O=kt;var Ce="dtect_security_sdk_state",Be=typeof window<"u",Ue={isLoading:!1,token:"",visitorId:"",projectId:"",questionData:null,clientData:null,aiCheckData:null,aiUsageFlagged:!1},z={state:{...Ue},securityKeys:{behaviorKey:"",automationKey:""}};function Fe(){if(!Be)return z;try{let t=sessionStorage.getItem(Ce);if(!t)return z;let e=JSON.parse(t);return e.expiresAt&&e.expiresAt<Date.now()?z:{state:{...Ue,...e.state},securityKeys:e.securityKeys||{behaviorKey:"",automationKey:""}}}catch{return z}}function Ge(t){if(Be)try{let e=Date.now()+864e5,n={...t,expiresAt:e};sessionStorage.setItem(Ce,JSON.stringify(n))}catch{}}function Ve(t){return t||O()}var Pt="0.1.1",W={...Fe(),monitor:void 0,version:Pt};function w(){return W}function S(t){W=t(W),Ge({state:W.state,securityKeys:W.securityKeys})}function M(){let{config:t}=w(),e=t?.endpoint||"https://api.dtect.io/security",n=t?.includeResults?`${e}/client/check/result`:`${e}/client/check`;return{endpoint:e,clientId:t?.clientId,apiKey:t?.apiKey,checkResultEndpoint:n}}async function I(t,e="info",n={}){let o=`${n.endpoint??"https://api.dtect.io/security"}/log`,r={message:t,type:e,payload:n};navigator.sendBeacon(o,JSON.stringify(r))}function N(t){if(t instanceof Error){if(t?.message?.includes("maintenance_mode"))throw new Error(h.MAINTENANCE_MODE);switch(t?.message){default:throw new Error(h.INTERNAL_SERVER_ERROR)}}throw new Error(h.FAILED_TO_GET_SECURITY_TOKEN)}function We(t,e){let{state:n,config:o}=w();if(t instanceof Error){if(I(t.message,"error",{function:"init",endpoint:o?.endpoint,error:t,token:n.token,clientId:e.clientId}),t.message.includes("maintenance_mode"))throw new Error(h.MAINTENANCE_MODE);if([h.INVALID_API_KEY,h.UNAUTHORIZED].includes(t.message))throw new Error(h.INVALID_CREDENTIALS)}throw new Error(h.SDK_INIT_ERROR)}function qe(t){let e=t?.qbc||!1,n=t?.mas||!1,o=t?.apd||!1,r=t?.scb||null,i=0,a=new Set,s=()=>{a.forEach(g=>g())},c=()=>{e=!1,n=!1,o=!1,r=void 0,i=0},m=()=>{let f=window?.getSelection()?.toString();f&&f.length>0&&(i=Date.now(),e=!0,s())},u=g=>{let f=g.clipboardData?.getData("text"),T=g.target instanceof HTMLInputElement||g.target instanceof HTMLTextAreaElement;f&&T&&(o=!0,s())},d=()=>{n=!0;let g=Date.now();if(i){let f=(g-i)/1e3;(r==null||f<r)&&(r=f)}s()};return document?.addEventListener("copy",m),document?.addEventListener("paste",u),window?.addEventListener("blur",d),{get qbc(){return e},get mas(){return n},get apd(){return o},get scb(){return r},onChange(g){return a.add(g),()=>{a.delete(g)}},reset:c,destroy(){a.clear(),document?.removeEventListener("copy",m),document?.removeEventListener("paste",u),window?.removeEventListener("blur",d)}}}function Ke(t){S(e=>{let n=qe(null);return{...e,monitor:n,state:{...e.state,isLoading:!0,token:t||"",aiUsageFlagged:!1}}})}function je(t){S(e=>({...e,state:{...e.state,isLoading:!1,token:t||""}}))}function L({projectId:t,visitorId:e}){let{state:n,monitor:o}=w();if(n.projectId===t&&n.visitorId===e)return;let r=O();o?.reset(),S(i=>({...i,state:{...i.state,aiCheckData:null,questionData:null,clientData:null,aiUsageFlagged:!1,projectId:t,visitorId:e,token:r}}))}var C={exclude:[],include:[],stabilize:["private","iframe"],logging:!0,timeout:5e3,cache_api_call:!0,performance:!1,experimental:!1},hr={...C},me={private:[{exclude:["canvas"],browsers:["firefox","safari>=17","brave"]},{exclude:["audio"],browsers:["samsungbrowser","safari"]},{exclude:["fonts"],browsers:["firefox"]},{exclude:["audio.sampleHash","hardware.deviceMemory","header.acceptLanguage.q","system.hardwareConcurrency","plugins"],browsers:["brave"]},{exclude:["tls.extensions"],browsers:["firefox","chrome","safari"]},{exclude:["header.acceptLanguage"],browsers:["edge","chrome"]}],iframe:[{exclude:["system.applePayVersion","system.cookieEnabled"],browsers:["safari"]},{exclude:["permissions"]}],vpn:[{exclude:["ip"]}]};async function de(){return _t()}async function _t(){return new Promise((e,n)=>{try{let i=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,5e3,44100),a=i?.createBufferSource(),s=i.createOscillator();s.frequency.value=1e3;let c=i.createDynamicsCompressor();c.threshold.value=-50,c.knee.value=40,c.ratio.value=12,c.attack.value=0,c.release.value=.2,s.connect(c),c.connect(i.destination),s.start();let m;i.oncomplete=u=>{m=u.renderedBuffer.getChannelData(0),e({sampleHash:Ot(m),maxChannels:i.destination.maxChannelCount,channelCountMode:a.channelCountMode})},i.startRendering()}catch(o){console.error("Error creating audio fingerprint:",o),n(o)}})}function Ot(t){let e=0;for(let n=0;n<t.length;++n)e+=Math.abs(t[n]);return e}function Y(t,e,n){let o=[];for(let a=0;a<t[0].data.length;a++){let s=[];for(let c=0;c<t.length;c++)s.push(t[c].data[a]);o.push(Mt(s))}let r=o,i=new Uint8ClampedArray(r);return new ImageData(i,e,n)}function Mt(t){if(t.length===0)return 0;let e={};for(let o of t)e[o]=(e[o]||0)+1;let n=t[0];for(let o in e)e[o]>e[n]&&(n=parseInt(o,10));return n}function Nt(t){return new TextEncoder().encode(t).buffer}function Q(t){return t^=t>>>16,t=Math.imul(t,2246822507),t^=t>>>13,t=Math.imul(t,3266489909),t^=t>>>16,t>>>0}var x=new Uint32Array([597399067,2869860233,951274213,2716044179]);function k(t,e){return t<<e|t>>>32-e}function Lt(t,e){let n=t.byteLength/16|0,o=new Uint32Array(t,0,n*4);for(let r=0;r<n;r++){let i=o.subarray(r*4,(r+1)*4);i[0]=Math.imul(i[0],x[0]),i[0]=k(i[0],15),i[0]=Math.imul(i[0],x[1]),e[0]=e[0]^i[0],e[0]=k(e[0],19),e[0]=e[0]+e[1],e[0]=Math.imul(e[0],5)+1444728091,i[1]=Math.imul(i[1],x[1]),i[1]=k(i[1],16),i[1]=Math.imul(i[1],x[2]),e[1]=e[1]^i[1],e[1]=k(e[1],17),e[1]=e[1]+e[2],e[1]=Math.imul(e[1],5)+197830471,i[2]=Math.imul(i[2],x[2]),i[2]=k(i[2],17),i[2]=Math.imul(i[2],x[3]),e[2]=e[2]^i[2],e[2]=k(e[2],15),e[2]=e[2]+e[3],e[2]=Math.imul(e[2],5)+2530024501,i[3]=Math.imul(i[3],x[3]),i[3]=k(i[3],18),i[3]=Math.imul(i[3],x[0]),e[3]=e[3]^i[3],e[3]=k(e[3],13),e[3]=e[3]+e[0],e[3]=Math.imul(e[3],5)+850148119}}function Ct(t,e){let n=t.byteLength/16|0,o=t.byteLength%16,r=new Uint32Array(4),i=new Uint8Array(t,n*16,o);switch(o){case 15:r[3]=r[3]^i[14]<<16;case 14:r[3]=r[3]^i[13]<<8;case 13:r[3]=r[3]^i[12]<<0,r[3]=Math.imul(r[3],x[3]),r[3]=k(r[3],18),r[3]=Math.imul(r[3],x[0]),e[3]=e[3]^r[3];case 12:r[2]=r[2]^i[11]<<24;case 11:r[2]=r[2]^i[10]<<16;case 10:r[2]=r[2]^i[9]<<8;case 9:r[2]=r[2]^i[8]<<0,r[2]=Math.imul(r[2],x[2]),r[2]=k(r[2],17),r[2]=Math.imul(r[2],x[3]),e[2]=e[2]^r[2];case 8:r[1]=r[1]^i[7]<<24;case 7:r[1]=r[1]^i[6]<<16;case 6:r[1]=r[1]^i[5]<<8;case 5:r[1]=r[1]^i[4]<<0,r[1]=Math.imul(r[1],x[1]),r[1]=k(r[1],16),r[1]=Math.imul(r[1],x[2]),e[1]=e[1]^r[1];case 4:r[0]=r[0]^i[3]<<24;case 3:r[0]=r[0]^i[2]<<16;case 2:r[0]=r[0]^i[1]<<8;case 1:r[0]=r[0]^i[0]<<0,r[0]=Math.imul(r[0],x[0]),r[0]=k(r[0],15),r[0]=Math.imul(r[0],x[1]),e[0]=e[0]^r[0]}}function Bt(t,e){e[0]=e[0]^t.byteLength,e[1]=e[1]^t.byteLength,e[2]=e[2]^t.byteLength,e[3]=e[3]^t.byteLength,e[0]=e[0]+e[1]|0,e[0]=e[0]+e[2]|0,e[0]=e[0]+e[3]|0,e[1]=e[1]+e[0]|0,e[2]=e[2]+e[0]|0,e[3]=e[3]+e[0]|0,e[0]=Q(e[0]),e[1]=Q(e[1]),e[2]=Q(e[2]),e[3]=Q(e[3]),e[0]=e[0]+e[1]|0,e[0]=e[0]+e[2]|0,e[0]=e[0]+e[3]|0,e[1]=e[1]+e[0]|0,e[2]=e[2]+e[0]|0,e[3]=e[3]+e[0]|0}function b(t,e=0){if(e=e?e|0:0,typeof t=="string"&&(t=Nt(t)),!(t instanceof ArrayBuffer))throw new TypeError("Expected key to be ArrayBuffer or string");let n=new Uint32Array([e,e,e,e]);Lt(t,n),Ct(t,n),Bt(t,n);let o=new Uint8Array(n.buffer);return Array.from(o).map(r=>r.toString(16).padStart(2,"0")).join("")}var Ut=3,$e=280,ze=20;async function ge(){return Ft()}function Ft(){return new Promise(t=>{let e=Array.from({length:Ut},()=>Gt()),n=Y(e,$e,ze);t({commonPixelsHash:b(n.data.toString()).toString()})})}function Gt(){let t=document.createElement("canvas"),e=t.getContext("2d");if(!e)return new ImageData(1,1);t.width=$e,t.height=ze;let n=e.createLinearGradient(0,0,t.width,t.height);n.addColorStop(0,"red"),n.addColorStop(1/6,"orange"),n.addColorStop(2/6,"yellow"),n.addColorStop(3/6,"green"),n.addColorStop(4/6,"blue"),n.addColorStop(5/6,"indigo"),n.addColorStop(1,"violet"),e.fillStyle=n,e.fillRect(0,0,t.width,t.height);let o="Random Text WMwmil10Oo";return e.font="23.123px Arial",e.fillStyle="black",e.fillText(o,-5,15),e.fillStyle="rgba(0, 0, 255, 0.5)",e.fillText(o,-3.3,17.7),e.beginPath(),e.moveTo(0,0),e.lineTo(t.width*2/7,t.height),e.strokeStyle="white",e.lineWidth=2,e.stroke(),e.getImageData(0,0,t.width,t.height)}async function J(t){for(;!document.body;)await Vt(50);let e=document.createElement("iframe");e.setAttribute("frameBorder","0");let n=e.style;n.setProperty("position","fixed"),n.setProperty("display","block","important"),n.setProperty("visibility","visible"),n.setProperty("border","0"),n.setProperty("opacity","0"),e.src="about:blank",document.body.appendChild(e);let o=e.contentDocument||e.contentWindow?.document;if(!o)throw new Error("Iframe document is not accessible");t({iframe:o}),setTimeout(()=>{document.body.removeChild(e)},0)}function Vt(t,e){return new Promise(n=>setTimeout(n,t,e))}var Wt=["Arial","Arial Black","Arial Narrow","Arial Rounded MT","Arimo","Archivo","Barlow","Bebas Neue","Bitter","Bookman","Calibri","Cabin","Candara","Century","Century Gothic","Comic Sans MS","Constantia","Courier","Courier New","Crimson Text","DM Mono","DM Sans","DM Serif Display","DM Serif Text","Dosis","Droid Sans","Exo","Fira Code","Fira Sans","Franklin Gothic Medium","Garamond","Geneva","Georgia","Gill Sans","Helvetica","Impact","Inconsolata","Indie Flower","Inter","Josefin Sans","Karla","Lato","Lexend","Lucida Bright","Lucida Console","Lucida Sans Unicode","Manrope","Merriweather","Merriweather Sans","Montserrat","Myriad","Noto Sans","Nunito","Nunito Sans","Open Sans","Optima","Orbitron","Oswald","Pacifico","Palatino","Perpetua","PT Sans","PT Serif","Poppins","Prompt","Public Sans","Quicksand","Rajdhani","Recursive","Roboto","Roboto Condensed","Rockwell","Rubik","Segoe Print","Segoe Script","Segoe UI","Sora","Source Sans Pro","Space Mono","Tahoma","Taviraj","Times","Times New Roman","Titillium Web","Trebuchet MS","Ubuntu","Varela Round","Verdana","Work Sans"],qt=["monospace","sans-serif","serif"];async function fe(t){return Kt()}function Kt(){return new Promise((t,e)=>{try{J(async({iframe:n})=>{let r=n.createElement("canvas").getContext("2d"),i=qt.map(s=>Ye(r,s)),a={};Wt.forEach(s=>{let c=Ye(r,s);i.includes(c)||(a[s]=c)}),t(a)})}catch{e({error:"unsupported"})}})}function Ye(t,e){if(!t)return null;let n="WwMmLli0Oo";return t.font=`72px ${e}`,t.measureText(n).width}function pe(){return new Promise((t,e)=>{let n=navigator.deviceMemory!==void 0?navigator.deviceMemory:0,o=window.performance&&window.performance.memory?window.performance.memory:0;t({videocard:jt(),architecture:$t(),deviceMemory:n.toString()||"undefined",jsHeapSizeLimit:o.jsHeapSizeLimit||0})})}function jt(){let t=document.createElement("canvas"),e=t.getContext("webgl")??t.getContext("experimental-webgl");if(e&&"getParameter"in e)try{let n=(e.getParameter(e.VENDOR)||"").toString(),o=(e.getParameter(e.RENDERER)||"").toString(),r={vendor:n,renderer:o,version:(e.getParameter(e.VERSION)||"").toString(),shadingLanguageVersion:(e.getParameter(e.SHADING_LANGUAGE_VERSION)||"").toString()};if(!o.length||!n.length){let i=e.getExtension("WEBGL_debug_renderer_info");if(i){let a=(e.getParameter(i.UNMASKED_VENDOR_WEBGL)||"").toString(),s=(e.getParameter(i.UNMASKED_RENDERER_WEBGL)||"").toString();a&&(r.vendorUnmasked=a),s&&(r.rendererUnmasked=s)}}return r}catch{}return"undefined"}function $t(){let t=new Float32Array(1),e=new Uint8Array(t.buffer);return t[0]=1/0,t[0]=t[0]-t[0],e[3]}function ye(){return new Promise(t=>{t({languages:zt(),timezone:Yt()})})}function zt(){let t=[];return navigator.language}function Yt(){return Intl.DateTimeFormat().resolvedOptions().timeZone}var X=(t,e,n,o)=>{let r=(n-e)/o,i=0;for(let a=0;a<o;a++){let s=e+(a+.5)*r;i+=t(s)}return i*r};function he(){return new Promise(t=>{t({acos:Math.acos(.5),asin:X(Math.asin,-1,1,97),cos:X(Math.cos,0,Math.PI,97),largeCos:Math.cos(1e20),largeSin:Math.sin(1e20),largeTan:Math.tan(1e20),sin:X(Math.sin,-Math.PI,Math.PI,97),tan:X(Math.tan,0,2*Math.PI,97)})})}function Qt(t){if(t.length===0)return null;let e={};t.forEach(r=>{let i=String(r);e[i]=(e[i]||0)+1});let n=t[0],o=1;return Object.keys(e).forEach(r=>{e[r]>o&&(n=r,o=e[r])}),n}function Qe(t,e){let n={};return e.forEach(o=>{let r=t.map(a=>o in a?a[o]:void 0).filter(a=>a!==void 0),i=Qt(r);i&&(n[o]=i)}),n}var Jt=["accelerometer","accessibility","accessibility-events","ambient-light-sensor","background-fetch","background-sync","bluetooth","camera","clipboard-read","clipboard-write","device-info","display-capture","gyroscope","geolocation","local-fonts","magnetometer","microphone","midi","nfc","notifications","payment-handler","persistent-storage","push","speaker","storage-access","top-level-storage-access","window-management","query"];async function we(t){let e=t?.permissions_to_check||Jt,o=await Promise.all(Array.from({length:3},()=>Xt(e)));return Qe(o,e)}async function Xt(t){let e={};for(let n of t)try{let o=await navigator.permissions.query({name:n});e[n]=o.state.toString()}catch{}return e}async function Ie(){let t=[];if(navigator.plugins)for(let e=0;e<navigator.plugins.length;e++){let n=navigator.plugins[e];t.push([n.name,n.filename,n.description].join("|"))}return new Promise(e=>{e({plugins:t})})}function B(){if(typeof navigator>"u")return{name:"unknown",version:"unknown"};let t=navigator.userAgent,e=[/(?<name>SamsungBrowser)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>EdgA|EdgiOS|Edg)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>OPR|OPX)\/(?<version>\d+(?:\.\d+)+)/,/Opera[\s\/](?<version>\d+(?:\.\d+)+)/,/Opera Mini\/(?<version>\d+(?:\.\d+)+)/,/Opera Mobi\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Vivaldi)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Brave)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>CriOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>FxiOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Chrome|Chromium)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Firefox|Waterfox|Iceweasel|IceCat)\/(?<version>\d+(?:\.\d+)+)/,/Version\/(?<version1>[\d.]+).*Safari\/[\d.]+|(?<name>Safari)\/(?<version2>[\d.]+)/,/(?<name>MSIE|Trident|IEMobile).+?(?<version>\d+(?:\.\d+)+)/,/(?<name>[A-Za-z]+)\/(?<version>\d+(?:\.\d+)+)/],n={edg:"Edge",edga:"Edge",edgios:"Edge",opr:"Opera",opx:"Opera",crios:"Chrome",fxios:"Firefox",samsung:"SamsungBrowser",vivaldi:"Vivaldi",brave:"Brave"};for(let o of e){let r=t.match(o);if(r){let i=r.groups?.name,a=r.groups?.version||r.groups?.version1||r.groups?.version2;if(!i&&(r.groups?.version1||r.groups?.version2)&&(i="Safari"),!i&&o.source.includes("Opera Mini")&&(i="Opera Mini"),!i&&o.source.includes("Opera Mobi")&&(i="Opera Mobi"),!i&&o.source.includes("Opera")&&(i="Opera"),!i&&r[1]&&(i=r[1]),!a&&r[2]&&(a=r[2]),i)return{name:n[i.toLowerCase()]||i,version:a||"unknown"}}}return{name:"unknown",version:"unknown"}}function Z(){if(typeof navigator>"u"||!navigator.userAgent)return!1;let t=navigator.userAgent;return/Mobi|Android|iPhone|iPod|IEMobile|Opera Mini|Opera Mobi|webOS|BlackBerry|Windows Phone/i.test(t)&&!/iPad/i.test(t)}function ve(){return new Promise(t=>{let e={is_touchscreen:navigator.maxTouchPoints>0,maxTouchPoints:navigator.maxTouchPoints,colorDepth:screen.colorDepth,mediaMatches:Ht()};Z()&&navigator.maxTouchPoints>0&&(e.resolution=Zt()),t(e)})}function Zt(){let t=window.screen.width,e=window.screen.height,n=Math.max(t,e).toString(),o=Math.min(t,e).toString();return`${n}x${o}`}function Ht(){let t=[],e={"prefers-contrast":["high","more","low","less","forced","no-preference"],"any-hover":["hover","none"],"any-pointer":["none","coarse","fine"],pointer:["none","coarse","fine"],hover:["hover","none"],update:["fast","slow"],"inverted-colors":["inverted","none"],"prefers-reduced-motion":["reduce","no-preference"],"prefers-reduced-transparency":["reduce","no-preference"],scripting:["none","initial-only","enabled"],"forced-colors":["active","none"]};return Object.keys(e).forEach(n=>{e[n].forEach(o=>{matchMedia(`(${n}: ${o})`).matches&&t.push(`${n}: ${o}`)})}),t}function Ee(){return new Promise(t=>{let e=B(),n=navigator.userAgent,o={platform:window.navigator.platform,productSub:navigator.productSub,product:navigator.product,useragent:navigator.userAgent,hardwareConcurrency:navigator.hardwareConcurrency,browser:{name:e.name,version:e.version},mobile:Z(),applePayVersion:en(),cookieEnabled:window.navigator.cookieEnabled};t(o)})}function en(){if(window.location.protocol==="https:"&&typeof window.ApplePaySession=="function")try{let t=window.ApplePaySession.supportsVersion;for(let e=15;e>0;e--)if(t(e))return e}catch{return 0}return 0}var tn=B().name!=="SamsungBrowser"?1:3,A,l=null;function nn(){typeof document<"u"&&(A=document.createElement("canvas"),A.width=200,A.height=100,l=A.getContext("webgl"))}async function be(){nn();try{if(!l)throw new Error("WebGL not supported");let t=Array.from({length:tn},()=>rn()),e=Y(t,A.width,A.height);return{commonPixelsHash:b(e.data.toString()).toString()}}catch{return{webgl:"unsupported"}}}function rn(){try{if(!l)throw new Error("WebGL not supported");let t=`
2
2
  attribute vec2 position;
3
3
  void main() {
4
4
  gl_Position = vec4(position, 0.0, 1.0);
5
5
  }
6
- `,t=`
6
+ `,e=`
7
7
  precision mediump float;
8
8
  void main() {
9
9
  gl_FragColor = vec4(0.812, 0.195, 0.553, 0.921); // Set line color
10
10
  }
11
- `,n=p.createShader(p.VERTEX_SHADER),r=p.createShader(p.FRAGMENT_SHADER);if(!n||!r)throw new Error("Failed to create shaders");if(p.shaderSource(n,e),p.shaderSource(r,t),p.compileShader(n),!p.getShaderParameter(n,p.COMPILE_STATUS))throw new Error("Vertex shader compilation failed: "+p.getShaderInfoLog(n));if(p.compileShader(r),!p.getShaderParameter(r,p.COMPILE_STATUS))throw new Error("Fragment shader compilation failed: "+p.getShaderInfoLog(r));let o=p.createProgram();if(!o)throw new Error("Failed to create shader program");if(p.attachShader(o,n),p.attachShader(o,r),p.linkProgram(o),!p.getProgramParameter(o,p.LINK_STATUS))throw new Error("Shader program linking failed: "+p.getProgramInfoLog(o));p.useProgram(o);let i=137,a=new Float32Array(i*4),s=2*Math.PI/i;for(let m=0;m<i;m++){let y=m*s;a[m*4]=0,a[m*4+1]=0,a[m*4+2]=Math.cos(y)*(O.width/2),a[m*4+3]=Math.sin(y)*(O.height/2)}let c=p.createBuffer();p.bindBuffer(p.ARRAY_BUFFER,c),p.bufferData(p.ARRAY_BUFFER,a,p.STATIC_DRAW);let d=p.getAttribLocation(o,"position");p.enableVertexAttribArray(d),p.vertexAttribPointer(d,2,p.FLOAT,!1,0,0),p.viewport(0,0,O.width,O.height),p.clearColor(0,0,0,1),p.clear(p.COLOR_BUFFER_BIT),p.drawArrays(p.LINES,0,i*2);let u=new Uint8ClampedArray(O.width*O.height*4);return p.readPixels(0,0,O.width,O.height,p.RGBA,p.UNSIGNED_BYTE,u),new ImageData(u,O.width,O.height)}catch{return new ImageData(1,1)}finally{p&&(p.bindBuffer(p.ARRAY_BUFFER,null),p.useProgram(null),p.viewport(0,0,p.drawingBufferWidth,p.drawingBufferHeight),p.clearColor(0,0,0,0))}}function x(e){let t=[];return function n(r){if(r&&r.toJSON&&typeof r.toJSON=="function"&&(r=r.toJSON()),r===void 0)return;if(typeof r=="number")return isFinite(r)?""+r:"null";if(typeof r!="object")return JSON.stringify(r);let o,i;if(Array.isArray(r)){for(i="[",o=0;o<r.length;o++)o&&(i+=","),i+=n(r[o])||"null";return i+"]"}if(r===null)return"null";if(t.indexOf(r)!==-1)throw new TypeError("Converting circular structure to JSON");let a=t.push(r)-1,s=Object.keys(r).sort();for(i="",o=0;o<s.length;o++){let c=s[o],d=n(r[c]);d&&(i&&(i+=","),i+=JSON.stringify(c)+":"+d)}return t.splice(a,1),"{"+i+"}"}(e)||""}async function Je(){return new Promise(e=>{try{let t=window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection;if(!t){e({supported:!1,error:"WebRTC not supported"});return}let n={iceCandidatePoolSize:1,iceServers:[]},r=new t(n);r.createDataChannel(""),(async()=>{try{let i={offerToReceiveAudio:!0,offerToReceiveVideo:!0},a=await r.createOffer(i);await r.setLocalDescription(a);let s=a.sdp||"",c=[...new Set((s.match(/extmap:\d+ [^\n\r]+/g)||[]).map(f=>f.replace(/extmap:\d+ /,"")))].sort(),d=f=>{let I=s.match(new RegExp(`m=${f} [^\\s]+ [^\\s]+ ([^\\n\\r]+)`));return I?I[1].split(" "):[]},u=(f,I)=>I.map(h=>{let T=new RegExp(`(rtpmap|fmtp|rtcp-fb):${h} (.+)`,"g"),_=[...s.matchAll(T)];if(!_.length)return null;let E={};return _.forEach(Se=>{let[ko,Ae,Pe]=Se,De=Pe.split("/");Ae==="rtpmap"?(E.mimeType=`${f}/${De[0]}`,E.clockRate=+De[1],f==="audio"&&(E.channels=+De[2]||1)):Ae==="rtcp-fb"?(E.feedbackSupport=E.feedbackSupport||[],E.feedbackSupport.push(Pe)):Ae==="fmtp"&&(E.sdpFmtpLine=Pe)}),E}).filter(Boolean),l=u("audio",d("audio")),m=u("video",d("video")),y={audio:{count:l.length,hash:A(x(l))},video:{count:m.length,hash:A(x(m))},extensionsHash:A(x(c))},g=await new Promise(f=>{let I=setTimeout(()=>{r.removeEventListener("icecandidate",h),r.close(),f({supported:!0,...y,timeout:!0})},3e3),h=T=>{let _=T.candidate;!_||!_.candidate||(clearTimeout(I),r.removeEventListener("icecandidate",h),r.close(),f({supported:!0,...y,candidateType:_.type||""}))};r.addEventListener("icecandidate",h)});e({details:g,hash:A(x(g))})}catch(i){r.close(),e({supported:!0,error:`WebRTC offer failed: ${i.message}`})}})()}catch(t){e({supported:!1,error:`WebRTC error: ${t.message}`})}})}var Bt=["\u{1D504}","\u{1D505}","\u212D","\u{1D507}","\u{1D508}","\u{1D509}","\u{1D538}","\u{1D539}","\u2102","\u{1D53B}","\u{1D53C}","\u{1D53D}"],qt=["\u03B2","\u03C8","\u03BB","\u03B5","\u03B6","\u03B1","\u03BE","\u03BC","\u03C1","\u03C6","\u03BA","\u03C4","\u03B7","\u03C3","\u03B9","\u03C9","\u03B3","\u03BD","\u03C7","\u03B4","\u03B8","\u03C0","\u03C5","\u03BF"];async function Xe(){return new Promise(e=>{try{ue(async({iframe:t})=>{try{if(!Qr(t)){e({supported:!1,error:"MathML not supported"});return}let n=[H("integral","<msubsup><mo>\u222B</mo><mi>a</mi><mi>b</mi></msubsup><mfrac><mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mrow><mi>g</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mfrac><mi>dx</mi>"),H("fraction","<mfrac><mrow><mi>\u03C0</mi><mo>\xD7</mo><msup><mi>r</mi><mn>2</mn></msup></mrow><mrow><mn>2</mn><mi>\u03C3</mi></mrow></mfrac>"),H("matrix","<mo>[</mo><mtable><mtr><mtd><mi>\u03B1</mi></mtd><mtd><mi>\u03B2</mi></mtd></mtr><mtr><mtd><mi>\u03B3</mi></mtd><mtd><mi>\u03B4</mi></mtd></mtr></mtable><mo>]</mo>"),Wr(),...$r()],r=[],o="";n.forEach((a,s)=>{let c=zr(a,t);r.push({width:c.dimensions.width,height:c.dimensions.height}),s===0&&c.fontInfo&&(o=A(x(c.fontInfo)))});let i={fontStyleHash:o,dimensions:r};e({details:i,hash:A(x(i))})}catch(n){e({supported:!1,error:`MathML error: ${n.message}`})}})}catch(t){e({supported:!1,error:`MathML error: ${t.message}`})}})}function Qr(e){try{let t=e.createElement("math");t.innerHTML="<mrow><mi>x</mi></mrow>",t.style.position="absolute",t.style.visibility="hidden",e.body.appendChild(t);let n=t.getBoundingClientRect();return e.body.removeChild(t),n.width>0&&n.height>0}catch{return!1}}function H(e,t){return`<math><mrow>${t}</mrow></math>`}function Wr(){let e="<mo>\u220F</mo>";return Bt.forEach((t,n)=>{let r=n*2,o=qt.slice(r,r+2);o.length===2&&(e+=`<mmultiscripts><mi>${t}</mi><none/><mi>${o[1]}</mi><mprescripts></mprescripts><mi>${o[0]}</mi><none/></mmultiscripts>`)}),H("complex_nested",`<munderover><mmultiscripts>${e}</mmultiscripts></munderover>`)}function $r(){let e=[];return Bt.forEach((t,n)=>{let r=n*2,o=qt.slice(r,r+2);o.length===2&&e.push(H("combined",`<mmultiscripts><mi>${t}</mi><none/><mi>${o[1]}</mi><mprescripts></mprescripts><mi>${o[0]}</mi><none/></mmultiscripts>`))}),e}function zr(e,t){try{let n=t.createElement("math");n.innerHTML=e.replace(/<\/?math>/g,""),n.style.whiteSpace="nowrap",n.style.position="absolute",n.style.visibility="hidden",n.style.top="-9999px",t.body.appendChild(n);let r=n.getBoundingClientRect(),i=(t.defaultView||window).getComputedStyle(n),a={dimensions:{width:r.width,height:r.height},fontInfo:{fontFamily:i.fontFamily,fontSize:i.fontSize,fontWeight:i.fontWeight,fontStyle:i.fontStyle,lineHeight:i.lineHeight,fontVariant:i.fontVariant||"normal",fontStretch:i.fontStretch||"normal",fontSizeAdjust:i.fontSizeAdjust||"none",textRendering:i.textRendering||"auto",fontFeatureSettings:i.fontFeatureSettings||"normal",fontVariantNumeric:i.fontVariantNumeric||"normal",fontKerning:i.fontKerning||"auto"}};return t.body.removeChild(n),a}catch(n){return{error:n.message}}}var Yr=800;async function Ze(){return new Promise(e=>{try{if(typeof window>"u"||!window.speechSynthesis||typeof window.speechSynthesis.getVoices!="function"){e({supported:!1,error:"Speech Synthesis API not supported"});return}let t=!1,n=null,r=a=>{if(!t){t=!0,n&&clearTimeout(n);try{let s=a.map(d=>{let u=m=>m.replace(/\\/g,"\\\\").replace(/,/g,"\\,");return[u(d.voiceURI||""),u(d.name||""),u(d.lang||""),d.localService?"1":"0",d.default?"1":"0"].join(",")});s.sort();let c={voiceCount:a.length,voicesHash:A(x(s))};e({details:c,hash:A(x(c))})}catch(s){e({supported:!0,error:`Voice processing failed: ${s.message}`})}}},o=window.speechSynthesis.getVoices();if(o.length>0){r(o);return}n=setTimeout(()=>{let a=window.speechSynthesis.getVoices();r(a)},Yr);let i=()=>{window.speechSynthesis.removeEventListener("voiceschanged",i);let a=window.speechSynthesis.getVoices();r(a)};window.speechSynthesis.addEventListener("voiceschanged",i)}catch(t){e({supported:!1,error:`Speech Synthesis error: ${t.message}`})}})}var Kt={audio:Be,canvas:qe,fonts:Ke,hardware:Ge,locales:je,math:Ve,permissions:Qe,plugins:We,screen:$e,system:ze,webgl:Ye},Gt={webrtc:Je,mathml:Xe,speech:Ze},He={},jt={timeout:"true"},et=(e,t,n)=>{He[e]=t};function Jr(e,t){return new Promise(n=>{setTimeout(()=>n(t),e)})}function Vt(e,t,n){return Promise.all(e.map(r=>{let o=performance.now();return Promise.race([r.then(i=>({value:i,elapsed:performance.now()-o})),Jr(t,n).then(i=>({value:i,elapsed:performance.now()-o}))])}))}function me(e,t){let n=V();if(n.name==="unknown"&&e.system&&typeof e.system=="object"&&!Array.isArray(e.system)){let l=e.system.browser;if(l&&typeof l=="object"&&!Array.isArray(l)){let m=l;n={name:m.name||"unknown",version:m.version||"unknown"}}}let r=n.name.toLowerCase(),o=n.version.split(".")[0]||"0",i=parseInt(o,10),a=[...t?.exclude||[]],s=t?.stabilize||[],c=t?.include||[];for(let u of s){let l=Ue[u];if(l)for(let m of l){let y=!("browsers"in m),g=!y&&m.browsers?.some(f=>{let I=f.match(/(.+?)(>=)(\d+)/);if(I){let[,h,,T]=I,_=parseInt(T,10);return r===h&&i>=_}return r===f});(y||g)&&a.push(...m.exclude)}}function d(u,l=""){let m={};for(let[y,g]of Object.entries(u)){let f=l?`${l}.${y}`:y;if(typeof g=="object"&&!Array.isArray(g)&&g!==null){let I=d(g,f);Object.keys(I).length>0&&(m[y]=I)}else{let I=a.some(T=>f.startsWith(T)),h=c.some(T=>f.startsWith(T));(!I||h)&&(m[y]=g)}}return m}return d(e)}async function tt(e){let t={...j,...e},n=t.logging&&!sessionStorage.getItem("_tmjs_l")&&Math.random()<1e-4,r={...Kt,...He},{elapsed:o,resolvedComponents:i}=await Qt(r,t),a={},s={};if(n||t.experimental){let{elapsed:I,resolvedComponents:h}=await Qt(Gt,t);a=h,s=I}let c={...o,...s},d=t.performance?{elapsed:c}:{},u=me({},t),l={...i,...u},m={};return{thumbmark:A(x(l)),components:l,info:m,version:"",...d,...Object.keys(a).length>0&&t.experimental&&{experimental:a}}}async function Qt(e,t){let n={...j,...t},r=Object.entries(e).filter(([u])=>!n?.exclude?.includes(u)).filter(([u])=>n?.include?.some(l=>l.includes("."))?n?.include?.some(l=>l.startsWith(u)):n?.include?.length===0||n?.include?.includes(u)),o=r.map(([u])=>u),i=r.map(([u,l])=>l(t)),a=await Vt(i,n?.timeout||5e3,jt),s={},c={};a.forEach((u,l)=>{u.value!=null&&(c[o[l]]=u.value,s[o[l]]=u.elapsed??0)});let d=me(c,n);return{elapsed:s,resolvedComponents:d}}var ee=class{options;constructor(t){this.options={...j,...t}}async get(t){let n={...this.options,...t};return tt(n)}getVersion(){return""}includeComponent(t,n){et(t,n)}};var Xr=(e,t={})=>({"Content-Type":"application/json",...e?.accessToken&&{Authorization:`Bearer ${e?.accessToken}`},...t}),Zr=async(e,t)=>{if(!e.ok){let n=await e.text();throw new Error(n)}return t==="file"?e.blob():t==="json"?e.json():t==="text"?e.text():null},Wt=async({url:e,auth:t,body:n,method:r="GET",headers:o={},responseType:i="json"})=>{let a={method:r,headers:Xr(t,o),...n?{body:n instanceof FormData?n:JSON.stringify(n)}:{}},s=await fetch(e,a);return Zr(s,i)},fe=e=>Wt({...e,method:"GET"}),Q=e=>Wt({...e,method:"POST"});var Hr=[{name:"lowCpuCores",weight:1,async check(){let e=navigator.hardwareConcurrency||0,t=e>0&&e<=2;return{value:e,triggered:t}}},{name:"lowDeviceMemory",weight:1,async check(){let e=navigator.deviceMemory||0,t=e>0&&e<=4;return{value:e,triggered:t}}},{name:"platformMismatch",weight:1,async check(){let e=navigator.userAgent||"",t=navigator.platform||"",n=e.includes("Mac")&&t.includes("Linux")||e.includes("Win")&&t.includes("Mac")||t===""||t==="Unknown";return{value:t,triggered:n}}},{name:"webglSoftwareRenderer",weight:2,async check(){let e=null,t=null,n=!1;try{let r=document.createElement("canvas"),o=r.getContext("webgl")||r.getContext("experimental-webgl");if(o){let i=o.getExtension("WEBGL_debug_renderer_info");if(i){e=o.getParameter(i.UNMASKED_VENDOR_WEBGL)||"",t=o.getParameter(i.UNMASKED_RENDERER_WEBGL)||"";let a=t.toLowerCase(),s=e.toLowerCase();n=a.includes("swiftshader")||a.includes("llvmpipe")||a.includes("softwar")||a.includes("basic render")||a.includes("vmware")||a.includes("virtualbox")||s.includes("vmware")||s.includes("parallels")}}}catch{}return{value:{vendor:e,renderer:t},triggered:n}}},{name:"missingWebGPUAdapter",weight:2,async check(){if(!("gpu"in navigator))return{value:"no WebGPU",triggered:!0};try{let e=await navigator.gpu.requestAdapter();return{value:e?"adapter-present":"adapter-null",triggered:!e}}catch{return{value:"adapter-error",triggered:!0}}}},{name:"reducedTimerPrecision",weight:1,async check(){let e=performance.now();await new Promise(r=>setTimeout(r,50));let t=performance.now()-e,n=t<30||t>80;return{value:t.toFixed(2),triggered:n}}},{name:"timerJitter",weight:1,async check(){let e=[];for(let r=0;r<10;r++){let o=performance.now();await new Promise(a=>setTimeout(a,10));let i=performance.now();e.push(i-o)}let t=Math.sqrt(e.map(r=>(r-10)**2).reduce((r,o)=>r+o)/e.length),n=t>5;return{value:t.toFixed(3),triggered:n}}},{name:"audioFingerprint",weight:1,async check(){try{let e=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,44100,44100),t=e.createOscillator();t.frequency.value=440,t.connect(e.destination),t.start(0);let r=(await e.startRendering()).getChannelData(0).reduce((i,a)=>i+Math.abs(a),0),o=r<100;return{value:r,triggered:o}}catch{return{value:"audio-error",triggered:!0}}}},{name:"canvasEntropy",weight:1,async check(){try{let e=document.createElement("canvas"),t=e.getContext("2d");t.textBaseline="top",t.font="14px 'Arial'",t.fillText("VM CHECK",2,2);let r=[...e.toDataURL()].reduce((i,a)=>(i+a.charCodeAt(0))%9999999,0);return{value:r,triggered:r===0||r===999999}}catch{return{value:"canvas-error",triggered:!0}}}},{name:"windowSizeWeird",weight:1,async check(){let e=window.innerWidth/window.innerHeight,t=e===1.333||e===1.6;return{value:e.toFixed(2),triggered:t}}},{name:"touchMismatch",weight:1,async check(){let e="ontouchstart"in window,t=navigator.maxTouchPoints||0;return{value:{hasTouch:e,maxTouch:t},triggered:e&&t===0}}},{name:"batteryVirtualized",weight:1,async check(){if(!navigator.getBattery)return{value:"no API",triggered:!0};try{let e=await navigator.getBattery(),t=e.chargingTime===0&&e.dischargingTime===1/0;return{value:{chargingTime:e.chargingTime,dischargingTime:e.dischargingTime},triggered:t}}catch{return{value:"battery-error",triggered:!0}}}},{name:"permissionsWeird",weight:1,async check(){try{let e=await navigator.permissions.query({name:"camera"}),t=e.state==="prompt";return{value:e.state,triggered:t}}catch{return{value:"perm-error",triggered:!0}}}},{name:"noMediaDevices",weight:1,async check(){try{let e=await navigator.mediaDevices.enumerateDevices(),t=e.length===0;return{value:e.length,triggered:t}}catch{return{value:"media-error",triggered:!0}}}},{name:"virtualizedMediaDevices",weight:1,async check(){try{let e=await navigator.mediaDevices.enumerateDevices(),t=e.some(n=>n.label.toLowerCase().includes("virtual"));return{value:e.map(n=>n.label),triggered:t}}catch{return{value:"media-error",triggered:!0}}}},{name:"webrtcIpPattern",weight:2,async check(){return new Promise(e=>{let t=new RTCPeerConnection({iceServers:[]});t.createDataChannel("x"),t.onicecandidate=n=>{if(!n||!n.candidate){e({value:"no candidate",triggered:!0});return}let r=n.candidate.candidate.toLowerCase(),o=r.includes("10.0.2.")||r.includes("172.16.")||r.includes("192.168.56.");e({value:r,triggered:o})},t.createOffer().then(n=>t.setLocalDescription(n))})}},{name:"gpuAccelerationDisabled",weight:2,async check(){let t=document.createElement("canvas").getContext("webgl");return{value:!!t,triggered:!t}}},{name:"noWebGL2",weight:1,async check(){let e=document.createElement("canvas").getContext("webgl2");return{value:!!e,triggered:!e}}},{name:"lowStorageQuota",weight:1,async check(){try{let e=await navigator.storage.estimate(),t=e.quota<500*1024*1024;return{value:e.quota,triggered:t}}catch{return{value:"storage-error",triggered:!0}}}},{name:"lowEntropy",weight:1,async check(){let e=Object.keys(navigator).length+Object.keys(screen).length+Object.keys(window).length,t=e<200;return{value:e,triggered:t}}},{name:"noLanguages",weight:1,async check(){let e=navigator.languages||[];return{value:e,triggered:e.length===0}}},{name:"uaEntropyLow",weight:1,async check(){let e=navigator.userAgent,t=e.length<30;return{value:e,triggered:t}}},{name:"weirdDPI",weight:1,async check(){let e=window.devicePixelRatio;return{value:e,triggered:e===1}}}];async function $t({threshold:e=7}={}){let t={},n=0;for(let r of Hr){let o=await r.check();t[r.name]=o,o.triggered&&(n+=r.weight)}return{isLikelyVM:n>=e,score:n,threshold:e,signals:t}}var eo=[{name:"hookedFunctionToString",weight:2,async check(){let e=Function.prototype.toString.toString(),t=Function.prototype.toString+"";return{value:{native:e,current:t},triggered:e!==t}}},{name:"navigatorProxyTrap",weight:2,async check(){let e=!1;try{let t=Object.getOwnPropertyDescriptor(window,"navigator");t&&t.get&&t.get.toString()?.includes("[native code]")===!1&&(e=!0)}catch{}return{value:"navigator getter",triggered:e}}},{name:"uaMismatch",weight:2,async check(){let e=navigator.userAgent||"",t="";try{let r=await navigator.userAgentData?.getHighEntropyValues?.(["platform","brands"]);t=JSON.stringify(r)}catch{}let n=e?.includes("Mac")&&t?.includes("Windows")||e?.includes("Win")&&t?.includes("Mac")||t&&t.length>0&&!e;return{value:{ua:e,brandInfo:t},triggered:n}}},{name:"timezoneLocaleMismatch",weight:1,async check(){let e=Intl.DateTimeFormat().resolvedOptions().timeZone,t=navigator.language||"",n=t.startsWith("en")&&e==="Asia/Shanghai"||t.startsWith("zh")&&e==="America/New_York"||e===void 0;return{value:{tz:e,lang:t},triggered:n}}},{name:"canvasNoise",weight:2,async check(){let e=()=>{let o=document.createElement("canvas"),i=o.getContext("2d");return i.textBaseline="top",i.font="14px Arial",i.fillText("anti-detect-check",2,2),o.toDataURL()},t=e(),n=e();return{value:{a:t,b:n},triggered:t!==n}}},{name:"webglNoise",weight:2,async check(){try{let t=document.createElement("canvas").getContext("webgl");if(!t)return{value:"no-webgl",triggered:!0};let n=t.getExtension("WEBGL_debug_renderer_info");if(!n)return{value:"no-debug-extension",triggered:!1};let r=t.getParameter(n.UNMASKED_VENDOR_WEBGL),o=t.getParameter(n.UNMASKED_RENDERER_WEBGL),i=r===""||o===""||r?.includes(" ")===!1||o?.includes(" ")===!1;return{value:{v:r,r:o},triggered:i}}catch{return{value:"gl-error",triggered:!0}}}},{name:"webdriverFlag",weight:3,async check(){let e=navigator.webdriver===!0;return{value:navigator.webdriver,triggered:e}}},{name:"perfectEventTiming",weight:1,async check(){let e=performance.now();return{value:e,triggered:e%1===0}}},{name:"serviceWorkerBlocked",weight:1,async check(){let e=!("serviceWorker"in navigator);return{value:e,triggered:e}}},{name:"smallQuota",weight:2,async check(){try{let e=await navigator.storage.estimate(),t=e.quota<50*1024*1024;return{value:e.quota,triggered:t}}catch{return{value:"quota-error",triggered:!0}}}},{name:"indexedDbBlocked",weight:2,async check(){try{let e=indexedDB.open("tamper-check");return await new Promise(t=>{e.onerror=()=>t({value:"error",triggered:!0}),e.onsuccess=()=>t({value:"ok",triggered:!1})})}catch{return{value:"throw",triggered:!0}}}},{name:"screenDprMismatch",weight:1,async check(){let e=window.screen.width,t=window.screen.height,n=window.devicePixelRatio,r=e===1920&&n===1&&t===1080||n%1!==0&&n%1!==.5;return{value:{w:e,h:t,dpr:n},triggered:r}}},{name:"missingCommonFonts",weight:1,async check(){return{value:"skipped",triggered:!1}}},{name:"noMediaDevices",weight:1,async check(){try{let e=await navigator.mediaDevices.enumerateDevices();return{value:e.length,triggered:e.length===0}}catch{return{value:"error",triggered:!0}}}},{name:"languagesEmpty",weight:1,async check(){let e=navigator.languages||[];return{value:e,triggered:e.length===0}}},{name:"pluginMismatch",weight:1,async check(){try{let e=navigator.plugins.length;return{value:e,triggered:e===0}}catch{return{value:"error",triggered:!0}}}},{name:"devtoolsDetected",weight:2,async check(){return new Promise(async e=>{let t={viewportBreakpoint:!1,consoleSpeed:!1},n=160,r=window.outerWidth-window.innerWidth,o=window.outerHeight-window.innerHeight;(r>n||o>n)&&(t.viewportBreakpoint=!0);async function i(s=50){return new Promise(c=>{let d=performance.now();console.log("%c ","font-size:3000px");let u=performance.now();c(u-d>s)})}t.consoleSpeed=await i();let a=Object.values(t).some(Boolean);setTimeout(()=>{e({value:a,triggered:a})},50)})}},{name:"knownAntiDetectBrowser",weight:5,async check(){let e=navigator.userAgent.toLowerCase(),n=["incogniton","multilogin","morelogin","adspect","kameleo","goLogin"].some(r=>e?.includes(r));return{value:e,triggered:n}}}];async function zt({threshold:e=5}={}){let t={},n=0;for(let o of eo){let i=await o.check();t[o.name]=i,i.triggered&&(n+=o.weight)}let r=Math.min(1,n/15);return{result:r>=.5||t.knownAntiDetectBrowser?.triggered,anomalyScore:r,antiDetectBrowser:t.knownAntiDetectBrowser?.triggered||!1,signals:t}}function to(){let e=0;try{0 .toFixed(-1)}catch(t){e=t.message.length}return e}function no(){let e=navigator.userAgent,t=to();return t===44||t===43?"Safari":t===51?"Chrome":t===25?"Firefox":navigator.msSaveBlob!==void 0?"MSIE":e.match(/Chrome/)?navigator.brave!==void 0?"Brave":e.includes("Edg")?"Edge":e.includes("OPR")?"Opera":"Chrome":"Unknown"}var ro=[{name:"safari_currentStorageTest",weight:2,browser:"Safari",async check(){if(typeof navigator.storage?.getDirectory!="function")return{triggered:!1,value:"unsupported"};try{return await navigator.storage.getDirectory(),{triggered:!1,value:"ok"}}catch(e){let t=e?.message??String(e);return{triggered:t.includes("unknown transient reason"),value:t}}}},{name:"safari13to18_indexedDbBlobTest",weight:2,browser:"Safari",async check(){return await new Promise(e=>{let t=String(Math.random()),n=indexedDB.open(t,1);n.onupgradeneeded=r=>{let o=r.target.result;try{o.createObjectStore("t",{autoIncrement:!0}).put(new Blob),e({triggered:!1,value:"ok"})}catch(i){let a=i?.message??String(i);e({triggered:a.includes("are not yet supported"),value:a})}finally{o.close(),indexedDB.deleteDatabase(t)}},n.onerror=()=>e({triggered:!1,value:"idb-error"})})}},{name:"safari_oldWebkitTest",weight:1,browser:"Safari",async check(){let e=window.openDatabase,t=window.localStorage;try{e(null,null,null,null)}catch{return{triggered:!0,value:"openDatabase denied"}}try{t.setItem("test","1"),t.removeItem("test")}catch{return{triggered:!0,value:"localStorage denied"}}return{triggered:!1,value:"ok"}}},{name:"chrome_storageQuotaPrivateTest",weight:2,browser:"Chrome",async check(){return await new Promise((e,t)=>{let r=window?.performance?.memory?.jsHeapSizeLimit??1073741824;navigator.webkitTemporaryStorage.queryUsageAndQuota((o,i)=>{let a=Math.round(i/1048576),s=Math.round(r/(1024*1024))*2;e({triggered:a<s,value:{quotaMB:a,limitMB:s}})},o=>t(o))})}},{name:"chrome_oldFileSystemTest",weight:1,browser:"Chrome",async check(){let e=window.webkitRequestFileSystem;return e?await new Promise(t=>e(0,1,()=>t({triggered:!1,value:"ok"}),()=>t({triggered:!0,value:"denied"}))):{triggered:!1,value:"unsupported"}}},{name:"firefox_storageDirectoryTest",weight:2,browser:"Firefox",async check(){if(typeof navigator.storage?.getDirectory!="function")return{triggered:!1,value:"unsupported"};try{return await navigator.storage.getDirectory(),{triggered:!1,value:"ok"}}catch(e){let t=e?.message??String(e);return{triggered:t.includes("Security error"),value:t}}}},{name:"firefox_indexedDbInvalidStateTest",weight:1,browser:"Firefox",async check(){return await new Promise(e=>{let t=indexedDB.open("inPrivate");t.onerror=()=>{e({triggered:t.error?.name==="InvalidStateError",value:t.error?.name})},t.onsuccess=()=>{indexedDB.deleteDatabase("inPrivate"),e({triggered:!1,value:"ok"})}})}},{name:"msie_indexedDbMissing",weight:2,browser:"MSIE",async check(){return{triggered:window.indexedDB===void 0,value:"msie-idb-check"}}}];async function Yt(){let e=no(),t={},n=0;for(let r of ro){if(r.browser!==e)continue;let o=await r.check();t[r.name]=o,o.triggered&&(n+=r.weight)}return{isPrivate:n>0,browserName:e,score:n,signals:t}}typeof window<"u"&&(window.detectIncognito=Yt);var Jt=Yt;var Xt=[{name:"globalPrivacyControl",weight:3,async check(){let e=navigator.globalPrivacyControl;return{triggered:e===!0,value:e}}},{name:"doNotTrack",weight:1,async check(){let e=navigator.doNotTrack;return{triggered:e==="1",value:e}}},{name:"cookiesDisabled",weight:3,async check(){let e=navigator.cookieEnabled;return{triggered:e===!1,value:e}}},{name:"thirdPartyCookiesBlocked",weight:3,async check(){try{if("hasStorageAccess"in document&&!await document.hasStorageAccess())try{return await document.requestStorageAccess(),{triggered:!1,value:"access_granted"}}catch{return{triggered:!0,value:"access_denied"}}let e=`__dtect_3p_test_${Date.now()}`;document.cookie=`${e}=1; SameSite=None; Secure`;let t=document.cookie.includes(e);return document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 GMT`,{triggered:!1,value:t?"cookies_work":"may_be_blocked"}}catch(e){return{triggered:!1,value:`error: ${e?.message}`}}}},{name:"firefoxResistFingerprinting",weight:2,async check(){let e=[],t=new Date().getTimezoneOffset();t===0&&Intl.DateTimeFormat().resolvedOptions().timeZone==="UTC"&&e.push("timezone_utc");let n=navigator.hardwareConcurrency;n===2&&e.push("cores_capped");let r=window.screen.width,o=window.screen.height,i=window.innerWidth,a=window.innerHeight;r===i&&o===a&&e.push("screen_matches_inner");let s=window.matchMedia("(prefers-reduced-motion: reduce)").matches;return{triggered:e.length>=2,value:{signals:e,timezoneOffset:t,cores:n,prefersReducedMotion:s}}}},{name:"braveShields",weight:3,async check(){if(!(navigator.brave!==void 0))return{triggered:!1,value:"not_brave"};try{if(!await navigator.brave.isBrave())return{triggered:!1,value:"brave_check_false"};let r=document.createElement("canvas").getContext("2d");if(r){r.fillStyle="rgb(255, 0, 0)",r.fillRect(0,0,1,1);let o=r.getImageData(0,0,1,1).data;r.fillRect(0,0,1,1);let i=r.getImageData(0,0,1,1).data;if(o[0]!==i[0]||o[1]!==i[1]||o[2]!==i[2])return{triggered:!0,value:"shields_active_canvas"}}try{let o=new RTCPeerConnection({iceServers:[{urls:"stun:stun.l.google.com:19302"}]});if(o.createDataChannel(""),await new Promise(a=>{let s=setTimeout(()=>{o.close(),a(!1)},1e3);o.onicecandidate=c=>{c.candidate?.candidate&&(/([0-9]{1,3}\.){3}[0-9]{1,3}/.test(c.candidate.candidate)||(clearTimeout(s),o.close(),a(!0)))},o.createOffer().then(c=>o.setLocalDescription(c))}))return{triggered:!0,value:"shields_active_webrtc"}}catch{return{triggered:!0,value:"shields_active_webrtc_blocked"}}return{triggered:!0,value:"brave_detected_shields_default"}}catch(t){return{triggered:!1,value:`error: ${t?.message}`}}}}];async function Zt(){let e={},t=0,n=await Promise.allSettled(Xt.map(async r=>{let o=await r.check();return{name:r.name,weight:r.weight,result:o}}));for(let r of n)if(r.status==="fulfilled"){let{name:o,weight:i,result:a}=r.value;e[o]=a,a.triggered&&(t+=i)}else{let o=n.indexOf(r),i=Xt[o];i&&(e[i.name]={triggered:!1,value:`check_failed: ${r.reason}`})}return{isPrivacyEnabled:t>3,score:t,signals:e}}typeof window<"u"&&(window.detectPrivacy=Zt);var Ht=Zt;function oo(e){let t=e?.projectId,n=e?.visitorId||F();return(typeof e?.projectId=="number"||typeof e?.visitorId=="number")&&(t=`${e?.projectId}`,n=`${e?.visitorId}`),{visitorId:n,projectId:t}}function W(e){let{projectId:t,visitorId:n}=oo(e);return{projectId:t,visitorId:n}}async function io(){let e=new ee,[t,n,r,o,i]=await Promise.allSettled([e.get(),$t(),zt(),Jt(),Ht()]);return{deviceRes:t,vmDtectResults:n,tamperingDtectResults:r,incognitoDtectResults:o,privacySettingsDtectResults:i}}function so(e,t,n){let r=!n?.usingFpjs||e?.behaviorToken&&e?.behaviorRequestId,o=G()||!n?.usingHcaptcha||e?.automationToken;return r&&o}function ao(e,t,n){return{behaviorToken:e?.behaviorToken,automationToken:e?.automationToken,behaviorRequestId:e?.behaviorRequestId,entryLink:window?.location?.href,securitySettings:t.securitySettings,metaData:t.metaData,vmDtectResults:n?.vmDtectResults?.value,tamperingDtectResults:n?.tamperingDtectResults?.value,incognitoDtectResults:n?.incognitoDtectResults?.value,deviceIdResults:n?.deviceRes?.value,privacySettingsDtectResults:n?.privacySettingsDtectResults?.value}}function co(e,t,n,r){let o=(performance.now()-t).toFixed();R(`${e} finishes in ${o}ms`,"info",{function:e,endpoint:n?.endpoint,diff:o,token:r,clientId:n?.clientId})}function uo(e,t,n,r,o){let i=(performance.now()-t).toFixed();R(`${e} error`,"error",{function:e,endpoint:n?.endpoint,error:o,diff:i,token:r,clientId:n?.clientId})}async function en(e,t){let n=performance.now(),{state:r,config:o,securityKeys:i,version:a}=w();if(!Z())throw new Error(v.NOT_INITIALIZED);let{projectId:s,visitorId:c}=W(e);if(!e||!s?.trim())throw new Error(v.FAILED_TO_GET_SECURITY_RESULT);let d=s!==r.projectId?F():r.token;try{let u=Fe(),l=await io();if(!so(u,i,o))throw new Error(v.INTERNAL_SERVER_ERROR);let m=ao(u,e,l),y={...e,projectId:s,visitorId:c,clientData:m,version:a,token:d,questionData:r.questionData,aiCheckData:r.aiCheckData},g=await Q({url:t,body:y,headers:{"client-id":o?.clientId||"","x-api-key":o?.apiKey||""}});if(!("token"in g||"results"in g))throw new Error(v.INTERNAL_SERVER_ERROR);return P(f=>({...f,state:{...f.state,token:d,visitorId:c,projectId:s,clientData:m}})),co("getResultBase",n,o,d),g}catch(u){uo("getResultBase",n,o,d,u),q(u)}}async function pe(e){let{endpoint:t}=B();if(e)return en(e,`${t}/client/check/result`)}async function he(e){let{endpoint:t}=B();return en(e,`${t}/client/check`)}async function ge(e){let t=performance.now(),{state:n,config:r,monitor:o,version:i}=w(),{checkResultEndpoint:a}=B(),{visitorId:s,projectId:c}=W(e),d={timeTakenSeconds:e.timeTakenSeconds,qbc:e.qbc||o?.qbc,mas:e.mas||o?.mas,scb:e.scb||o?.scb,apd:e.apd||o?.apd};try{let u=await Q({url:a,headers:{"client-id":r?.clientId||"","x-api-key":r?.apiKey||""},body:{token:n.token,visitorId:s,projectId:c,version:i,clientData:n.clientData,questionData:n.questionData,aiCheckData:d}});if(!u)throw new Error(v.INTERNAL_SERVER_ERROR);P(m=>({...m,state:{...m.state,aiCheckData:d,visitorId:s,projectId:c}}));let l=(performance.now()-t).toFixed();return R(`isAIUsageDetected finishes in ${l}ms`,"info",{endpoint:r?.endpoint,diff:l,token:n.token,clientId:r?.clientId}),u}catch(u){let l=(performance.now()-t).toFixed();R("isAIUsageDetected error","error",{endpoint:r?.endpoint,error:u,diff:l,token:n.token,clientId:r?.clientId}),q(u)}}async function ye(e){let t=performance.now(),{state:n,config:r}=w(),{respondentType:o,language:i}=e;try{let a=await fe({url:`${r?.endpoint}/client/quality-questions/${o}/${i}`,headers:{"client-id":r?.clientId||"","x-api-key":r?.apiKey||""}});if(!a)throw new Error(v.INTERNAL_SERVER_ERROR);let s=(performance.now()-t).toFixed();return R(`getQualityQuestions finishes in ${s}ms`,"info",{function:"getQualityQuestions",endpoint:r?.endpoint,diff:s,token:n.token,clientId:r?.clientId}),a}catch(a){let s=(performance.now()-t).toFixed();R("getQualityQuestions error","error",{endpoint:r?.endpoint,error:a,diff:s,token:n.token,clientId:r?.clientId}),q(a)}}async function Ie(e){let t=performance.now(),{state:n,config:r,version:o}=w(),{checkResultEndpoint:i}=B(),{visitorId:a,projectId:s}=W(e),c=n.questionData||{questions:e.questions};try{let d=await Q({url:i,headers:{"client-id":r?.clientId||"","x-api-key":r?.apiKey||""},body:{token:n.token,visitorId:a,projectId:s,version:o,questionData:c,aiCheckData:n.aiCheckData,clientData:n.clientData}});if(!d)throw new Error(v.INTERNAL_SERVER_ERROR);P(l=>({...l,state:{...l.state,questionData:c,visitorId:a,projectId:s}}));let u=(performance.now()-t).toFixed();return R(`checkQualityQuestions finishes in ${u}ms`,"info",{function:"checkQualityQuestions",endpoint:r?.endpoint,diff:u,token:n.token,clientId:r?.clientId}),d}catch(d){let u=(performance.now()-t).toFixed();R("checkQualityQuestions error","error",{endpoint:r?.endpoint,error:d,diff:u,token:n.token,clientId:r?.clientId}),q(d)}}var C=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}};var L=typeof window>"u"||"Deno"in globalThis;function k(){}function rn(e,t){return typeof e=="function"?e(t):e}function on(e){return typeof e=="number"&&e>=0&&e!==1/0}function sn(e,t){return Math.max(e+(t||0)-Date.now(),0)}function rt(e,t){return typeof e=="function"?e(t):e}function an(e,t){return typeof e=="function"?e(t):e}function ot(e,t){let{type:n="all",exact:r,fetchStatus:o,predicate:i,queryKey:a,stale:s}=e;if(a){if(r){if(t.queryHash!==te(a,t.options))return!1}else if(!z(t.queryKey,a))return!1}if(n!=="all"){let c=t.isActive();if(n==="active"&&!c||n==="inactive"&&c)return!1}return!(typeof s=="boolean"&&t.isStale()!==s||o&&o!==t.state.fetchStatus||i&&!i(t))}function it(e,t){let{exact:n,status:r,predicate:o,mutationKey:i}=e;if(i){if(!t.options.mutationKey)return!1;if(n){if($(t.options.mutationKey)!==$(i))return!1}else if(!z(t.options.mutationKey,i))return!1}return!(r&&t.state.status!==r||o&&!o(t))}function te(e,t){return(t?.queryKeyHashFn||$)(e)}function $(e){return JSON.stringify(e,(t,n)=>nt(n)?Object.keys(n).sort().reduce((r,o)=>(r[o]=n[o],r),{}):n)}function z(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?!Object.keys(t).some(n=>!z(e[n],t[n])):!1}function cn(e,t){if(e===t)return e;let n=tn(e)&&tn(t);if(n||nt(e)&&nt(t)){let r=n?e:Object.keys(e),o=r.length,i=n?t:Object.keys(t),a=i.length,s=n?[]:{},c=0;for(let d=0;d<a;d++){let u=n?d:i[d];(!n&&r.includes(u)||n)&&e[u]===void 0&&t[u]===void 0?(s[u]=void 0,c++):(s[u]=cn(e[u],t[u]),s[u]===e[u]&&e[u]!==void 0&&c++)}return o===a&&c===o?e:s}return t}function tn(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function nt(e){if(!nn(e))return!1;let t=e.constructor;if(t===void 0)return!0;let n=t.prototype;return!(!nn(n)||!n.hasOwnProperty("isPrototypeOf")||Object.getPrototypeOf(e)!==Object.prototype)}function nn(e){return Object.prototype.toString.call(e)==="[object Object]"}function un(e){return new Promise(t=>{setTimeout(t,e)})}function ln(e,t,n){return typeof n.structuralSharing=="function"?n.structuralSharing(e,t):n.structuralSharing!==!1?cn(e,t):t}function dn(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function mn(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var ne=Symbol();function Ee(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===ne?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}var lo=class extends C{#e;#t;#n;constructor(){super(),this.#n=e=>{if(!L&&window.addEventListener){let t=()=>e();return window.addEventListener("visibilitychange",t,!1),()=>{window.removeEventListener("visibilitychange",t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(t=>{typeof t=="boolean"?this.setFocused(t):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e=="boolean"?this.#e:globalThis.document?.visibilityState!=="hidden"}},ve=new lo;var mo=class extends C{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(!L&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener("online",t,!1),window.addEventListener("offline",n,!1),()=>{window.removeEventListener("online",t),window.removeEventListener("offline",n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(n=>{n(e)}))}isOnline(){return this.#e}},Y=new mo;function fn(){let e,t,n=new Promise((o,i)=>{e=o,t=i});n.status="pending",n.catch(()=>{});function r(o){Object.assign(n,o),delete n.resolve,delete n.reject}return n.resolve=o=>{r({status:"fulfilled",value:o}),e(o)},n.reject=o=>{r({status:"rejected",reason:o}),t(o)},n}function fo(e){return Math.min(1e3*2**e,3e4)}function st(e){return(e??"online")==="online"?Y.isOnline():!0}var pn=class extends Error{constructor(e){super("CancelledError"),this.revert=e?.revert,this.silent=e?.silent}};function we(e){return e instanceof pn}function Re(e){let t=!1,n=0,r=!1,o,i=fn(),a=f=>{r||(m(new pn(f)),e.abort?.())},s=()=>{t=!0},c=()=>{t=!1},d=()=>ve.isFocused()&&(e.networkMode==="always"||Y.isOnline())&&e.canRun(),u=()=>st(e.networkMode)&&e.canRun(),l=f=>{r||(r=!0,e.onSuccess?.(f),o?.(),i.resolve(f))},m=f=>{r||(r=!0,e.onError?.(f),o?.(),i.reject(f))},y=()=>new Promise(f=>{o=I=>{(r||d())&&f(I)},e.onPause?.()}).then(()=>{o=void 0,r||e.onContinue?.()}),g=()=>{if(r)return;let f,I=n===0?e.initialPromise:void 0;try{f=I??e.fn()}catch(h){f=Promise.reject(h)}Promise.resolve(f).then(l).catch(h=>{if(r)return;let T=e.retry??(L?0:3),_=e.retryDelay??fo,E=typeof _=="function"?_(n,h):_,Se=T===!0||typeof T=="number"&&n<T||typeof T=="function"&&T(n,h);if(t||!Se){m(h);return}n++,e.onFail?.(n,h),un(E).then(()=>d()?void 0:y()).then(()=>{t?m(h):g()})})};return{promise:i,cancel:a,continue:()=>(o?.(),i),cancelRetry:s,continueRetry:c,canStart:u,start:()=>(u()?g():y().then(g),i)}}function po(){let e=[],t=0,n=s=>{s()},r=s=>{s()},o=s=>setTimeout(s,0),i=s=>{t?e.push(s):o(()=>{n(s)})},a=()=>{let s=e;e=[],s.length&&o(()=>{r(()=>{s.forEach(c=>{n(c)})})})};return{batch:s=>{let c;t++;try{c=s()}finally{t--,t||a()}return c},batchCalls:s=>(...c)=>{i(()=>{s(...c)})},schedule:i,setNotifyFunction:s=>{n=s},setBatchNotifyFunction:s=>{r=s},setScheduler:s=>{o=s}}}var b=po();var be=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),on(this.gcTime)&&(this.#e=setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(L?1/0:5*60*1e3))}clearGcTimeout(){this.#e&&(clearTimeout(this.#e),this.#e=void 0)}};var hn=class extends be{#e;#t;#n;#r;#s;#i;constructor(e){super(),this.#i=!1,this.#s=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#n=e.cache,this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#e=go(this.options),this.state=e.state??this.#e,this.scheduleGc()}get meta(){return this.options.meta}get promise(){return this.#r?.promise}setOptions(e){this.options={...this.#s,...e},this.updateGcTime(this.options.gcTime)}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&this.#n.remove(this)}setData(e,t){let n=ln(this.state.data,e,this.options);return this.#o({data:n,type:"success",dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e,t){this.#o({type:"setState",state:e,setStateOptions:t})}cancel(e){let t=this.#r?.promise;return this.#r?.cancel(e),t?t.then(k).catch(k):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(this.#e)}isActive(){return this.observers.some(e=>an(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===ne||this.state.dataUpdateCount+this.state.errorUpdateCount===0}isStale(){return this.state.isInvalidated?!0:this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0}isStaleByTime(e=0){return this.state.isInvalidated||this.state.data===void 0||!sn(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(t=>t.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#r?.continue()}onOnline(){this.observers.find(t=>t.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#r?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#n.notify({type:"observerAdded",query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#r&&(this.#i?this.#r.cancel({revert:!0}):this.#r.cancelRetry()),this.scheduleGc()),this.#n.notify({type:"observerRemoved",query:this,observer:e}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||this.#o({type:"invalidate"})}fetch(e,t){if(this.state.fetchStatus!=="idle"){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#r)return this.#r.continueRetry(),this.#r.promise}if(e&&this.setOptions(e),!this.options.queryFn){let s=this.observers.find(c=>c.options.queryFn);s&&this.setOptions(s.options)}let n=new AbortController,r=s=>{Object.defineProperty(s,"signal",{enumerable:!0,get:()=>(this.#i=!0,n.signal)})},o=()=>{let s=Ee(this.options,t),c={queryKey:this.queryKey,meta:this.meta};return r(c),this.#i=!1,this.options.persister?this.options.persister(s,c,this):s(c)},i={fetchOptions:t,options:this.options,queryKey:this.queryKey,state:this.state,fetchFn:o};r(i),this.options.behavior?.onFetch(i,this),this.#t=this.state,(this.state.fetchStatus==="idle"||this.state.fetchMeta!==i.fetchOptions?.meta)&&this.#o({type:"fetch",meta:i.fetchOptions?.meta});let a=s=>{we(s)&&s.silent||this.#o({type:"error",error:s}),we(s)||(this.#n.config.onError?.(s,this),this.#n.config.onSettled?.(this.state.data,s,this)),this.scheduleGc()};return this.#r=Re({initialPromise:t?.initialPromise,fn:i.fetchFn,abort:n.abort.bind(n),onSuccess:s=>{if(s===void 0){a(new Error(`${this.queryHash} data is undefined`));return}try{this.setData(s)}catch(c){a(c);return}this.#n.config.onSuccess?.(s,this),this.#n.config.onSettled?.(s,this.state.error,this),this.scheduleGc()},onError:a,onFail:(s,c)=>{this.#o({type:"failed",failureCount:s,error:c})},onPause:()=>{this.#o({type:"pause"})},onContinue:()=>{this.#o({type:"continue"})},retry:i.options.retry,retryDelay:i.options.retryDelay,networkMode:i.options.networkMode,canRun:()=>!0}),this.#r.start()}#o(e){let t=n=>{switch(e.type){case"failed":return{...n,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case"pause":return{...n,fetchStatus:"paused"};case"continue":return{...n,fetchStatus:"fetching"};case"fetch":return{...n,...ho(n.data,this.options),fetchMeta:e.meta??null};case"success":return{...n,data:e.data,dataUpdateCount:n.dataUpdateCount+1,dataUpdatedAt:e.dataUpdatedAt??Date.now(),error:null,isInvalidated:!1,status:"success",...!e.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};case"error":let r=e.error;return we(r)&&r.revert&&this.#t?{...this.#t,fetchStatus:"idle"}:{...n,error:r,errorUpdateCount:n.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:n.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:"idle",status:"error"};case"invalidate":return{...n,isInvalidated:!0};case"setState":return{...n,...e.state}}};this.state=t(this.state),b.batch(()=>{this.observers.forEach(n=>{n.onQueryUpdate()}),this.#n.notify({query:this,type:"updated",action:e})})}};function ho(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:st(t.networkMode)?"fetching":"paused",...e===void 0&&{error:null,status:"pending"}}}function go(e){let t=typeof e.initialData=="function"?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt=="function"?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?"success":"pending",fetchStatus:"idle"}}var re=class extends C{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,o=t.queryHash??te(r,t),i=this.get(o);return i||(i=new hn({cache:this,queryKey:r,queryHash:o,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(i)),i}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:"added",query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:"removed",query:e}))}clear(){b.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(n=>ot(t,n))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(n=>ot(e,n)):t}notify(e){b.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){b.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){b.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}};var gn=class extends be{#e;#t;#n;constructor(e){super(),this.mutationId=e.mutationId,this.#t=e.mutationCache,this.#e=[],this.state=e.state||yo(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#e.includes(e)||(this.#e.push(e),this.clearGcTimeout(),this.#t.notify({type:"observerAdded",mutation:this,observer:e}))}removeObserver(e){this.#e=this.#e.filter(t=>t!==e),this.scheduleGc(),this.#t.notify({type:"observerRemoved",mutation:this,observer:e})}optionalRemove(){this.#e.length||(this.state.status==="pending"?this.scheduleGc():this.#t.remove(this))}continue(){return this.#n?.continue()??this.execute(this.state.variables)}async execute(e){this.#n=Re({fn:()=>this.options.mutationFn?this.options.mutationFn(e):Promise.reject(new Error("No mutationFn found")),onFail:(r,o)=>{this.#r({type:"failed",failureCount:r,error:o})},onPause:()=>{this.#r({type:"pause"})},onContinue:()=>{this.#r({type:"continue"})},retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#t.canRun(this)});let t=this.state.status==="pending",n=!this.#n.canStart();try{if(!t){this.#r({type:"pending",variables:e,isPaused:n}),await this.#t.config.onMutate?.(e,this);let o=await this.options.onMutate?.(e);o!==this.state.context&&this.#r({type:"pending",context:o,variables:e,isPaused:n})}let r=await this.#n.start();return await this.#t.config.onSuccess?.(r,e,this.state.context,this),await this.options.onSuccess?.(r,e,this.state.context),await this.#t.config.onSettled?.(r,null,this.state.variables,this.state.context,this),await this.options.onSettled?.(r,null,e,this.state.context),this.#r({type:"success",data:r}),r}catch(r){try{throw await this.#t.config.onError?.(r,e,this.state.context,this),await this.options.onError?.(r,e,this.state.context),await this.#t.config.onSettled?.(void 0,r,this.state.variables,this.state.context,this),await this.options.onSettled?.(void 0,r,e,this.state.context),r}finally{this.#r({type:"error",error:r})}}finally{this.#t.runNext(this)}}#r(e){let t=n=>{switch(e.type){case"failed":return{...n,failureCount:e.failureCount,failureReason:e.error};case"pause":return{...n,isPaused:!0};case"continue":return{...n,isPaused:!1};case"pending":return{...n,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:"pending",variables:e.variables,submittedAt:Date.now()};case"success":return{...n,data:e.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...n,data:void 0,error:e.error,failureCount:n.failureCount+1,failureReason:e.error,isPaused:!1,status:"error"}}};this.state=t(this.state),b.batch(()=>{this.#e.forEach(n=>{n.onMutationUpdate(e)}),this.#t.notify({mutation:this,type:"updated",action:e})})}};function yo(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var oe=class extends C{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){let r=new gn({mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=Te(e);if(typeof t=="string"){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:"added",mutation:e})}remove(e){if(this.#e.delete(e)){let t=Te(e);if(typeof t=="string"){let n=this.#t.get(t);if(n)if(n.length>1){let r=n.indexOf(e);r!==-1&&n.splice(r,1)}else n[0]===e&&this.#t.delete(t)}}this.notify({type:"removed",mutation:e})}canRun(e){let t=Te(e);if(typeof t=="string"){let r=this.#t.get(t)?.find(o=>o.state.status==="pending");return!r||r===e}else return!0}runNext(e){let t=Te(e);return typeof t=="string"?this.#t.get(t)?.find(r=>r!==e&&r.state.isPaused)?.continue()??Promise.resolve():Promise.resolve()}clear(){b.batch(()=>{this.#e.forEach(e=>{this.notify({type:"removed",mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(n=>it(t,n))}findAll(e={}){return this.getAll().filter(t=>it(e,t))}notify(e){b.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(t=>t.state.isPaused);return b.batch(()=>Promise.all(e.map(t=>t.continue().catch(k))))}};function Te(e){return e.options.scope?.id}function at(e){return{onFetch:(t,n)=>{let r=t.options,o=t.fetchOptions?.meta?.fetchMore?.direction,i=t.state.data?.pages||[],a=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,d=async()=>{let u=!1,l=g=>{Object.defineProperty(g,"signal",{enumerable:!0,get:()=>(t.signal.aborted?u=!0:t.signal.addEventListener("abort",()=>{u=!0}),t.signal)})},m=Ee(t.options,t.fetchOptions),y=async(g,f,I)=>{if(u)return Promise.reject();if(f==null&&g.pages.length)return Promise.resolve(g);let h={queryKey:t.queryKey,pageParam:f,direction:I?"backward":"forward",meta:t.options.meta};l(h);let T=await m(h),{maxPages:_}=t.options,E=I?mn:dn;return{pages:E(g.pages,T,_),pageParams:E(g.pageParams,f,_)}};if(o&&i.length){let g=o==="backward",f=g?Io:yn,I={pages:i,pageParams:a},h=f(r,I);s=await y(I,h,g)}else{let g=e??i.length;do{let f=c===0?a[0]??r.initialPageParam:yn(r,s);if(c>0&&f==null)break;s=await y(s,f),c++}while(c<g)}return s};t.options.persister?t.fetchFn=()=>t.options.persister?.(d,{queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):t.fetchFn=d}}}function yn(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function Io(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var ct=class{#e;#t;#n;#r;#s;#i;#o;#a;constructor(e={}){this.#e=e.queryCache||new re,this.#t=e.mutationCache||new oe,this.#n=e.defaultOptions||{},this.#r=new Map,this.#s=new Map,this.#i=0}mount(){this.#i++,this.#i===1&&(this.#o=ve.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#a=Y.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#i--,this.#i===0&&(this.#o?.(),this.#o=void 0,this.#a?.(),this.#a=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return this.#t.findAll({...e,status:"pending"}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(rt(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:t,state:n})=>{let r=n.data;return[t,r]})}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=rn(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return b.batch(()=>this.#e.findAll(e).map(({queryKey:r})=>[r,this.setQueryData(r,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;b.batch(()=>{t.findAll(e).forEach(n=>{t.remove(n)})})}resetQueries(e,t){let n=this.#e,r={type:"active",...e};return b.batch(()=>(n.findAll(e).forEach(o=>{o.reset()}),this.refetchQueries(r,t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=b.batch(()=>this.#e.findAll(e).map(o=>o.cancel(n)));return Promise.all(r).then(k).catch(k)}invalidateQueries(e,t={}){return b.batch(()=>{if(this.#e.findAll(e).forEach(r=>{r.invalidate()}),e?.refetchType==="none")return Promise.resolve();let n={...e,type:e?.refetchType??e?.type??"active"};return this.refetchQueries(n,t)})}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=b.batch(()=>this.#e.findAll(e).filter(o=>!o.isDisabled()).map(o=>{let i=o.fetch(void 0,n);return n.throwOnError||(i=i.catch(k)),o.state.fetchStatus==="paused"?Promise.resolve():i}));return Promise.all(r).then(k)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(rt(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(k).catch(k)}fetchInfiniteQuery(e){return e.behavior=at(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(k).catch(k)}ensureInfiniteQueryData(e){return e.behavior=at(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return Y.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set($(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(r=>{z(e,r.queryKey)&&Object.assign(n,r.defaultOptions)}),n}setMutationDefaults(e,t){this.#s.set($(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#s.values()],n={};return t.forEach(r=>{z(e,r.mutationKey)&&(n={...n,...r.defaultOptions})}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=te(t.queryKey,t)),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!=="always"),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),t.queryFn===ne&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}};var Eo=new ct({defaultOptions:{queries:{staleTime:3e4}},queryCache:new re({onError:(e,t)=>{}}),mutationCache:new oe}),In=Eo;async function vo(e){let t=await In.fetchQuery({queryKey:["getClientConfig",e.clientId,e.apiKey],queryFn:()=>fe({url:`${e.endpoint}/client/config`,headers:{"client-id":e.clientId,"x-api-key":e.apiKey}})}),n={...e,usingFpjs:t.usingFpjs,usingHcaptcha:t.usingHcaptcha};return P(r=>({...r,config:n,securityKeys:t})),n}async function En(e){return vo(e)}var ut,vn=ht;function wo(){let{config:e}=w();return!!(e?.clientId&&e?.apiKey)}function Ro(e){let{config:t}=w();if(!e?.clientId||!e?.apiKey)throw R(v.MISSING_CREDENTIALS,"error",{endpoint:t?.endpoint,...e}),new Error(v.MISSING_CREDENTIALS)}function bo(){let{config:e}=w();return!!(e?.clientId&&e.apiKey)}function To(e){let{config:t}=w();if(!bo())throw R(v.MISSING_CREDENTIALS,"error",{endpoint:t?.endpoint,...e}),new Error(v.MISSING_CREDENTIALS)}function So(e){return{clientId:e.clientId,apiKey:e.apiKey,endpoint:e.endpoint||"https://api.dtect.io/security",includeResults:e.includeResults}}function Ao(e){let t=e.endpoint,n=e.includeResults?`${t}/client/check/result`:`${t}/client/check`;return{...e,checkResultEndpoint:n}}function Po(e){let t=Ao(e);P(n=>({...n,config:t}))}function Do(){let{state:e}=w();if(e.isLoading&&!Z())throw new Error(v.DUPLICATE_INITIALIZATION)}async function Oo(e){let{state:t,config:n}=w(),o=(performance.now()-e).toFixed();return R(`init() finishes ${o}ms`,"info",{endpoint:n?.endpoint,function:"init",diff:o,token:t.token,clientId:n?.clientId}),{getSecurityResult:pe,getSecurityToken:he,SecurityAPIError:vn,isAIUsageDetected:ge,checkQualityQuestions:Ie,getQualityQuestions:ye,LanguageCodes:J,QualityQuestionsRespondentTypes:X}}async function wn(e){let{state:t}=w(),n=performance.now();Ro(e);let r=So(e);Po(r),To(e);let o=Rt(t.token),i=await En(r);Do(),Mt(o);try{return Z()?ut:(await Ot(i),await Dt({usingFpjs:i.usingFpjs||!1,behaviorKey:_t()?.behaviorKey||""}),await Pt(),await Oo(n))}catch(a){xt(a,r)}finally{Nt(o)}}ut={init:wn,getSecurityResult:pe,getSecurityToken:he,isAIUsageDetected:ge,checkQualityQuestions:Ie,getQualityQuestions:ye,QualityQuestionsRespondentTypes:X,LanguageCodes:J};var _o=ut;
11
+ `,n=l.createShader(l.VERTEX_SHADER),o=l.createShader(l.FRAGMENT_SHADER);if(!n||!o)throw new Error("Failed to create shaders");if(l.shaderSource(n,t),l.shaderSource(o,e),l.compileShader(n),!l.getShaderParameter(n,l.COMPILE_STATUS))throw new Error("Vertex shader compilation failed: "+l.getShaderInfoLog(n));if(l.compileShader(o),!l.getShaderParameter(o,l.COMPILE_STATUS))throw new Error("Fragment shader compilation failed: "+l.getShaderInfoLog(o));let r=l.createProgram();if(!r)throw new Error("Failed to create shader program");if(l.attachShader(r,n),l.attachShader(r,o),l.linkProgram(r),!l.getProgramParameter(r,l.LINK_STATUS))throw new Error("Shader program linking failed: "+l.getProgramInfoLog(r));l.useProgram(r);let i=137,a=new Float32Array(i*4),s=2*Math.PI/i;for(let g=0;g<i;g++){let f=g*s;a[g*4]=0,a[g*4+1]=0,a[g*4+2]=Math.cos(f)*(A.width/2),a[g*4+3]=Math.sin(f)*(A.height/2)}let c=l.createBuffer();l.bindBuffer(l.ARRAY_BUFFER,c),l.bufferData(l.ARRAY_BUFFER,a,l.STATIC_DRAW);let m=l.getAttribLocation(r,"position");l.enableVertexAttribArray(m),l.vertexAttribPointer(m,2,l.FLOAT,!1,0,0),l.viewport(0,0,A.width,A.height),l.clearColor(0,0,0,1),l.clear(l.COLOR_BUFFER_BIT),l.drawArrays(l.LINES,0,i*2);let u=new Uint8ClampedArray(A.width*A.height*4);return l.readPixels(0,0,A.width,A.height,l.RGBA,l.UNSIGNED_BYTE,u),new ImageData(u,A.width,A.height)}catch{return new ImageData(1,1)}finally{l&&(l.bindBuffer(l.ARRAY_BUFFER,null),l.useProgram(null),l.viewport(0,0,l.drawingBufferWidth,l.drawingBufferHeight),l.clearColor(0,0,0,0))}}function D(t){let e=[];return function n(o){if(o&&o.toJSON&&typeof o.toJSON=="function"&&(o=o.toJSON()),o===void 0)return;if(typeof o=="number")return isFinite(o)?""+o:"null";if(typeof o!="object")return JSON.stringify(o);let r,i;if(Array.isArray(o)){for(i="[",r=0;r<o.length;r++)r&&(i+=","),i+=n(o[r])||"null";return i+"]"}if(o===null)return"null";if(e.indexOf(o)!==-1)throw new TypeError("Converting circular structure to JSON");let a=e.push(o)-1,s=Object.keys(o).sort();for(i="",r=0;r<s.length;r++){let c=s[r],m=n(o[c]);m&&(i&&(i+=","),i+=JSON.stringify(c)+":"+m)}return e.splice(a,1),"{"+i+"}"}(t)||""}async function Te(){return new Promise(t=>{try{let e=window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection;if(!e){t({supported:!1,error:"WebRTC not supported"});return}let n={iceCandidatePoolSize:1,iceServers:[]},o=new e(n);o.createDataChannel(""),(async()=>{try{let i={offerToReceiveAudio:!0,offerToReceiveVideo:!0},a=await o.createOffer(i);await o.setLocalDescription(a);let s=a.sdp||"",c=[...new Set((s.match(/extmap:\d+ [^\n\r]+/g)||[]).map(v=>v.replace(/extmap:\d+ /,"")))].sort(),m=v=>{let R=s.match(new RegExp(`m=${v} [^\\s]+ [^\\s]+ ([^\\n\\r]+)`));return R?R[1].split(" "):[]},u=(v,R)=>R.map(p=>{let P=new RegExp(`(rtpmap|fmtp|rtcp-fb):${p} (.+)`,"g"),_=[...s.matchAll(P)];if(!_.length)return null;let y={};return _.forEach(wt=>{let[Nn,oe,ie]=wt,ae=ie.split("/");oe==="rtpmap"?(y.mimeType=`${v}/${ae[0]}`,y.clockRate=+ae[1],v==="audio"&&(y.channels=+ae[2]||1)):oe==="rtcp-fb"?(y.feedbackSupport=y.feedbackSupport||[],y.feedbackSupport.push(ie)):oe==="fmtp"&&(y.sdpFmtpLine=ie)}),y}).filter(Boolean),d=u("audio",m("audio")),g=u("video",m("video")),f={audio:{count:d.length,hash:b(D(d))},video:{count:g.length,hash:b(D(g))},extensionsHash:b(D(c))},T=await new Promise(v=>{let R=setTimeout(()=>{o.removeEventListener("icecandidate",p),o.close(),v({supported:!0,...f,timeout:!0})},3e3),p=P=>{let _=P.candidate;!_||!_.candidate||(clearTimeout(R),o.removeEventListener("icecandidate",p),o.close(),v({supported:!0,...f,candidateType:_.type||""}))};o.addEventListener("icecandidate",p)});t({details:T,hash:b(D(T))})}catch(i){o.close(),t({supported:!0,error:`WebRTC offer failed: ${i.message}`})}})()}catch(e){t({supported:!1,error:`WebRTC error: ${e.message}`})}})}var Je=["\u{1D504}","\u{1D505}","\u212D","\u{1D507}","\u{1D508}","\u{1D509}","\u{1D538}","\u{1D539}","\u2102","\u{1D53B}","\u{1D53C}","\u{1D53D}"],Xe=["\u03B2","\u03C8","\u03BB","\u03B5","\u03B6","\u03B1","\u03BE","\u03BC","\u03C1","\u03C6","\u03BA","\u03C4","\u03B7","\u03C3","\u03B9","\u03C9","\u03B3","\u03BD","\u03C7","\u03B4","\u03B8","\u03C0","\u03C5","\u03BF"];async function Re(){return new Promise(t=>{try{J(async({iframe:e})=>{try{if(!on(e)){t({supported:!1,error:"MathML not supported"});return}let n=[q("integral","<msubsup><mo>\u222B</mo><mi>a</mi><mi>b</mi></msubsup><mfrac><mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mrow><mi>g</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mfrac><mi>dx</mi>"),q("fraction","<mfrac><mrow><mi>\u03C0</mi><mo>\xD7</mo><msup><mi>r</mi><mn>2</mn></msup></mrow><mrow><mn>2</mn><mi>\u03C3</mi></mrow></mfrac>"),q("matrix","<mo>[</mo><mtable><mtr><mtd><mi>\u03B1</mi></mtd><mtd><mi>\u03B2</mi></mtd></mtr><mtr><mtd><mi>\u03B3</mi></mtd><mtd><mi>\u03B4</mi></mtd></mtr></mtable><mo>]</mo>"),an(),...sn()],o=[],r="";n.forEach((a,s)=>{let c=cn(a,e);o.push({width:c.dimensions.width,height:c.dimensions.height}),s===0&&c.fontInfo&&(r=b(D(c.fontInfo)))});let i={fontStyleHash:r,dimensions:o};t({details:i,hash:b(D(i))})}catch(n){t({supported:!1,error:`MathML error: ${n.message}`})}})}catch(e){t({supported:!1,error:`MathML error: ${e.message}`})}})}function on(t){try{let e=t.createElement("math");e.innerHTML="<mrow><mi>x</mi></mrow>",e.style.position="absolute",e.style.visibility="hidden",t.body.appendChild(e);let n=e.getBoundingClientRect();return t.body.removeChild(e),n.width>0&&n.height>0}catch{return!1}}function q(t,e){return`<math><mrow>${e}</mrow></math>`}function an(){let t="<mo>\u220F</mo>";return Je.forEach((e,n)=>{let o=n*2,r=Xe.slice(o,o+2);r.length===2&&(t+=`<mmultiscripts><mi>${e}</mi><none/><mi>${r[1]}</mi><mprescripts></mprescripts><mi>${r[0]}</mi><none/></mmultiscripts>`)}),q("complex_nested",`<munderover><mmultiscripts>${t}</mmultiscripts></munderover>`)}function sn(){let t=[];return Je.forEach((e,n)=>{let o=n*2,r=Xe.slice(o,o+2);r.length===2&&t.push(q("combined",`<mmultiscripts><mi>${e}</mi><none/><mi>${r[1]}</mi><mprescripts></mprescripts><mi>${r[0]}</mi><none/></mmultiscripts>`))}),t}function cn(t,e){try{let n=e.createElement("math");n.innerHTML=t.replace(/<\/?math>/g,""),n.style.whiteSpace="nowrap",n.style.position="absolute",n.style.visibility="hidden",n.style.top="-9999px",e.body.appendChild(n);let o=n.getBoundingClientRect(),i=(e.defaultView||window).getComputedStyle(n),a={dimensions:{width:o.width,height:o.height},fontInfo:{fontFamily:i.fontFamily,fontSize:i.fontSize,fontWeight:i.fontWeight,fontStyle:i.fontStyle,lineHeight:i.lineHeight,fontVariant:i.fontVariant||"normal",fontStretch:i.fontStretch||"normal",fontSizeAdjust:i.fontSizeAdjust||"none",textRendering:i.textRendering||"auto",fontFeatureSettings:i.fontFeatureSettings||"normal",fontVariantNumeric:i.fontVariantNumeric||"normal",fontKerning:i.fontKerning||"auto"}};return e.body.removeChild(n),a}catch(n){return{error:n.message}}}var un=800;async function xe(){return new Promise(t=>{try{if(typeof window>"u"||!window.speechSynthesis||typeof window.speechSynthesis.getVoices!="function"){t({supported:!1,error:"Speech Synthesis API not supported"});return}let e=!1,n=null,o=a=>{if(!e){e=!0,n&&clearTimeout(n);try{let s=a.map(m=>{let u=g=>g.replace(/\\/g,"\\\\").replace(/,/g,"\\,");return[u(m.voiceURI||""),u(m.name||""),u(m.lang||""),m.localService?"1":"0",m.default?"1":"0"].join(",")});s.sort();let c={voiceCount:a.length,voicesHash:b(D(s))};t({details:c,hash:b(D(c))})}catch(s){t({supported:!0,error:`Voice processing failed: ${s.message}`})}}},r=window.speechSynthesis.getVoices();if(r.length>0){o(r);return}n=setTimeout(()=>{let a=window.speechSynthesis.getVoices();o(a)},un);let i=()=>{window.speechSynthesis.removeEventListener("voiceschanged",i);let a=window.speechSynthesis.getVoices();o(a)};window.speechSynthesis.addEventListener("voiceschanged",i)}catch(e){t({supported:!1,error:`Speech Synthesis error: ${e.message}`})}})}var Ze={audio:de,canvas:ge,fonts:fe,hardware:pe,locales:ye,math:he,permissions:we,plugins:Ie,screen:ve,system:Ee,webgl:be},He={webrtc:Te,mathml:Re,speech:xe},Ae={},et={timeout:"true"},De=(t,e,n)=>{Ae[t]=e};function ln(t,e){return new Promise(n=>{setTimeout(()=>n(e),t)})}function tt(t,e,n){return Promise.all(t.map(o=>{let r=performance.now();return Promise.race([o.then(i=>({value:i,elapsed:performance.now()-r})),ln(e,n).then(i=>({value:i,elapsed:performance.now()-r}))])}))}function H(t,e){let n=B();if(n.name==="unknown"&&t.system&&typeof t.system=="object"&&!Array.isArray(t.system)){let d=t.system.browser;if(d&&typeof d=="object"&&!Array.isArray(d)){let g=d;n={name:g.name||"unknown",version:g.version||"unknown"}}}let o=n.name.toLowerCase(),r=n.version.split(".")[0]||"0",i=parseInt(r,10),a=[...e?.exclude||[]],s=e?.stabilize||[],c=e?.include||[];for(let u of s){let d=me[u];if(d)for(let g of d){let f=!("browsers"in g),T=!f&&g.browsers?.some(v=>{let R=v.match(/(.+?)(>=)(\d+)/);if(R){let[,p,,P]=R,_=parseInt(P,10);return o===p&&i>=_}return o===v});(f||T)&&a.push(...g.exclude)}}function m(u,d=""){let g={};for(let[f,T]of Object.entries(u)){let v=d?`${d}.${f}`:f;if(typeof T=="object"&&!Array.isArray(T)&&T!==null){let R=m(T,v);Object.keys(R).length>0&&(g[f]=R)}else{let R=a.some(P=>v.startsWith(P)),p=c.some(P=>v.startsWith(P));(!R||p)&&(g[f]=T)}}return g}return m(t)}async function Se(t){let e={...C,...t},n=e.logging&&!sessionStorage.getItem("_tmjs_l")&&Math.random()<1e-4,o={...Ze,...Ae},{elapsed:r,resolvedComponents:i}=await nt(o,e),a={},s={};if(n||e.experimental){let{elapsed:R,resolvedComponents:p}=await nt(He,e);a=p,s=R}let c={...r,...s},m=e.performance?{elapsed:c}:{},u=H({},e),d={...i,...u},g={};return{thumbmark:b(D(d)),components:d,info:g,version:"",...m,...Object.keys(a).length>0&&e.experimental&&{experimental:a}}}async function nt(t,e){let n={...C,...e},o=Object.entries(t).filter(([u])=>!n?.exclude?.includes(u)).filter(([u])=>n?.include?.some(d=>d.includes("."))?n?.include?.some(d=>d.startsWith(u)):n?.include?.length===0||n?.include?.includes(u)),r=o.map(([u])=>u),i=o.map(([u,d])=>d(e)),a=await tt(i,n?.timeout||5e3,et),s={},c={};a.forEach((u,d)=>{u.value!=null&&(c[r[d]]=u.value,s[r[d]]=u.elapsed??0)});let m=H(c,n);return{elapsed:s,resolvedComponents:m}}var K=class{options;constructor(e){this.options={...C,...e}}async get(e){let n={...this.options,...e};return Se(n)}getVersion(){return""}includeComponent(e,n){De(e,n)}};var mn=(t,e={})=>({"Content-Type":"application/json",...t?.accessToken&&{Authorization:`Bearer ${t?.accessToken}`},...e}),dn=async(t,e)=>{if(!t.ok){let n=await t.text();throw new Error(n)}return e==="file"?t.blob():e==="json"?t.json():e==="text"?t.text():null},rt=async({url:t,auth:e,body:n,method:o="GET",headers:r={},responseType:i="json"})=>{let a={method:o,headers:mn(e,r),...n?{body:n instanceof FormData?n:JSON.stringify(n)}:{}},s=await fetch(t,a);return dn(s,i)},ot=t=>rt({...t,method:"GET"}),U=t=>rt({...t,method:"POST"});var gn=[{name:"lowCpuCores",weight:2,async check(){let t=navigator.hardwareConcurrency||0,e=t>0&&t<=2;return{value:t,triggered:e}}},{name:"lowDeviceMemory",weight:0,async check(){let t=navigator.deviceMemory||0,e=t>0&&t<=4;return{value:t,triggered:e}}},{name:"platformMismatch",weight:1,async check(){let t=navigator.userAgent||"",e=navigator.platform||"",n=t.includes("Mac")&&e.includes("Linux")||t.includes("Win")&&e.includes("Mac")||e===""||e==="Unknown";return{value:e,triggered:n}}},{name:"webglSoftwareRenderer",weight:4,async check(){let t=null,e=null,n=!1;try{let o=document.createElement("canvas"),r=o.getContext("webgl")||o.getContext("experimental-webgl");if(r){let i=r.getExtension("WEBGL_debug_renderer_info");if(i){t=r.getParameter(i.UNMASKED_VENDOR_WEBGL)||"",e=r.getParameter(i.UNMASKED_RENDERER_WEBGL)||"";let a=e.toLowerCase(),s=t.toLowerCase();n=a.includes("swiftshader")||a.includes("llvmpipe")||a.includes("softwar")||a.includes("basic render")||a.includes("vmware")||a.includes("virtualbox")||s.includes("vmware")||s.includes("parallels")}}}catch{}return{value:{vendor:t,renderer:e},triggered:n}}},{name:"missingWebGPUAdapter",weight:3,async check(){if(!("gpu"in navigator))return{value:"no WebGPU",triggered:!0};try{let t=await navigator.gpu.requestAdapter();return{value:t?"adapter-present":"adapter-null",triggered:!t}}catch{return{value:"adapter-error",triggered:!0}}}},{name:"reducedTimerPrecision",weight:1,async check(){let t=performance.now();await new Promise(o=>setTimeout(o,50));let e=performance.now()-t,n=e<30||e>80;return{value:e.toFixed(2),triggered:n}}},{name:"timerJitter",weight:0,async check(){let t=[];for(let n=0;n<10;n++){let o=performance.now();await new Promise(i=>setTimeout(i,10));let r=performance.now();t.push(r-o)}let e=Math.sqrt(t.map(n=>(n-10)**2).reduce((n,o)=>n+o)/t.length);return{value:e.toFixed(3),triggered:e>5}}},{name:"audioFingerprint",weight:1,async check(){try{let t=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,44100,44100),e=t.createOscillator();e.frequency.value=440,e.connect(t.destination),e.start(0);let o=(await t.startRendering()).getChannelData(0).reduce((r,i)=>r+Math.abs(i),0);return{value:o,triggered:o<100}}catch{return{value:"audio-error",triggered:!0}}}},{name:"canvasEntropy",weight:1,async check(){try{let t=document.createElement("canvas"),e=t.getContext("2d");e.textBaseline="top",e.font="14px 'Arial'",e.fillText("VM CHECK",2,2);let o=[...t.toDataURL()].reduce((r,i)=>(r+i.charCodeAt(0))%9999999,0);return{value:o,triggered:o===0||o===999999}}catch{return{value:"canvas-error",triggered:!0}}}},{name:"windowSizeWeird",weight:1,async check(){let t=window.innerWidth/window.innerHeight,e=t===1.333||t===1.6;return{value:t.toFixed(2),triggered:e}}},{name:"touchMismatch",weight:1,async check(){let t="ontouchstart"in window,e=navigator.maxTouchPoints||0;return{value:{hasTouch:t,maxTouch:e},triggered:t&&e===0}}},{name:"batteryVirtualized",weight:1,async check(){if(!navigator.getBattery)return{value:"no API",triggered:!0};try{let t=await navigator.getBattery(),e=t.chargingTime===0&&t.dischargingTime===1/0;return{value:{chargingTime:t.chargingTime,dischargingTime:t.dischargingTime},triggered:e}}catch{return{value:"battery-error",triggered:!0}}}},{name:"permissionsWeird",weight:0,async check(){try{let t=await navigator.permissions.query({name:"camera"});return{value:t.state,triggered:t.state==="prompt"}}catch{return{value:"perm-error",triggered:!0}}}},{name:"noMediaDevices",weight:1,async check(){try{let t=await navigator.mediaDevices.enumerateDevices();return{value:t.length,triggered:t.length===0}}catch{return{value:"media-error",triggered:!0}}}},{name:"virtualizedMediaDevices",weight:1,async check(){try{let t=await navigator.mediaDevices.enumerateDevices(),e=t.some(n=>n.label.toLowerCase().includes("virtual"));return{value:t.map(n=>n.label),triggered:e}}catch{return{value:"media-error",triggered:!0}}}},{name:"webrtcIpPattern",weight:2,async check(){return new Promise(t=>{try{let e=new RTCPeerConnection({iceServers:[]});e.createDataChannel("x");let n=setTimeout(()=>{e.close(),t({value:"timeout",triggered:!1})},3e3);e.onicecandidate=o=>{if(!o?.candidate){clearTimeout(n),e.close(),t({value:"no candidate",triggered:!1});return}let r=o.candidate.candidate.toLowerCase();clearTimeout(n),e.close(),t({value:r,triggered:r.includes("10.0.2.")||r.includes("172.16.")||r.includes("192.168.56.")})},e.createOffer().then(o=>e.setLocalDescription(o))}catch{t({value:"rtc-error",triggered:!1})}})}},{name:"gpuAccelerationDisabled",weight:3,async check(){let e=document.createElement("canvas").getContext("webgl");return{value:!!e,triggered:!e}}},{name:"noWebGL2",weight:3,async check(){let t=document.createElement("canvas").getContext("webgl2");return{value:!!t,triggered:!t}}},{name:"lowStorageQuota",weight:1,async check(){try{let t=await navigator.storage.estimate();return{value:t.quota,triggered:(t.quota??0)<524288e3}}catch{return{value:"storage-error",triggered:!0}}}},{name:"lowEntropy",weight:1,async check(){let t=Object.keys(navigator).length+Object.keys(screen).length+Object.keys(window).length;return{value:t,triggered:t<200}}},{name:"noLanguages",weight:1,async check(){let t=navigator.languages||[];return{value:t,triggered:t.length===0}}},{name:"uaEntropyLow",weight:1,async check(){let t=navigator.userAgent;return{value:t,triggered:t.length<30}}},{name:"weirdDPI",weight:2,async check(){let t=window.devicePixelRatio;return{value:t,triggered:t===1}}}],fn=[{name:"tamperingPluginMismatch",penalty:3,async check(){try{let t=navigator.userAgent.toLowerCase(),e=(t.includes("chrome")||t.includes("edg"))&&!t.includes("firefox")&&!t.includes("safari"),n=navigator.plugins?.length??0,o=!e&&n>0;return{value:{pluginCount:n,isChromeLike:e},triggered:o}}catch{return{value:"error",triggered:!1}}}},{name:"tamperingWebglNoise",penalty:1,async check(){try{let t=document.createElement("canvas");t.width=16,t.height=16;let e=t.getContext("webgl");if(!e)return{value:"no-webgl",triggered:!1};e.clearColor(.1,.2,.3,1),e.clear(e.COLOR_BUFFER_BIT);let n=new Uint8Array(16*16*4);e.readPixels(0,0,16,16,e.RGBA,e.UNSIGNED_BYTE,n);let o=new Set(n).size;return{value:{uniqueValues:o},triggered:o>4}}catch{return{value:"error",triggered:!1}}}},{name:"tamperingServiceWorkerBlocked",penalty:1,async check(){let t=!("serviceWorker"in navigator);return{value:{serviceWorkerAvailable:!t},triggered:t}}},{name:"permissionsWeirdAntiVM",penalty:2,async check(){try{let t=await navigator.permissions.query({name:"camera"});return{value:t.state,triggered:t.state==="prompt"}}catch{return{value:"error",triggered:!1}}}}];async function it({threshold:t=4}={}){let e={},n=0;for(let r of gn)try{let i=await r.check();e[r.name]={...i,weight:r.weight},i.triggered&&r.weight>0&&(n+=r.weight)}catch{e[r.name]={value:"error",triggered:!1,weight:r.weight}}let o=n;for(let r of fn)try{let i=await r.check();e[r.name]={...i,penalty:r.penalty},i.triggered&&(n-=r.penalty)}catch{e[r.name]={value:"error",triggered:!1,penalty:r.penalty}}return{isLikelyVM:n>=t,score:n,rawScore:o,threshold:t,signals:e}}var pn=[{name:"hookedFunctionToString",weight:2,async check(){let t=Function.prototype.toString.toString(),e=Function.prototype.toString+"";return{value:{native:t,current:e},triggered:t!==e}}},{name:"navigatorProxyTrap",weight:2,async check(){let t=!1;try{let e=Object.getOwnPropertyDescriptor(window,"navigator");e&&e.get&&e.get.toString()?.includes("[native code]")===!1&&(t=!0)}catch{}return{value:"navigator getter",triggered:t}}},{name:"uaMismatch",weight:2,async check(){let t=navigator.userAgent||"",e="";try{let o=await navigator.userAgentData?.getHighEntropyValues?.(["platform","brands"]);e=JSON.stringify(o)}catch{}let n=t?.includes("Mac")&&e?.includes("Windows")||t?.includes("Win")&&e?.includes("Mac")||e&&e.length>0&&!t;return{value:{ua:t,brandInfo:e},triggered:n}}},{name:"timezoneLocaleMismatch",weight:1,async check(){let t=Intl.DateTimeFormat().resolvedOptions().timeZone,e=navigator.language||"",n=e.startsWith("en")&&t==="Asia/Shanghai"||e.startsWith("zh")&&t==="America/New_York"||t===void 0;return{value:{tz:t,lang:e},triggered:n}}},{name:"canvasNoise",weight:2,async check(){let t=()=>{let r=document.createElement("canvas"),i=r.getContext("2d");return i.textBaseline="top",i.font="14px Arial",i.fillText("anti-detect-check",2,2),r.toDataURL()},e=t(),n=t();return{value:{a:e,b:n},triggered:e!==n}}},{name:"webglNoise",weight:-2,async check(){try{let e=document.createElement("canvas").getContext("webgl");if(!e)return{value:"no-webgl",triggered:!0};let n=e.getExtension("WEBGL_debug_renderer_info");if(!n)return{value:"no-debug-extension",triggered:!1};let o=e.getParameter(n.UNMASKED_VENDOR_WEBGL),r=e.getParameter(n.UNMASKED_RENDERER_WEBGL),i=o===""||r===""||o?.includes(" ")===!1||r?.includes(" ")===!1;return{value:{v:o,r},triggered:i}}catch{return{value:"gl-error",triggered:!0}}}},{name:"webdriverFlag",weight:3,async check(){let t=navigator.webdriver===!0;return{value:navigator.webdriver,triggered:t}}},{name:"perfectEventTiming",weight:-3,async check(){let t=performance.now();return{value:t,triggered:t%1===0}}},{name:"serviceWorkerBlocked",weight:-4,async check(){let t=!("serviceWorker"in navigator);return{value:t,triggered:t}}},{name:"smallQuota",weight:2,async check(){try{let t=await navigator.storage.estimate(),e=t.quota<50*1024*1024;return{value:t.quota,triggered:e}}catch{return{value:"quota-error",triggered:!0}}}},{name:"indexedDbBlocked",weight:2,async check(){try{let t=indexedDB.open("tamper-check");return await new Promise(e=>{t.onerror=()=>e({value:"error",triggered:!0}),t.onsuccess=()=>e({value:"ok",triggered:!1})})}catch{return{value:"throw",triggered:!0}}}},{name:"screenDprMismatch",weight:0,async check(){let t=window.screen.width,e=window.screen.height,n=window.devicePixelRatio,o=t===1920&&n===1&&e===1080||n%1!==0&&n%1!==.5;return{value:{w:t,h:e,dpr:n},triggered:o}}},{name:"missingCommonFonts",weight:1,async check(){return{value:"skipped",triggered:!1}}},{name:"noMediaDevices",weight:1,async check(){try{let t=await navigator.mediaDevices.enumerateDevices();return{value:t.length,triggered:t.length===0}}catch{return{value:"error",triggered:!0}}}},{name:"languagesEmpty",weight:1,async check(){let t=navigator.languages||[];return{value:t,triggered:t.length===0}}},{name:"pluginMismatch",weight:-4,async check(){try{let t=navigator.plugins.length;return{value:t,triggered:t===0}}catch{return{value:"error",triggered:!0}}}},{name:"devtoolsDetected",weight:-2,async check(){return new Promise(async t=>{let e={viewportBreakpoint:!1,consoleSpeed:!1,consoleProfileTiming:!1},n=160,o=window.outerWidth-window.innerWidth,r=window.outerHeight-window.innerHeight;(o>n||r>n)&&(e.viewportBreakpoint=!0);async function i(c=50){return new Promise(m=>{let u=performance.now();console.log("%c ","font-size:3000px");let d=performance.now();m(d-u>c)})}e.consoleSpeed=await i();function a(){if(typeof console.profile!="function"||typeof console.profileEnd!="function")return!1;let c=5,m=3,u=[];try{for(let g=0;g<c;g++){let f=performance.now(),T=`profile_${f.toString()}`;console.profile(T),console.profileEnd(T),u.push(performance.now()-f)}}catch{return!1}return u.sort((g,f)=>g-f),u[Math.floor(u.length/2)]>m}e.consoleProfileTiming=a();let s=Object.values(e).some(Boolean);setTimeout(()=>{t({value:s,triggered:s})},50)})}},{name:"knownAntiDetectBrowser",weight:5,async check(){let t=navigator.userAgent.toLowerCase(),n=["incogniton","multilogin","morelogin","adspect","kameleo","goLogin"].some(o=>t?.includes(o));return{value:t,triggered:n}}},{name:"batteryVirtualized",weight:4,async check(){try{let t=await navigator.getBattery(),e=t.chargingTime,n=t.dischargingTime;return{value:{chargingTime:e,dischargingTime:n},triggered:e===0}}catch{return{value:"no-battery-api",triggered:!1}}}},{name:"permissionDenied",weight:4,async check(){try{let t=await navigator.permissions.query({name:"notifications"}),e=t.state==="denied";return{value:t.state,triggered:e}}catch{return{value:"perm-error",triggered:!1}}}}];async function at({anomalyMin:t=.52,anomalyMax:e=.54}={}){let n={},o=0;for(let d of pn){let g=await d.check();n[d.name]=g,g.triggered&&(o+=d.weight)}let r=navigator?.platform||"",i=(navigator?.userAgent||"").toLowerCase(),a=r.toLowerCase().includes("win"),s=n.batteryVirtualized?.triggered||!1,c=n.permissionDenied?.triggered||!1,m=!a&&r!==""&&s&&c,u=Math.min(1,Math.max(0,o)/15);return{result:m&&u>=t&&u<=e||n.knownAntiDetectBrowser?.triggered,anomalyScore:u,score:o,signals:n}}function yn(){let t=0;try{0 .toFixed(-1)}catch(e){t=e.message.length}return t}function hn(){let t=navigator.userAgent,e=yn();return e===44||e===43?"Safari":e===51?"Chrome":e===25?"Firefox":navigator.msSaveBlob!==void 0?"MSIE":t.match(/Chrome/)?navigator.brave!==void 0?"Brave":t.includes("Edg")?"Edge":t.includes("OPR")?"Opera":"Chrome":"Unknown"}var wn=[{name:"safari_currentStorageTest",weight:2,browser:"Safari",async check(){if(typeof navigator.storage?.getDirectory!="function")return{triggered:!1,value:"unsupported"};try{return await navigator.storage.getDirectory(),{triggered:!1,value:"ok"}}catch(t){let e=t?.message??String(t);return{triggered:e.includes("unknown transient reason"),value:e}}}},{name:"safari13to18_indexedDbBlobTest",weight:2,browser:"Safari",async check(){return await new Promise(t=>{let e=String(Math.random()),n=indexedDB.open(e,1);n.onupgradeneeded=o=>{let r=o.target.result;try{r.createObjectStore("t",{autoIncrement:!0}).put(new Blob),t({triggered:!1,value:"ok"})}catch(i){let a=i?.message??String(i);t({triggered:a.includes("are not yet supported"),value:a})}finally{r.close(),indexedDB.deleteDatabase(e)}},n.onerror=()=>t({triggered:!1,value:"idb-error"})})}},{name:"safari_oldWebkitTest",weight:1,browser:"Safari",async check(){let t=window.openDatabase,e=window.localStorage;try{t(null,null,null,null)}catch{return{triggered:!0,value:"openDatabase denied"}}try{e.setItem("test","1"),e.removeItem("test")}catch{return{triggered:!0,value:"localStorage denied"}}return{triggered:!1,value:"ok"}}},{name:"chrome_storageQuotaPrivateTest",weight:2,browser:"Chrome",async check(){return await new Promise((t,e)=>{let o=window?.performance?.memory?.jsHeapSizeLimit??1073741824;navigator.webkitTemporaryStorage.queryUsageAndQuota((r,i)=>{let a=Math.round(i/1048576),s=Math.round(o/(1024*1024))*2;t({triggered:a<s,value:{quotaMB:a,limitMB:s}})},r=>e(r))})}},{name:"chrome_oldFileSystemTest",weight:1,browser:"Chrome",async check(){let t=window.webkitRequestFileSystem;return t?await new Promise(e=>t(0,1,()=>e({triggered:!1,value:"ok"}),()=>e({triggered:!0,value:"denied"}))):{triggered:!1,value:"unsupported"}}},{name:"firefox_storageDirectoryTest",weight:2,browser:"Firefox",async check(){if(typeof navigator.storage?.getDirectory!="function")return{triggered:!1,value:"unsupported"};try{return await navigator.storage.getDirectory(),{triggered:!1,value:"ok"}}catch(t){let e=t?.message??String(t);return{triggered:e.includes("Security error"),value:e}}}},{name:"firefox_indexedDbInvalidStateTest",weight:1,browser:"Firefox",async check(){return await new Promise(t=>{let e=indexedDB.open("inPrivate");e.onerror=()=>{t({triggered:e.error?.name==="InvalidStateError",value:e.error?.name})},e.onsuccess=()=>{indexedDB.deleteDatabase("inPrivate"),t({triggered:!1,value:"ok"})}})}},{name:"msie_indexedDbMissing",weight:2,browser:"MSIE",async check(){return{triggered:window.indexedDB===void 0,value:"msie-idb-check"}}}];async function st(){let t=hn(),e={},n=0;for(let o of wn){if(o.browser!==t)continue;let r=await o.check();e[o.name]=r,r.triggered&&(n+=o.weight)}return{isPrivate:n>0,browserName:t,score:n,signals:e}}typeof window<"u"&&(window.detectIncognito=st);var ct=st;var ut=[{name:"globalPrivacyControl",weight:3,async check(){let t=navigator.globalPrivacyControl;return{triggered:t===!0,value:t}}},{name:"doNotTrack",weight:1,async check(){let t=navigator.doNotTrack;return{triggered:t==="1",value:t}}},{name:"cookiesDisabled",weight:3,async check(){let t=navigator.cookieEnabled;return{triggered:t===!1,value:t}}},{name:"thirdPartyCookiesBlocked",weight:3,async check(){try{if("hasStorageAccess"in document&&!await document.hasStorageAccess())try{return await document.requestStorageAccess(),{triggered:!1,value:"access_granted"}}catch{return{triggered:!0,value:"access_denied"}}let t=`__dtect_3p_test_${Date.now()}`;document.cookie=`${t}=1; SameSite=None; Secure`;let e=document.cookie.includes(t);return document.cookie=`${t}=; expires=Thu, 01 Jan 1970 00:00:00 GMT`,{triggered:!1,value:e?"cookies_work":"may_be_blocked"}}catch(t){return{triggered:!1,value:`error: ${t?.message}`}}}},{name:"firefoxResistFingerprinting",weight:2,async check(){let t=[],e=new Date().getTimezoneOffset();e===0&&Intl.DateTimeFormat().resolvedOptions().timeZone==="UTC"&&t.push("timezone_utc");let n=navigator.hardwareConcurrency;n===2&&t.push("cores_capped");let o=window.screen.width,r=window.screen.height,i=window.innerWidth,a=window.innerHeight;o===i&&r===a&&t.push("screen_matches_inner");let s=window.matchMedia("(prefers-reduced-motion: reduce)").matches;return{triggered:t.length>=2,value:{signals:t,timezoneOffset:e,cores:n,prefersReducedMotion:s}}}},{name:"braveShields",weight:3,async check(){if(!(navigator.brave!==void 0))return{triggered:!1,value:"not_brave"};try{if(!await navigator.brave.isBrave())return{triggered:!1,value:"brave_check_false"};let o=document.createElement("canvas").getContext("2d");if(o){o.fillStyle="rgb(255, 0, 0)",o.fillRect(0,0,1,1);let r=o.getImageData(0,0,1,1).data;o.fillRect(0,0,1,1);let i=o.getImageData(0,0,1,1).data;if(r[0]!==i[0]||r[1]!==i[1]||r[2]!==i[2])return{triggered:!0,value:"shields_active_canvas"}}try{let r=new RTCPeerConnection({iceServers:[{urls:"stun:stun.l.google.com:19302"}]});if(r.createDataChannel(""),await new Promise(a=>{let s=setTimeout(()=>{r.close(),a(!1)},1e3);r.onicecandidate=c=>{c.candidate?.candidate&&(/([0-9]{1,3}\.){3}[0-9]{1,3}/.test(c.candidate.candidate)||(clearTimeout(s),r.close(),a(!0)))},r.createOffer().then(c=>r.setLocalDescription(c))}))return{triggered:!0,value:"shields_active_webrtc"}}catch{return{triggered:!0,value:"shields_active_webrtc_blocked"}}return{triggered:!0,value:"brave_detected_shields_default"}}catch(e){return{triggered:!1,value:`error: ${e?.message}`}}}}];async function lt(){let t={},e=0,n=await Promise.allSettled(ut.map(async o=>{let r=await o.check();return{name:o.name,weight:o.weight,result:r}}));for(let o of n)if(o.status==="fulfilled"){let{name:r,weight:i,result:a}=o.value;t[r]=a,a.triggered&&(e+=i)}else{let r=n.indexOf(o),i=ut[r];i&&(t[i.name]={triggered:!1,value:`check_failed: ${o.reason}`})}return{isPrivacyEnabled:e>3,score:e,signals:t}}typeof window<"u"&&(window.detectPrivacy=lt);var mt=lt;function In(t){let e=t?.projectId,n=t?.visitorId||O();return(typeof t?.projectId=="number"||typeof t?.visitorId=="number")&&(e=`${t?.projectId}`,n=`${t?.visitorId}`),{visitorId:n,projectId:e}}function F(t){let{projectId:e,visitorId:n}=In(t);return{projectId:e,visitorId:n}}async function vn(){let t=new K,[e,n,o,r,i]=await Promise.allSettled([t.get(),it(),at(),ct(),mt()]);return{deviceRes:e,vmDtectResults:n,tamperingDtectResults:o,incognitoDtectResults:r,privacySettingsDtectResults:i}}function En(t,e){return{entryLink:window?.location?.href,securitySettings:t.securitySettings,metaData:t.metaData,vmDtectResults:e?.vmDtectResults?.value,tamperingDtectResults:e?.tamperingDtectResults?.value,incognitoDtectResults:e?.incognitoDtectResults?.value,deviceIdResults:e?.deviceRes?.value,privacySettingsDtectResults:e?.privacySettingsDtectResults?.value}}function bn(t,e,n,o){let r=(performance.now()-e).toFixed();I(`${t} finishes in ${r}ms`,"info",{function:t,endpoint:n?.endpoint,diff:r,token:o,clientId:n?.clientId})}function dt(t,e,n,o,r){let i=(performance.now()-e).toFixed();I(`${t} error`,"error",{function:t,endpoint:n?.endpoint,error:r,diff:i,token:o,clientId:n?.clientId})}async function gt(t,e){let n=performance.now(),{projectId:o,visitorId:r}=F(t);if(!t||!o?.trim())throw new Error(h.FAILED_TO_GET_SECURITY_RESULT);L({projectId:o,visitorId:r});let{state:i,config:a,version:s}=w();try{let c=await vn(),m=En(t,c),u={...t,projectId:o,visitorId:r,clientData:m,version:s,token:i.token,questionData:i.questionData,aiCheckData:i.aiCheckData},d=await U({url:e,body:u,headers:{"client-id":a?.clientId||"","x-api-key":a?.apiKey||""}});if(!("token"in d||"results"in d))throw new Error(h.INTERNAL_SERVER_ERROR);let g="results"in d&&d.results.isAIUsageDetected===!0;return S(f=>({...f,state:{...f.state,token:i.token,visitorId:r,projectId:o,clientData:m,aiUsageFlagged:f.state.aiUsageFlagged||g}})),bn("getResultBase",n,a,i.token),d}catch(c){c instanceof Error?dt("getResultBase",n,a,i.token,{message:c.message,stack:c.stack,name:c.name}):dt("getResultBase",n,a,i.token,c),N(c)}}async function ee(t){let{endpoint:e}=M();if(t)return gt(t,`${e}/client/check/result`)}async function te(t){let{endpoint:e}=M();return gt(t,`${e}/client/check`)}var j;function ft(){let{config:t,monitor:e,state:n}=w();if(!t?.autoFlagAIUsage||!e||(j?.(),j=void 0,n.aiUsageFlagged))return;let o=()=>{let{state:r}=w();r.aiUsageFlagged||!(e.apd||e.qbc&&e.mas&&e.scb!=null)||r.projectId&&(S(a=>({...a,state:{...a.state,aiUsageFlagged:!0}})),j?.(),j=void 0,$({projectId:r.projectId,visitorId:r.visitorId}))};j=e.onChange(o),o()}async function $(t){let e=performance.now(),{visitorId:n,projectId:o}=F(t);L({projectId:o,visitorId:n});let{state:r,config:i,monitor:a,version:s}=w(),{checkResultEndpoint:c}=M(),m={timeTakenSeconds:t.timeTakenSeconds,qbc:a?.qbc,mas:a?.mas,scb:a?.scb,apd:a?.apd};try{let u=await U({url:c,headers:{"client-id":i?.clientId||"","x-api-key":i?.apiKey||""},body:{token:r.token,visitorId:n,projectId:o,version:s,clientData:r.clientData,questionData:r.questionData,aiCheckData:m}});if(!u)throw new Error(h.INTERNAL_SERVER_ERROR);let d="results"in u&&u.results.isAIUsageDetected===!0;S(f=>({...f,state:{...f.state,aiCheckData:m,visitorId:n,projectId:o,aiUsageFlagged:f.state.aiUsageFlagged||d}}));let g=(performance.now()-e).toFixed();return I(`isAIUsageDetected finishes in ${g}ms`,"info",{endpoint:i?.endpoint,diff:g,token:r.token,clientId:i?.clientId}),u}catch(u){let d=(performance.now()-e).toFixed();u instanceof Error?I("isAIUsageDetected error","error",{endpoint:i?.endpoint,error:{message:u.message,stack:u.stack,name:u.name},diff:d,token:r.token,clientId:i?.clientId}):I("isAIUsageDetected error","error",{endpoint:i?.endpoint,error:u,diff:d,token:r.token,clientId:i?.clientId}),N(u)}}async function ne(t){let e=performance.now(),{state:n,config:o}=w(),{respondentType:r,language:i}=t;try{let a=await ot({url:`${o?.endpoint}/client/quality-questions/${r}/${i}`,headers:{"client-id":o?.clientId||"","x-api-key":o?.apiKey||""}});if(!a)throw new Error(h.INTERNAL_SERVER_ERROR);let s=(performance.now()-e).toFixed();return I(`getQualityQuestions finishes in ${s}ms`,"info",{function:"getQualityQuestions",endpoint:o?.endpoint,diff:s,token:n.token,clientId:o?.clientId}),a}catch(a){let s=(performance.now()-e).toFixed();I("getQualityQuestions error","error",{endpoint:o?.endpoint,error:a,diff:s,token:n.token,clientId:o?.clientId}),N(a)}}async function re(t){let e=performance.now(),{visitorId:n,projectId:o}=F(t);L({projectId:o,visitorId:n});let{state:r,config:i,version:a}=w(),{checkResultEndpoint:s}=M(),c={questions:t.questions};try{let m=await U({url:s,headers:{"client-id":i?.clientId||"","x-api-key":i?.apiKey||""},body:{token:r.token,visitorId:n,projectId:o,version:a,questionData:c,aiCheckData:r.aiCheckData,clientData:r.clientData}});if(!m)throw new Error(h.INTERNAL_SERVER_ERROR);S(d=>({...d,state:{...d.state,token:r.token,questionData:c,visitorId:n,projectId:o}}));let u=(performance.now()-e).toFixed();return I(`checkQualityQuestions finishes in ${u}ms`,"info",{function:"checkQualityQuestions",endpoint:i?.endpoint,diff:u,token:r.token,clientId:i?.clientId}),m}catch(m){let u=(performance.now()-e).toFixed();m instanceof Error?I("checkQualityQuestions error","error",{endpoint:i?.endpoint,error:{message:m.message,stack:m.stack,name:m.name},diff:u,token:r.token,clientId:i?.clientId}):I("checkQualityQuestions error","error",{endpoint:i?.endpoint,error:m,diff:u,token:r.token,clientId:i?.clientId}),N(m)}}var pt,yt=Ne;function Tn(){let{config:t}=w();return!!(t?.clientId&&t?.apiKey)}function Rn(t){let{config:e}=w();if(!t?.clientId||!t?.apiKey)throw I(h.MISSING_CREDENTIALS,"error",{endpoint:e?.endpoint,...t}),new Error(h.MISSING_CREDENTIALS)}function xn(){let{config:t}=w();return!!(t?.clientId&&t.apiKey)}function An(t){let{config:e}=w();if(!xn())throw I(h.MISSING_CREDENTIALS,"error",{endpoint:e?.endpoint,...t}),new Error(h.MISSING_CREDENTIALS)}function Dn(t){return{clientId:t.clientId,apiKey:t.apiKey,endpoint:t.endpoint||"https://api.dtect.io/security",includeResults:t.includeResults,autoFlagAIUsage:t.autoFlagAIUsage}}function Sn(t){let e=t.endpoint,n=t.includeResults?`${e}/client/check/result`:`${e}/client/check`;return{...t,checkResultEndpoint:n}}function kn(t){let e=Sn(t);S(n=>({...n,config:e}))}function Pn(){let{state:t}=w();if(t.isLoading)throw new Error(h.DUPLICATE_INITIALIZATION)}async function _n(t){let{state:e,config:n}=w(),r=(performance.now()-t).toFixed();return I(`init() finishes ${r}ms`,"info",{endpoint:n?.endpoint,function:"init",diff:r,token:e.token,clientId:n?.clientId}),{getSecurityResult:ee,getSecurityToken:te,SecurityAPIError:yt,isAIUsageDetected:$,checkQualityQuestions:re,getQualityQuestions:ne,LanguageCodes:G,QualityQuestionsRespondentTypes:V}}async function ht(t){let{state:e}=w(),n=performance.now();Rn(t);let o=Dn(t);kn(o),An(t);let r=Ve(e.token);Pn(),Ke(r),ft();try{return await _n(n)}catch(i){We(i,o)}finally{je(r)}}pt={init:ht,getSecurityResult:ee,getSecurityToken:te,isAIUsageDetected:$,checkQualityQuestions:re,getQualityQuestions:ne,QualityQuestionsRespondentTypes:V,LanguageCodes:G};var On=pt;
package/dist/index.mjs CHANGED
@@ -1,11 +1,11 @@
1
- var En={UNAUTHORIZED:"Unauthorized"},vn={EXPIRED:"EXPIRED_TOKEN",INVALID_API_KEY:"INVALID_API_KEY",MISSING_AUTHENTICATION_TOKEN:"MISSING_AUTHENTICATION_TOKEN"},ut={INTERNAL_SERVER_ERROR:"Internal Server Error during API Request",MISSING_CREDENTIALS:"Missing Public Client ID or Public API Key",MAINTENANCE_MODE:"API Under Maintenance",RATE_LIMIT_REACHED:"Too many requests. Rate limit exceeded"},lt={SDK_INIT_ERROR:"Internal Server Error during SDK Initialization",DUPLICATE_INITIALIZATION:"Multiple SDK Initializations Detected",NOT_INITIALIZED:"SDK Not Initialized"},dt={INVALID_CREDENTIALS:"Invalid Public Client ID or Public API Key"},mt={FAILED_TO_GET_SECURITY_RESULT:"Failed to Retrieve Security Result"},ft={FAILED_TO_GET_SECURITY_TOKEN:" Failed to Generate Security Token"},v={...En,...vn,...ut,...lt,...dt,...mt,...ft},pt={...ut,...lt,...dt,...mt,...ft};var re=(h=>(h.AR="ar",h.BN="bn",h.DE="de",h.EN="en",h.ES="es",h.FR="fr",h.HI="hi",h.ID="id",h.IT="it",h.JA="ja",h.KO="ko",h.MS="ms",h.NL="nl",h.PT="pt",h.RU="ru",h.YU="yu",h.ZH="zh",h))(re||{}),oe=(E=>(E.GeneralConsumer="general-consumer",E.HRManagerDirector="hr-manager-director",E.WebDeveloper="web-developer",E.SoftwareEngineer="software-engineer",E.ITDirector="it-director",E.BusinessAdministrator="business-administrator",E.AccountsPayableManager="accounts-payable-manager",E.Accountant="accountant",E.FinanceDirector="finance-director",E.SmallBusinessOwner="small-business-owner",E.GeneralContractor="general-contractor",E.MarketingManagerDirector="marketing-manager-director",E.ConsumerShopper="consumer-shopper",E.Travel="travel",E.Entertainment="entertainment",E.FinanceAndBanking="finance-and-banking",E.General="general",E.B2BWhiteCollar="b2b-white-collar",E.B2BBlueCollar="b2b-blue-collar",E.Lawyer="lawyer",E))(oe||{});var S=[];for(let e=0;e<256;++e)S.push((e+256).toString(16).slice(1));function ht(e,t=0){return(S[e[t+0]]+S[e[t+1]]+S[e[t+2]]+S[e[t+3]]+"-"+S[e[t+4]]+S[e[t+5]]+"-"+S[e[t+6]]+S[e[t+7]]+"-"+S[e[t+8]]+S[e[t+9]]+"-"+S[e[t+10]]+S[e[t+11]]+S[e[t+12]]+S[e[t+13]]+S[e[t+14]]+S[e[t+15]]).toLowerCase()}var Te,wn=new Uint8Array(16);function Se(){if(!Te){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");Te=crypto.getRandomValues.bind(crypto)}return Te(wn)}var Rn=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Ae={randomUUID:Rn};function bn(e,t,n){if(Ae.randomUUID&&!t&&!e)return Ae.randomUUID();e=e||{};let r=e.random??e.rng?.()??Se();if(r.length<16)throw new Error("Random bytes length must be >= 16");if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,t){if(n=n||0,n<0||n+16>t.length)throw new RangeError(`UUID byte range ${n}:${n+15} is out of buffer bounds`);for(let o=0;o<16;++o)t[n+o]=r[o];return t}return ht(r)}var F=bn;var gt="dtect_security_sdk_state",yt=typeof window<"u",It={isLoading:!1,token:"",visitorId:"",projectId:"",questionData:null,clientData:null,aiCheckData:null,tokens:null},ie={state:{...It},securityKeys:{behaviorKey:"bwDZ0V3Zrb4SB6g4lZwW",automationKey:"7166bf18-b91e-407a-84fc-d57ac104de98",usingFpjs:!1,usingHcaptcha:!1}};function Et(){if(!yt)return ie;try{let e=sessionStorage.getItem(gt);if(!e)return ie;let t=JSON.parse(e);return t.expiresAt&&t.expiresAt<Date.now()?ie:{state:{...It,...t.state},securityKeys:t.securityKeys||{behaviorKey:"",automationKey:"",usingFpjs:!1,usingHcaptcha:!1}}}catch{return ie}}function vt(e){if(yt)try{let t=Date.now()+864e5,n={...e,expiresAt:t};sessionStorage.setItem(gt,JSON.stringify(n))}catch{}}function wt(e){return e||F()}function Tn(e,t){return function(n,r){return Object.prototype.hasOwnProperty.call(n,r)}(e,t)?e[t]:void 0}function Sn(e,t,n,r){let o=document,i="securitypolicyviolation",a,s=d=>{let u=new URL(e,location.href),{blockedURI:l}=d;l!==u.href&&l!==u.protocol.slice(0,-1)&&l!==u.origin||(a=d,c())};o.addEventListener(i,s);let c=()=>o.removeEventListener(i,s);return r?.then(c,c),Promise.resolve().then(t).then(d=>(c(),d),d=>new Promise(u=>{let l=new MessageChannel;l.port1.onmessage=()=>u(),l.port2.postMessage(null)}).then(()=>{if(c(),a)return n(a);throw d}))}function N(e){let t="";for(let n=0;n<e.length;++n)if(n>0){let r=e[n].toLowerCase();r!==e[n]?t+=` ${r}`:t+=e[n]}else t+=e[n].toUpperCase();return t}var An={default:"endpoint"},Pn={default:"tlsEndpoint"},Dn="Client timeout",On="Network connection error",_n="Network request aborted",xn="Response cannot be parsed",Pe="Blocked by CSP",De="The endpoint parameter is not a valid URL",kn="Handle on demand agent data error",Mn=N("WrongRegion"),Nn=N("SubscriptionNotActive"),Cn=N("UnsupportedVersion"),Ln=N("InstallationMethodRestricted"),Fn=N("HostnameRestricted"),Un=N("IntegrationFailed"),Bn=N("NetworkRestricted"),qn=N("InvalidProxyIntegrationSecret"),Kn=N("InvalidProxyIntegrationHeaders"),Gn=N("ProxyIntegrationSecretEnvironmentMismatch"),Oe="API key required",Rt="API key not found",bt="API key expired",jn="Request cannot be parsed",Vn="Request failed",Qn="Request failed to process",Wn="Too many requests, rate limit exceeded",$n="Not available for this origin",zn="Not available with restricted header",Yn=Oe,Jn=Rt,Xn=bt,Zn="3.12.0",se="Failed to load the JS script of the agent",_e="9319";function Hn(e,t){let n=[],[r,o]=function(s){let c=function(l){let m=[...l];return{current:()=>m[0],postpone(){let y=m.shift();y!==void 0&&m.push(y)},exclude(){m.shift()}}}(s),d=function(l,m){let y=0;return()=>Math.random()*Math.min(m,l*Math.pow(2,y++))}(100,3e3),u=new Set;return[c.current(),(l,m)=>{let y,g=m instanceof Error?m.message:"";if(g===Pe||g===De)c.exclude(),y=0;else if(g===_e)c.exclude();else if(g===se){let I=Date.now()-l.getTime()<50,h=c.current();h&&I&&!u.has(h)&&(u.add(h),y=0),c.postpone()}else c.postpone();let f=c.current();return f===void 0?void 0:[f,y??l.getTime()+d()-Date.now()]}]}(e),i;if(r===void 0)return Promise.reject(new TypeError("The list of script URL patterns is empty"));let a=s=>{let c=new Date,d=l=>n.push({url:s,startedAt:c,finishedAt:new Date,error:l}),u=t(s);return u.then(()=>d(),d),u.catch(l=>{if(i!=null||(i=l),n.length>=5)throw i;let m=o(c,l);if(!m)throw i;let[y,g]=m;return(f=g,new Promise(I=>setTimeout(I,f))).then(()=>a(y));var f})};return a(r).then(s=>[s,n])}var Tt="https://fpnpmcdn.net/v<version>/<apiKey>/loader_v<loaderVersion>.js",er=Tt;function tr(e){var t,n;let{picked:r,rest:o}=function(u,l){let m={},y={};for(let[g,f]of Object.entries(u))l.includes(g)?m[g]=f:y[g]=f;return{picked:m,rest:y}}(e,["scriptUrlPattern","token","apiKey"]),i=r.token,a=(t=r.apiKey)!==null&&t!==void 0?t:i,s=(n=Tn(e,"scriptUrlPattern"))!==null&&n!==void 0?n:Tt,[c,d]=function(){let u=[],l=()=>{u.push({time:new Date,state:document.visibilityState})},m=function(y,g,f,I){return y.addEventListener(g,f,I),()=>y.removeEventListener(g,f,I)}(document,"visibilitychange",l);return l(),[u,m]}();return Promise.resolve().then(()=>{if(!a||typeof a!="string")throw new Error(Oe);let u=function(l,m){return(Array.isArray(l)?l:[l]).map(y=>function(g,f){let I=encodeURIComponent;return g.replace(/<[^<>]+>/g,h=>h==="<version>"?"3":h==="<apiKey>"?I(f):h==="<loaderVersion>"?I(Zn):h)}(String(y),m))}(s,a);return Hn(u,nr)}).catch(u=>{throw d(),function(l){return l instanceof Error&&l.message===_e?new Error(se):l}(u)}).then(([u,l])=>(d(),u.load({...o,ldi:{attempts:l,visibilityStates:c}})))}function nr(e){return Sn(e,()=>function(t){return new Promise((n,r)=>{if(function(s){if(URL.prototype)try{return new URL(s,location.href),!1}catch(c){if(c instanceof Error&&c.name==="TypeError")return!0;throw c}}(t))throw new Error(De);let o=document.createElement("script"),i=()=>{var s;return(s=o.parentNode)===null||s===void 0?void 0:s.removeChild(o)},a=document.head||document.getElementsByTagName("head")[0];o.onload=()=>{i(),n()},o.onerror=()=>{i(),r(new Error(se))},o.async=!0,o.src=t,a.appendChild(o)})}(e),()=>{throw new Error(Pe)}).then(rr)}function rr(){let e=window,t="__fpjs_p_l_b",n=e[t];if(function(r,o){var i;let a=(i=Object.getOwnPropertyDescriptor)===null||i===void 0?void 0:i.call(Object,r,o);a?.configurable?delete r[o]:a&&!a.writable||(r[o]=void 0)}(e,t),typeof n?.load!="function")throw new Error(_e);return n}var K={load:tr,defaultScriptUrlPattern:er,ERROR_SCRIPT_LOAD_FAIL:se,ERROR_API_KEY_EXPIRED:bt,ERROR_API_KEY_INVALID:Rt,ERROR_API_KEY_MISSING:Oe,ERROR_BAD_REQUEST_FORMAT:jn,ERROR_BAD_RESPONSE_FORMAT:xn,ERROR_CLIENT_TIMEOUT:Dn,ERROR_CSP_BLOCK:Pe,ERROR_FORBIDDEN_ENDPOINT:Fn,ERROR_FORBIDDEN_HEADER:zn,ERROR_FORBIDDEN_ORIGIN:$n,ERROR_GENERAL_SERVER_FAILURE:Vn,ERROR_HANDLE_AGENT_DATA:kn,ERROR_INSTALLATION_METHOD_RESTRICTED:Ln,ERROR_INTEGRATION_FAILURE:Un,ERROR_INVALID_ENDPOINT:De,ERROR_INVALID_PROXY_INTEGRATION_HEADERS:Kn,ERROR_INVALID_PROXY_INTEGRATION_SECRET:qn,ERROR_NETWORK_ABORT:_n,ERROR_NETWORK_CONNECTION:On,ERROR_NETWORK_RESTRICTED:Bn,ERROR_PROXY_INTEGRATION_SECRET_ENVIRONMENT_MISMATCH:Gn,ERROR_RATE_LIMIT:Wn,ERROR_SERVER_TIMEOUT:Qn,ERROR_SUBSCRIPTION_NOT_ACTIVE:Nn,ERROR_TOKEN_EXPIRED:Xn,ERROR_TOKEN_INVALID:Jn,ERROR_TOKEN_MISSING:Yn,ERROR_UNSUPPORTED_VERSION:Cn,ERROR_WRONG_REGION:Mn,defaultEndpoint:An,defaultTlsEndpoint:Pn};async function R(e,t="info",n={}){let r=`${n.endpoint??"https://api.dtect.io/security"}/log`,o={message:e,type:t,payload:n};navigator.sendBeacon(r,JSON.stringify(o))}var or="20000000-aaaa-bbbb-cccc-000000000002",G=()=>window?.location?.href?.includes("localhost")||window?.location?.href?.includes("file:///");function ir(){return G()?Promise.resolve(or):window?.hcaptcha?.execute({async:!0}).then(e=>e?.response)}function St(e,t,n,r){let o=(performance.now()-e).toFixed();R(`getTokens finishes in ${o}ms`,"info",{function:"getTokens",endpoint:n,diff:o,token:t,clientId:r})}async function At(){let e=performance.now(),{state:t,fpjs:n,config:r}=w();if(t.tokens)return St(e,t.token,r?.endpoint,r?.clientId),t.tokens;let[o,i]=await Promise.all([r?.usingHcaptcha?ir():"",n?.get()]),a={behaviorRequestId:i?.requestId,behaviorToken:i?.sealedResult,automationToken:o};return P(s=>({...s,state:{...s.state,tokens:a}})),St(e,t.token,r?.endpoint,r?.clientId),a}function sr(){let e=performance.now(),t=document.querySelector("head");document.querySelector("body")?.insertAdjacentHTML("beforeend",'<div id="dtect-h-captcha" ></div>');let r=document.createElement("script");r.setAttribute("src","https://js.hcaptcha.com/1/api.js"),r.setAttribute("async","true"),r.setAttribute("defer","true"),t?.append(r);let i=(performance.now()-e).toFixed()}function ar(){return new Promise(e=>{let t=()=>{window?.hcaptcha?e():requestAnimationFrame(t)};t()})}async function Pt({usingFpjs:e,behaviorKey:t}){if(!e)return;let{config:n,state:r}=w(),o=performance.now(),i=await K.load({apiKey:t,endpoint:["https://fp.dtect.io",K.defaultEndpoint],scriptUrlPattern:["https://fp.dtect.io/web/v<version>/<apiKey>/loader_v<loaderVersion>.js",K.defaultScriptUrlPattern]});P(s=>({...s,fpjs:i}));let a=(performance.now()-o).toFixed();if(R(`FingerprintJS loaded in ${a}ms`,"info",{function:"fpjs load",endpoint:n?.endpoint,diff:a,token:r.token,clientId:n?.clientId}),!i)throw new Error(v.SDK_INIT_ERROR)}async function Dt(e){if(G()||!e.usingHcaptcha)return;let{securityKeys:t}=w();sr(),await ar(),await window.hcaptcha.render("dtect-h-captcha",{sitekey:t.automationKey,size:"invisible"})}var cr="0.0.32",U={...Et(),fpjs:void 0,monitor:void 0,version:cr};function w(){return U}function P(e){U=e(U),vt({state:U.state,securityKeys:U.securityKeys})}function xe(){return U.state.tokens}function Ot(){return U.securityKeys}function J(){let{fpjs:e,config:t}=w(),n=xe(),r=G(),o=document.querySelector("#dtect-h-captcha"),i=!!(!t?.usingFpjs||e&&n?.behaviorToken),a=!!(!t?.usingHcaptcha||r||o&&n?.automationToken);return i&&a}function B(){let{config:e,securityKeys:t}=w(),n=e?.endpoint||"https://api.dtect.io/security",r=e?.includeResults?`${n}/client/check/result`:`${n}/client/check`;return{endpoint:n,clientId:e?.clientId,apiKey:e?.apiKey,checkResultEndpoint:r,usingHcaptcha:e?.usingHcaptcha}}function q(e){if(e instanceof Error){if(e?.message?.includes("maintenance_mode"))throw new Error(v.MAINTENANCE_MODE);if(e?.message?.includes("rate-limited"))throw new Error(v.RATE_LIMIT_REACHED);switch(e?.message){case K.ERROR_RATE_LIMIT:throw new Error(v.RATE_LIMIT_REACHED);default:throw new Error(v.INTERNAL_SERVER_ERROR)}}throw new Error(v.FAILED_TO_GET_SECURITY_TOKEN)}function _t(e,t){let{state:n,config:r}=w();if(e instanceof Error){if(R(e.message,"error",{function:"init",endpoint:r?.endpoint,error:e,token:n.token,clientId:t.clientId}),e.message.includes("maintenance_mode"))throw new Error(v.MAINTENANCE_MODE);if([v.INVALID_API_KEY,v.UNAUTHORIZED].includes(e.message))throw new Error(v.INVALID_CREDENTIALS)}throw new Error(v.SDK_INIT_ERROR)}function xt(e){let t=e?.qbc||!1,n=e?.mas||!1,r=e?.apd||!1,o=e?.scb||null,i=0,a=()=>{t=!1,n=!1,r=!1,o=void 0,i=0},s=()=>{let l=window?.getSelection()?.toString();l&&l.length>0&&(i=Date.now(),t=!0)},c=u=>{let l=u.clipboardData?.getData("text"),m=u.target instanceof HTMLInputElement||u.target instanceof HTMLTextAreaElement;l&&m&&(r=!0)},d=()=>{n=!0;let u=Date.now();if(i){let l=(u-i)/1e3;(o===void 0||l<o)&&(o=l)}};return document?.addEventListener("copy",s),document?.addEventListener("paste",c),window?.addEventListener("blur",d),{get qbc(){return t},get mas(){return n},get apd(){return r},get scb(){return o},reset:a,destroy(){document?.removeEventListener("copy",s),document?.removeEventListener("paste",c),window?.removeEventListener("blur",d)}}}function kt(e){P(t=>{let n=xt(t.state.aiCheckData);return{...t,monitor:n,state:{...t.state,isLoading:!0,token:e||""}}})}function Mt(e){P(t=>({...t,state:{...t.state,isLoading:!1,token:e||""}}))}var j={exclude:[],include:[],stabilize:["private","iframe"],logging:!0,timeout:5e3,cache_api_call:!0,performance:!1,experimental:!1},mi={...j},ke={private:[{exclude:["canvas"],browsers:["firefox","safari>=17","brave"]},{exclude:["audio"],browsers:["samsungbrowser","safari"]},{exclude:["fonts"],browsers:["firefox"]},{exclude:["audio.sampleHash","hardware.deviceMemory","header.acceptLanguage.q","system.hardwareConcurrency","plugins"],browsers:["brave"]},{exclude:["tls.extensions"],browsers:["firefox","chrome","safari"]},{exclude:["header.acceptLanguage"],browsers:["edge","chrome"]}],iframe:[{exclude:["system.applePayVersion","system.cookieEnabled"],browsers:["safari"]},{exclude:["permissions"]}],vpn:[{exclude:["ip"]}]};async function Me(){return ur()}async function ur(){return new Promise((t,n)=>{try{let i=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,5e3,44100),a=i?.createBufferSource(),s=i.createOscillator();s.frequency.value=1e3;let c=i.createDynamicsCompressor();c.threshold.value=-50,c.knee.value=40,c.ratio.value=12,c.attack.value=0,c.release.value=.2,s.connect(c),c.connect(i.destination),s.start();let d;i.oncomplete=u=>{d=u.renderedBuffer.getChannelData(0),t({sampleHash:lr(d),maxChannels:i.destination.maxChannelCount,channelCountMode:a.channelCountMode})},i.startRendering()}catch(r){console.error("Error creating audio fingerprint:",r),n(r)}})}function lr(e){let t=0;for(let n=0;n<e.length;++n)t+=Math.abs(e[n]);return t}function ae(e,t,n){let r=[];for(let a=0;a<e[0].data.length;a++){let s=[];for(let c=0;c<e.length;c++)s.push(e[c].data[a]);r.push(dr(s))}let o=r,i=new Uint8ClampedArray(o);return new ImageData(i,t,n)}function dr(e){if(e.length===0)return 0;let t={};for(let r of e)t[r]=(t[r]||0)+1;let n=e[0];for(let r in t)t[r]>t[n]&&(n=parseInt(r,10));return n}function mr(e){return new TextEncoder().encode(e).buffer}function ce(e){return e^=e>>>16,e=Math.imul(e,2246822507),e^=e>>>13,e=Math.imul(e,3266489909),e^=e>>>16,e>>>0}var D=new Uint32Array([597399067,2869860233,951274213,2716044179]);function M(e,t){return e<<t|e>>>32-t}function fr(e,t){let n=e.byteLength/16|0,r=new Uint32Array(e,0,n*4);for(let o=0;o<n;o++){let i=r.subarray(o*4,(o+1)*4);i[0]=Math.imul(i[0],D[0]),i[0]=M(i[0],15),i[0]=Math.imul(i[0],D[1]),t[0]=t[0]^i[0],t[0]=M(t[0],19),t[0]=t[0]+t[1],t[0]=Math.imul(t[0],5)+1444728091,i[1]=Math.imul(i[1],D[1]),i[1]=M(i[1],16),i[1]=Math.imul(i[1],D[2]),t[1]=t[1]^i[1],t[1]=M(t[1],17),t[1]=t[1]+t[2],t[1]=Math.imul(t[1],5)+197830471,i[2]=Math.imul(i[2],D[2]),i[2]=M(i[2],17),i[2]=Math.imul(i[2],D[3]),t[2]=t[2]^i[2],t[2]=M(t[2],15),t[2]=t[2]+t[3],t[2]=Math.imul(t[2],5)+2530024501,i[3]=Math.imul(i[3],D[3]),i[3]=M(i[3],18),i[3]=Math.imul(i[3],D[0]),t[3]=t[3]^i[3],t[3]=M(t[3],13),t[3]=t[3]+t[0],t[3]=Math.imul(t[3],5)+850148119}}function pr(e,t){let n=e.byteLength/16|0,r=e.byteLength%16,o=new Uint32Array(4),i=new Uint8Array(e,n*16,r);switch(r){case 15:o[3]=o[3]^i[14]<<16;case 14:o[3]=o[3]^i[13]<<8;case 13:o[3]=o[3]^i[12]<<0,o[3]=Math.imul(o[3],D[3]),o[3]=M(o[3],18),o[3]=Math.imul(o[3],D[0]),t[3]=t[3]^o[3];case 12:o[2]=o[2]^i[11]<<24;case 11:o[2]=o[2]^i[10]<<16;case 10:o[2]=o[2]^i[9]<<8;case 9:o[2]=o[2]^i[8]<<0,o[2]=Math.imul(o[2],D[2]),o[2]=M(o[2],17),o[2]=Math.imul(o[2],D[3]),t[2]=t[2]^o[2];case 8:o[1]=o[1]^i[7]<<24;case 7:o[1]=o[1]^i[6]<<16;case 6:o[1]=o[1]^i[5]<<8;case 5:o[1]=o[1]^i[4]<<0,o[1]=Math.imul(o[1],D[1]),o[1]=M(o[1],16),o[1]=Math.imul(o[1],D[2]),t[1]=t[1]^o[1];case 4:o[0]=o[0]^i[3]<<24;case 3:o[0]=o[0]^i[2]<<16;case 2:o[0]=o[0]^i[1]<<8;case 1:o[0]=o[0]^i[0]<<0,o[0]=Math.imul(o[0],D[0]),o[0]=M(o[0],15),o[0]=Math.imul(o[0],D[1]),t[0]=t[0]^o[0]}}function hr(e,t){t[0]=t[0]^e.byteLength,t[1]=t[1]^e.byteLength,t[2]=t[2]^e.byteLength,t[3]=t[3]^e.byteLength,t[0]=t[0]+t[1]|0,t[0]=t[0]+t[2]|0,t[0]=t[0]+t[3]|0,t[1]=t[1]+t[0]|0,t[2]=t[2]+t[0]|0,t[3]=t[3]+t[0]|0,t[0]=ce(t[0]),t[1]=ce(t[1]),t[2]=ce(t[2]),t[3]=ce(t[3]),t[0]=t[0]+t[1]|0,t[0]=t[0]+t[2]|0,t[0]=t[0]+t[3]|0,t[1]=t[1]+t[0]|0,t[2]=t[2]+t[0]|0,t[3]=t[3]+t[0]|0}function A(e,t=0){if(t=t?t|0:0,typeof e=="string"&&(e=mr(e)),!(e instanceof ArrayBuffer))throw new TypeError("Expected key to be ArrayBuffer or string");let n=new Uint32Array([t,t,t,t]);fr(e,n),pr(e,n),hr(e,n);let r=new Uint8Array(n.buffer);return Array.from(r).map(o=>o.toString(16).padStart(2,"0")).join("")}var gr=3,Nt=280,Ct=20;async function Ne(){return yr()}function yr(){return new Promise(e=>{let t=Array.from({length:gr},()=>Ir()),n=ae(t,Nt,Ct);e({commonPixelsHash:A(n.data.toString()).toString()})})}function Ir(){let e=document.createElement("canvas"),t=e.getContext("2d");if(!t)return new ImageData(1,1);e.width=Nt,e.height=Ct;let n=t.createLinearGradient(0,0,e.width,e.height);n.addColorStop(0,"red"),n.addColorStop(1/6,"orange"),n.addColorStop(2/6,"yellow"),n.addColorStop(3/6,"green"),n.addColorStop(4/6,"blue"),n.addColorStop(5/6,"indigo"),n.addColorStop(1,"violet"),t.fillStyle=n,t.fillRect(0,0,e.width,e.height);let r="Random Text WMwmil10Oo";return t.font="23.123px Arial",t.fillStyle="black",t.fillText(r,-5,15),t.fillStyle="rgba(0, 0, 255, 0.5)",t.fillText(r,-3.3,17.7),t.beginPath(),t.moveTo(0,0),t.lineTo(e.width*2/7,e.height),t.strokeStyle="white",t.lineWidth=2,t.stroke(),t.getImageData(0,0,e.width,e.height)}async function ue(e){for(;!document.body;)await Er(50);let t=document.createElement("iframe");t.setAttribute("frameBorder","0");let n=t.style;n.setProperty("position","fixed"),n.setProperty("display","block","important"),n.setProperty("visibility","visible"),n.setProperty("border","0"),n.setProperty("opacity","0"),t.src="about:blank",document.body.appendChild(t);let r=t.contentDocument||t.contentWindow?.document;if(!r)throw new Error("Iframe document is not accessible");e({iframe:r}),setTimeout(()=>{document.body.removeChild(t)},0)}function Er(e,t){return new Promise(n=>setTimeout(n,e,t))}var vr=["Arial","Arial Black","Arial Narrow","Arial Rounded MT","Arimo","Archivo","Barlow","Bebas Neue","Bitter","Bookman","Calibri","Cabin","Candara","Century","Century Gothic","Comic Sans MS","Constantia","Courier","Courier New","Crimson Text","DM Mono","DM Sans","DM Serif Display","DM Serif Text","Dosis","Droid Sans","Exo","Fira Code","Fira Sans","Franklin Gothic Medium","Garamond","Geneva","Georgia","Gill Sans","Helvetica","Impact","Inconsolata","Indie Flower","Inter","Josefin Sans","Karla","Lato","Lexend","Lucida Bright","Lucida Console","Lucida Sans Unicode","Manrope","Merriweather","Merriweather Sans","Montserrat","Myriad","Noto Sans","Nunito","Nunito Sans","Open Sans","Optima","Orbitron","Oswald","Pacifico","Palatino","Perpetua","PT Sans","PT Serif","Poppins","Prompt","Public Sans","Quicksand","Rajdhani","Recursive","Roboto","Roboto Condensed","Rockwell","Rubik","Segoe Print","Segoe Script","Segoe UI","Sora","Source Sans Pro","Space Mono","Tahoma","Taviraj","Times","Times New Roman","Titillium Web","Trebuchet MS","Ubuntu","Varela Round","Verdana","Work Sans"],wr=["monospace","sans-serif","serif"];async function Ce(e){return Rr()}function Rr(){return new Promise((e,t)=>{try{ue(async({iframe:n})=>{let o=n.createElement("canvas").getContext("2d"),i=wr.map(s=>Lt(o,s)),a={};vr.forEach(s=>{let c=Lt(o,s);i.includes(c)||(a[s]=c)}),e(a)})}catch{t({error:"unsupported"})}})}function Lt(e,t){if(!e)return null;let n="WwMmLli0Oo";return e.font=`72px ${t}`,e.measureText(n).width}function Le(){return new Promise((e,t)=>{let n=navigator.deviceMemory!==void 0?navigator.deviceMemory:0,r=window.performance&&window.performance.memory?window.performance.memory:0;e({videocard:br(),architecture:Tr(),deviceMemory:n.toString()||"undefined",jsHeapSizeLimit:r.jsHeapSizeLimit||0})})}function br(){let e=document.createElement("canvas"),t=e.getContext("webgl")??e.getContext("experimental-webgl");if(t&&"getParameter"in t)try{let n=(t.getParameter(t.VENDOR)||"").toString(),r=(t.getParameter(t.RENDERER)||"").toString(),o={vendor:n,renderer:r,version:(t.getParameter(t.VERSION)||"").toString(),shadingLanguageVersion:(t.getParameter(t.SHADING_LANGUAGE_VERSION)||"").toString()};if(!r.length||!n.length){let i=t.getExtension("WEBGL_debug_renderer_info");if(i){let a=(t.getParameter(i.UNMASKED_VENDOR_WEBGL)||"").toString(),s=(t.getParameter(i.UNMASKED_RENDERER_WEBGL)||"").toString();a&&(o.vendorUnmasked=a),s&&(o.rendererUnmasked=s)}}return o}catch{}return"undefined"}function Tr(){let e=new Float32Array(1),t=new Uint8Array(e.buffer);return e[0]=1/0,e[0]=e[0]-e[0],t[3]}function Fe(){return new Promise(e=>{e({languages:Sr(),timezone:Ar()})})}function Sr(){let e=[];return navigator.language}function Ar(){return Intl.DateTimeFormat().resolvedOptions().timeZone}var le=(e,t,n,r)=>{let o=(n-t)/r,i=0;for(let a=0;a<r;a++){let s=t+(a+.5)*o;i+=e(s)}return i*o};function Ue(){return new Promise(e=>{e({acos:Math.acos(.5),asin:le(Math.asin,-1,1,97),cos:le(Math.cos,0,Math.PI,97),largeCos:Math.cos(1e20),largeSin:Math.sin(1e20),largeTan:Math.tan(1e20),sin:le(Math.sin,-Math.PI,Math.PI,97),tan:le(Math.tan,0,2*Math.PI,97)})})}function Pr(e){if(e.length===0)return null;let t={};e.forEach(o=>{let i=String(o);t[i]=(t[i]||0)+1});let n=e[0],r=1;return Object.keys(t).forEach(o=>{t[o]>r&&(n=o,r=t[o])}),n}function Ft(e,t){let n={};return t.forEach(r=>{let o=e.map(a=>r in a?a[r]:void 0).filter(a=>a!==void 0),i=Pr(o);i&&(n[r]=i)}),n}var Dr=["accelerometer","accessibility","accessibility-events","ambient-light-sensor","background-fetch","background-sync","bluetooth","camera","clipboard-read","clipboard-write","device-info","display-capture","gyroscope","geolocation","local-fonts","magnetometer","microphone","midi","nfc","notifications","payment-handler","persistent-storage","push","speaker","storage-access","top-level-storage-access","window-management","query"];async function Be(e){let t=e?.permissions_to_check||Dr,r=await Promise.all(Array.from({length:3},()=>Or(t)));return Ft(r,t)}async function Or(e){let t={};for(let n of e)try{let r=await navigator.permissions.query({name:n});t[n]=r.state.toString()}catch{}return t}async function qe(){let e=[];if(navigator.plugins)for(let t=0;t<navigator.plugins.length;t++){let n=navigator.plugins[t];e.push([n.name,n.filename,n.description].join("|"))}return new Promise(t=>{t({plugins:e})})}function V(){if(typeof navigator>"u")return{name:"unknown",version:"unknown"};let e=navigator.userAgent,t=[/(?<name>SamsungBrowser)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>EdgA|EdgiOS|Edg)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>OPR|OPX)\/(?<version>\d+(?:\.\d+)+)/,/Opera[\s\/](?<version>\d+(?:\.\d+)+)/,/Opera Mini\/(?<version>\d+(?:\.\d+)+)/,/Opera Mobi\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Vivaldi)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Brave)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>CriOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>FxiOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Chrome|Chromium)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Firefox|Waterfox|Iceweasel|IceCat)\/(?<version>\d+(?:\.\d+)+)/,/Version\/(?<version1>[\d.]+).*Safari\/[\d.]+|(?<name>Safari)\/(?<version2>[\d.]+)/,/(?<name>MSIE|Trident|IEMobile).+?(?<version>\d+(?:\.\d+)+)/,/(?<name>[A-Za-z]+)\/(?<version>\d+(?:\.\d+)+)/],n={edg:"Edge",edga:"Edge",edgios:"Edge",opr:"Opera",opx:"Opera",crios:"Chrome",fxios:"Firefox",samsung:"SamsungBrowser",vivaldi:"Vivaldi",brave:"Brave"};for(let r of t){let o=e.match(r);if(o){let i=o.groups?.name,a=o.groups?.version||o.groups?.version1||o.groups?.version2;if(!i&&(o.groups?.version1||o.groups?.version2)&&(i="Safari"),!i&&r.source.includes("Opera Mini")&&(i="Opera Mini"),!i&&r.source.includes("Opera Mobi")&&(i="Opera Mobi"),!i&&r.source.includes("Opera")&&(i="Opera"),!i&&o[1]&&(i=o[1]),!a&&o[2]&&(a=o[2]),i)return{name:n[i.toLowerCase()]||i,version:a||"unknown"}}}return{name:"unknown",version:"unknown"}}function de(){if(typeof navigator>"u"||!navigator.userAgent)return!1;let e=navigator.userAgent;return/Mobi|Android|iPhone|iPod|IEMobile|Opera Mini|Opera Mobi|webOS|BlackBerry|Windows Phone/i.test(e)&&!/iPad/i.test(e)}function Ke(){return new Promise(e=>{let t={is_touchscreen:navigator.maxTouchPoints>0,maxTouchPoints:navigator.maxTouchPoints,colorDepth:screen.colorDepth,mediaMatches:xr()};de()&&navigator.maxTouchPoints>0&&(t.resolution=_r()),e(t)})}function _r(){let e=window.screen.width,t=window.screen.height,n=Math.max(e,t).toString(),r=Math.min(e,t).toString();return`${n}x${r}`}function xr(){let e=[],t={"prefers-contrast":["high","more","low","less","forced","no-preference"],"any-hover":["hover","none"],"any-pointer":["none","coarse","fine"],pointer:["none","coarse","fine"],hover:["hover","none"],update:["fast","slow"],"inverted-colors":["inverted","none"],"prefers-reduced-motion":["reduce","no-preference"],"prefers-reduced-transparency":["reduce","no-preference"],scripting:["none","initial-only","enabled"],"forced-colors":["active","none"]};return Object.keys(t).forEach(n=>{t[n].forEach(r=>{matchMedia(`(${n}: ${r})`).matches&&e.push(`${n}: ${r}`)})}),e}function Ge(){return new Promise(e=>{let t=V(),n=navigator.userAgent,r={platform:window.navigator.platform,productSub:navigator.productSub,product:navigator.product,useragent:navigator.userAgent,hardwareConcurrency:navigator.hardwareConcurrency,browser:{name:t.name,version:t.version},mobile:de(),applePayVersion:kr(),cookieEnabled:window.navigator.cookieEnabled};e(r)})}function kr(){if(window.location.protocol==="https:"&&typeof window.ApplePaySession=="function")try{let e=window.ApplePaySession.supportsVersion;for(let t=15;t>0;t--)if(e(t))return t}catch{return 0}return 0}var Mr=V().name!=="SamsungBrowser"?1:3,O,p=null;function Nr(){typeof document<"u"&&(O=document.createElement("canvas"),O.width=200,O.height=100,p=O.getContext("webgl"))}async function je(){Nr();try{if(!p)throw new Error("WebGL not supported");let e=Array.from({length:Mr},()=>Cr()),t=ae(e,O.width,O.height);return{commonPixelsHash:A(t.data.toString()).toString()}}catch{return{webgl:"unsupported"}}}function Cr(){try{if(!p)throw new Error("WebGL not supported");let e=`
1
+ var yt={UNAUTHORIZED:"Unauthorized"},ht={EXPIRED:"EXPIRED_TOKEN",INVALID_API_KEY:"INVALID_API_KEY",MISSING_AUTHENTICATION_TOKEN:"MISSING_AUTHENTICATION_TOKEN"},Se={INTERNAL_SERVER_ERROR:"Internal Server Error during API Request",MISSING_CREDENTIALS:"Missing Public Client ID or Public API Key",MAINTENANCE_MODE:"API Under Maintenance",RATE_LIMIT_REACHED:"Too many requests. Rate limit exceeded"},ke={SDK_INIT_ERROR:"Internal Server Error during SDK Initialization",DUPLICATE_INITIALIZATION:"Multiple SDK Initializations Detected",NOT_INITIALIZED:"SDK Not Initialized"},Pe={INVALID_CREDENTIALS:"Invalid Public Client ID or Public API Key"},_e={FAILED_TO_GET_SECURITY_RESULT:"Failed to Retrieve Security Result"},Oe={FAILED_TO_GET_SECURITY_TOKEN:" Failed to Generate Security Token"},h={...yt,...ht,...Se,...ke,...Pe,..._e,...Oe},Me={...Se,...ke,...Pe,..._e,...Oe};var K=(p=>(p.AR="ar",p.BN="bn",p.DE="de",p.EN="en",p.ES="es",p.FR="fr",p.HI="hi",p.ID="id",p.IT="it",p.JA="ja",p.KO="ko",p.MS="ms",p.NL="nl",p.PT="pt",p.RU="ru",p.YU="yu",p.ZH="zh",p))(K||{}),j=(y=>(y.GeneralConsumer="general-consumer",y.HRManagerDirector="hr-manager-director",y.WebDeveloper="web-developer",y.SoftwareEngineer="software-engineer",y.ITDirector="it-director",y.BusinessAdministrator="business-administrator",y.AccountsPayableManager="accounts-payable-manager",y.Accountant="accountant",y.FinanceDirector="finance-director",y.SmallBusinessOwner="small-business-owner",y.GeneralContractor="general-contractor",y.MarketingManagerDirector="marketing-manager-director",y.ConsumerShopper="consumer-shopper",y.Travel="travel",y.Entertainment="entertainment",y.FinanceAndBanking="finance-and-banking",y.General="general",y.B2BWhiteCollar="b2b-white-collar",y.B2BBlueCollar="b2b-blue-collar",y.Lawyer="lawyer",y))(j||{});var E=[];for(let t=0;t<256;++t)E.push((t+256).toString(16).slice(1));function Ne(t,e=0){return(E[t[e+0]]+E[t[e+1]]+E[t[e+2]]+E[t[e+3]]+"-"+E[t[e+4]]+E[t[e+5]]+"-"+E[t[e+6]]+E[t[e+7]]+"-"+E[t[e+8]]+E[t[e+9]]+"-"+E[t[e+10]]+E[t[e+11]]+E[t[e+12]]+E[t[e+13]]+E[t[e+14]]+E[t[e+15]]).toLowerCase()}var re,wt=new Uint8Array(16);function oe(){if(!re){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");re=crypto.getRandomValues.bind(crypto)}return re(wt)}var It=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),ie={randomUUID:It};function vt(t,e,n){if(ie.randomUUID&&!e&&!t)return ie.randomUUID();t=t||{};let o=t.random??t.rng?.()??oe();if(o.length<16)throw new Error("Random bytes length must be >= 16");if(o[6]=o[6]&15|64,o[8]=o[8]&63|128,e){if(n=n||0,n<0||n+16>e.length)throw new RangeError(`UUID byte range ${n}:${n+15} is out of buffer bounds`);for(let r=0;r<16;++r)e[n+r]=o[r];return e}return Ne(o)}var O=vt;var Le="dtect_security_sdk_state",Ce=typeof window<"u",Be={isLoading:!1,token:"",visitorId:"",projectId:"",questionData:null,clientData:null,aiCheckData:null,aiUsageFlagged:!1},$={state:{...Be},securityKeys:{behaviorKey:"",automationKey:""}};function Ue(){if(!Ce)return $;try{let t=sessionStorage.getItem(Le);if(!t)return $;let e=JSON.parse(t);return e.expiresAt&&e.expiresAt<Date.now()?$:{state:{...Be,...e.state},securityKeys:e.securityKeys||{behaviorKey:"",automationKey:""}}}catch{return $}}function Fe(t){if(Ce)try{let e=Date.now()+864e5,n={...t,expiresAt:e};sessionStorage.setItem(Le,JSON.stringify(n))}catch{}}function Ge(t){return t||O()}var Et="0.1.1",G={...Ue(),monitor:void 0,version:Et};function w(){return G}function S(t){G=t(G),Fe({state:G.state,securityKeys:G.securityKeys})}function M(){let{config:t}=w(),e=t?.endpoint||"https://api.dtect.io/security",n=t?.includeResults?`${e}/client/check/result`:`${e}/client/check`;return{endpoint:e,clientId:t?.clientId,apiKey:t?.apiKey,checkResultEndpoint:n}}async function I(t,e="info",n={}){let o=`${n.endpoint??"https://api.dtect.io/security"}/log`,r={message:t,type:e,payload:n};navigator.sendBeacon(o,JSON.stringify(r))}function N(t){if(t instanceof Error){if(t?.message?.includes("maintenance_mode"))throw new Error(h.MAINTENANCE_MODE);switch(t?.message){default:throw new Error(h.INTERNAL_SERVER_ERROR)}}throw new Error(h.FAILED_TO_GET_SECURITY_TOKEN)}function Ve(t,e){let{state:n,config:o}=w();if(t instanceof Error){if(I(t.message,"error",{function:"init",endpoint:o?.endpoint,error:t,token:n.token,clientId:e.clientId}),t.message.includes("maintenance_mode"))throw new Error(h.MAINTENANCE_MODE);if([h.INVALID_API_KEY,h.UNAUTHORIZED].includes(t.message))throw new Error(h.INVALID_CREDENTIALS)}throw new Error(h.SDK_INIT_ERROR)}function We(t){let e=t?.qbc||!1,n=t?.mas||!1,o=t?.apd||!1,r=t?.scb||null,i=0,a=new Set,s=()=>{a.forEach(g=>g())},c=()=>{e=!1,n=!1,o=!1,r=void 0,i=0},m=()=>{let f=window?.getSelection()?.toString();f&&f.length>0&&(i=Date.now(),e=!0,s())},u=g=>{let f=g.clipboardData?.getData("text"),T=g.target instanceof HTMLInputElement||g.target instanceof HTMLTextAreaElement;f&&T&&(o=!0,s())},d=()=>{n=!0;let g=Date.now();if(i){let f=(g-i)/1e3;(r==null||f<r)&&(r=f)}s()};return document?.addEventListener("copy",m),document?.addEventListener("paste",u),window?.addEventListener("blur",d),{get qbc(){return e},get mas(){return n},get apd(){return o},get scb(){return r},onChange(g){return a.add(g),()=>{a.delete(g)}},reset:c,destroy(){a.clear(),document?.removeEventListener("copy",m),document?.removeEventListener("paste",u),window?.removeEventListener("blur",d)}}}function qe(t){S(e=>{let n=We(null);return{...e,monitor:n,state:{...e.state,isLoading:!0,token:t||"",aiUsageFlagged:!1}}})}function Ke(t){S(e=>({...e,state:{...e.state,isLoading:!1,token:t||""}}))}function L({projectId:t,visitorId:e}){let{state:n,monitor:o}=w();if(n.projectId===t&&n.visitorId===e)return;let r=O();o?.reset(),S(i=>({...i,state:{...i.state,aiCheckData:null,questionData:null,clientData:null,aiUsageFlagged:!1,projectId:t,visitorId:e,token:r}}))}var C={exclude:[],include:[],stabilize:["private","iframe"],logging:!0,timeout:5e3,cache_api_call:!0,performance:!1,experimental:!1},ar={...C},ae={private:[{exclude:["canvas"],browsers:["firefox","safari>=17","brave"]},{exclude:["audio"],browsers:["samsungbrowser","safari"]},{exclude:["fonts"],browsers:["firefox"]},{exclude:["audio.sampleHash","hardware.deviceMemory","header.acceptLanguage.q","system.hardwareConcurrency","plugins"],browsers:["brave"]},{exclude:["tls.extensions"],browsers:["firefox","chrome","safari"]},{exclude:["header.acceptLanguage"],browsers:["edge","chrome"]}],iframe:[{exclude:["system.applePayVersion","system.cookieEnabled"],browsers:["safari"]},{exclude:["permissions"]}],vpn:[{exclude:["ip"]}]};async function se(){return bt()}async function bt(){return new Promise((e,n)=>{try{let i=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,5e3,44100),a=i?.createBufferSource(),s=i.createOscillator();s.frequency.value=1e3;let c=i.createDynamicsCompressor();c.threshold.value=-50,c.knee.value=40,c.ratio.value=12,c.attack.value=0,c.release.value=.2,s.connect(c),c.connect(i.destination),s.start();let m;i.oncomplete=u=>{m=u.renderedBuffer.getChannelData(0),e({sampleHash:Tt(m),maxChannels:i.destination.maxChannelCount,channelCountMode:a.channelCountMode})},i.startRendering()}catch(o){console.error("Error creating audio fingerprint:",o),n(o)}})}function Tt(t){let e=0;for(let n=0;n<t.length;++n)e+=Math.abs(t[n]);return e}function z(t,e,n){let o=[];for(let a=0;a<t[0].data.length;a++){let s=[];for(let c=0;c<t.length;c++)s.push(t[c].data[a]);o.push(Rt(s))}let r=o,i=new Uint8ClampedArray(r);return new ImageData(i,e,n)}function Rt(t){if(t.length===0)return 0;let e={};for(let o of t)e[o]=(e[o]||0)+1;let n=t[0];for(let o in e)e[o]>e[n]&&(n=parseInt(o,10));return n}function xt(t){return new TextEncoder().encode(t).buffer}function Y(t){return t^=t>>>16,t=Math.imul(t,2246822507),t^=t>>>13,t=Math.imul(t,3266489909),t^=t>>>16,t>>>0}var x=new Uint32Array([597399067,2869860233,951274213,2716044179]);function k(t,e){return t<<e|t>>>32-e}function At(t,e){let n=t.byteLength/16|0,o=new Uint32Array(t,0,n*4);for(let r=0;r<n;r++){let i=o.subarray(r*4,(r+1)*4);i[0]=Math.imul(i[0],x[0]),i[0]=k(i[0],15),i[0]=Math.imul(i[0],x[1]),e[0]=e[0]^i[0],e[0]=k(e[0],19),e[0]=e[0]+e[1],e[0]=Math.imul(e[0],5)+1444728091,i[1]=Math.imul(i[1],x[1]),i[1]=k(i[1],16),i[1]=Math.imul(i[1],x[2]),e[1]=e[1]^i[1],e[1]=k(e[1],17),e[1]=e[1]+e[2],e[1]=Math.imul(e[1],5)+197830471,i[2]=Math.imul(i[2],x[2]),i[2]=k(i[2],17),i[2]=Math.imul(i[2],x[3]),e[2]=e[2]^i[2],e[2]=k(e[2],15),e[2]=e[2]+e[3],e[2]=Math.imul(e[2],5)+2530024501,i[3]=Math.imul(i[3],x[3]),i[3]=k(i[3],18),i[3]=Math.imul(i[3],x[0]),e[3]=e[3]^i[3],e[3]=k(e[3],13),e[3]=e[3]+e[0],e[3]=Math.imul(e[3],5)+850148119}}function Dt(t,e){let n=t.byteLength/16|0,o=t.byteLength%16,r=new Uint32Array(4),i=new Uint8Array(t,n*16,o);switch(o){case 15:r[3]=r[3]^i[14]<<16;case 14:r[3]=r[3]^i[13]<<8;case 13:r[3]=r[3]^i[12]<<0,r[3]=Math.imul(r[3],x[3]),r[3]=k(r[3],18),r[3]=Math.imul(r[3],x[0]),e[3]=e[3]^r[3];case 12:r[2]=r[2]^i[11]<<24;case 11:r[2]=r[2]^i[10]<<16;case 10:r[2]=r[2]^i[9]<<8;case 9:r[2]=r[2]^i[8]<<0,r[2]=Math.imul(r[2],x[2]),r[2]=k(r[2],17),r[2]=Math.imul(r[2],x[3]),e[2]=e[2]^r[2];case 8:r[1]=r[1]^i[7]<<24;case 7:r[1]=r[1]^i[6]<<16;case 6:r[1]=r[1]^i[5]<<8;case 5:r[1]=r[1]^i[4]<<0,r[1]=Math.imul(r[1],x[1]),r[1]=k(r[1],16),r[1]=Math.imul(r[1],x[2]),e[1]=e[1]^r[1];case 4:r[0]=r[0]^i[3]<<24;case 3:r[0]=r[0]^i[2]<<16;case 2:r[0]=r[0]^i[1]<<8;case 1:r[0]=r[0]^i[0]<<0,r[0]=Math.imul(r[0],x[0]),r[0]=k(r[0],15),r[0]=Math.imul(r[0],x[1]),e[0]=e[0]^r[0]}}function St(t,e){e[0]=e[0]^t.byteLength,e[1]=e[1]^t.byteLength,e[2]=e[2]^t.byteLength,e[3]=e[3]^t.byteLength,e[0]=e[0]+e[1]|0,e[0]=e[0]+e[2]|0,e[0]=e[0]+e[3]|0,e[1]=e[1]+e[0]|0,e[2]=e[2]+e[0]|0,e[3]=e[3]+e[0]|0,e[0]=Y(e[0]),e[1]=Y(e[1]),e[2]=Y(e[2]),e[3]=Y(e[3]),e[0]=e[0]+e[1]|0,e[0]=e[0]+e[2]|0,e[0]=e[0]+e[3]|0,e[1]=e[1]+e[0]|0,e[2]=e[2]+e[0]|0,e[3]=e[3]+e[0]|0}function b(t,e=0){if(e=e?e|0:0,typeof t=="string"&&(t=xt(t)),!(t instanceof ArrayBuffer))throw new TypeError("Expected key to be ArrayBuffer or string");let n=new Uint32Array([e,e,e,e]);At(t,n),Dt(t,n),St(t,n);let o=new Uint8Array(n.buffer);return Array.from(o).map(r=>r.toString(16).padStart(2,"0")).join("")}var kt=3,je=280,$e=20;async function ce(){return Pt()}function Pt(){return new Promise(t=>{let e=Array.from({length:kt},()=>_t()),n=z(e,je,$e);t({commonPixelsHash:b(n.data.toString()).toString()})})}function _t(){let t=document.createElement("canvas"),e=t.getContext("2d");if(!e)return new ImageData(1,1);t.width=je,t.height=$e;let n=e.createLinearGradient(0,0,t.width,t.height);n.addColorStop(0,"red"),n.addColorStop(1/6,"orange"),n.addColorStop(2/6,"yellow"),n.addColorStop(3/6,"green"),n.addColorStop(4/6,"blue"),n.addColorStop(5/6,"indigo"),n.addColorStop(1,"violet"),e.fillStyle=n,e.fillRect(0,0,t.width,t.height);let o="Random Text WMwmil10Oo";return e.font="23.123px Arial",e.fillStyle="black",e.fillText(o,-5,15),e.fillStyle="rgba(0, 0, 255, 0.5)",e.fillText(o,-3.3,17.7),e.beginPath(),e.moveTo(0,0),e.lineTo(t.width*2/7,t.height),e.strokeStyle="white",e.lineWidth=2,e.stroke(),e.getImageData(0,0,t.width,t.height)}async function Q(t){for(;!document.body;)await Ot(50);let e=document.createElement("iframe");e.setAttribute("frameBorder","0");let n=e.style;n.setProperty("position","fixed"),n.setProperty("display","block","important"),n.setProperty("visibility","visible"),n.setProperty("border","0"),n.setProperty("opacity","0"),e.src="about:blank",document.body.appendChild(e);let o=e.contentDocument||e.contentWindow?.document;if(!o)throw new Error("Iframe document is not accessible");t({iframe:o}),setTimeout(()=>{document.body.removeChild(e)},0)}function Ot(t,e){return new Promise(n=>setTimeout(n,t,e))}var Mt=["Arial","Arial Black","Arial Narrow","Arial Rounded MT","Arimo","Archivo","Barlow","Bebas Neue","Bitter","Bookman","Calibri","Cabin","Candara","Century","Century Gothic","Comic Sans MS","Constantia","Courier","Courier New","Crimson Text","DM Mono","DM Sans","DM Serif Display","DM Serif Text","Dosis","Droid Sans","Exo","Fira Code","Fira Sans","Franklin Gothic Medium","Garamond","Geneva","Georgia","Gill Sans","Helvetica","Impact","Inconsolata","Indie Flower","Inter","Josefin Sans","Karla","Lato","Lexend","Lucida Bright","Lucida Console","Lucida Sans Unicode","Manrope","Merriweather","Merriweather Sans","Montserrat","Myriad","Noto Sans","Nunito","Nunito Sans","Open Sans","Optima","Orbitron","Oswald","Pacifico","Palatino","Perpetua","PT Sans","PT Serif","Poppins","Prompt","Public Sans","Quicksand","Rajdhani","Recursive","Roboto","Roboto Condensed","Rockwell","Rubik","Segoe Print","Segoe Script","Segoe UI","Sora","Source Sans Pro","Space Mono","Tahoma","Taviraj","Times","Times New Roman","Titillium Web","Trebuchet MS","Ubuntu","Varela Round","Verdana","Work Sans"],Nt=["monospace","sans-serif","serif"];async function ue(t){return Lt()}function Lt(){return new Promise((t,e)=>{try{Q(async({iframe:n})=>{let r=n.createElement("canvas").getContext("2d"),i=Nt.map(s=>ze(r,s)),a={};Mt.forEach(s=>{let c=ze(r,s);i.includes(c)||(a[s]=c)}),t(a)})}catch{e({error:"unsupported"})}})}function ze(t,e){if(!t)return null;let n="WwMmLli0Oo";return t.font=`72px ${e}`,t.measureText(n).width}function le(){return new Promise((t,e)=>{let n=navigator.deviceMemory!==void 0?navigator.deviceMemory:0,o=window.performance&&window.performance.memory?window.performance.memory:0;t({videocard:Ct(),architecture:Bt(),deviceMemory:n.toString()||"undefined",jsHeapSizeLimit:o.jsHeapSizeLimit||0})})}function Ct(){let t=document.createElement("canvas"),e=t.getContext("webgl")??t.getContext("experimental-webgl");if(e&&"getParameter"in e)try{let n=(e.getParameter(e.VENDOR)||"").toString(),o=(e.getParameter(e.RENDERER)||"").toString(),r={vendor:n,renderer:o,version:(e.getParameter(e.VERSION)||"").toString(),shadingLanguageVersion:(e.getParameter(e.SHADING_LANGUAGE_VERSION)||"").toString()};if(!o.length||!n.length){let i=e.getExtension("WEBGL_debug_renderer_info");if(i){let a=(e.getParameter(i.UNMASKED_VENDOR_WEBGL)||"").toString(),s=(e.getParameter(i.UNMASKED_RENDERER_WEBGL)||"").toString();a&&(r.vendorUnmasked=a),s&&(r.rendererUnmasked=s)}}return r}catch{}return"undefined"}function Bt(){let t=new Float32Array(1),e=new Uint8Array(t.buffer);return t[0]=1/0,t[0]=t[0]-t[0],e[3]}function me(){return new Promise(t=>{t({languages:Ut(),timezone:Ft()})})}function Ut(){let t=[];return navigator.language}function Ft(){return Intl.DateTimeFormat().resolvedOptions().timeZone}var J=(t,e,n,o)=>{let r=(n-e)/o,i=0;for(let a=0;a<o;a++){let s=e+(a+.5)*r;i+=t(s)}return i*r};function de(){return new Promise(t=>{t({acos:Math.acos(.5),asin:J(Math.asin,-1,1,97),cos:J(Math.cos,0,Math.PI,97),largeCos:Math.cos(1e20),largeSin:Math.sin(1e20),largeTan:Math.tan(1e20),sin:J(Math.sin,-Math.PI,Math.PI,97),tan:J(Math.tan,0,2*Math.PI,97)})})}function Gt(t){if(t.length===0)return null;let e={};t.forEach(r=>{let i=String(r);e[i]=(e[i]||0)+1});let n=t[0],o=1;return Object.keys(e).forEach(r=>{e[r]>o&&(n=r,o=e[r])}),n}function Ye(t,e){let n={};return e.forEach(o=>{let r=t.map(a=>o in a?a[o]:void 0).filter(a=>a!==void 0),i=Gt(r);i&&(n[o]=i)}),n}var Vt=["accelerometer","accessibility","accessibility-events","ambient-light-sensor","background-fetch","background-sync","bluetooth","camera","clipboard-read","clipboard-write","device-info","display-capture","gyroscope","geolocation","local-fonts","magnetometer","microphone","midi","nfc","notifications","payment-handler","persistent-storage","push","speaker","storage-access","top-level-storage-access","window-management","query"];async function ge(t){let e=t?.permissions_to_check||Vt,o=await Promise.all(Array.from({length:3},()=>Wt(e)));return Ye(o,e)}async function Wt(t){let e={};for(let n of t)try{let o=await navigator.permissions.query({name:n});e[n]=o.state.toString()}catch{}return e}async function fe(){let t=[];if(navigator.plugins)for(let e=0;e<navigator.plugins.length;e++){let n=navigator.plugins[e];t.push([n.name,n.filename,n.description].join("|"))}return new Promise(e=>{e({plugins:t})})}function B(){if(typeof navigator>"u")return{name:"unknown",version:"unknown"};let t=navigator.userAgent,e=[/(?<name>SamsungBrowser)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>EdgA|EdgiOS|Edg)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>OPR|OPX)\/(?<version>\d+(?:\.\d+)+)/,/Opera[\s\/](?<version>\d+(?:\.\d+)+)/,/Opera Mini\/(?<version>\d+(?:\.\d+)+)/,/Opera Mobi\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Vivaldi)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Brave)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>CriOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>FxiOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Chrome|Chromium)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Firefox|Waterfox|Iceweasel|IceCat)\/(?<version>\d+(?:\.\d+)+)/,/Version\/(?<version1>[\d.]+).*Safari\/[\d.]+|(?<name>Safari)\/(?<version2>[\d.]+)/,/(?<name>MSIE|Trident|IEMobile).+?(?<version>\d+(?:\.\d+)+)/,/(?<name>[A-Za-z]+)\/(?<version>\d+(?:\.\d+)+)/],n={edg:"Edge",edga:"Edge",edgios:"Edge",opr:"Opera",opx:"Opera",crios:"Chrome",fxios:"Firefox",samsung:"SamsungBrowser",vivaldi:"Vivaldi",brave:"Brave"};for(let o of e){let r=t.match(o);if(r){let i=r.groups?.name,a=r.groups?.version||r.groups?.version1||r.groups?.version2;if(!i&&(r.groups?.version1||r.groups?.version2)&&(i="Safari"),!i&&o.source.includes("Opera Mini")&&(i="Opera Mini"),!i&&o.source.includes("Opera Mobi")&&(i="Opera Mobi"),!i&&o.source.includes("Opera")&&(i="Opera"),!i&&r[1]&&(i=r[1]),!a&&r[2]&&(a=r[2]),i)return{name:n[i.toLowerCase()]||i,version:a||"unknown"}}}return{name:"unknown",version:"unknown"}}function X(){if(typeof navigator>"u"||!navigator.userAgent)return!1;let t=navigator.userAgent;return/Mobi|Android|iPhone|iPod|IEMobile|Opera Mini|Opera Mobi|webOS|BlackBerry|Windows Phone/i.test(t)&&!/iPad/i.test(t)}function pe(){return new Promise(t=>{let e={is_touchscreen:navigator.maxTouchPoints>0,maxTouchPoints:navigator.maxTouchPoints,colorDepth:screen.colorDepth,mediaMatches:Kt()};X()&&navigator.maxTouchPoints>0&&(e.resolution=qt()),t(e)})}function qt(){let t=window.screen.width,e=window.screen.height,n=Math.max(t,e).toString(),o=Math.min(t,e).toString();return`${n}x${o}`}function Kt(){let t=[],e={"prefers-contrast":["high","more","low","less","forced","no-preference"],"any-hover":["hover","none"],"any-pointer":["none","coarse","fine"],pointer:["none","coarse","fine"],hover:["hover","none"],update:["fast","slow"],"inverted-colors":["inverted","none"],"prefers-reduced-motion":["reduce","no-preference"],"prefers-reduced-transparency":["reduce","no-preference"],scripting:["none","initial-only","enabled"],"forced-colors":["active","none"]};return Object.keys(e).forEach(n=>{e[n].forEach(o=>{matchMedia(`(${n}: ${o})`).matches&&t.push(`${n}: ${o}`)})}),t}function ye(){return new Promise(t=>{let e=B(),n=navigator.userAgent,o={platform:window.navigator.platform,productSub:navigator.productSub,product:navigator.product,useragent:navigator.userAgent,hardwareConcurrency:navigator.hardwareConcurrency,browser:{name:e.name,version:e.version},mobile:X(),applePayVersion:jt(),cookieEnabled:window.navigator.cookieEnabled};t(o)})}function jt(){if(window.location.protocol==="https:"&&typeof window.ApplePaySession=="function")try{let t=window.ApplePaySession.supportsVersion;for(let e=15;e>0;e--)if(t(e))return e}catch{return 0}return 0}var $t=B().name!=="SamsungBrowser"?1:3,A,l=null;function zt(){typeof document<"u"&&(A=document.createElement("canvas"),A.width=200,A.height=100,l=A.getContext("webgl"))}async function he(){zt();try{if(!l)throw new Error("WebGL not supported");let t=Array.from({length:$t},()=>Yt()),e=z(t,A.width,A.height);return{commonPixelsHash:b(e.data.toString()).toString()}}catch{return{webgl:"unsupported"}}}function Yt(){try{if(!l)throw new Error("WebGL not supported");let t=`
2
2
  attribute vec2 position;
3
3
  void main() {
4
4
  gl_Position = vec4(position, 0.0, 1.0);
5
5
  }
6
- `,t=`
6
+ `,e=`
7
7
  precision mediump float;
8
8
  void main() {
9
9
  gl_FragColor = vec4(0.812, 0.195, 0.553, 0.921); // Set line color
10
10
  }
11
- `,n=p.createShader(p.VERTEX_SHADER),r=p.createShader(p.FRAGMENT_SHADER);if(!n||!r)throw new Error("Failed to create shaders");if(p.shaderSource(n,e),p.shaderSource(r,t),p.compileShader(n),!p.getShaderParameter(n,p.COMPILE_STATUS))throw new Error("Vertex shader compilation failed: "+p.getShaderInfoLog(n));if(p.compileShader(r),!p.getShaderParameter(r,p.COMPILE_STATUS))throw new Error("Fragment shader compilation failed: "+p.getShaderInfoLog(r));let o=p.createProgram();if(!o)throw new Error("Failed to create shader program");if(p.attachShader(o,n),p.attachShader(o,r),p.linkProgram(o),!p.getProgramParameter(o,p.LINK_STATUS))throw new Error("Shader program linking failed: "+p.getProgramInfoLog(o));p.useProgram(o);let i=137,a=new Float32Array(i*4),s=2*Math.PI/i;for(let m=0;m<i;m++){let y=m*s;a[m*4]=0,a[m*4+1]=0,a[m*4+2]=Math.cos(y)*(O.width/2),a[m*4+3]=Math.sin(y)*(O.height/2)}let c=p.createBuffer();p.bindBuffer(p.ARRAY_BUFFER,c),p.bufferData(p.ARRAY_BUFFER,a,p.STATIC_DRAW);let d=p.getAttribLocation(o,"position");p.enableVertexAttribArray(d),p.vertexAttribPointer(d,2,p.FLOAT,!1,0,0),p.viewport(0,0,O.width,O.height),p.clearColor(0,0,0,1),p.clear(p.COLOR_BUFFER_BIT),p.drawArrays(p.LINES,0,i*2);let u=new Uint8ClampedArray(O.width*O.height*4);return p.readPixels(0,0,O.width,O.height,p.RGBA,p.UNSIGNED_BYTE,u),new ImageData(u,O.width,O.height)}catch{return new ImageData(1,1)}finally{p&&(p.bindBuffer(p.ARRAY_BUFFER,null),p.useProgram(null),p.viewport(0,0,p.drawingBufferWidth,p.drawingBufferHeight),p.clearColor(0,0,0,0))}}function x(e){let t=[];return function n(r){if(r&&r.toJSON&&typeof r.toJSON=="function"&&(r=r.toJSON()),r===void 0)return;if(typeof r=="number")return isFinite(r)?""+r:"null";if(typeof r!="object")return JSON.stringify(r);let o,i;if(Array.isArray(r)){for(i="[",o=0;o<r.length;o++)o&&(i+=","),i+=n(r[o])||"null";return i+"]"}if(r===null)return"null";if(t.indexOf(r)!==-1)throw new TypeError("Converting circular structure to JSON");let a=t.push(r)-1,s=Object.keys(r).sort();for(i="",o=0;o<s.length;o++){let c=s[o],d=n(r[c]);d&&(i&&(i+=","),i+=JSON.stringify(c)+":"+d)}return t.splice(a,1),"{"+i+"}"}(e)||""}async function Ve(){return new Promise(e=>{try{let t=window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection;if(!t){e({supported:!1,error:"WebRTC not supported"});return}let n={iceCandidatePoolSize:1,iceServers:[]},r=new t(n);r.createDataChannel(""),(async()=>{try{let i={offerToReceiveAudio:!0,offerToReceiveVideo:!0},a=await r.createOffer(i);await r.setLocalDescription(a);let s=a.sdp||"",c=[...new Set((s.match(/extmap:\d+ [^\n\r]+/g)||[]).map(f=>f.replace(/extmap:\d+ /,"")))].sort(),d=f=>{let I=s.match(new RegExp(`m=${f} [^\\s]+ [^\\s]+ ([^\\n\\r]+)`));return I?I[1].split(" "):[]},u=(f,I)=>I.map(h=>{let T=new RegExp(`(rtpmap|fmtp|rtcp-fb):${h} (.+)`,"g"),_=[...s.matchAll(T)];if(!_.length)return null;let E={};return _.forEach(ve=>{let[Ro,we,Re]=ve,be=Re.split("/");we==="rtpmap"?(E.mimeType=`${f}/${be[0]}`,E.clockRate=+be[1],f==="audio"&&(E.channels=+be[2]||1)):we==="rtcp-fb"?(E.feedbackSupport=E.feedbackSupport||[],E.feedbackSupport.push(Re)):we==="fmtp"&&(E.sdpFmtpLine=Re)}),E}).filter(Boolean),l=u("audio",d("audio")),m=u("video",d("video")),y={audio:{count:l.length,hash:A(x(l))},video:{count:m.length,hash:A(x(m))},extensionsHash:A(x(c))},g=await new Promise(f=>{let I=setTimeout(()=>{r.removeEventListener("icecandidate",h),r.close(),f({supported:!0,...y,timeout:!0})},3e3),h=T=>{let _=T.candidate;!_||!_.candidate||(clearTimeout(I),r.removeEventListener("icecandidate",h),r.close(),f({supported:!0,...y,candidateType:_.type||""}))};r.addEventListener("icecandidate",h)});e({details:g,hash:A(x(g))})}catch(i){r.close(),e({supported:!0,error:`WebRTC offer failed: ${i.message}`})}})()}catch(t){e({supported:!1,error:`WebRTC error: ${t.message}`})}})}var Ut=["\u{1D504}","\u{1D505}","\u212D","\u{1D507}","\u{1D508}","\u{1D509}","\u{1D538}","\u{1D539}","\u2102","\u{1D53B}","\u{1D53C}","\u{1D53D}"],Bt=["\u03B2","\u03C8","\u03BB","\u03B5","\u03B6","\u03B1","\u03BE","\u03BC","\u03C1","\u03C6","\u03BA","\u03C4","\u03B7","\u03C3","\u03B9","\u03C9","\u03B3","\u03BD","\u03C7","\u03B4","\u03B8","\u03C0","\u03C5","\u03BF"];async function Qe(){return new Promise(e=>{try{ue(async({iframe:t})=>{try{if(!Lr(t)){e({supported:!1,error:"MathML not supported"});return}let n=[X("integral","<msubsup><mo>\u222B</mo><mi>a</mi><mi>b</mi></msubsup><mfrac><mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mrow><mi>g</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mfrac><mi>dx</mi>"),X("fraction","<mfrac><mrow><mi>\u03C0</mi><mo>\xD7</mo><msup><mi>r</mi><mn>2</mn></msup></mrow><mrow><mn>2</mn><mi>\u03C3</mi></mrow></mfrac>"),X("matrix","<mo>[</mo><mtable><mtr><mtd><mi>\u03B1</mi></mtd><mtd><mi>\u03B2</mi></mtd></mtr><mtr><mtd><mi>\u03B3</mi></mtd><mtd><mi>\u03B4</mi></mtd></mtr></mtable><mo>]</mo>"),Fr(),...Ur()],r=[],o="";n.forEach((a,s)=>{let c=Br(a,t);r.push({width:c.dimensions.width,height:c.dimensions.height}),s===0&&c.fontInfo&&(o=A(x(c.fontInfo)))});let i={fontStyleHash:o,dimensions:r};e({details:i,hash:A(x(i))})}catch(n){e({supported:!1,error:`MathML error: ${n.message}`})}})}catch(t){e({supported:!1,error:`MathML error: ${t.message}`})}})}function Lr(e){try{let t=e.createElement("math");t.innerHTML="<mrow><mi>x</mi></mrow>",t.style.position="absolute",t.style.visibility="hidden",e.body.appendChild(t);let n=t.getBoundingClientRect();return e.body.removeChild(t),n.width>0&&n.height>0}catch{return!1}}function X(e,t){return`<math><mrow>${t}</mrow></math>`}function Fr(){let e="<mo>\u220F</mo>";return Ut.forEach((t,n)=>{let r=n*2,o=Bt.slice(r,r+2);o.length===2&&(e+=`<mmultiscripts><mi>${t}</mi><none/><mi>${o[1]}</mi><mprescripts></mprescripts><mi>${o[0]}</mi><none/></mmultiscripts>`)}),X("complex_nested",`<munderover><mmultiscripts>${e}</mmultiscripts></munderover>`)}function Ur(){let e=[];return Ut.forEach((t,n)=>{let r=n*2,o=Bt.slice(r,r+2);o.length===2&&e.push(X("combined",`<mmultiscripts><mi>${t}</mi><none/><mi>${o[1]}</mi><mprescripts></mprescripts><mi>${o[0]}</mi><none/></mmultiscripts>`))}),e}function Br(e,t){try{let n=t.createElement("math");n.innerHTML=e.replace(/<\/?math>/g,""),n.style.whiteSpace="nowrap",n.style.position="absolute",n.style.visibility="hidden",n.style.top="-9999px",t.body.appendChild(n);let r=n.getBoundingClientRect(),i=(t.defaultView||window).getComputedStyle(n),a={dimensions:{width:r.width,height:r.height},fontInfo:{fontFamily:i.fontFamily,fontSize:i.fontSize,fontWeight:i.fontWeight,fontStyle:i.fontStyle,lineHeight:i.lineHeight,fontVariant:i.fontVariant||"normal",fontStretch:i.fontStretch||"normal",fontSizeAdjust:i.fontSizeAdjust||"none",textRendering:i.textRendering||"auto",fontFeatureSettings:i.fontFeatureSettings||"normal",fontVariantNumeric:i.fontVariantNumeric||"normal",fontKerning:i.fontKerning||"auto"}};return t.body.removeChild(n),a}catch(n){return{error:n.message}}}var qr=800;async function We(){return new Promise(e=>{try{if(typeof window>"u"||!window.speechSynthesis||typeof window.speechSynthesis.getVoices!="function"){e({supported:!1,error:"Speech Synthesis API not supported"});return}let t=!1,n=null,r=a=>{if(!t){t=!0,n&&clearTimeout(n);try{let s=a.map(d=>{let u=m=>m.replace(/\\/g,"\\\\").replace(/,/g,"\\,");return[u(d.voiceURI||""),u(d.name||""),u(d.lang||""),d.localService?"1":"0",d.default?"1":"0"].join(",")});s.sort();let c={voiceCount:a.length,voicesHash:A(x(s))};e({details:c,hash:A(x(c))})}catch(s){e({supported:!0,error:`Voice processing failed: ${s.message}`})}}},o=window.speechSynthesis.getVoices();if(o.length>0){r(o);return}n=setTimeout(()=>{let a=window.speechSynthesis.getVoices();r(a)},qr);let i=()=>{window.speechSynthesis.removeEventListener("voiceschanged",i);let a=window.speechSynthesis.getVoices();r(a)};window.speechSynthesis.addEventListener("voiceschanged",i)}catch(t){e({supported:!1,error:`Speech Synthesis error: ${t.message}`})}})}var qt={audio:Me,canvas:Ne,fonts:Ce,hardware:Le,locales:Fe,math:Ue,permissions:Be,plugins:qe,screen:Ke,system:Ge,webgl:je},Kt={webrtc:Ve,mathml:Qe,speech:We},$e={},Gt={timeout:"true"},ze=(e,t,n)=>{$e[e]=t};function Kr(e,t){return new Promise(n=>{setTimeout(()=>n(t),e)})}function jt(e,t,n){return Promise.all(e.map(r=>{let o=performance.now();return Promise.race([r.then(i=>({value:i,elapsed:performance.now()-o})),Kr(t,n).then(i=>({value:i,elapsed:performance.now()-o}))])}))}function me(e,t){let n=V();if(n.name==="unknown"&&e.system&&typeof e.system=="object"&&!Array.isArray(e.system)){let l=e.system.browser;if(l&&typeof l=="object"&&!Array.isArray(l)){let m=l;n={name:m.name||"unknown",version:m.version||"unknown"}}}let r=n.name.toLowerCase(),o=n.version.split(".")[0]||"0",i=parseInt(o,10),a=[...t?.exclude||[]],s=t?.stabilize||[],c=t?.include||[];for(let u of s){let l=ke[u];if(l)for(let m of l){let y=!("browsers"in m),g=!y&&m.browsers?.some(f=>{let I=f.match(/(.+?)(>=)(\d+)/);if(I){let[,h,,T]=I,_=parseInt(T,10);return r===h&&i>=_}return r===f});(y||g)&&a.push(...m.exclude)}}function d(u,l=""){let m={};for(let[y,g]of Object.entries(u)){let f=l?`${l}.${y}`:y;if(typeof g=="object"&&!Array.isArray(g)&&g!==null){let I=d(g,f);Object.keys(I).length>0&&(m[y]=I)}else{let I=a.some(T=>f.startsWith(T)),h=c.some(T=>f.startsWith(T));(!I||h)&&(m[y]=g)}}return m}return d(e)}async function Ye(e){let t={...j,...e},n=t.logging&&!sessionStorage.getItem("_tmjs_l")&&Math.random()<1e-4,r={...qt,...$e},{elapsed:o,resolvedComponents:i}=await Vt(r,t),a={},s={};if(n||t.experimental){let{elapsed:I,resolvedComponents:h}=await Vt(Kt,t);a=h,s=I}let c={...o,...s},d=t.performance?{elapsed:c}:{},u=me({},t),l={...i,...u},m={};return{thumbmark:A(x(l)),components:l,info:m,version:"",...d,...Object.keys(a).length>0&&t.experimental&&{experimental:a}}}async function Vt(e,t){let n={...j,...t},r=Object.entries(e).filter(([u])=>!n?.exclude?.includes(u)).filter(([u])=>n?.include?.some(l=>l.includes("."))?n?.include?.some(l=>l.startsWith(u)):n?.include?.length===0||n?.include?.includes(u)),o=r.map(([u])=>u),i=r.map(([u,l])=>l(t)),a=await jt(i,n?.timeout||5e3,Gt),s={},c={};a.forEach((u,l)=>{u.value!=null&&(c[o[l]]=u.value,s[o[l]]=u.elapsed??0)});let d=me(c,n);return{elapsed:s,resolvedComponents:d}}var Z=class{options;constructor(t){this.options={...j,...t}}async get(t){let n={...this.options,...t};return Ye(n)}getVersion(){return""}includeComponent(t,n){ze(t,n)}};var Gr=(e,t={})=>({"Content-Type":"application/json",...e?.accessToken&&{Authorization:`Bearer ${e?.accessToken}`},...t}),jr=async(e,t)=>{if(!e.ok){let n=await e.text();throw new Error(n)}return t==="file"?e.blob():t==="json"?e.json():t==="text"?e.text():null},Qt=async({url:e,auth:t,body:n,method:r="GET",headers:o={},responseType:i="json"})=>{let a={method:r,headers:Gr(t,o),...n?{body:n instanceof FormData?n:JSON.stringify(n)}:{}},s=await fetch(e,a);return jr(s,i)},fe=e=>Qt({...e,method:"GET"}),Q=e=>Qt({...e,method:"POST"});var Vr=[{name:"lowCpuCores",weight:1,async check(){let e=navigator.hardwareConcurrency||0,t=e>0&&e<=2;return{value:e,triggered:t}}},{name:"lowDeviceMemory",weight:1,async check(){let e=navigator.deviceMemory||0,t=e>0&&e<=4;return{value:e,triggered:t}}},{name:"platformMismatch",weight:1,async check(){let e=navigator.userAgent||"",t=navigator.platform||"",n=e.includes("Mac")&&t.includes("Linux")||e.includes("Win")&&t.includes("Mac")||t===""||t==="Unknown";return{value:t,triggered:n}}},{name:"webglSoftwareRenderer",weight:2,async check(){let e=null,t=null,n=!1;try{let r=document.createElement("canvas"),o=r.getContext("webgl")||r.getContext("experimental-webgl");if(o){let i=o.getExtension("WEBGL_debug_renderer_info");if(i){e=o.getParameter(i.UNMASKED_VENDOR_WEBGL)||"",t=o.getParameter(i.UNMASKED_RENDERER_WEBGL)||"";let a=t.toLowerCase(),s=e.toLowerCase();n=a.includes("swiftshader")||a.includes("llvmpipe")||a.includes("softwar")||a.includes("basic render")||a.includes("vmware")||a.includes("virtualbox")||s.includes("vmware")||s.includes("parallels")}}}catch{}return{value:{vendor:e,renderer:t},triggered:n}}},{name:"missingWebGPUAdapter",weight:2,async check(){if(!("gpu"in navigator))return{value:"no WebGPU",triggered:!0};try{let e=await navigator.gpu.requestAdapter();return{value:e?"adapter-present":"adapter-null",triggered:!e}}catch{return{value:"adapter-error",triggered:!0}}}},{name:"reducedTimerPrecision",weight:1,async check(){let e=performance.now();await new Promise(r=>setTimeout(r,50));let t=performance.now()-e,n=t<30||t>80;return{value:t.toFixed(2),triggered:n}}},{name:"timerJitter",weight:1,async check(){let e=[];for(let r=0;r<10;r++){let o=performance.now();await new Promise(a=>setTimeout(a,10));let i=performance.now();e.push(i-o)}let t=Math.sqrt(e.map(r=>(r-10)**2).reduce((r,o)=>r+o)/e.length),n=t>5;return{value:t.toFixed(3),triggered:n}}},{name:"audioFingerprint",weight:1,async check(){try{let e=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,44100,44100),t=e.createOscillator();t.frequency.value=440,t.connect(e.destination),t.start(0);let r=(await e.startRendering()).getChannelData(0).reduce((i,a)=>i+Math.abs(a),0),o=r<100;return{value:r,triggered:o}}catch{return{value:"audio-error",triggered:!0}}}},{name:"canvasEntropy",weight:1,async check(){try{let e=document.createElement("canvas"),t=e.getContext("2d");t.textBaseline="top",t.font="14px 'Arial'",t.fillText("VM CHECK",2,2);let r=[...e.toDataURL()].reduce((i,a)=>(i+a.charCodeAt(0))%9999999,0);return{value:r,triggered:r===0||r===999999}}catch{return{value:"canvas-error",triggered:!0}}}},{name:"windowSizeWeird",weight:1,async check(){let e=window.innerWidth/window.innerHeight,t=e===1.333||e===1.6;return{value:e.toFixed(2),triggered:t}}},{name:"touchMismatch",weight:1,async check(){let e="ontouchstart"in window,t=navigator.maxTouchPoints||0;return{value:{hasTouch:e,maxTouch:t},triggered:e&&t===0}}},{name:"batteryVirtualized",weight:1,async check(){if(!navigator.getBattery)return{value:"no API",triggered:!0};try{let e=await navigator.getBattery(),t=e.chargingTime===0&&e.dischargingTime===1/0;return{value:{chargingTime:e.chargingTime,dischargingTime:e.dischargingTime},triggered:t}}catch{return{value:"battery-error",triggered:!0}}}},{name:"permissionsWeird",weight:1,async check(){try{let e=await navigator.permissions.query({name:"camera"}),t=e.state==="prompt";return{value:e.state,triggered:t}}catch{return{value:"perm-error",triggered:!0}}}},{name:"noMediaDevices",weight:1,async check(){try{let e=await navigator.mediaDevices.enumerateDevices(),t=e.length===0;return{value:e.length,triggered:t}}catch{return{value:"media-error",triggered:!0}}}},{name:"virtualizedMediaDevices",weight:1,async check(){try{let e=await navigator.mediaDevices.enumerateDevices(),t=e.some(n=>n.label.toLowerCase().includes("virtual"));return{value:e.map(n=>n.label),triggered:t}}catch{return{value:"media-error",triggered:!0}}}},{name:"webrtcIpPattern",weight:2,async check(){return new Promise(e=>{let t=new RTCPeerConnection({iceServers:[]});t.createDataChannel("x"),t.onicecandidate=n=>{if(!n||!n.candidate){e({value:"no candidate",triggered:!0});return}let r=n.candidate.candidate.toLowerCase(),o=r.includes("10.0.2.")||r.includes("172.16.")||r.includes("192.168.56.");e({value:r,triggered:o})},t.createOffer().then(n=>t.setLocalDescription(n))})}},{name:"gpuAccelerationDisabled",weight:2,async check(){let t=document.createElement("canvas").getContext("webgl");return{value:!!t,triggered:!t}}},{name:"noWebGL2",weight:1,async check(){let e=document.createElement("canvas").getContext("webgl2");return{value:!!e,triggered:!e}}},{name:"lowStorageQuota",weight:1,async check(){try{let e=await navigator.storage.estimate(),t=e.quota<500*1024*1024;return{value:e.quota,triggered:t}}catch{return{value:"storage-error",triggered:!0}}}},{name:"lowEntropy",weight:1,async check(){let e=Object.keys(navigator).length+Object.keys(screen).length+Object.keys(window).length,t=e<200;return{value:e,triggered:t}}},{name:"noLanguages",weight:1,async check(){let e=navigator.languages||[];return{value:e,triggered:e.length===0}}},{name:"uaEntropyLow",weight:1,async check(){let e=navigator.userAgent,t=e.length<30;return{value:e,triggered:t}}},{name:"weirdDPI",weight:1,async check(){let e=window.devicePixelRatio;return{value:e,triggered:e===1}}}];async function Wt({threshold:e=7}={}){let t={},n=0;for(let r of Vr){let o=await r.check();t[r.name]=o,o.triggered&&(n+=r.weight)}return{isLikelyVM:n>=e,score:n,threshold:e,signals:t}}var Qr=[{name:"hookedFunctionToString",weight:2,async check(){let e=Function.prototype.toString.toString(),t=Function.prototype.toString+"";return{value:{native:e,current:t},triggered:e!==t}}},{name:"navigatorProxyTrap",weight:2,async check(){let e=!1;try{let t=Object.getOwnPropertyDescriptor(window,"navigator");t&&t.get&&t.get.toString()?.includes("[native code]")===!1&&(e=!0)}catch{}return{value:"navigator getter",triggered:e}}},{name:"uaMismatch",weight:2,async check(){let e=navigator.userAgent||"",t="";try{let r=await navigator.userAgentData?.getHighEntropyValues?.(["platform","brands"]);t=JSON.stringify(r)}catch{}let n=e?.includes("Mac")&&t?.includes("Windows")||e?.includes("Win")&&t?.includes("Mac")||t&&t.length>0&&!e;return{value:{ua:e,brandInfo:t},triggered:n}}},{name:"timezoneLocaleMismatch",weight:1,async check(){let e=Intl.DateTimeFormat().resolvedOptions().timeZone,t=navigator.language||"",n=t.startsWith("en")&&e==="Asia/Shanghai"||t.startsWith("zh")&&e==="America/New_York"||e===void 0;return{value:{tz:e,lang:t},triggered:n}}},{name:"canvasNoise",weight:2,async check(){let e=()=>{let o=document.createElement("canvas"),i=o.getContext("2d");return i.textBaseline="top",i.font="14px Arial",i.fillText("anti-detect-check",2,2),o.toDataURL()},t=e(),n=e();return{value:{a:t,b:n},triggered:t!==n}}},{name:"webglNoise",weight:2,async check(){try{let t=document.createElement("canvas").getContext("webgl");if(!t)return{value:"no-webgl",triggered:!0};let n=t.getExtension("WEBGL_debug_renderer_info");if(!n)return{value:"no-debug-extension",triggered:!1};let r=t.getParameter(n.UNMASKED_VENDOR_WEBGL),o=t.getParameter(n.UNMASKED_RENDERER_WEBGL),i=r===""||o===""||r?.includes(" ")===!1||o?.includes(" ")===!1;return{value:{v:r,r:o},triggered:i}}catch{return{value:"gl-error",triggered:!0}}}},{name:"webdriverFlag",weight:3,async check(){let e=navigator.webdriver===!0;return{value:navigator.webdriver,triggered:e}}},{name:"perfectEventTiming",weight:1,async check(){let e=performance.now();return{value:e,triggered:e%1===0}}},{name:"serviceWorkerBlocked",weight:1,async check(){let e=!("serviceWorker"in navigator);return{value:e,triggered:e}}},{name:"smallQuota",weight:2,async check(){try{let e=await navigator.storage.estimate(),t=e.quota<50*1024*1024;return{value:e.quota,triggered:t}}catch{return{value:"quota-error",triggered:!0}}}},{name:"indexedDbBlocked",weight:2,async check(){try{let e=indexedDB.open("tamper-check");return await new Promise(t=>{e.onerror=()=>t({value:"error",triggered:!0}),e.onsuccess=()=>t({value:"ok",triggered:!1})})}catch{return{value:"throw",triggered:!0}}}},{name:"screenDprMismatch",weight:1,async check(){let e=window.screen.width,t=window.screen.height,n=window.devicePixelRatio,r=e===1920&&n===1&&t===1080||n%1!==0&&n%1!==.5;return{value:{w:e,h:t,dpr:n},triggered:r}}},{name:"missingCommonFonts",weight:1,async check(){return{value:"skipped",triggered:!1}}},{name:"noMediaDevices",weight:1,async check(){try{let e=await navigator.mediaDevices.enumerateDevices();return{value:e.length,triggered:e.length===0}}catch{return{value:"error",triggered:!0}}}},{name:"languagesEmpty",weight:1,async check(){let e=navigator.languages||[];return{value:e,triggered:e.length===0}}},{name:"pluginMismatch",weight:1,async check(){try{let e=navigator.plugins.length;return{value:e,triggered:e===0}}catch{return{value:"error",triggered:!0}}}},{name:"devtoolsDetected",weight:2,async check(){return new Promise(async e=>{let t={viewportBreakpoint:!1,consoleSpeed:!1},n=160,r=window.outerWidth-window.innerWidth,o=window.outerHeight-window.innerHeight;(r>n||o>n)&&(t.viewportBreakpoint=!0);async function i(s=50){return new Promise(c=>{let d=performance.now();console.log("%c ","font-size:3000px");let u=performance.now();c(u-d>s)})}t.consoleSpeed=await i();let a=Object.values(t).some(Boolean);setTimeout(()=>{e({value:a,triggered:a})},50)})}},{name:"knownAntiDetectBrowser",weight:5,async check(){let e=navigator.userAgent.toLowerCase(),n=["incogniton","multilogin","morelogin","adspect","kameleo","goLogin"].some(r=>e?.includes(r));return{value:e,triggered:n}}}];async function $t({threshold:e=5}={}){let t={},n=0;for(let o of Qr){let i=await o.check();t[o.name]=i,i.triggered&&(n+=o.weight)}let r=Math.min(1,n/15);return{result:r>=.5||t.knownAntiDetectBrowser?.triggered,anomalyScore:r,antiDetectBrowser:t.knownAntiDetectBrowser?.triggered||!1,signals:t}}function Wr(){let e=0;try{0 .toFixed(-1)}catch(t){e=t.message.length}return e}function $r(){let e=navigator.userAgent,t=Wr();return t===44||t===43?"Safari":t===51?"Chrome":t===25?"Firefox":navigator.msSaveBlob!==void 0?"MSIE":e.match(/Chrome/)?navigator.brave!==void 0?"Brave":e.includes("Edg")?"Edge":e.includes("OPR")?"Opera":"Chrome":"Unknown"}var zr=[{name:"safari_currentStorageTest",weight:2,browser:"Safari",async check(){if(typeof navigator.storage?.getDirectory!="function")return{triggered:!1,value:"unsupported"};try{return await navigator.storage.getDirectory(),{triggered:!1,value:"ok"}}catch(e){let t=e?.message??String(e);return{triggered:t.includes("unknown transient reason"),value:t}}}},{name:"safari13to18_indexedDbBlobTest",weight:2,browser:"Safari",async check(){return await new Promise(e=>{let t=String(Math.random()),n=indexedDB.open(t,1);n.onupgradeneeded=r=>{let o=r.target.result;try{o.createObjectStore("t",{autoIncrement:!0}).put(new Blob),e({triggered:!1,value:"ok"})}catch(i){let a=i?.message??String(i);e({triggered:a.includes("are not yet supported"),value:a})}finally{o.close(),indexedDB.deleteDatabase(t)}},n.onerror=()=>e({triggered:!1,value:"idb-error"})})}},{name:"safari_oldWebkitTest",weight:1,browser:"Safari",async check(){let e=window.openDatabase,t=window.localStorage;try{e(null,null,null,null)}catch{return{triggered:!0,value:"openDatabase denied"}}try{t.setItem("test","1"),t.removeItem("test")}catch{return{triggered:!0,value:"localStorage denied"}}return{triggered:!1,value:"ok"}}},{name:"chrome_storageQuotaPrivateTest",weight:2,browser:"Chrome",async check(){return await new Promise((e,t)=>{let r=window?.performance?.memory?.jsHeapSizeLimit??1073741824;navigator.webkitTemporaryStorage.queryUsageAndQuota((o,i)=>{let a=Math.round(i/1048576),s=Math.round(r/(1024*1024))*2;e({triggered:a<s,value:{quotaMB:a,limitMB:s}})},o=>t(o))})}},{name:"chrome_oldFileSystemTest",weight:1,browser:"Chrome",async check(){let e=window.webkitRequestFileSystem;return e?await new Promise(t=>e(0,1,()=>t({triggered:!1,value:"ok"}),()=>t({triggered:!0,value:"denied"}))):{triggered:!1,value:"unsupported"}}},{name:"firefox_storageDirectoryTest",weight:2,browser:"Firefox",async check(){if(typeof navigator.storage?.getDirectory!="function")return{triggered:!1,value:"unsupported"};try{return await navigator.storage.getDirectory(),{triggered:!1,value:"ok"}}catch(e){let t=e?.message??String(e);return{triggered:t.includes("Security error"),value:t}}}},{name:"firefox_indexedDbInvalidStateTest",weight:1,browser:"Firefox",async check(){return await new Promise(e=>{let t=indexedDB.open("inPrivate");t.onerror=()=>{e({triggered:t.error?.name==="InvalidStateError",value:t.error?.name})},t.onsuccess=()=>{indexedDB.deleteDatabase("inPrivate"),e({triggered:!1,value:"ok"})}})}},{name:"msie_indexedDbMissing",weight:2,browser:"MSIE",async check(){return{triggered:window.indexedDB===void 0,value:"msie-idb-check"}}}];async function zt(){let e=$r(),t={},n=0;for(let r of zr){if(r.browser!==e)continue;let o=await r.check();t[r.name]=o,o.triggered&&(n+=r.weight)}return{isPrivate:n>0,browserName:e,score:n,signals:t}}typeof window<"u"&&(window.detectIncognito=zt);var Yt=zt;var Jt=[{name:"globalPrivacyControl",weight:3,async check(){let e=navigator.globalPrivacyControl;return{triggered:e===!0,value:e}}},{name:"doNotTrack",weight:1,async check(){let e=navigator.doNotTrack;return{triggered:e==="1",value:e}}},{name:"cookiesDisabled",weight:3,async check(){let e=navigator.cookieEnabled;return{triggered:e===!1,value:e}}},{name:"thirdPartyCookiesBlocked",weight:3,async check(){try{if("hasStorageAccess"in document&&!await document.hasStorageAccess())try{return await document.requestStorageAccess(),{triggered:!1,value:"access_granted"}}catch{return{triggered:!0,value:"access_denied"}}let e=`__dtect_3p_test_${Date.now()}`;document.cookie=`${e}=1; SameSite=None; Secure`;let t=document.cookie.includes(e);return document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 GMT`,{triggered:!1,value:t?"cookies_work":"may_be_blocked"}}catch(e){return{triggered:!1,value:`error: ${e?.message}`}}}},{name:"firefoxResistFingerprinting",weight:2,async check(){let e=[],t=new Date().getTimezoneOffset();t===0&&Intl.DateTimeFormat().resolvedOptions().timeZone==="UTC"&&e.push("timezone_utc");let n=navigator.hardwareConcurrency;n===2&&e.push("cores_capped");let r=window.screen.width,o=window.screen.height,i=window.innerWidth,a=window.innerHeight;r===i&&o===a&&e.push("screen_matches_inner");let s=window.matchMedia("(prefers-reduced-motion: reduce)").matches;return{triggered:e.length>=2,value:{signals:e,timezoneOffset:t,cores:n,prefersReducedMotion:s}}}},{name:"braveShields",weight:3,async check(){if(!(navigator.brave!==void 0))return{triggered:!1,value:"not_brave"};try{if(!await navigator.brave.isBrave())return{triggered:!1,value:"brave_check_false"};let r=document.createElement("canvas").getContext("2d");if(r){r.fillStyle="rgb(255, 0, 0)",r.fillRect(0,0,1,1);let o=r.getImageData(0,0,1,1).data;r.fillRect(0,0,1,1);let i=r.getImageData(0,0,1,1).data;if(o[0]!==i[0]||o[1]!==i[1]||o[2]!==i[2])return{triggered:!0,value:"shields_active_canvas"}}try{let o=new RTCPeerConnection({iceServers:[{urls:"stun:stun.l.google.com:19302"}]});if(o.createDataChannel(""),await new Promise(a=>{let s=setTimeout(()=>{o.close(),a(!1)},1e3);o.onicecandidate=c=>{c.candidate?.candidate&&(/([0-9]{1,3}\.){3}[0-9]{1,3}/.test(c.candidate.candidate)||(clearTimeout(s),o.close(),a(!0)))},o.createOffer().then(c=>o.setLocalDescription(c))}))return{triggered:!0,value:"shields_active_webrtc"}}catch{return{triggered:!0,value:"shields_active_webrtc_blocked"}}return{triggered:!0,value:"brave_detected_shields_default"}}catch(t){return{triggered:!1,value:`error: ${t?.message}`}}}}];async function Xt(){let e={},t=0,n=await Promise.allSettled(Jt.map(async r=>{let o=await r.check();return{name:r.name,weight:r.weight,result:o}}));for(let r of n)if(r.status==="fulfilled"){let{name:o,weight:i,result:a}=r.value;e[o]=a,a.triggered&&(t+=i)}else{let o=n.indexOf(r),i=Jt[o];i&&(e[i.name]={triggered:!1,value:`check_failed: ${r.reason}`})}return{isPrivacyEnabled:t>3,score:t,signals:e}}typeof window<"u"&&(window.detectPrivacy=Xt);var Zt=Xt;function Yr(e){let t=e?.projectId,n=e?.visitorId||F();return(typeof e?.projectId=="number"||typeof e?.visitorId=="number")&&(t=`${e?.projectId}`,n=`${e?.visitorId}`),{visitorId:n,projectId:t}}function W(e){let{projectId:t,visitorId:n}=Yr(e);return{projectId:t,visitorId:n}}async function Jr(){let e=new Z,[t,n,r,o,i]=await Promise.allSettled([e.get(),Wt(),$t(),Yt(),Zt()]);return{deviceRes:t,vmDtectResults:n,tamperingDtectResults:r,incognitoDtectResults:o,privacySettingsDtectResults:i}}function Xr(e,t,n){let r=!n?.usingFpjs||e?.behaviorToken&&e?.behaviorRequestId,o=G()||!n?.usingHcaptcha||e?.automationToken;return r&&o}function Zr(e,t,n){return{behaviorToken:e?.behaviorToken,automationToken:e?.automationToken,behaviorRequestId:e?.behaviorRequestId,entryLink:window?.location?.href,securitySettings:t.securitySettings,metaData:t.metaData,vmDtectResults:n?.vmDtectResults?.value,tamperingDtectResults:n?.tamperingDtectResults?.value,incognitoDtectResults:n?.incognitoDtectResults?.value,deviceIdResults:n?.deviceRes?.value,privacySettingsDtectResults:n?.privacySettingsDtectResults?.value}}function Hr(e,t,n,r){let o=(performance.now()-t).toFixed();R(`${e} finishes in ${o}ms`,"info",{function:e,endpoint:n?.endpoint,diff:o,token:r,clientId:n?.clientId})}function eo(e,t,n,r,o){let i=(performance.now()-t).toFixed();R(`${e} error`,"error",{function:e,endpoint:n?.endpoint,error:o,diff:i,token:r,clientId:n?.clientId})}async function Ht(e,t){let n=performance.now(),{state:r,config:o,securityKeys:i,version:a}=w();if(!J())throw new Error(v.NOT_INITIALIZED);let{projectId:s,visitorId:c}=W(e);if(!e||!s?.trim())throw new Error(v.FAILED_TO_GET_SECURITY_RESULT);let d=s!==r.projectId?F():r.token;try{let u=xe(),l=await Jr();if(!Xr(u,i,o))throw new Error(v.INTERNAL_SERVER_ERROR);let m=Zr(u,e,l),y={...e,projectId:s,visitorId:c,clientData:m,version:a,token:d,questionData:r.questionData,aiCheckData:r.aiCheckData},g=await Q({url:t,body:y,headers:{"client-id":o?.clientId||"","x-api-key":o?.apiKey||""}});if(!("token"in g||"results"in g))throw new Error(v.INTERNAL_SERVER_ERROR);return P(f=>({...f,state:{...f.state,token:d,visitorId:c,projectId:s,clientData:m}})),Hr("getResultBase",n,o,d),g}catch(u){eo("getResultBase",n,o,d,u),q(u)}}async function Je(e){let{endpoint:t}=B();if(e)return Ht(e,`${t}/client/check/result`)}async function Xe(e){let{endpoint:t}=B();return Ht(e,`${t}/client/check`)}async function Ze(e){let t=performance.now(),{state:n,config:r,monitor:o,version:i}=w(),{checkResultEndpoint:a}=B(),{visitorId:s,projectId:c}=W(e),d={timeTakenSeconds:e.timeTakenSeconds,qbc:e.qbc||o?.qbc,mas:e.mas||o?.mas,scb:e.scb||o?.scb,apd:e.apd||o?.apd};try{let u=await Q({url:a,headers:{"client-id":r?.clientId||"","x-api-key":r?.apiKey||""},body:{token:n.token,visitorId:s,projectId:c,version:i,clientData:n.clientData,questionData:n.questionData,aiCheckData:d}});if(!u)throw new Error(v.INTERNAL_SERVER_ERROR);P(m=>({...m,state:{...m.state,aiCheckData:d,visitorId:s,projectId:c}}));let l=(performance.now()-t).toFixed();return R(`isAIUsageDetected finishes in ${l}ms`,"info",{endpoint:r?.endpoint,diff:l,token:n.token,clientId:r?.clientId}),u}catch(u){let l=(performance.now()-t).toFixed();R("isAIUsageDetected error","error",{endpoint:r?.endpoint,error:u,diff:l,token:n.token,clientId:r?.clientId}),q(u)}}async function He(e){let t=performance.now(),{state:n,config:r}=w(),{respondentType:o,language:i}=e;try{let a=await fe({url:`${r?.endpoint}/client/quality-questions/${o}/${i}`,headers:{"client-id":r?.clientId||"","x-api-key":r?.apiKey||""}});if(!a)throw new Error(v.INTERNAL_SERVER_ERROR);let s=(performance.now()-t).toFixed();return R(`getQualityQuestions finishes in ${s}ms`,"info",{function:"getQualityQuestions",endpoint:r?.endpoint,diff:s,token:n.token,clientId:r?.clientId}),a}catch(a){let s=(performance.now()-t).toFixed();R("getQualityQuestions error","error",{endpoint:r?.endpoint,error:a,diff:s,token:n.token,clientId:r?.clientId}),q(a)}}async function et(e){let t=performance.now(),{state:n,config:r,version:o}=w(),{checkResultEndpoint:i}=B(),{visitorId:a,projectId:s}=W(e),c=n.questionData||{questions:e.questions};try{let d=await Q({url:i,headers:{"client-id":r?.clientId||"","x-api-key":r?.apiKey||""},body:{token:n.token,visitorId:a,projectId:s,version:o,questionData:c,aiCheckData:n.aiCheckData,clientData:n.clientData}});if(!d)throw new Error(v.INTERNAL_SERVER_ERROR);P(l=>({...l,state:{...l.state,questionData:c,visitorId:a,projectId:s}}));let u=(performance.now()-t).toFixed();return R(`checkQualityQuestions finishes in ${u}ms`,"info",{function:"checkQualityQuestions",endpoint:r?.endpoint,diff:u,token:n.token,clientId:r?.clientId}),d}catch(d){let u=(performance.now()-t).toFixed();R("checkQualityQuestions error","error",{endpoint:r?.endpoint,error:d,diff:u,token:n.token,clientId:r?.clientId}),q(d)}}var C=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}};var L=typeof window>"u"||"Deno"in globalThis;function k(){}function nn(e,t){return typeof e=="function"?e(t):e}function rn(e){return typeof e=="number"&&e>=0&&e!==1/0}function on(e,t){return Math.max(e+(t||0)-Date.now(),0)}function nt(e,t){return typeof e=="function"?e(t):e}function sn(e,t){return typeof e=="function"?e(t):e}function rt(e,t){let{type:n="all",exact:r,fetchStatus:o,predicate:i,queryKey:a,stale:s}=e;if(a){if(r){if(t.queryHash!==H(a,t.options))return!1}else if(!z(t.queryKey,a))return!1}if(n!=="all"){let c=t.isActive();if(n==="active"&&!c||n==="inactive"&&c)return!1}return!(typeof s=="boolean"&&t.isStale()!==s||o&&o!==t.state.fetchStatus||i&&!i(t))}function ot(e,t){let{exact:n,status:r,predicate:o,mutationKey:i}=e;if(i){if(!t.options.mutationKey)return!1;if(n){if($(t.options.mutationKey)!==$(i))return!1}else if(!z(t.options.mutationKey,i))return!1}return!(r&&t.state.status!==r||o&&!o(t))}function H(e,t){return(t?.queryKeyHashFn||$)(e)}function $(e){return JSON.stringify(e,(t,n)=>tt(n)?Object.keys(n).sort().reduce((r,o)=>(r[o]=n[o],r),{}):n)}function z(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?!Object.keys(t).some(n=>!z(e[n],t[n])):!1}function an(e,t){if(e===t)return e;let n=en(e)&&en(t);if(n||tt(e)&&tt(t)){let r=n?e:Object.keys(e),o=r.length,i=n?t:Object.keys(t),a=i.length,s=n?[]:{},c=0;for(let d=0;d<a;d++){let u=n?d:i[d];(!n&&r.includes(u)||n)&&e[u]===void 0&&t[u]===void 0?(s[u]=void 0,c++):(s[u]=an(e[u],t[u]),s[u]===e[u]&&e[u]!==void 0&&c++)}return o===a&&c===o?e:s}return t}function en(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function tt(e){if(!tn(e))return!1;let t=e.constructor;if(t===void 0)return!0;let n=t.prototype;return!(!tn(n)||!n.hasOwnProperty("isPrototypeOf")||Object.getPrototypeOf(e)!==Object.prototype)}function tn(e){return Object.prototype.toString.call(e)==="[object Object]"}function cn(e){return new Promise(t=>{setTimeout(t,e)})}function un(e,t,n){return typeof n.structuralSharing=="function"?n.structuralSharing(e,t):n.structuralSharing!==!1?an(e,t):t}function ln(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function dn(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var ee=Symbol();function pe(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===ee?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}var to=class extends C{#e;#t;#n;constructor(){super(),this.#n=e=>{if(!L&&window.addEventListener){let t=()=>e();return window.addEventListener("visibilitychange",t,!1),()=>{window.removeEventListener("visibilitychange",t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(t=>{typeof t=="boolean"?this.setFocused(t):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e=="boolean"?this.#e:globalThis.document?.visibilityState!=="hidden"}},he=new to;var no=class extends C{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(!L&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener("online",t,!1),window.addEventListener("offline",n,!1),()=>{window.removeEventListener("online",t),window.removeEventListener("offline",n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(n=>{n(e)}))}isOnline(){return this.#e}},Y=new no;function mn(){let e,t,n=new Promise((o,i)=>{e=o,t=i});n.status="pending",n.catch(()=>{});function r(o){Object.assign(n,o),delete n.resolve,delete n.reject}return n.resolve=o=>{r({status:"fulfilled",value:o}),e(o)},n.reject=o=>{r({status:"rejected",reason:o}),t(o)},n}function ro(e){return Math.min(1e3*2**e,3e4)}function it(e){return(e??"online")==="online"?Y.isOnline():!0}var fn=class extends Error{constructor(e){super("CancelledError"),this.revert=e?.revert,this.silent=e?.silent}};function ge(e){return e instanceof fn}function ye(e){let t=!1,n=0,r=!1,o,i=mn(),a=f=>{r||(m(new fn(f)),e.abort?.())},s=()=>{t=!0},c=()=>{t=!1},d=()=>he.isFocused()&&(e.networkMode==="always"||Y.isOnline())&&e.canRun(),u=()=>it(e.networkMode)&&e.canRun(),l=f=>{r||(r=!0,e.onSuccess?.(f),o?.(),i.resolve(f))},m=f=>{r||(r=!0,e.onError?.(f),o?.(),i.reject(f))},y=()=>new Promise(f=>{o=I=>{(r||d())&&f(I)},e.onPause?.()}).then(()=>{o=void 0,r||e.onContinue?.()}),g=()=>{if(r)return;let f,I=n===0?e.initialPromise:void 0;try{f=I??e.fn()}catch(h){f=Promise.reject(h)}Promise.resolve(f).then(l).catch(h=>{if(r)return;let T=e.retry??(L?0:3),_=e.retryDelay??ro,E=typeof _=="function"?_(n,h):_,ve=T===!0||typeof T=="number"&&n<T||typeof T=="function"&&T(n,h);if(t||!ve){m(h);return}n++,e.onFail?.(n,h),cn(E).then(()=>d()?void 0:y()).then(()=>{t?m(h):g()})})};return{promise:i,cancel:a,continue:()=>(o?.(),i),cancelRetry:s,continueRetry:c,canStart:u,start:()=>(u()?g():y().then(g),i)}}function oo(){let e=[],t=0,n=s=>{s()},r=s=>{s()},o=s=>setTimeout(s,0),i=s=>{t?e.push(s):o(()=>{n(s)})},a=()=>{let s=e;e=[],s.length&&o(()=>{r(()=>{s.forEach(c=>{n(c)})})})};return{batch:s=>{let c;t++;try{c=s()}finally{t--,t||a()}return c},batchCalls:s=>(...c)=>{i(()=>{s(...c)})},schedule:i,setNotifyFunction:s=>{n=s},setBatchNotifyFunction:s=>{r=s},setScheduler:s=>{o=s}}}var b=oo();var Ie=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),rn(this.gcTime)&&(this.#e=setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(L?1/0:5*60*1e3))}clearGcTimeout(){this.#e&&(clearTimeout(this.#e),this.#e=void 0)}};var pn=class extends Ie{#e;#t;#n;#r;#s;#i;constructor(e){super(),this.#i=!1,this.#s=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#n=e.cache,this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#e=so(this.options),this.state=e.state??this.#e,this.scheduleGc()}get meta(){return this.options.meta}get promise(){return this.#r?.promise}setOptions(e){this.options={...this.#s,...e},this.updateGcTime(this.options.gcTime)}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&this.#n.remove(this)}setData(e,t){let n=un(this.state.data,e,this.options);return this.#o({data:n,type:"success",dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e,t){this.#o({type:"setState",state:e,setStateOptions:t})}cancel(e){let t=this.#r?.promise;return this.#r?.cancel(e),t?t.then(k).catch(k):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(this.#e)}isActive(){return this.observers.some(e=>sn(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===ee||this.state.dataUpdateCount+this.state.errorUpdateCount===0}isStale(){return this.state.isInvalidated?!0:this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0}isStaleByTime(e=0){return this.state.isInvalidated||this.state.data===void 0||!on(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(t=>t.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#r?.continue()}onOnline(){this.observers.find(t=>t.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#r?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#n.notify({type:"observerAdded",query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#r&&(this.#i?this.#r.cancel({revert:!0}):this.#r.cancelRetry()),this.scheduleGc()),this.#n.notify({type:"observerRemoved",query:this,observer:e}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||this.#o({type:"invalidate"})}fetch(e,t){if(this.state.fetchStatus!=="idle"){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#r)return this.#r.continueRetry(),this.#r.promise}if(e&&this.setOptions(e),!this.options.queryFn){let s=this.observers.find(c=>c.options.queryFn);s&&this.setOptions(s.options)}let n=new AbortController,r=s=>{Object.defineProperty(s,"signal",{enumerable:!0,get:()=>(this.#i=!0,n.signal)})},o=()=>{let s=pe(this.options,t),c={queryKey:this.queryKey,meta:this.meta};return r(c),this.#i=!1,this.options.persister?this.options.persister(s,c,this):s(c)},i={fetchOptions:t,options:this.options,queryKey:this.queryKey,state:this.state,fetchFn:o};r(i),this.options.behavior?.onFetch(i,this),this.#t=this.state,(this.state.fetchStatus==="idle"||this.state.fetchMeta!==i.fetchOptions?.meta)&&this.#o({type:"fetch",meta:i.fetchOptions?.meta});let a=s=>{ge(s)&&s.silent||this.#o({type:"error",error:s}),ge(s)||(this.#n.config.onError?.(s,this),this.#n.config.onSettled?.(this.state.data,s,this)),this.scheduleGc()};return this.#r=ye({initialPromise:t?.initialPromise,fn:i.fetchFn,abort:n.abort.bind(n),onSuccess:s=>{if(s===void 0){a(new Error(`${this.queryHash} data is undefined`));return}try{this.setData(s)}catch(c){a(c);return}this.#n.config.onSuccess?.(s,this),this.#n.config.onSettled?.(s,this.state.error,this),this.scheduleGc()},onError:a,onFail:(s,c)=>{this.#o({type:"failed",failureCount:s,error:c})},onPause:()=>{this.#o({type:"pause"})},onContinue:()=>{this.#o({type:"continue"})},retry:i.options.retry,retryDelay:i.options.retryDelay,networkMode:i.options.networkMode,canRun:()=>!0}),this.#r.start()}#o(e){let t=n=>{switch(e.type){case"failed":return{...n,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case"pause":return{...n,fetchStatus:"paused"};case"continue":return{...n,fetchStatus:"fetching"};case"fetch":return{...n,...io(n.data,this.options),fetchMeta:e.meta??null};case"success":return{...n,data:e.data,dataUpdateCount:n.dataUpdateCount+1,dataUpdatedAt:e.dataUpdatedAt??Date.now(),error:null,isInvalidated:!1,status:"success",...!e.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};case"error":let r=e.error;return ge(r)&&r.revert&&this.#t?{...this.#t,fetchStatus:"idle"}:{...n,error:r,errorUpdateCount:n.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:n.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:"idle",status:"error"};case"invalidate":return{...n,isInvalidated:!0};case"setState":return{...n,...e.state}}};this.state=t(this.state),b.batch(()=>{this.observers.forEach(n=>{n.onQueryUpdate()}),this.#n.notify({query:this,type:"updated",action:e})})}};function io(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:it(t.networkMode)?"fetching":"paused",...e===void 0&&{error:null,status:"pending"}}}function so(e){let t=typeof e.initialData=="function"?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt=="function"?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?"success":"pending",fetchStatus:"idle"}}var te=class extends C{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,o=t.queryHash??H(r,t),i=this.get(o);return i||(i=new pn({cache:this,queryKey:r,queryHash:o,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(i)),i}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:"added",query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:"removed",query:e}))}clear(){b.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(n=>rt(t,n))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(n=>rt(e,n)):t}notify(e){b.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){b.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){b.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}};var hn=class extends Ie{#e;#t;#n;constructor(e){super(),this.mutationId=e.mutationId,this.#t=e.mutationCache,this.#e=[],this.state=e.state||ao(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#e.includes(e)||(this.#e.push(e),this.clearGcTimeout(),this.#t.notify({type:"observerAdded",mutation:this,observer:e}))}removeObserver(e){this.#e=this.#e.filter(t=>t!==e),this.scheduleGc(),this.#t.notify({type:"observerRemoved",mutation:this,observer:e})}optionalRemove(){this.#e.length||(this.state.status==="pending"?this.scheduleGc():this.#t.remove(this))}continue(){return this.#n?.continue()??this.execute(this.state.variables)}async execute(e){this.#n=ye({fn:()=>this.options.mutationFn?this.options.mutationFn(e):Promise.reject(new Error("No mutationFn found")),onFail:(r,o)=>{this.#r({type:"failed",failureCount:r,error:o})},onPause:()=>{this.#r({type:"pause"})},onContinue:()=>{this.#r({type:"continue"})},retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#t.canRun(this)});let t=this.state.status==="pending",n=!this.#n.canStart();try{if(!t){this.#r({type:"pending",variables:e,isPaused:n}),await this.#t.config.onMutate?.(e,this);let o=await this.options.onMutate?.(e);o!==this.state.context&&this.#r({type:"pending",context:o,variables:e,isPaused:n})}let r=await this.#n.start();return await this.#t.config.onSuccess?.(r,e,this.state.context,this),await this.options.onSuccess?.(r,e,this.state.context),await this.#t.config.onSettled?.(r,null,this.state.variables,this.state.context,this),await this.options.onSettled?.(r,null,e,this.state.context),this.#r({type:"success",data:r}),r}catch(r){try{throw await this.#t.config.onError?.(r,e,this.state.context,this),await this.options.onError?.(r,e,this.state.context),await this.#t.config.onSettled?.(void 0,r,this.state.variables,this.state.context,this),await this.options.onSettled?.(void 0,r,e,this.state.context),r}finally{this.#r({type:"error",error:r})}}finally{this.#t.runNext(this)}}#r(e){let t=n=>{switch(e.type){case"failed":return{...n,failureCount:e.failureCount,failureReason:e.error};case"pause":return{...n,isPaused:!0};case"continue":return{...n,isPaused:!1};case"pending":return{...n,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:"pending",variables:e.variables,submittedAt:Date.now()};case"success":return{...n,data:e.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...n,data:void 0,error:e.error,failureCount:n.failureCount+1,failureReason:e.error,isPaused:!1,status:"error"}}};this.state=t(this.state),b.batch(()=>{this.#e.forEach(n=>{n.onMutationUpdate(e)}),this.#t.notify({mutation:this,type:"updated",action:e})})}};function ao(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var ne=class extends C{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){let r=new hn({mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=Ee(e);if(typeof t=="string"){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:"added",mutation:e})}remove(e){if(this.#e.delete(e)){let t=Ee(e);if(typeof t=="string"){let n=this.#t.get(t);if(n)if(n.length>1){let r=n.indexOf(e);r!==-1&&n.splice(r,1)}else n[0]===e&&this.#t.delete(t)}}this.notify({type:"removed",mutation:e})}canRun(e){let t=Ee(e);if(typeof t=="string"){let r=this.#t.get(t)?.find(o=>o.state.status==="pending");return!r||r===e}else return!0}runNext(e){let t=Ee(e);return typeof t=="string"?this.#t.get(t)?.find(r=>r!==e&&r.state.isPaused)?.continue()??Promise.resolve():Promise.resolve()}clear(){b.batch(()=>{this.#e.forEach(e=>{this.notify({type:"removed",mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(n=>ot(t,n))}findAll(e={}){return this.getAll().filter(t=>ot(e,t))}notify(e){b.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(t=>t.state.isPaused);return b.batch(()=>Promise.all(e.map(t=>t.continue().catch(k))))}};function Ee(e){return e.options.scope?.id}function st(e){return{onFetch:(t,n)=>{let r=t.options,o=t.fetchOptions?.meta?.fetchMore?.direction,i=t.state.data?.pages||[],a=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,d=async()=>{let u=!1,l=g=>{Object.defineProperty(g,"signal",{enumerable:!0,get:()=>(t.signal.aborted?u=!0:t.signal.addEventListener("abort",()=>{u=!0}),t.signal)})},m=pe(t.options,t.fetchOptions),y=async(g,f,I)=>{if(u)return Promise.reject();if(f==null&&g.pages.length)return Promise.resolve(g);let h={queryKey:t.queryKey,pageParam:f,direction:I?"backward":"forward",meta:t.options.meta};l(h);let T=await m(h),{maxPages:_}=t.options,E=I?dn:ln;return{pages:E(g.pages,T,_),pageParams:E(g.pageParams,f,_)}};if(o&&i.length){let g=o==="backward",f=g?co:gn,I={pages:i,pageParams:a},h=f(r,I);s=await y(I,h,g)}else{let g=e??i.length;do{let f=c===0?a[0]??r.initialPageParam:gn(r,s);if(c>0&&f==null)break;s=await y(s,f),c++}while(c<g)}return s};t.options.persister?t.fetchFn=()=>t.options.persister?.(d,{queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):t.fetchFn=d}}}function gn(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function co(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var at=class{#e;#t;#n;#r;#s;#i;#o;#a;constructor(e={}){this.#e=e.queryCache||new te,this.#t=e.mutationCache||new ne,this.#n=e.defaultOptions||{},this.#r=new Map,this.#s=new Map,this.#i=0}mount(){this.#i++,this.#i===1&&(this.#o=he.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#a=Y.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#i--,this.#i===0&&(this.#o?.(),this.#o=void 0,this.#a?.(),this.#a=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return this.#t.findAll({...e,status:"pending"}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(nt(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:t,state:n})=>{let r=n.data;return[t,r]})}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=nn(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return b.batch(()=>this.#e.findAll(e).map(({queryKey:r})=>[r,this.setQueryData(r,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;b.batch(()=>{t.findAll(e).forEach(n=>{t.remove(n)})})}resetQueries(e,t){let n=this.#e,r={type:"active",...e};return b.batch(()=>(n.findAll(e).forEach(o=>{o.reset()}),this.refetchQueries(r,t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=b.batch(()=>this.#e.findAll(e).map(o=>o.cancel(n)));return Promise.all(r).then(k).catch(k)}invalidateQueries(e,t={}){return b.batch(()=>{if(this.#e.findAll(e).forEach(r=>{r.invalidate()}),e?.refetchType==="none")return Promise.resolve();let n={...e,type:e?.refetchType??e?.type??"active"};return this.refetchQueries(n,t)})}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=b.batch(()=>this.#e.findAll(e).filter(o=>!o.isDisabled()).map(o=>{let i=o.fetch(void 0,n);return n.throwOnError||(i=i.catch(k)),o.state.fetchStatus==="paused"?Promise.resolve():i}));return Promise.all(r).then(k)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(nt(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(k).catch(k)}fetchInfiniteQuery(e){return e.behavior=st(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(k).catch(k)}ensureInfiniteQueryData(e){return e.behavior=st(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return Y.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set($(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(r=>{z(e,r.queryKey)&&Object.assign(n,r.defaultOptions)}),n}setMutationDefaults(e,t){this.#s.set($(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#s.values()],n={};return t.forEach(r=>{z(e,r.mutationKey)&&(n={...n,...r.defaultOptions})}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=H(t.queryKey,t)),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!=="always"),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),t.queryFn===ee&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}};var uo=new at({defaultOptions:{queries:{staleTime:3e4}},queryCache:new te({onError:(e,t)=>{}}),mutationCache:new ne}),yn=uo;async function lo(e){let t=await yn.fetchQuery({queryKey:["getClientConfig",e.clientId,e.apiKey],queryFn:()=>fe({url:`${e.endpoint}/client/config`,headers:{"client-id":e.clientId,"x-api-key":e.apiKey}})}),n={...e,usingFpjs:t.usingFpjs,usingHcaptcha:t.usingHcaptcha};return P(r=>({...r,config:n,securityKeys:t})),n}async function In(e){return lo(e)}var ct,mo=pt;function au(){let{config:e}=w();return!!(e?.clientId&&e?.apiKey)}function fo(e){let{config:t}=w();if(!e?.clientId||!e?.apiKey)throw R(v.MISSING_CREDENTIALS,"error",{endpoint:t?.endpoint,...e}),new Error(v.MISSING_CREDENTIALS)}function po(){let{config:e}=w();return!!(e?.clientId&&e.apiKey)}function ho(e){let{config:t}=w();if(!po())throw R(v.MISSING_CREDENTIALS,"error",{endpoint:t?.endpoint,...e}),new Error(v.MISSING_CREDENTIALS)}function go(e){return{clientId:e.clientId,apiKey:e.apiKey,endpoint:e.endpoint||"https://api.dtect.io/security",includeResults:e.includeResults}}function yo(e){let t=e.endpoint,n=e.includeResults?`${t}/client/check/result`:`${t}/client/check`;return{...e,checkResultEndpoint:n}}function Io(e){let t=yo(e);P(n=>({...n,config:t}))}function Eo(){let{state:e}=w();if(e.isLoading&&!J())throw new Error(v.DUPLICATE_INITIALIZATION)}async function vo(e){let{state:t,config:n}=w(),o=(performance.now()-e).toFixed();return R(`init() finishes ${o}ms`,"info",{endpoint:n?.endpoint,function:"init",diff:o,token:t.token,clientId:n?.clientId}),{getSecurityResult:Je,getSecurityToken:Xe,SecurityAPIError:mo,isAIUsageDetected:Ze,checkQualityQuestions:et,getQualityQuestions:He,LanguageCodes:re,QualityQuestionsRespondentTypes:oe}}async function wo(e){let{state:t}=w(),n=performance.now();fo(e);let r=go(e);Io(r),ho(e);let o=wt(t.token),i=await In(r);Eo(),kt(o);try{return J()?ct:(await Dt(i),await Pt({usingFpjs:i.usingFpjs||!1,behaviorKey:Ot()?.behaviorKey||""}),await At(),await vo(n))}catch(a){_t(a,r)}finally{Mt(o)}}ct={init:wo,getSecurityResult:Je,getSecurityToken:Xe,isAIUsageDetected:Ze,checkQualityQuestions:et,getQualityQuestions:He,QualityQuestionsRespondentTypes:oe,LanguageCodes:re};var cu=ct;export{re as LanguageCodes,oe as QualityQuestionsRespondentTypes,mo as SecurityAPIError,et as checkQualityQuestions,cu as default,He as getQualityQuestions,Je as getSecurityResult,Xe as getSecurityToken,au as hasCredentials,wo as init,Ze as isAIUsageDetected};
11
+ `,n=l.createShader(l.VERTEX_SHADER),o=l.createShader(l.FRAGMENT_SHADER);if(!n||!o)throw new Error("Failed to create shaders");if(l.shaderSource(n,t),l.shaderSource(o,e),l.compileShader(n),!l.getShaderParameter(n,l.COMPILE_STATUS))throw new Error("Vertex shader compilation failed: "+l.getShaderInfoLog(n));if(l.compileShader(o),!l.getShaderParameter(o,l.COMPILE_STATUS))throw new Error("Fragment shader compilation failed: "+l.getShaderInfoLog(o));let r=l.createProgram();if(!r)throw new Error("Failed to create shader program");if(l.attachShader(r,n),l.attachShader(r,o),l.linkProgram(r),!l.getProgramParameter(r,l.LINK_STATUS))throw new Error("Shader program linking failed: "+l.getProgramInfoLog(r));l.useProgram(r);let i=137,a=new Float32Array(i*4),s=2*Math.PI/i;for(let g=0;g<i;g++){let f=g*s;a[g*4]=0,a[g*4+1]=0,a[g*4+2]=Math.cos(f)*(A.width/2),a[g*4+3]=Math.sin(f)*(A.height/2)}let c=l.createBuffer();l.bindBuffer(l.ARRAY_BUFFER,c),l.bufferData(l.ARRAY_BUFFER,a,l.STATIC_DRAW);let m=l.getAttribLocation(r,"position");l.enableVertexAttribArray(m),l.vertexAttribPointer(m,2,l.FLOAT,!1,0,0),l.viewport(0,0,A.width,A.height),l.clearColor(0,0,0,1),l.clear(l.COLOR_BUFFER_BIT),l.drawArrays(l.LINES,0,i*2);let u=new Uint8ClampedArray(A.width*A.height*4);return l.readPixels(0,0,A.width,A.height,l.RGBA,l.UNSIGNED_BYTE,u),new ImageData(u,A.width,A.height)}catch{return new ImageData(1,1)}finally{l&&(l.bindBuffer(l.ARRAY_BUFFER,null),l.useProgram(null),l.viewport(0,0,l.drawingBufferWidth,l.drawingBufferHeight),l.clearColor(0,0,0,0))}}function D(t){let e=[];return function n(o){if(o&&o.toJSON&&typeof o.toJSON=="function"&&(o=o.toJSON()),o===void 0)return;if(typeof o=="number")return isFinite(o)?""+o:"null";if(typeof o!="object")return JSON.stringify(o);let r,i;if(Array.isArray(o)){for(i="[",r=0;r<o.length;r++)r&&(i+=","),i+=n(o[r])||"null";return i+"]"}if(o===null)return"null";if(e.indexOf(o)!==-1)throw new TypeError("Converting circular structure to JSON");let a=e.push(o)-1,s=Object.keys(o).sort();for(i="",r=0;r<s.length;r++){let c=s[r],m=n(o[c]);m&&(i&&(i+=","),i+=JSON.stringify(c)+":"+m)}return e.splice(a,1),"{"+i+"}"}(t)||""}async function we(){return new Promise(t=>{try{let e=window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection;if(!e){t({supported:!1,error:"WebRTC not supported"});return}let n={iceCandidatePoolSize:1,iceServers:[]},o=new e(n);o.createDataChannel(""),(async()=>{try{let i={offerToReceiveAudio:!0,offerToReceiveVideo:!0},a=await o.createOffer(i);await o.setLocalDescription(a);let s=a.sdp||"",c=[...new Set((s.match(/extmap:\d+ [^\n\r]+/g)||[]).map(v=>v.replace(/extmap:\d+ /,"")))].sort(),m=v=>{let R=s.match(new RegExp(`m=${v} [^\\s]+ [^\\s]+ ([^\\n\\r]+)`));return R?R[1].split(" "):[]},u=(v,R)=>R.map(p=>{let P=new RegExp(`(rtpmap|fmtp|rtcp-fb):${p} (.+)`,"g"),_=[...s.matchAll(P)];if(!_.length)return null;let y={};return _.forEach(pt=>{let[Rn,ee,te]=pt,ne=te.split("/");ee==="rtpmap"?(y.mimeType=`${v}/${ne[0]}`,y.clockRate=+ne[1],v==="audio"&&(y.channels=+ne[2]||1)):ee==="rtcp-fb"?(y.feedbackSupport=y.feedbackSupport||[],y.feedbackSupport.push(te)):ee==="fmtp"&&(y.sdpFmtpLine=te)}),y}).filter(Boolean),d=u("audio",m("audio")),g=u("video",m("video")),f={audio:{count:d.length,hash:b(D(d))},video:{count:g.length,hash:b(D(g))},extensionsHash:b(D(c))},T=await new Promise(v=>{let R=setTimeout(()=>{o.removeEventListener("icecandidate",p),o.close(),v({supported:!0,...f,timeout:!0})},3e3),p=P=>{let _=P.candidate;!_||!_.candidate||(clearTimeout(R),o.removeEventListener("icecandidate",p),o.close(),v({supported:!0,...f,candidateType:_.type||""}))};o.addEventListener("icecandidate",p)});t({details:T,hash:b(D(T))})}catch(i){o.close(),t({supported:!0,error:`WebRTC offer failed: ${i.message}`})}})()}catch(e){t({supported:!1,error:`WebRTC error: ${e.message}`})}})}var Qe=["\u{1D504}","\u{1D505}","\u212D","\u{1D507}","\u{1D508}","\u{1D509}","\u{1D538}","\u{1D539}","\u2102","\u{1D53B}","\u{1D53C}","\u{1D53D}"],Je=["\u03B2","\u03C8","\u03BB","\u03B5","\u03B6","\u03B1","\u03BE","\u03BC","\u03C1","\u03C6","\u03BA","\u03C4","\u03B7","\u03C3","\u03B9","\u03C9","\u03B3","\u03BD","\u03C7","\u03B4","\u03B8","\u03C0","\u03C5","\u03BF"];async function Ie(){return new Promise(t=>{try{Q(async({iframe:e})=>{try{if(!Qt(e)){t({supported:!1,error:"MathML not supported"});return}let n=[V("integral","<msubsup><mo>\u222B</mo><mi>a</mi><mi>b</mi></msubsup><mfrac><mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mrow><mi>g</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mfrac><mi>dx</mi>"),V("fraction","<mfrac><mrow><mi>\u03C0</mi><mo>\xD7</mo><msup><mi>r</mi><mn>2</mn></msup></mrow><mrow><mn>2</mn><mi>\u03C3</mi></mrow></mfrac>"),V("matrix","<mo>[</mo><mtable><mtr><mtd><mi>\u03B1</mi></mtd><mtd><mi>\u03B2</mi></mtd></mtr><mtr><mtd><mi>\u03B3</mi></mtd><mtd><mi>\u03B4</mi></mtd></mtr></mtable><mo>]</mo>"),Jt(),...Xt()],o=[],r="";n.forEach((a,s)=>{let c=Zt(a,e);o.push({width:c.dimensions.width,height:c.dimensions.height}),s===0&&c.fontInfo&&(r=b(D(c.fontInfo)))});let i={fontStyleHash:r,dimensions:o};t({details:i,hash:b(D(i))})}catch(n){t({supported:!1,error:`MathML error: ${n.message}`})}})}catch(e){t({supported:!1,error:`MathML error: ${e.message}`})}})}function Qt(t){try{let e=t.createElement("math");e.innerHTML="<mrow><mi>x</mi></mrow>",e.style.position="absolute",e.style.visibility="hidden",t.body.appendChild(e);let n=e.getBoundingClientRect();return t.body.removeChild(e),n.width>0&&n.height>0}catch{return!1}}function V(t,e){return`<math><mrow>${e}</mrow></math>`}function Jt(){let t="<mo>\u220F</mo>";return Qe.forEach((e,n)=>{let o=n*2,r=Je.slice(o,o+2);r.length===2&&(t+=`<mmultiscripts><mi>${e}</mi><none/><mi>${r[1]}</mi><mprescripts></mprescripts><mi>${r[0]}</mi><none/></mmultiscripts>`)}),V("complex_nested",`<munderover><mmultiscripts>${t}</mmultiscripts></munderover>`)}function Xt(){let t=[];return Qe.forEach((e,n)=>{let o=n*2,r=Je.slice(o,o+2);r.length===2&&t.push(V("combined",`<mmultiscripts><mi>${e}</mi><none/><mi>${r[1]}</mi><mprescripts></mprescripts><mi>${r[0]}</mi><none/></mmultiscripts>`))}),t}function Zt(t,e){try{let n=e.createElement("math");n.innerHTML=t.replace(/<\/?math>/g,""),n.style.whiteSpace="nowrap",n.style.position="absolute",n.style.visibility="hidden",n.style.top="-9999px",e.body.appendChild(n);let o=n.getBoundingClientRect(),i=(e.defaultView||window).getComputedStyle(n),a={dimensions:{width:o.width,height:o.height},fontInfo:{fontFamily:i.fontFamily,fontSize:i.fontSize,fontWeight:i.fontWeight,fontStyle:i.fontStyle,lineHeight:i.lineHeight,fontVariant:i.fontVariant||"normal",fontStretch:i.fontStretch||"normal",fontSizeAdjust:i.fontSizeAdjust||"none",textRendering:i.textRendering||"auto",fontFeatureSettings:i.fontFeatureSettings||"normal",fontVariantNumeric:i.fontVariantNumeric||"normal",fontKerning:i.fontKerning||"auto"}};return e.body.removeChild(n),a}catch(n){return{error:n.message}}}var Ht=800;async function ve(){return new Promise(t=>{try{if(typeof window>"u"||!window.speechSynthesis||typeof window.speechSynthesis.getVoices!="function"){t({supported:!1,error:"Speech Synthesis API not supported"});return}let e=!1,n=null,o=a=>{if(!e){e=!0,n&&clearTimeout(n);try{let s=a.map(m=>{let u=g=>g.replace(/\\/g,"\\\\").replace(/,/g,"\\,");return[u(m.voiceURI||""),u(m.name||""),u(m.lang||""),m.localService?"1":"0",m.default?"1":"0"].join(",")});s.sort();let c={voiceCount:a.length,voicesHash:b(D(s))};t({details:c,hash:b(D(c))})}catch(s){t({supported:!0,error:`Voice processing failed: ${s.message}`})}}},r=window.speechSynthesis.getVoices();if(r.length>0){o(r);return}n=setTimeout(()=>{let a=window.speechSynthesis.getVoices();o(a)},Ht);let i=()=>{window.speechSynthesis.removeEventListener("voiceschanged",i);let a=window.speechSynthesis.getVoices();o(a)};window.speechSynthesis.addEventListener("voiceschanged",i)}catch(e){t({supported:!1,error:`Speech Synthesis error: ${e.message}`})}})}var Xe={audio:se,canvas:ce,fonts:ue,hardware:le,locales:me,math:de,permissions:ge,plugins:fe,screen:pe,system:ye,webgl:he},Ze={webrtc:we,mathml:Ie,speech:ve},Ee={},He={timeout:"true"},be=(t,e,n)=>{Ee[t]=e};function en(t,e){return new Promise(n=>{setTimeout(()=>n(e),t)})}function et(t,e,n){return Promise.all(t.map(o=>{let r=performance.now();return Promise.race([o.then(i=>({value:i,elapsed:performance.now()-r})),en(e,n).then(i=>({value:i,elapsed:performance.now()-r}))])}))}function Z(t,e){let n=B();if(n.name==="unknown"&&t.system&&typeof t.system=="object"&&!Array.isArray(t.system)){let d=t.system.browser;if(d&&typeof d=="object"&&!Array.isArray(d)){let g=d;n={name:g.name||"unknown",version:g.version||"unknown"}}}let o=n.name.toLowerCase(),r=n.version.split(".")[0]||"0",i=parseInt(r,10),a=[...e?.exclude||[]],s=e?.stabilize||[],c=e?.include||[];for(let u of s){let d=ae[u];if(d)for(let g of d){let f=!("browsers"in g),T=!f&&g.browsers?.some(v=>{let R=v.match(/(.+?)(>=)(\d+)/);if(R){let[,p,,P]=R,_=parseInt(P,10);return o===p&&i>=_}return o===v});(f||T)&&a.push(...g.exclude)}}function m(u,d=""){let g={};for(let[f,T]of Object.entries(u)){let v=d?`${d}.${f}`:f;if(typeof T=="object"&&!Array.isArray(T)&&T!==null){let R=m(T,v);Object.keys(R).length>0&&(g[f]=R)}else{let R=a.some(P=>v.startsWith(P)),p=c.some(P=>v.startsWith(P));(!R||p)&&(g[f]=T)}}return g}return m(t)}async function Te(t){let e={...C,...t},n=e.logging&&!sessionStorage.getItem("_tmjs_l")&&Math.random()<1e-4,o={...Xe,...Ee},{elapsed:r,resolvedComponents:i}=await tt(o,e),a={},s={};if(n||e.experimental){let{elapsed:R,resolvedComponents:p}=await tt(Ze,e);a=p,s=R}let c={...r,...s},m=e.performance?{elapsed:c}:{},u=Z({},e),d={...i,...u},g={};return{thumbmark:b(D(d)),components:d,info:g,version:"",...m,...Object.keys(a).length>0&&e.experimental&&{experimental:a}}}async function tt(t,e){let n={...C,...e},o=Object.entries(t).filter(([u])=>!n?.exclude?.includes(u)).filter(([u])=>n?.include?.some(d=>d.includes("."))?n?.include?.some(d=>d.startsWith(u)):n?.include?.length===0||n?.include?.includes(u)),r=o.map(([u])=>u),i=o.map(([u,d])=>d(e)),a=await et(i,n?.timeout||5e3,He),s={},c={};a.forEach((u,d)=>{u.value!=null&&(c[r[d]]=u.value,s[r[d]]=u.elapsed??0)});let m=Z(c,n);return{elapsed:s,resolvedComponents:m}}var W=class{options;constructor(e){this.options={...C,...e}}async get(e){let n={...this.options,...e};return Te(n)}getVersion(){return""}includeComponent(e,n){be(e,n)}};var tn=(t,e={})=>({"Content-Type":"application/json",...t?.accessToken&&{Authorization:`Bearer ${t?.accessToken}`},...e}),nn=async(t,e)=>{if(!t.ok){let n=await t.text();throw new Error(n)}return e==="file"?t.blob():e==="json"?t.json():e==="text"?t.text():null},nt=async({url:t,auth:e,body:n,method:o="GET",headers:r={},responseType:i="json"})=>{let a={method:o,headers:tn(e,r),...n?{body:n instanceof FormData?n:JSON.stringify(n)}:{}},s=await fetch(t,a);return nn(s,i)},rt=t=>nt({...t,method:"GET"}),U=t=>nt({...t,method:"POST"});var rn=[{name:"lowCpuCores",weight:2,async check(){let t=navigator.hardwareConcurrency||0,e=t>0&&t<=2;return{value:t,triggered:e}}},{name:"lowDeviceMemory",weight:0,async check(){let t=navigator.deviceMemory||0,e=t>0&&t<=4;return{value:t,triggered:e}}},{name:"platformMismatch",weight:1,async check(){let t=navigator.userAgent||"",e=navigator.platform||"",n=t.includes("Mac")&&e.includes("Linux")||t.includes("Win")&&e.includes("Mac")||e===""||e==="Unknown";return{value:e,triggered:n}}},{name:"webglSoftwareRenderer",weight:4,async check(){let t=null,e=null,n=!1;try{let o=document.createElement("canvas"),r=o.getContext("webgl")||o.getContext("experimental-webgl");if(r){let i=r.getExtension("WEBGL_debug_renderer_info");if(i){t=r.getParameter(i.UNMASKED_VENDOR_WEBGL)||"",e=r.getParameter(i.UNMASKED_RENDERER_WEBGL)||"";let a=e.toLowerCase(),s=t.toLowerCase();n=a.includes("swiftshader")||a.includes("llvmpipe")||a.includes("softwar")||a.includes("basic render")||a.includes("vmware")||a.includes("virtualbox")||s.includes("vmware")||s.includes("parallels")}}}catch{}return{value:{vendor:t,renderer:e},triggered:n}}},{name:"missingWebGPUAdapter",weight:3,async check(){if(!("gpu"in navigator))return{value:"no WebGPU",triggered:!0};try{let t=await navigator.gpu.requestAdapter();return{value:t?"adapter-present":"adapter-null",triggered:!t}}catch{return{value:"adapter-error",triggered:!0}}}},{name:"reducedTimerPrecision",weight:1,async check(){let t=performance.now();await new Promise(o=>setTimeout(o,50));let e=performance.now()-t,n=e<30||e>80;return{value:e.toFixed(2),triggered:n}}},{name:"timerJitter",weight:0,async check(){let t=[];for(let n=0;n<10;n++){let o=performance.now();await new Promise(i=>setTimeout(i,10));let r=performance.now();t.push(r-o)}let e=Math.sqrt(t.map(n=>(n-10)**2).reduce((n,o)=>n+o)/t.length);return{value:e.toFixed(3),triggered:e>5}}},{name:"audioFingerprint",weight:1,async check(){try{let t=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,44100,44100),e=t.createOscillator();e.frequency.value=440,e.connect(t.destination),e.start(0);let o=(await t.startRendering()).getChannelData(0).reduce((r,i)=>r+Math.abs(i),0);return{value:o,triggered:o<100}}catch{return{value:"audio-error",triggered:!0}}}},{name:"canvasEntropy",weight:1,async check(){try{let t=document.createElement("canvas"),e=t.getContext("2d");e.textBaseline="top",e.font="14px 'Arial'",e.fillText("VM CHECK",2,2);let o=[...t.toDataURL()].reduce((r,i)=>(r+i.charCodeAt(0))%9999999,0);return{value:o,triggered:o===0||o===999999}}catch{return{value:"canvas-error",triggered:!0}}}},{name:"windowSizeWeird",weight:1,async check(){let t=window.innerWidth/window.innerHeight,e=t===1.333||t===1.6;return{value:t.toFixed(2),triggered:e}}},{name:"touchMismatch",weight:1,async check(){let t="ontouchstart"in window,e=navigator.maxTouchPoints||0;return{value:{hasTouch:t,maxTouch:e},triggered:t&&e===0}}},{name:"batteryVirtualized",weight:1,async check(){if(!navigator.getBattery)return{value:"no API",triggered:!0};try{let t=await navigator.getBattery(),e=t.chargingTime===0&&t.dischargingTime===1/0;return{value:{chargingTime:t.chargingTime,dischargingTime:t.dischargingTime},triggered:e}}catch{return{value:"battery-error",triggered:!0}}}},{name:"permissionsWeird",weight:0,async check(){try{let t=await navigator.permissions.query({name:"camera"});return{value:t.state,triggered:t.state==="prompt"}}catch{return{value:"perm-error",triggered:!0}}}},{name:"noMediaDevices",weight:1,async check(){try{let t=await navigator.mediaDevices.enumerateDevices();return{value:t.length,triggered:t.length===0}}catch{return{value:"media-error",triggered:!0}}}},{name:"virtualizedMediaDevices",weight:1,async check(){try{let t=await navigator.mediaDevices.enumerateDevices(),e=t.some(n=>n.label.toLowerCase().includes("virtual"));return{value:t.map(n=>n.label),triggered:e}}catch{return{value:"media-error",triggered:!0}}}},{name:"webrtcIpPattern",weight:2,async check(){return new Promise(t=>{try{let e=new RTCPeerConnection({iceServers:[]});e.createDataChannel("x");let n=setTimeout(()=>{e.close(),t({value:"timeout",triggered:!1})},3e3);e.onicecandidate=o=>{if(!o?.candidate){clearTimeout(n),e.close(),t({value:"no candidate",triggered:!1});return}let r=o.candidate.candidate.toLowerCase();clearTimeout(n),e.close(),t({value:r,triggered:r.includes("10.0.2.")||r.includes("172.16.")||r.includes("192.168.56.")})},e.createOffer().then(o=>e.setLocalDescription(o))}catch{t({value:"rtc-error",triggered:!1})}})}},{name:"gpuAccelerationDisabled",weight:3,async check(){let e=document.createElement("canvas").getContext("webgl");return{value:!!e,triggered:!e}}},{name:"noWebGL2",weight:3,async check(){let t=document.createElement("canvas").getContext("webgl2");return{value:!!t,triggered:!t}}},{name:"lowStorageQuota",weight:1,async check(){try{let t=await navigator.storage.estimate();return{value:t.quota,triggered:(t.quota??0)<524288e3}}catch{return{value:"storage-error",triggered:!0}}}},{name:"lowEntropy",weight:1,async check(){let t=Object.keys(navigator).length+Object.keys(screen).length+Object.keys(window).length;return{value:t,triggered:t<200}}},{name:"noLanguages",weight:1,async check(){let t=navigator.languages||[];return{value:t,triggered:t.length===0}}},{name:"uaEntropyLow",weight:1,async check(){let t=navigator.userAgent;return{value:t,triggered:t.length<30}}},{name:"weirdDPI",weight:2,async check(){let t=window.devicePixelRatio;return{value:t,triggered:t===1}}}],on=[{name:"tamperingPluginMismatch",penalty:3,async check(){try{let t=navigator.userAgent.toLowerCase(),e=(t.includes("chrome")||t.includes("edg"))&&!t.includes("firefox")&&!t.includes("safari"),n=navigator.plugins?.length??0,o=!e&&n>0;return{value:{pluginCount:n,isChromeLike:e},triggered:o}}catch{return{value:"error",triggered:!1}}}},{name:"tamperingWebglNoise",penalty:1,async check(){try{let t=document.createElement("canvas");t.width=16,t.height=16;let e=t.getContext("webgl");if(!e)return{value:"no-webgl",triggered:!1};e.clearColor(.1,.2,.3,1),e.clear(e.COLOR_BUFFER_BIT);let n=new Uint8Array(16*16*4);e.readPixels(0,0,16,16,e.RGBA,e.UNSIGNED_BYTE,n);let o=new Set(n).size;return{value:{uniqueValues:o},triggered:o>4}}catch{return{value:"error",triggered:!1}}}},{name:"tamperingServiceWorkerBlocked",penalty:1,async check(){let t=!("serviceWorker"in navigator);return{value:{serviceWorkerAvailable:!t},triggered:t}}},{name:"permissionsWeirdAntiVM",penalty:2,async check(){try{let t=await navigator.permissions.query({name:"camera"});return{value:t.state,triggered:t.state==="prompt"}}catch{return{value:"error",triggered:!1}}}}];async function ot({threshold:t=4}={}){let e={},n=0;for(let r of rn)try{let i=await r.check();e[r.name]={...i,weight:r.weight},i.triggered&&r.weight>0&&(n+=r.weight)}catch{e[r.name]={value:"error",triggered:!1,weight:r.weight}}let o=n;for(let r of on)try{let i=await r.check();e[r.name]={...i,penalty:r.penalty},i.triggered&&(n-=r.penalty)}catch{e[r.name]={value:"error",triggered:!1,penalty:r.penalty}}return{isLikelyVM:n>=t,score:n,rawScore:o,threshold:t,signals:e}}var an=[{name:"hookedFunctionToString",weight:2,async check(){let t=Function.prototype.toString.toString(),e=Function.prototype.toString+"";return{value:{native:t,current:e},triggered:t!==e}}},{name:"navigatorProxyTrap",weight:2,async check(){let t=!1;try{let e=Object.getOwnPropertyDescriptor(window,"navigator");e&&e.get&&e.get.toString()?.includes("[native code]")===!1&&(t=!0)}catch{}return{value:"navigator getter",triggered:t}}},{name:"uaMismatch",weight:2,async check(){let t=navigator.userAgent||"",e="";try{let o=await navigator.userAgentData?.getHighEntropyValues?.(["platform","brands"]);e=JSON.stringify(o)}catch{}let n=t?.includes("Mac")&&e?.includes("Windows")||t?.includes("Win")&&e?.includes("Mac")||e&&e.length>0&&!t;return{value:{ua:t,brandInfo:e},triggered:n}}},{name:"timezoneLocaleMismatch",weight:1,async check(){let t=Intl.DateTimeFormat().resolvedOptions().timeZone,e=navigator.language||"",n=e.startsWith("en")&&t==="Asia/Shanghai"||e.startsWith("zh")&&t==="America/New_York"||t===void 0;return{value:{tz:t,lang:e},triggered:n}}},{name:"canvasNoise",weight:2,async check(){let t=()=>{let r=document.createElement("canvas"),i=r.getContext("2d");return i.textBaseline="top",i.font="14px Arial",i.fillText("anti-detect-check",2,2),r.toDataURL()},e=t(),n=t();return{value:{a:e,b:n},triggered:e!==n}}},{name:"webglNoise",weight:-2,async check(){try{let e=document.createElement("canvas").getContext("webgl");if(!e)return{value:"no-webgl",triggered:!0};let n=e.getExtension("WEBGL_debug_renderer_info");if(!n)return{value:"no-debug-extension",triggered:!1};let o=e.getParameter(n.UNMASKED_VENDOR_WEBGL),r=e.getParameter(n.UNMASKED_RENDERER_WEBGL),i=o===""||r===""||o?.includes(" ")===!1||r?.includes(" ")===!1;return{value:{v:o,r},triggered:i}}catch{return{value:"gl-error",triggered:!0}}}},{name:"webdriverFlag",weight:3,async check(){let t=navigator.webdriver===!0;return{value:navigator.webdriver,triggered:t}}},{name:"perfectEventTiming",weight:-3,async check(){let t=performance.now();return{value:t,triggered:t%1===0}}},{name:"serviceWorkerBlocked",weight:-4,async check(){let t=!("serviceWorker"in navigator);return{value:t,triggered:t}}},{name:"smallQuota",weight:2,async check(){try{let t=await navigator.storage.estimate(),e=t.quota<50*1024*1024;return{value:t.quota,triggered:e}}catch{return{value:"quota-error",triggered:!0}}}},{name:"indexedDbBlocked",weight:2,async check(){try{let t=indexedDB.open("tamper-check");return await new Promise(e=>{t.onerror=()=>e({value:"error",triggered:!0}),t.onsuccess=()=>e({value:"ok",triggered:!1})})}catch{return{value:"throw",triggered:!0}}}},{name:"screenDprMismatch",weight:0,async check(){let t=window.screen.width,e=window.screen.height,n=window.devicePixelRatio,o=t===1920&&n===1&&e===1080||n%1!==0&&n%1!==.5;return{value:{w:t,h:e,dpr:n},triggered:o}}},{name:"missingCommonFonts",weight:1,async check(){return{value:"skipped",triggered:!1}}},{name:"noMediaDevices",weight:1,async check(){try{let t=await navigator.mediaDevices.enumerateDevices();return{value:t.length,triggered:t.length===0}}catch{return{value:"error",triggered:!0}}}},{name:"languagesEmpty",weight:1,async check(){let t=navigator.languages||[];return{value:t,triggered:t.length===0}}},{name:"pluginMismatch",weight:-4,async check(){try{let t=navigator.plugins.length;return{value:t,triggered:t===0}}catch{return{value:"error",triggered:!0}}}},{name:"devtoolsDetected",weight:-2,async check(){return new Promise(async t=>{let e={viewportBreakpoint:!1,consoleSpeed:!1,consoleProfileTiming:!1},n=160,o=window.outerWidth-window.innerWidth,r=window.outerHeight-window.innerHeight;(o>n||r>n)&&(e.viewportBreakpoint=!0);async function i(c=50){return new Promise(m=>{let u=performance.now();console.log("%c ","font-size:3000px");let d=performance.now();m(d-u>c)})}e.consoleSpeed=await i();function a(){if(typeof console.profile!="function"||typeof console.profileEnd!="function")return!1;let c=5,m=3,u=[];try{for(let g=0;g<c;g++){let f=performance.now(),T=`profile_${f.toString()}`;console.profile(T),console.profileEnd(T),u.push(performance.now()-f)}}catch{return!1}return u.sort((g,f)=>g-f),u[Math.floor(u.length/2)]>m}e.consoleProfileTiming=a();let s=Object.values(e).some(Boolean);setTimeout(()=>{t({value:s,triggered:s})},50)})}},{name:"knownAntiDetectBrowser",weight:5,async check(){let t=navigator.userAgent.toLowerCase(),n=["incogniton","multilogin","morelogin","adspect","kameleo","goLogin"].some(o=>t?.includes(o));return{value:t,triggered:n}}},{name:"batteryVirtualized",weight:4,async check(){try{let t=await navigator.getBattery(),e=t.chargingTime,n=t.dischargingTime;return{value:{chargingTime:e,dischargingTime:n},triggered:e===0}}catch{return{value:"no-battery-api",triggered:!1}}}},{name:"permissionDenied",weight:4,async check(){try{let t=await navigator.permissions.query({name:"notifications"}),e=t.state==="denied";return{value:t.state,triggered:e}}catch{return{value:"perm-error",triggered:!1}}}}];async function it({anomalyMin:t=.52,anomalyMax:e=.54}={}){let n={},o=0;for(let d of an){let g=await d.check();n[d.name]=g,g.triggered&&(o+=d.weight)}let r=navigator?.platform||"",i=(navigator?.userAgent||"").toLowerCase(),a=r.toLowerCase().includes("win"),s=n.batteryVirtualized?.triggered||!1,c=n.permissionDenied?.triggered||!1,m=!a&&r!==""&&s&&c,u=Math.min(1,Math.max(0,o)/15);return{result:m&&u>=t&&u<=e||n.knownAntiDetectBrowser?.triggered,anomalyScore:u,score:o,signals:n}}function sn(){let t=0;try{0 .toFixed(-1)}catch(e){t=e.message.length}return t}function cn(){let t=navigator.userAgent,e=sn();return e===44||e===43?"Safari":e===51?"Chrome":e===25?"Firefox":navigator.msSaveBlob!==void 0?"MSIE":t.match(/Chrome/)?navigator.brave!==void 0?"Brave":t.includes("Edg")?"Edge":t.includes("OPR")?"Opera":"Chrome":"Unknown"}var un=[{name:"safari_currentStorageTest",weight:2,browser:"Safari",async check(){if(typeof navigator.storage?.getDirectory!="function")return{triggered:!1,value:"unsupported"};try{return await navigator.storage.getDirectory(),{triggered:!1,value:"ok"}}catch(t){let e=t?.message??String(t);return{triggered:e.includes("unknown transient reason"),value:e}}}},{name:"safari13to18_indexedDbBlobTest",weight:2,browser:"Safari",async check(){return await new Promise(t=>{let e=String(Math.random()),n=indexedDB.open(e,1);n.onupgradeneeded=o=>{let r=o.target.result;try{r.createObjectStore("t",{autoIncrement:!0}).put(new Blob),t({triggered:!1,value:"ok"})}catch(i){let a=i?.message??String(i);t({triggered:a.includes("are not yet supported"),value:a})}finally{r.close(),indexedDB.deleteDatabase(e)}},n.onerror=()=>t({triggered:!1,value:"idb-error"})})}},{name:"safari_oldWebkitTest",weight:1,browser:"Safari",async check(){let t=window.openDatabase,e=window.localStorage;try{t(null,null,null,null)}catch{return{triggered:!0,value:"openDatabase denied"}}try{e.setItem("test","1"),e.removeItem("test")}catch{return{triggered:!0,value:"localStorage denied"}}return{triggered:!1,value:"ok"}}},{name:"chrome_storageQuotaPrivateTest",weight:2,browser:"Chrome",async check(){return await new Promise((t,e)=>{let o=window?.performance?.memory?.jsHeapSizeLimit??1073741824;navigator.webkitTemporaryStorage.queryUsageAndQuota((r,i)=>{let a=Math.round(i/1048576),s=Math.round(o/(1024*1024))*2;t({triggered:a<s,value:{quotaMB:a,limitMB:s}})},r=>e(r))})}},{name:"chrome_oldFileSystemTest",weight:1,browser:"Chrome",async check(){let t=window.webkitRequestFileSystem;return t?await new Promise(e=>t(0,1,()=>e({triggered:!1,value:"ok"}),()=>e({triggered:!0,value:"denied"}))):{triggered:!1,value:"unsupported"}}},{name:"firefox_storageDirectoryTest",weight:2,browser:"Firefox",async check(){if(typeof navigator.storage?.getDirectory!="function")return{triggered:!1,value:"unsupported"};try{return await navigator.storage.getDirectory(),{triggered:!1,value:"ok"}}catch(t){let e=t?.message??String(t);return{triggered:e.includes("Security error"),value:e}}}},{name:"firefox_indexedDbInvalidStateTest",weight:1,browser:"Firefox",async check(){return await new Promise(t=>{let e=indexedDB.open("inPrivate");e.onerror=()=>{t({triggered:e.error?.name==="InvalidStateError",value:e.error?.name})},e.onsuccess=()=>{indexedDB.deleteDatabase("inPrivate"),t({triggered:!1,value:"ok"})}})}},{name:"msie_indexedDbMissing",weight:2,browser:"MSIE",async check(){return{triggered:window.indexedDB===void 0,value:"msie-idb-check"}}}];async function at(){let t=cn(),e={},n=0;for(let o of un){if(o.browser!==t)continue;let r=await o.check();e[o.name]=r,r.triggered&&(n+=o.weight)}return{isPrivate:n>0,browserName:t,score:n,signals:e}}typeof window<"u"&&(window.detectIncognito=at);var st=at;var ct=[{name:"globalPrivacyControl",weight:3,async check(){let t=navigator.globalPrivacyControl;return{triggered:t===!0,value:t}}},{name:"doNotTrack",weight:1,async check(){let t=navigator.doNotTrack;return{triggered:t==="1",value:t}}},{name:"cookiesDisabled",weight:3,async check(){let t=navigator.cookieEnabled;return{triggered:t===!1,value:t}}},{name:"thirdPartyCookiesBlocked",weight:3,async check(){try{if("hasStorageAccess"in document&&!await document.hasStorageAccess())try{return await document.requestStorageAccess(),{triggered:!1,value:"access_granted"}}catch{return{triggered:!0,value:"access_denied"}}let t=`__dtect_3p_test_${Date.now()}`;document.cookie=`${t}=1; SameSite=None; Secure`;let e=document.cookie.includes(t);return document.cookie=`${t}=; expires=Thu, 01 Jan 1970 00:00:00 GMT`,{triggered:!1,value:e?"cookies_work":"may_be_blocked"}}catch(t){return{triggered:!1,value:`error: ${t?.message}`}}}},{name:"firefoxResistFingerprinting",weight:2,async check(){let t=[],e=new Date().getTimezoneOffset();e===0&&Intl.DateTimeFormat().resolvedOptions().timeZone==="UTC"&&t.push("timezone_utc");let n=navigator.hardwareConcurrency;n===2&&t.push("cores_capped");let o=window.screen.width,r=window.screen.height,i=window.innerWidth,a=window.innerHeight;o===i&&r===a&&t.push("screen_matches_inner");let s=window.matchMedia("(prefers-reduced-motion: reduce)").matches;return{triggered:t.length>=2,value:{signals:t,timezoneOffset:e,cores:n,prefersReducedMotion:s}}}},{name:"braveShields",weight:3,async check(){if(!(navigator.brave!==void 0))return{triggered:!1,value:"not_brave"};try{if(!await navigator.brave.isBrave())return{triggered:!1,value:"brave_check_false"};let o=document.createElement("canvas").getContext("2d");if(o){o.fillStyle="rgb(255, 0, 0)",o.fillRect(0,0,1,1);let r=o.getImageData(0,0,1,1).data;o.fillRect(0,0,1,1);let i=o.getImageData(0,0,1,1).data;if(r[0]!==i[0]||r[1]!==i[1]||r[2]!==i[2])return{triggered:!0,value:"shields_active_canvas"}}try{let r=new RTCPeerConnection({iceServers:[{urls:"stun:stun.l.google.com:19302"}]});if(r.createDataChannel(""),await new Promise(a=>{let s=setTimeout(()=>{r.close(),a(!1)},1e3);r.onicecandidate=c=>{c.candidate?.candidate&&(/([0-9]{1,3}\.){3}[0-9]{1,3}/.test(c.candidate.candidate)||(clearTimeout(s),r.close(),a(!0)))},r.createOffer().then(c=>r.setLocalDescription(c))}))return{triggered:!0,value:"shields_active_webrtc"}}catch{return{triggered:!0,value:"shields_active_webrtc_blocked"}}return{triggered:!0,value:"brave_detected_shields_default"}}catch(e){return{triggered:!1,value:`error: ${e?.message}`}}}}];async function ut(){let t={},e=0,n=await Promise.allSettled(ct.map(async o=>{let r=await o.check();return{name:o.name,weight:o.weight,result:r}}));for(let o of n)if(o.status==="fulfilled"){let{name:r,weight:i,result:a}=o.value;t[r]=a,a.triggered&&(e+=i)}else{let r=n.indexOf(o),i=ct[r];i&&(t[i.name]={triggered:!1,value:`check_failed: ${o.reason}`})}return{isPrivacyEnabled:e>3,score:e,signals:t}}typeof window<"u"&&(window.detectPrivacy=ut);var lt=ut;function ln(t){let e=t?.projectId,n=t?.visitorId||O();return(typeof t?.projectId=="number"||typeof t?.visitorId=="number")&&(e=`${t?.projectId}`,n=`${t?.visitorId}`),{visitorId:n,projectId:e}}function F(t){let{projectId:e,visitorId:n}=ln(t);return{projectId:e,visitorId:n}}async function mn(){let t=new W,[e,n,o,r,i]=await Promise.allSettled([t.get(),ot(),it(),st(),lt()]);return{deviceRes:e,vmDtectResults:n,tamperingDtectResults:o,incognitoDtectResults:r,privacySettingsDtectResults:i}}function dn(t,e){return{entryLink:window?.location?.href,securitySettings:t.securitySettings,metaData:t.metaData,vmDtectResults:e?.vmDtectResults?.value,tamperingDtectResults:e?.tamperingDtectResults?.value,incognitoDtectResults:e?.incognitoDtectResults?.value,deviceIdResults:e?.deviceRes?.value,privacySettingsDtectResults:e?.privacySettingsDtectResults?.value}}function gn(t,e,n,o){let r=(performance.now()-e).toFixed();I(`${t} finishes in ${r}ms`,"info",{function:t,endpoint:n?.endpoint,diff:r,token:o,clientId:n?.clientId})}function mt(t,e,n,o,r){let i=(performance.now()-e).toFixed();I(`${t} error`,"error",{function:t,endpoint:n?.endpoint,error:r,diff:i,token:o,clientId:n?.clientId})}async function dt(t,e){let n=performance.now(),{projectId:o,visitorId:r}=F(t);if(!t||!o?.trim())throw new Error(h.FAILED_TO_GET_SECURITY_RESULT);L({projectId:o,visitorId:r});let{state:i,config:a,version:s}=w();try{let c=await mn(),m=dn(t,c),u={...t,projectId:o,visitorId:r,clientData:m,version:s,token:i.token,questionData:i.questionData,aiCheckData:i.aiCheckData},d=await U({url:e,body:u,headers:{"client-id":a?.clientId||"","x-api-key":a?.apiKey||""}});if(!("token"in d||"results"in d))throw new Error(h.INTERNAL_SERVER_ERROR);let g="results"in d&&d.results.isAIUsageDetected===!0;return S(f=>({...f,state:{...f.state,token:i.token,visitorId:r,projectId:o,clientData:m,aiUsageFlagged:f.state.aiUsageFlagged||g}})),gn("getResultBase",n,a,i.token),d}catch(c){c instanceof Error?mt("getResultBase",n,a,i.token,{message:c.message,stack:c.stack,name:c.name}):mt("getResultBase",n,a,i.token,c),N(c)}}async function Re(t){let{endpoint:e}=M();if(t)return dt(t,`${e}/client/check/result`)}async function xe(t){let{endpoint:e}=M();return dt(t,`${e}/client/check`)}var q;function gt(){let{config:t,monitor:e,state:n}=w();if(!t?.autoFlagAIUsage||!e||(q?.(),q=void 0,n.aiUsageFlagged))return;let o=()=>{let{state:r}=w();r.aiUsageFlagged||!(e.apd||e.qbc&&e.mas&&e.scb!=null)||r.projectId&&(S(a=>({...a,state:{...a.state,aiUsageFlagged:!0}})),q?.(),q=void 0,H({projectId:r.projectId,visitorId:r.visitorId}))};q=e.onChange(o),o()}async function H(t){let e=performance.now(),{visitorId:n,projectId:o}=F(t);L({projectId:o,visitorId:n});let{state:r,config:i,monitor:a,version:s}=w(),{checkResultEndpoint:c}=M(),m={timeTakenSeconds:t.timeTakenSeconds,qbc:a?.qbc,mas:a?.mas,scb:a?.scb,apd:a?.apd};try{let u=await U({url:c,headers:{"client-id":i?.clientId||"","x-api-key":i?.apiKey||""},body:{token:r.token,visitorId:n,projectId:o,version:s,clientData:r.clientData,questionData:r.questionData,aiCheckData:m}});if(!u)throw new Error(h.INTERNAL_SERVER_ERROR);let d="results"in u&&u.results.isAIUsageDetected===!0;S(f=>({...f,state:{...f.state,aiCheckData:m,visitorId:n,projectId:o,aiUsageFlagged:f.state.aiUsageFlagged||d}}));let g=(performance.now()-e).toFixed();return I(`isAIUsageDetected finishes in ${g}ms`,"info",{endpoint:i?.endpoint,diff:g,token:r.token,clientId:i?.clientId}),u}catch(u){let d=(performance.now()-e).toFixed();u instanceof Error?I("isAIUsageDetected error","error",{endpoint:i?.endpoint,error:{message:u.message,stack:u.stack,name:u.name},diff:d,token:r.token,clientId:i?.clientId}):I("isAIUsageDetected error","error",{endpoint:i?.endpoint,error:u,diff:d,token:r.token,clientId:i?.clientId}),N(u)}}async function Ae(t){let e=performance.now(),{state:n,config:o}=w(),{respondentType:r,language:i}=t;try{let a=await rt({url:`${o?.endpoint}/client/quality-questions/${r}/${i}`,headers:{"client-id":o?.clientId||"","x-api-key":o?.apiKey||""}});if(!a)throw new Error(h.INTERNAL_SERVER_ERROR);let s=(performance.now()-e).toFixed();return I(`getQualityQuestions finishes in ${s}ms`,"info",{function:"getQualityQuestions",endpoint:o?.endpoint,diff:s,token:n.token,clientId:o?.clientId}),a}catch(a){let s=(performance.now()-e).toFixed();I("getQualityQuestions error","error",{endpoint:o?.endpoint,error:a,diff:s,token:n.token,clientId:o?.clientId}),N(a)}}async function De(t){let e=performance.now(),{visitorId:n,projectId:o}=F(t);L({projectId:o,visitorId:n});let{state:r,config:i,version:a}=w(),{checkResultEndpoint:s}=M(),c={questions:t.questions};try{let m=await U({url:s,headers:{"client-id":i?.clientId||"","x-api-key":i?.apiKey||""},body:{token:r.token,visitorId:n,projectId:o,version:a,questionData:c,aiCheckData:r.aiCheckData,clientData:r.clientData}});if(!m)throw new Error(h.INTERNAL_SERVER_ERROR);S(d=>({...d,state:{...d.state,token:r.token,questionData:c,visitorId:n,projectId:o}}));let u=(performance.now()-e).toFixed();return I(`checkQualityQuestions finishes in ${u}ms`,"info",{function:"checkQualityQuestions",endpoint:i?.endpoint,diff:u,token:r.token,clientId:i?.clientId}),m}catch(m){let u=(performance.now()-e).toFixed();m instanceof Error?I("checkQualityQuestions error","error",{endpoint:i?.endpoint,error:{message:m.message,stack:m.stack,name:m.name},diff:u,token:r.token,clientId:i?.clientId}):I("checkQualityQuestions error","error",{endpoint:i?.endpoint,error:m,diff:u,token:r.token,clientId:i?.clientId}),N(m)}}var ft,fn=Me;function Fi(){let{config:t}=w();return!!(t?.clientId&&t?.apiKey)}function pn(t){let{config:e}=w();if(!t?.clientId||!t?.apiKey)throw I(h.MISSING_CREDENTIALS,"error",{endpoint:e?.endpoint,...t}),new Error(h.MISSING_CREDENTIALS)}function yn(){let{config:t}=w();return!!(t?.clientId&&t.apiKey)}function hn(t){let{config:e}=w();if(!yn())throw I(h.MISSING_CREDENTIALS,"error",{endpoint:e?.endpoint,...t}),new Error(h.MISSING_CREDENTIALS)}function wn(t){return{clientId:t.clientId,apiKey:t.apiKey,endpoint:t.endpoint||"https://api.dtect.io/security",includeResults:t.includeResults,autoFlagAIUsage:t.autoFlagAIUsage}}function In(t){let e=t.endpoint,n=t.includeResults?`${e}/client/check/result`:`${e}/client/check`;return{...t,checkResultEndpoint:n}}function vn(t){let e=In(t);S(n=>({...n,config:e}))}function En(){let{state:t}=w();if(t.isLoading)throw new Error(h.DUPLICATE_INITIALIZATION)}async function bn(t){let{state:e,config:n}=w(),r=(performance.now()-t).toFixed();return I(`init() finishes ${r}ms`,"info",{endpoint:n?.endpoint,function:"init",diff:r,token:e.token,clientId:n?.clientId}),{getSecurityResult:Re,getSecurityToken:xe,SecurityAPIError:fn,isAIUsageDetected:H,checkQualityQuestions:De,getQualityQuestions:Ae,LanguageCodes:K,QualityQuestionsRespondentTypes:j}}async function Tn(t){let{state:e}=w(),n=performance.now();pn(t);let o=wn(t);vn(o),hn(t);let r=Ge(e.token);En(),qe(r),gt();try{return await bn(n)}catch(i){Ve(i,o)}finally{Ke(r)}}ft={init:Tn,getSecurityResult:Re,getSecurityToken:xe,isAIUsageDetected:H,checkQualityQuestions:De,getQualityQuestions:Ae,QualityQuestionsRespondentTypes:j,LanguageCodes:K};var Gi=ft;export{K as LanguageCodes,j as QualityQuestionsRespondentTypes,fn as SecurityAPIError,De as checkQualityQuestions,Gi as default,Ae as getQualityQuestions,Re as getSecurityResult,xe as getSecurityToken,Fi as hasCredentials,Tn as init,H as isAIUsageDetected};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dtect/security-sdk-js",
3
- "version": "0.0.32",
3
+ "version": "0.1.1",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.mjs",
6
6
  "types": "dist/index.d.ts",
@@ -14,13 +14,10 @@
14
14
  "check-size": "size-limit"
15
15
  },
16
16
  "dependencies": {
17
- "@fingerprintjs/fingerprintjs-pro": "^3.12.0",
18
- "@tanstack/query-core": "^5.64.2",
19
17
  "uuid": "^11.0.5"
20
18
  },
21
19
  "devDependencies": {
22
20
  "@eslint/js": "^9.17.0",
23
- "@hcaptcha/types": "^1.0.4",
24
21
  "@size-limit/file": "^12.0.0",
25
22
  "@types/uuid": "^10.0.0",
26
23
  "@vitest/coverage-v8": "^4.0.14",