diff --git a/electron/.cache/export-runtime/export-Linux-X64.zip b/electron/.cache/export-runtime/export-Linux-X64.zip new file mode 100644 index 00000000..efe74631 Binary files /dev/null and b/electron/.cache/export-runtime/export-Linux-X64.zip differ diff --git a/electron/.gitignore b/electron/.gitignore index b56f0f3a..bd040a77 100644 --- a/electron/.gitignore +++ b/electron/.gitignore @@ -21,4 +21,6 @@ app_dist resources/fastapi resources/nextjs dist -servers/fastapi/fastembed_cache/ \ No newline at end of file +servers/fastapi/fastembed_cache/ +electron/.cache/ +electron/.cache/export-runtime/ \ No newline at end of file diff --git a/electron/app/ipc/libreoffice_install_handlers.ts b/electron/app/ipc/libreoffice_install_handlers.ts index 0b10baa9..5dba285b 100644 --- a/electron/app/ipc/libreoffice_install_handlers.ts +++ b/electron/app/ipc/libreoffice_install_handlers.ts @@ -211,6 +211,7 @@ async function installWindows(wc: WebContents): Promise { const ps = `$p = Start-Process -FilePath "msiexec" -ArgumentList "/i", '${destEscaped}', "/qn", "/norestart" -Verb RunAs -Wait -PassThru; if ($p) { exit $p.ExitCode } else { exit 1 }`; const child = spawn("powershell", ["-NoProfile", "-ExecutionPolicy", "Bypass", "-Command", ps], { stdio: ["ignore", "pipe", "pipe"], + windowsHide: true, }); child.stdout?.on("data", (d: Buffer) => sendLog(wc, "info", d.toString())); child.stderr?.on("data", (d: Buffer) => sendLog(wc, "warn", d.toString())); diff --git a/electron/app/main.ts b/electron/app/main.ts index 75df3a61..0a526938 100644 --- a/electron/app/main.ts +++ b/electron/app/main.ts @@ -30,6 +30,10 @@ ipcMain.handle("startup:get-status", () => startupStatus); app.commandLine.appendSwitch('gtk-version', '3'); +// Work around Chromium/Electron GPU compositor issues that can cause +// startup white screens on some Linux/driver combinations. +app.disableHardwareAcceleration(); + // Mitigate "Unable to move the cache: Access is denied" on Windows (Chromium disk cache). // Use explicit cache paths and remove stale old_* dirs that cause move failures. if (process.platform === "win32") { diff --git a/electron/app/utils/libreoffice-check.ts b/electron/app/utils/libreoffice-check.ts index f2c4469b..37709513 100644 --- a/electron/app/utils/libreoffice-check.ts +++ b/electron/app/utils/libreoffice-check.ts @@ -275,11 +275,18 @@ export async function isLibreOfficeInstalled(): Promise // --- Step 1: check well-known paths synchronously (no exec overhead) --- for (const candidate of getCandidatePaths()) { if (fs.existsSync(candidate)) { + // On Windows, avoid probing with "--version" because some LibreOffice + // builds open a transient console window for this command. + if (process.platform === "win32") { + return { installed: true, path: candidate }; + } + // Binary found at a known location – try to get the version string. try { const quoted = `"${candidate}"`; const { stdout } = await execAsync(`${quoted} --version`, { timeout: 8_000, + windowsHide: (process.platform as string) === "win32", }); return { installed: true, version: stdout.trim(), path: candidate }; } catch { @@ -290,9 +297,30 @@ export async function isLibreOfficeInstalled(): Promise } // --- Step 2: try the PATH-based command --- + if (process.platform === "win32") { + try { + // Use "where" for PATH detection without launching LibreOffice itself. + const { stdout } = await execAsync("where soffice.exe", { + timeout: 8_000, + windowsHide: true, + }); + const firstPath = stdout + .split(/\r?\n/) + .map((line) => line.trim()) + .find((line) => line.length > 0); + if (firstPath) { + return { installed: true, path: firstPath }; + } + } catch { + // Keep behavior: if PATH lookup fails, report not installed. + } + return { installed: false }; + } + try { const { stdout } = await execAsync("soffice --version", { timeout: 8_000, + windowsHide: (process.platform as string) === "win32", }); // Found via PATH – record the bare command name as the path so callers // can pass it directly to subprocess invocations. @@ -398,4 +426,4 @@ export async function checkLibreOfficeBeforeWindow( // Always proceed – never block the app return true; -} +} \ No newline at end of file diff --git a/electron/app/utils/servers.ts b/electron/app/utils/servers.ts index 077f1fc7..c7e1e34b 100644 --- a/electron/app/utils/servers.ts +++ b/electron/app/utils/servers.ts @@ -40,8 +40,9 @@ export async function startFastApiServer( args, { cwd: directory, - stdio: ["inherit", "pipe", "pipe"], + stdio: ["ignore", "pipe", "pipe"], env: { ...process.env, ...env }, + windowsHide: process.platform === "win32" && !isDev, } ); fastApiProcess.stdout.on("data", (data: any) => { @@ -70,13 +71,12 @@ export async function startNextJsServer( let nextjsProcess; if (isDev) { - // Start NextJS development server nextjsProcess = spawn( "npm", ["run", "dev", "--", "-p", port.toString()], { cwd: directory, - stdio: ["inherit", "pipe", "pipe"], + stdio: ["ignore", "pipe", "pipe"], env: { ...process.env, ...env }, } ); @@ -96,6 +96,13 @@ export async function startNextJsServer( safeNextLog(data); console.error(`NextJS: ${data}`); }); + nextjsProcess.on("error", (err: Error) => { + safeNextLog(`Spawn error: ${err.message}\n`); + console.error(`NextJS spawn error: ${err.message}`); + }); + nextjsProcess.on("exit", (code: number | null, signal: string | null) => { + console.error(`NextJS process exited unexpectedly: code=${code}, signal=${signal}`); + }); } else { // Start NextJS build server nextjsProcess = await startNextjsBuildServer(directory, port); @@ -124,19 +131,25 @@ function startNextjsBuildServer(directory: string, port: number): Promise { +async function waitForServer(url: string, timeout = 120000): Promise { const startTime = Date.now(); while (Date.now() - startTime < timeout) { try { await new Promise((resolve, reject) => { - http.get(url, (res) => { - if (res.statusCode === 200 || res.statusCode === 304) { + const req = http.get(url, (res) => { + res.resume(); + if (res.statusCode && res.statusCode >= 200 && res.statusCode < 500) { resolve(); } else { reject(new Error(`Unexpected status code: ${res.statusCode}`)); } - }).on('error', reject); + }); + req.on('error', reject); + req.setTimeout(5000, () => { + req.destroy(); + reject(new Error('Request timed out')); + }); }); return; } catch (error) { diff --git a/electron/resources/export/index.js b/electron/resources/export/index.js new file mode 100644 index 00000000..47cb0ae2 --- /dev/null +++ b/electron/resources/export/index.js @@ -0,0 +1,1035 @@ +"use strict";var OQr=Object.create;var eae=Object.defineProperty;var UQr=Object.getOwnPropertyDescriptor;var GQr=Object.getOwnPropertyNames;var Lbt=Object.getPrototypeOf,JQr=Object.prototype.hasOwnProperty;var HQr=Reflect.get;var Yje=a=>{throw TypeError(a)};var jQr=(a,r,s)=>r in a?eae(a,r,{enumerable:!0,configurable:!0,writable:!0,value:s}):a[r]=s;var Nn=(a,r)=>()=>(a&&(r=a(a=0)),r);var Gt=(a,r)=>()=>(r||a((r={exports:{}}).exports,r),r.exports),Ck=(a,r)=>{for(var s in r)eae(a,s,{get:r[s],enumerable:!0})},Obt=(a,r,s,c)=>{if(r&&typeof r=="object"||typeof r=="function")for(let f of GQr(r))!JQr.call(a,f)&&f!==s&&eae(a,f,{get:()=>r[f],enumerable:!(c=UQr(r,f))||c.enumerable});return a};var wc=(a,r,s)=>(s=a!=null?OQr(Lbt(a)):{},Obt(r||!a||!a.__esModule?eae(s,"default",{value:a,enumerable:!0}):s,a)),l_=a=>Obt(eae({},"__esModule",{value:!0}),a);var Hr=(a,r,s)=>jQr(a,typeof r!="symbol"?r+"":r,s),Vje=(a,r,s)=>r.has(a)||Yje("Cannot "+s),wh=(a,r)=>Object(r)!==r?Yje('Cannot use the "in" operator on this value'):a.has(r),I=(a,r,s)=>(Vje(a,r,"read from private field"),s?s.call(a):r.get(a)),Ae=(a,r,s)=>r.has(a)?Yje("Cannot add the same private member more than once"):r instanceof WeakSet?r.add(a):r.set(a,s),Be=(a,r,s,c)=>(Vje(a,r,"write to private field"),c?c.call(a,s):r.set(a,s),s),Ke=(a,r,s)=>(Vje(a,r,"access private method"),s);var l3=(a,r,s,c)=>({set _(f){Be(a,r,f,s)},get _(){return I(a,r,c)}}),Ubt=(a,r,s)=>HQr(Lbt(a),s,r);function AN(a,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");$je(a,r);function s(){this.constructor=a}a.prototype=r===null?Object.create(r):(s.prototype=r.prototype,new s)}function KQr(a,r,s,c){function f(p){return p instanceof s?p:new s(function(C){C(p)})}return new(s||(s=Promise))(function(p,C){function b(O){try{L(c.next(O))}catch(j){C(j)}}function N(O){try{L(c.throw(O))}catch(j){C(j)}}function L(O){O.done?p(O.value):f(O.value).then(b,N)}L((c=c.apply(a,r||[])).next())})}function Wbt(a,r){var s={label:0,sent:function(){if(p[0]&1)throw p[1];return p[1]},trys:[],ops:[]},c,f,p,C=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return C.next=b(0),C.throw=b(1),C.return=b(2),typeof Symbol=="function"&&(C[Symbol.iterator]=function(){return this}),C;function b(L){return function(O){return N([L,O])}}function N(L){if(c)throw new TypeError("Generator is already executing.");for(;C&&(C=0,L[0]&&(s=0)),s;)try{if(c=1,f&&(p=L[0]&2?f.return:L[0]?f.throw||((p=f.return)&&p.call(f),0):f.next)&&!(p=p.call(f,L[1])).done)return p;switch(f=0,p&&(L=[L[0]&2,p.value]),L[0]){case 0:case 1:p=L;break;case 4:return s.label++,{value:L[1],done:!1};case 5:s.label++,f=L[1],L=[0];continue;case 7:L=s.ops.pop(),s.trys.pop();continue;default:if(p=s.trys,!(p=p.length>0&&p[p.length-1])&&(L[0]===6||L[0]===2)){s=0;continue}if(L[0]===3&&(!p||L[1]>p[0]&&L[1]=a.length&&(a=void 0),{value:a&&a[c++],done:!a}}};throw new TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.")}function cN(a,r){var s=typeof Symbol=="function"&&a[Symbol.iterator];if(!s)return a;var c=s.call(a),f,p=[],C;try{for(;(r===void 0||r-- >0)&&!(f=c.next()).done;)p.push(f.value)}catch(b){C={error:b}}finally{try{f&&!f.done&&(s=c.return)&&s.call(c)}finally{if(C)throw C.error}}return p}function f3(a,r,s){if(s||arguments.length===2)for(var c=0,f=r.length,p;c1||N(R,H)})},J&&(f[R]=J(f[R])))}function N(R,J){try{L(c[R](J))}catch(H){k(p[0][3],H)}}function L(R){R.value instanceof eq?Promise.resolve(R.value.v).then(O,j):k(p[0][2],R)}function O(R){N("next",R)}function j(R){N("throw",R)}function k(R,J){R(J),p.shift(),p.length&&N(p[0][0],p[0][1])}}function WQr(a){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r=a[Symbol.asyncIterator],s;return r?r.call(a):(a=typeof aN=="function"?aN(a):a[Symbol.iterator](),s={},c("next"),c("throw"),c("return"),s[Symbol.asyncIterator]=function(){return this},s);function c(p){s[p]=a[p]&&function(C){return new Promise(function(b,N){C=a[p](C),f(b,N,C.done,C.value)})}}function f(p,C,b,N){Promise.resolve(N).then(function(L){p({value:L,done:b})},C)}}function Ng(a){return typeof a=="function"}function eKe(a){var r=function(c){Error.call(c),c.stack=new Error().stack},s=a(r);return s.prototype=Object.create(Error.prototype),s.prototype.constructor=s,s}function tae(a,r){if(a){var s=a.indexOf(r);0<=s&&a.splice(s,1)}}function Vbt(a){return a instanceof nae||a&&"closed"in a&&Ng(a.remove)&&Ng(a.add)&&Ng(a.unsubscribe)}function Gbt(a){Ng(a)?a():a.unsubscribe()}function zbt(a){H1e.setTimeout(function(){var r=m5.onUnhandledError;if(r)r(a);else throw a})}function h5(){}function VQr(a){return tKe("E",void 0,a)}function zQr(a){return tKe("N",a,void 0)}function tKe(a,r,s){return{kind:a,value:r,error:s}}function J1e(a){if(m5.useDeprecatedSynchronousErrorHandling){var r=!_5;if(r&&(_5={errorThrown:!1,error:null}),a(),r){var s=_5,c=s.errorThrown,f=s.error;if(_5=null,c)throw f}}else a()}function XQr(a){m5.useDeprecatedSynchronousErrorHandling&&_5&&(_5.errorThrown=!0,_5.error=a)}function Xje(a,r){return ZQr.call(a,r)}function G1e(a){m5.useDeprecatedSynchronousErrorHandling?XQr(a):zbt(a)}function evr(a){throw a}function Zje(a,r){var s=m5.onStoppedNotification;s&&H1e.setTimeout(function(){return s(a,r)})}function Qw(a){return a}function Xbt(){for(var a=[],r=0;r=2;return function(c){return c.pipe(a?pQ(function(f,p){return a(f,p,c)}):Qw,iae(1),s?cKe(r):oae(function(){return new q1e}))}}function yDt(a,r,s){return s===void 0&&(s=1/0),Wm(function(c,f){var p=r;return _Dt(c,f,function(C,b){return a(p,C,b)},s,function(C){p=C},!1,void 0,function(){return p=null})})}function Cp(){for(var a=[],r=0;r{$je=function(a,r){return $je=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(s,c){s.__proto__=c}||function(s,c){for(var f in c)Object.prototype.hasOwnProperty.call(c,f)&&(s[f]=c[f])},$je(a,r)};zje=eKe(function(a){return function(s){a(this),this.message=s?s.length+` errors occurred during unsubscription: +`+s.map(function(c,f){return f+1+") "+c.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=s}});nae=(function(){function a(r){this.initialTeardown=r,this.closed=!1,this._parentage=null,this._finalizers=null}return a.prototype.unsubscribe=function(){var r,s,c,f,p;if(!this.closed){this.closed=!0;var C=this._parentage;if(C)if(this._parentage=null,Array.isArray(C))try{for(var b=aN(C),N=b.next();!N.done;N=b.next()){var L=N.value;L.remove(this)}}catch(H){r={error:H}}finally{try{N&&!N.done&&(s=b.return)&&s.call(b)}finally{if(r)throw r.error}}else C.remove(this);var O=this.initialTeardown;if(Ng(O))try{O()}catch(H){p=H instanceof zje?H.errors:[H]}var j=this._finalizers;if(j){this._finalizers=null;try{for(var k=aN(j),R=k.next();!R.done;R=k.next()){var J=R.value;try{Gbt(J)}catch(H){p=p??[],H instanceof zje?p=f3(f3([],cN(p)),cN(H.errors)):p.push(H)}}}catch(H){c={error:H}}finally{try{R&&!R.done&&(f=k.return)&&f.call(k)}finally{if(c)throw c.error}}}if(p)throw new zje(p)}},a.prototype.add=function(r){var s;if(r&&r!==this)if(this.closed)Gbt(r);else{if(r instanceof a){if(r.closed||r._hasParent(this))return;r._addParent(this)}(this._finalizers=(s=this._finalizers)!==null&&s!==void 0?s:[]).push(r)}},a.prototype._hasParent=function(r){var s=this._parentage;return s===r||Array.isArray(s)&&s.includes(r)},a.prototype._addParent=function(r){var s=this._parentage;this._parentage=Array.isArray(s)?(s.push(r),s):s?[s,r]:r},a.prototype._removeParent=function(r){var s=this._parentage;s===r?this._parentage=null:Array.isArray(s)&&tae(s,r)},a.prototype.remove=function(r){var s=this._finalizers;s&&tae(s,r),r instanceof a&&r._removeParent(this)},a.EMPTY=(function(){var r=new a;return r.closed=!0,r})(),a})(),Ybt=nae.EMPTY;m5={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},H1e={setTimeout:function(a,r){for(var s=[],c=2;c0},enumerable:!1,configurable:!0}),r.prototype._trySubscribe=function(s){return this._throwIfClosed(),a.prototype._trySubscribe.call(this,s)},r.prototype._subscribe=function(s){return this._throwIfClosed(),this._checkFinalizedStatuses(s),this._innerSubscribe(s)},r.prototype._innerSubscribe=function(s){var c=this,f=this,p=f.hasError,C=f.isStopped,b=f.observers;return p||C?Ybt:(this.currentObservers=null,b.push(s),new nae(function(){c.currentObservers=null,tae(b,s)}))},r.prototype._checkFinalizedStatuses=function(s){var c=this,f=c.hasError,p=c.thrownError,C=c.isStopped;f?s.error(p):C&&s.complete()},r.prototype.asObservable=function(){var s=new nm;return s.source=this,s},r.create=function(s,c){return new Hbt(s,c)},r})(nm),Hbt=(function(a){AN(r,a);function r(s,c){var f=a.call(this)||this;return f.destination=s,f.source=c,f}return r.prototype.next=function(s){var c,f;(f=(c=this.destination)===null||c===void 0?void 0:c.next)===null||f===void 0||f.call(c,s)},r.prototype.error=function(s){var c,f;(f=(c=this.destination)===null||c===void 0?void 0:c.error)===null||f===void 0||f.call(c,s)},r.prototype.complete=function(){var s,c;(c=(s=this.destination)===null||s===void 0?void 0:s.complete)===null||c===void 0||c.call(s)},r.prototype._subscribe=function(s){var c,f;return(f=(c=this.source)===null||c===void 0?void 0:c.subscribe(s))!==null&&f!==void 0?f:Ybt},r})($bt),nKe={now:function(){return(nKe.delegate||Date).now()},delegate:void 0},eDt=(function(a){AN(r,a);function r(s,c,f){s===void 0&&(s=1/0),c===void 0&&(c=1/0),f===void 0&&(f=nKe);var p=a.call(this)||this;return p._bufferSize=s,p._windowTime=c,p._timestampProvider=f,p._buffer=[],p._infiniteTimeWindow=!0,p._infiniteTimeWindow=c===1/0,p._bufferSize=Math.max(1,s),p._windowTime=Math.max(1,c),p}return r.prototype.next=function(s){var c=this,f=c.isStopped,p=c._buffer,C=c._infiniteTimeWindow,b=c._timestampProvider,N=c._windowTime;f||(p.push(s),!C&&p.push(b.now()+N)),this._trimBuffer(),a.prototype.next.call(this,s)},r.prototype._subscribe=function(s){this._throwIfClosed(),this._trimBuffer();for(var c=this._innerSubscribe(s),f=this,p=f._infiniteTimeWindow,C=f._buffer,b=C.slice(),N=0;N>>0,1):a.set(r,[]))},emit:function(r,s){var c=a.get(r);c&&c.slice().map(function(f){f(s)}),(c=a.get("*"))&&c.slice().map(function(f){f(r,s)})}}}var vDt=Nn(()=>{});var go,bh,wDt,bDt,g3,Ik,fKe,uKe,Jl,DDt,SDt,d3,PD,gKe,lKe,Y1e,uae,lae,Aae,rVr,tg=Nn(()=>{Symbol.dispose??(Symbol.dispose=Symbol("dispose"));Symbol.asyncDispose??(Symbol.asyncDispose=Symbol("asyncDispose"));go=Symbol.dispose,bh=Symbol.asyncDispose,fKe=class fKe{constructor(){Ae(this,g3,!1);Ae(this,Ik,[]);Hr(this,wDt,"DisposableStack")}get disposed(){return I(this,g3)}dispose(){this[go]()}use(r){return r&&typeof r[go]=="function"&&I(this,Ik).push(r),r}adopt(r,s){return I(this,Ik).push({[go](){s(r)}}),r}defer(r){I(this,Ik).push({[go](){r()}})}move(){if(I(this,g3))throw new ReferenceError("A disposed stack can not use anything new");let r=new fKe;return Be(r,Ik,I(this,Ik)),Be(this,Ik,[]),Be(this,g3,!0),r}[(bDt=go,wDt=Symbol.toStringTag,bDt)](){if(I(this,g3))return;Be(this,g3,!0);let r=[];for(let s of I(this,Ik).reverse())try{s[go]()}catch(c){r.push(c)}if(r.length===1)throw r[0];if(r.length>1){let s=null;for(let c of r)s===null?s=c:s=new Aae(c,s);throw s}}};g3=new WeakMap,Ik=new WeakMap;uKe=fKe,Jl=globalThis.DisposableStack??uKe,gKe=class gKe{constructor(){Ae(this,d3,!1);Ae(this,PD,[]);Hr(this,DDt,"AsyncDisposableStack")}get disposed(){return I(this,d3)}async disposeAsync(){await this[bh]()}use(r){if(r){let s=r[bh],c=r[go];typeof s=="function"?I(this,PD).push(r):typeof c=="function"&&I(this,PD).push({[bh]:async()=>{r[go]()}})}return r}adopt(r,s){return I(this,PD).push({[bh](){return s(r)}}),r}defer(r){I(this,PD).push({[bh](){return r()}})}move(){if(I(this,d3))throw new ReferenceError("A disposed stack can not use anything new");let r=new gKe;return Be(r,PD,I(this,PD)),Be(this,PD,[]),Be(this,d3,!0),r}async[(SDt=bh,DDt=Symbol.toStringTag,SDt)](){if(I(this,d3))return;Be(this,d3,!0);let r=[];for(let s of I(this,PD).reverse())try{await s[bh]()}catch(c){r.push(c)}if(r.length===1)throw r[0];if(r.length>1){let s=null;for(let c of r)s===null?s=c:s=new Aae(c,s);throw s}}};d3=new WeakMap,PD=new WeakMap;lKe=gKe,Y1e=globalThis.AsyncDisposableStack??lKe,Aae=class extends Error{constructor(s,c,f="An error was suppressed during disposal"){super(f);Ae(this,uae);Ae(this,lae);this.name="SuppressedError",Be(this,uae,s),Be(this,lae,c)}get error(){return I(this,uae)}get suppressed(){return I(this,lae)}};uae=new WeakMap,lae=new WeakMap;rVr=globalThis.SuppressedError??Aae});var dN,Ek,ya,Nf=Nn(()=>{vDt();tg();ya=class{constructor(r=QDt(new Map)){Ae(this,dN);Ae(this,Ek,new Map);Be(this,dN,r)}on(r,s){let c=I(this,Ek).get(r);return c===void 0?I(this,Ek).set(r,[s]):c.push(s),I(this,dN).on(r,s),this}off(r,s){let c=I(this,Ek).get(r)??[];if(s===void 0){for(let p of c)I(this,dN).off(r,p);return I(this,Ek).delete(r),this}let f=c.lastIndexOf(s);return f>-1&&I(this,dN).off(r,...c.splice(f,1)),this}emit(r,s){return I(this,dN).emit(r,s),this.listenerCount(r)>0}once(r,s){let c=f=>{s(f),this.off(r,c)};return this.on(r,c)}listenerCount(r){return I(this,Ek).get(r)?.length||0}removeAllListeners(r){return r!==void 0?this.off(r):(this[go](),this)}[go](){for(let[r,s]of I(this,Ek))for(let c of s)I(this,dN).off(r,c);I(this,Ek).clear()}};dN=new WeakMap,Ek=new WeakMap});var fae,Ym,yk=Nn(()=>{fae=!!(typeof process<"u"&&process.version),Ym={value:{get fs(){throw new Error("fs is not available in this environment")},get ScreenRecorder(){throw new Error("ScreenRecorder is not available in this environment")}}}});var Is,Rf=Nn(()=>{Is=(a,r)=>{if(!a)throw new Error(r)}});function ww(a,r=!1){return r?"fromBase64"in Uint8Array?Uint8Array.fromBase64(a):typeof Buffer=="function"?Buffer.from(a,"base64"):Uint8Array.from(atob(a),s=>s.codePointAt(0)):new TextEncoder().encode(a)}function V1e(a){return dKe(new TextEncoder().encode(a))}function dKe(a){let s=[];for(let f=0;f{});var X1e,pKe=Nn(()=>{X1e="24.39.1"});var kDt=Gt((gVr,xDt)=>{var aq=1e3,oq=aq*60,cq=oq*60,E5=cq*24,zvr=E5*7,Xvr=E5*365.25;xDt.exports=function(a,r){r=r||{};var s=typeof a;if(s==="string"&&a.length>0)return Zvr(a);if(s==="number"&&isFinite(a))return r.long?ewr(a):$vr(a);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(a))};function Zvr(a){if(a=String(a),!(a.length>100)){var r=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(a);if(r){var s=parseFloat(r[1]),c=(r[2]||"ms").toLowerCase();switch(c){case"years":case"year":case"yrs":case"yr":case"y":return s*Xvr;case"weeks":case"week":case"w":return s*zvr;case"days":case"day":case"d":return s*E5;case"hours":case"hour":case"hrs":case"hr":case"h":return s*cq;case"minutes":case"minute":case"mins":case"min":case"m":return s*oq;case"seconds":case"second":case"secs":case"sec":case"s":return s*aq;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return s;default:return}}}}function $vr(a){var r=Math.abs(a);return r>=E5?Math.round(a/E5)+"d":r>=cq?Math.round(a/cq)+"h":r>=oq?Math.round(a/oq)+"m":r>=aq?Math.round(a/aq)+"s":a+"ms"}function ewr(a){var r=Math.abs(a);return r>=E5?Z1e(a,r,E5,"day"):r>=cq?Z1e(a,r,cq,"hour"):r>=oq?Z1e(a,r,oq,"minute"):r>=aq?Z1e(a,r,aq,"second"):a+" ms"}function Z1e(a,r,s,c){var f=r>=s*1.5;return Math.round(a/s)+" "+c+(f?"s":"")}});var _Ke=Gt((dVr,TDt)=>{function twr(a){s.debug=s,s.default=s,s.coerce=N,s.disable=C,s.enable=f,s.enabled=b,s.humanize=kDt(),s.destroy=L,Object.keys(a).forEach(O=>{s[O]=a[O]}),s.names=[],s.skips=[],s.formatters={};function r(O){let j=0;for(let k=0;k{if(We==="%%")return"%";be++;let or=s.formatters[st];if(typeof or=="function"){let gt=X[be];We=or.call(ge,gt),X.splice(be,1),be--}return We}),s.formatArgs.call(ge,X),(ge.log||s.log).apply(ge,X)}return H.namespace=O,H.useColors=s.useColors(),H.color=s.selectColor(O),H.extend=c,H.destroy=s.destroy,Object.defineProperty(H,"enabled",{enumerable:!0,configurable:!1,get:()=>k!==null?k:(R!==s.namespaces&&(R=s.namespaces,J=s.enabled(O)),J),set:X=>{k=X}}),typeof s.init=="function"&&s.init(H),H}function c(O,j){let k=s(this.namespace+(typeof j>"u"?":":j)+O);return k.log=this.log,k}function f(O){s.save(O),s.namespaces=O,s.names=[],s.skips=[];let j=(typeof O=="string"?O:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let k of j)k[0]==="-"?s.skips.push(k.slice(1)):s.names.push(k)}function p(O,j){let k=0,R=0,J=-1,H=0;for(;k"-"+j)].join(",");return s.enable(""),O}function b(O){for(let j of s.skips)if(p(O,j))return!1;for(let j of s.names)if(p(O,j))return!0;return!1}function N(O){return O instanceof Error?O.stack||O.message:O}function L(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return s.enable(s.load()),s}TDt.exports=twr});var FDt=Gt((QB,$1e)=>{QB.formatArgs=iwr;QB.save=nwr;QB.load=swr;QB.useColors=rwr;QB.storage=awr();QB.destroy=(()=>{let a=!1;return()=>{a||(a=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();QB.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function rwr(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let a;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(a=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(a[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function iwr(a){if(a[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+a[0]+(this.useColors?"%c ":" ")+"+"+$1e.exports.humanize(this.diff),!this.useColors)return;let r="color: "+this.color;a.splice(1,0,r,"color: inherit");let s=0,c=0;a[0].replace(/%[a-zA-Z%]/g,f=>{f!=="%%"&&(s++,f==="%c"&&(c=s))}),a.splice(c,0,r)}QB.log=console.debug||console.log||(()=>{});function nwr(a){try{a?QB.storage.setItem("debug",a):QB.storage.removeItem("debug")}catch{}}function swr(){let a;try{a=QB.storage.getItem("debug")||QB.storage.getItem("DEBUG")}catch{}return!a&&typeof process<"u"&&"env"in process&&(a=process.env.DEBUG),a}function awr(){try{return localStorage}catch{}}$1e.exports=_Ke()(QB);var{formatters:owr}=$1e.exports;owr.j=function(a){try{return JSON.stringify(a)}catch(r){return"[UnexpectedJSONParseError]: "+r.message}}});var RDt=Gt((jC,tQe)=>{var cwr=require("tty"),eQe=require("util");jC.init=pwr;jC.log=fwr;jC.formatArgs=uwr;jC.save=gwr;jC.load=dwr;jC.useColors=Awr;jC.destroy=eQe.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");jC.colors=[6,2,3,4,5,1];try{let a=require("supports-color");a&&(a.stderr||a).level>=2&&(jC.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}jC.inspectOpts=Object.keys(process.env).filter(a=>/^debug_/i.test(a)).reduce((a,r)=>{let s=r.substring(6).toLowerCase().replace(/_([a-z])/g,(f,p)=>p.toUpperCase()),c=process.env[r];return/^(yes|on|true|enabled)$/i.test(c)?c=!0:/^(no|off|false|disabled)$/i.test(c)?c=!1:c==="null"?c=null:c=Number(c),a[s]=c,a},{});function Awr(){return"colors"in jC.inspectOpts?!!jC.inspectOpts.colors:cwr.isatty(process.stderr.fd)}function uwr(a){let{namespace:r,useColors:s}=this;if(s){let c=this.color,f="\x1B[3"+(c<8?c:"8;5;"+c),p=` ${f};1m${r} \x1B[0m`;a[0]=p+a[0].split(` +`).join(` +`+p),a.push(f+"m+"+tQe.exports.humanize(this.diff)+"\x1B[0m")}else a[0]=lwr()+r+" "+a[0]}function lwr(){return jC.inspectOpts.hideDate?"":new Date().toISOString()+" "}function fwr(...a){return process.stderr.write(eQe.formatWithOptions(jC.inspectOpts,...a)+` +`)}function gwr(a){a?process.env.DEBUG=a:delete process.env.DEBUG}function dwr(){return process.env.DEBUG}function pwr(a){a.inspectOpts={};let r=Object.keys(jC.inspectOpts);for(let s=0;sr.trim()).join(" ")};NDt.O=function(a){return this.inspectOpts.colors=this.useColors,eQe.inspect(a,this.inspectOpts)}});var KC=Gt((pVr,hKe)=>{typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?hKe.exports=FDt():hKe.exports=RDt()});async function _wr(){return mKe||(mKe=(await Promise.resolve().then(()=>wc(KC(),1))).default),mKe}var mKe,Bk,hwr,mwr,Aq=Nn(()=>{yk();mKe=null;Bk=a=>fae?async(...r)=>{mwr&&hwr.push(a+r),(await _wr())(a)(r)}:(...r)=>{let s=globalThis.__PUPPETEER_DEBUG;!s||!(s==="*"||(s.endsWith("*")?a.startsWith(s):a===s))||console.log(`${a}:`,...r)},hwr=[],mwr=!1});var uq,ay,_N,gae,dae,Dh,Uo,Sh,lq,wl=Nn(()=>{uq=class extends Error{constructor(r,s){super(r,s),this.name=this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}},ay=class extends uq{},_N=class extends uq{},Dh=class extends uq{constructor(){super(...arguments);Ae(this,gae);Ae(this,dae,"")}set code(s){Be(this,gae,s)}get code(){return I(this,gae)}set originalMessage(s){Be(this,dae,s)}get originalMessage(){return I(this,dae)}};gae=new WeakMap,dae=new WeakMap;Uo=class extends uq{},Sh=class extends Dh{},lq=class extends Dh{}});var PDt,CKe=Nn(()=>{PDt={letter:{cm:{width:21.59,height:27.94},in:{width:8.5,height:11}},legal:{cm:{width:21.59,height:35.56},in:{width:8.5,height:14}},tabloid:{cm:{width:27.94,height:43.18},in:{width:11,height:17}},ledger:{cm:{width:43.18,height:27.94},in:{width:17,height:11}},a0:{cm:{width:84.1,height:118.9},in:{width:33.1102,height:46.811}},a1:{cm:{width:59.4,height:84.1},in:{width:23.3858,height:33.1102}},a2:{cm:{width:42,height:59.4},in:{width:16.5354,height:23.3858}},a3:{cm:{width:29.7,height:42},in:{width:11.6929,height:16.5354}},a4:{cm:{width:21,height:29.7},in:{width:8.2677,height:11.6929}},a5:{cm:{width:14.8,height:21},in:{width:5.8268,height:8.2677}},a6:{cm:{width:10.5,height:14.8},in:{width:4.1339,height:5.8268}}}});function dq(a,...r){if(MI(a))return Is(r.length===0,"Cannot evaluate a string with arguments"),a;function s(c){return Object.is(c,void 0)?"undefined":JSON.stringify(c)}return`(${a})(${r.map(s).join(",")})`}async function nQe(a,r){let s=[],c=a.getReader();if(r){let f=await Ym.value.fs.promises.open(r,"w+");try{for(;;){let{done:p,value:C}=await c.read();if(p)break;s.push(C),await f.writeFile(C)}}finally{await f.close()}}else for(;;){let{done:f,value:p}=await c.read();if(f)break;s.push(p)}try{let f=z1e(s);return f.length===0?null:f}catch(f){return Ss(f),null}}async function sQe(a,r){return new ReadableStream({async pull(s){let{data:c,base64Encoded:f,eof:p}=await a.send("IO.read",{handle:r});s.enqueue(ww(c,f??!1)),p&&(await a.send("IO.close",{handle:r}),s.close())}})}function UDt(a){let r=null;return Iwr.has(a)&&(r=a),Is(r,`Unknown javascript dialog type: ${a}`),r}function q_(a,r){return a===0?oKe:C5(a).pipe(eg(()=>{throw new ay(`Timed out after waiting ${a}ms`,{cause:r})}))}function aQe(a){return`//# sourceURL=${a}`}function oQe(a={},r="in"){let s={scale:1,displayHeaderFooter:!1,headerTemplate:"",footerTemplate:"",printBackground:!1,landscape:!1,pageRanges:"",preferCSSPageSize:!1,omitBackground:!1,outline:!1,tagged:!0,waitForFonts:!0},c=8.5,f=11;if(a.format){let C=PDt[a.format.toLowerCase()][r];Is(C,"Unknown paper format: "+a.format),c=C.width,f=C.height}else c=fq(a.width,r)??c,f=fq(a.height,r)??f;let p={top:fq(a.margin?.top,r)||0,left:fq(a.margin?.left,r)||0,bottom:fq(a.margin?.bottom,r)||0,right:fq(a.margin?.right,r)||0};return a.outline&&(a.tagged=!0),{...s,...a,width:c,height:f,margin:p}}function fq(a,r="in"){if(typeof a>"u")return;let s;if(Cwr(a))s=a;else if(MI(a)){let c=a,f=c.substring(c.length-2).toLowerCase(),p="";f in IKe?p=c.substring(0,c.length-2):(f="px",p=c);let C=Number(p);Is(!isNaN(C),"Failed to parse parameter value: "+c),s=C*IKe[f]}else throw new Error("page.pdf() Cannot handle parameter type: "+typeof a);return s/IKe[r]}function Hl(a,r){return new nm(s=>{let c=f=>{s.next(f)};return a.on(r,c),()=>{a.off(r,c)}})}function MD(a,r){return a?tq(a,"abort").pipe(eg(()=>{throw a.reason instanceof Error?(a.reason.cause=r,a.reason):new Error(a.reason,{cause:r})})):oKe}function p3(a){return f_(r=>cu(Promise.resolve(a(r))).pipe(pQ(s=>s),eg(()=>r)))}var Ss,gq,rQe,B5,Q5,y5,Vm,Pp,iQe,MI,Cwr,MDt,LDt,ODt,Iwr,EKe,pq,GDt,IKe,GA=Nn(()=>{vw();yk();Rf();pN();pKe();Aq();wl();CKe();Ss=Bk("puppeteer:error"),gq=Object.freeze({width:800,height:600}),rQe=Symbol("Source URL for Puppeteer evaluation scripts"),y5=class y5{constructor(){Ae(this,B5);Ae(this,Q5)}static fromCallSite(r,s){let c=new y5;return Be(c,B5,r),Be(c,Q5,s.toString()),c}get functionName(){return I(this,B5)}get siteString(){return I(this,Q5)}toString(){return`pptr:${[I(this,B5),encodeURIComponent(I(this,Q5))].join(";")}`}};B5=new WeakMap,Q5=new WeakMap,Hr(y5,"INTERNAL_URL","pptr:internal"),Hr(y5,"parse",r=>{r=r.slice(5);let[s="",c=""]=r.split(";"),f=new y5;return Be(f,B5,s),Be(f,Q5,decodeURIComponent(c)),f}),Hr(y5,"isPuppeteerURL",r=>r.startsWith("pptr:"));Vm=y5,Pp=(a,r)=>{if(Object.prototype.hasOwnProperty.call(r,rQe))return r;let s=Error.prepareStackTrace;Error.prepareStackTrace=(f,p)=>p[2];let c=new Error().stack;return Error.prepareStackTrace=s,Object.assign(r,{[rQe]:Vm.fromCallSite(a,c)})},iQe=a=>{if(Object.prototype.hasOwnProperty.call(a,rQe))return a[rQe]},MI=a=>typeof a=="string"||a instanceof String,Cwr=a=>typeof a=="number"||a instanceof Number,MDt=a=>typeof a=="object"&&a?.constructor===Object,LDt=a=>typeof a=="object"&&a?.constructor===RegExp,ODt=a=>typeof a=="object"&&a?.constructor===Date;Iwr=new Set(["alert","confirm","prompt","beforeunload"]);EKe="__puppeteer_utility_world__"+X1e,pq=/^[\x20\t]*\/\/[@#] sourceURL=\s{0,10}(\S*?)\s{0,10}$/m;GDt=500;IKe={px:1,in:96,cm:37.8,mm:3.78}});var pae,_q,hq=Nn(()=>{vw();Nf();GA();tg();pae=new Map([["accelerometer","sensors"],["ambient-light-sensor","sensors"],["background-sync","backgroundSync"],["camera","videoCapture"],["clipboard-read","clipboardReadWrite"],["clipboard-sanitized-write","clipboardSanitizedWrite"],["clipboard-write","clipboardReadWrite"],["geolocation","geolocation"],["gyroscope","sensors"],["idle-detection","idleDetection"],["keyboard-lock","keyboardLock"],["magnetometer","sensors"],["microphone","audioCapture"],["midi","midi"],["notifications","notifications"],["payment-handler","paymentHandler"],["persistent-storage","durableStorage"],["pointer-lock","pointerLock"],["midi-sysex","midiSysex"]]),_q=class extends ya{constructor(){super()}async waitForTarget(r,s={}){let{timeout:c=3e4,signal:f}=s;return await ed(fN(Hl(this,"targetcreated"),Hl(this,"targetchanged"),cu(this.targets())).pipe(p3(r),Cp(MD(f),q_(c))))}async pages(r=!1){return(await Promise.all(this.browserContexts().map(c=>c.pages(r)))).reduce((c,f)=>c.concat(f),[])}async cookies(){return await this.defaultBrowserContext().cookies()}async setCookie(...r){return await this.defaultBrowserContext().setCookie(...r)}async deleteCookie(...r){return await this.defaultBrowserContext().deleteCookie(...r)}async deleteMatchingCookies(...r){return await this.defaultBrowserContext().deleteMatchingCookies(...r)}async setPermission(r,...s){return await this.defaultBrowserContext().setPermission(r,...s)}isConnected(){return this.connected}[go](){return this.process()?void this.close().catch(Ss):void this.disconnect().catch(Ss)}[bh](){return this.process()?this.close():this.disconnect()}}});var _3,h3,v5,_ae,cQe,mq,hae,mae,yKe,Cq,AQe,ZA,qC=Nn(()=>{wl();AQe=class AQe{constructor(r){Ae(this,mae);Ae(this,_3,!1);Ae(this,h3,!1);Ae(this,v5);Ae(this,_ae);Ae(this,cQe,new Promise(r=>{Be(this,_ae,r)}));Ae(this,mq);Ae(this,hae);Ae(this,Cq);r&&r.timeout>0&&(Be(this,hae,new ay(r.message)),Be(this,mq,setTimeout(()=>{this.reject(I(this,hae))},r.timeout)))}static create(r){return new AQe(r)}static async race(r){let s=new Set;try{let c=r.map(f=>f instanceof AQe?(I(f,mq)&&s.add(f),f.valueOrThrow()):f);return await Promise.race(c)}finally{for(let c of s)c.reject(new Error("Timeout cleared"))}}resolve(r){I(this,h3)||I(this,_3)||(Be(this,_3,!0),Ke(this,mae,yKe).call(this,r))}reject(r){I(this,h3)||I(this,_3)||(Be(this,h3,!0),Ke(this,mae,yKe).call(this,r))}resolved(){return I(this,_3)}finished(){return I(this,_3)||I(this,h3)}value(){return I(this,v5)}valueOrThrow(){return I(this,Cq)||Be(this,Cq,(async()=>{if(await I(this,cQe),I(this,h3))throw I(this,v5);return I(this,v5)})()),I(this,Cq)}};_3=new WeakMap,h3=new WeakMap,v5=new WeakMap,_ae=new WeakMap,cQe=new WeakMap,mq=new WeakMap,hae=new WeakMap,mae=new WeakSet,yKe=function(r){clearTimeout(I(this,mq)),Be(this,v5,r),I(this,_ae).call(this)},Cq=new WeakMap;ZA=AQe});var Iae,Eae,JDt,Iq,yae,Cae,m3,Bae=Nn(()=>{qC();tg();Cae=class Cae{constructor(){Ae(this,Iq,!1);Ae(this,yae,[])}async acquire(r){if(!I(this,Iq))return Be(this,Iq,!0),new Cae.Guard(this);let s=ZA.create();return I(this,yae).push(s.resolve.bind(s)),await s.valueOrThrow(),new Cae.Guard(this,r)}release(){let r=I(this,yae).shift();if(!r){Be(this,Iq,!1);return}r()}};Iq=new WeakMap,yae=new WeakMap,Hr(Cae,"Guard",(JDt=class{constructor(s,c){Ae(this,Iae);Ae(this,Eae);Be(this,Iae,s),Be(this,Eae,c)}[go](){var s;return(s=I(this,Eae))==null||s.call(this),I(this,Iae).release()}},Iae=new WeakMap,Eae=new WeakMap,JDt));m3=Cae});var w5,Eq,yq,uQe=Nn(()=>{vw();Nf();GA();tg();Bae();yq=class extends ya{constructor(){super();Ae(this,w5);Ae(this,Eq,0)}startScreenshot(){let s=I(this,w5)||new m3;return Be(this,w5,s),l3(this,Eq)._++,s.acquire(()=>{l3(this,Eq)._--,I(this,Eq)===0&&Be(this,w5,void 0)})}waitForScreenshotOperations(){return I(this,w5)?.acquire()}async waitForTarget(s,c={}){let{timeout:f=3e4}=c;return await ed(fN(Hl(this,"targetcreated"),Hl(this,"targetchanged"),cu(this.targets())).pipe(p3(s),Cp(q_(f))))}async deleteCookie(...s){return await this.setCookie(...s.map(c=>({...c,expires:1})))}async deleteMatchingCookies(...s){let f=(await this.cookies()).filter(p=>s.some(C=>{if(C.name===p.name){if(C.domain!==void 0&&C.domain===p.domain||C.path!==void 0&&C.path===p.path)return!0;if(C.partitionKey!==void 0&&p.partitionKey!==void 0){if(typeof p.partitionKey!="object")throw new Error("Unexpected string partition key");if(typeof C.partitionKey=="string"){if(C.partitionKey===p.partitionKey?.sourceOrigin)return!0}else if(C.partitionKey.sourceOrigin===p.partitionKey?.sourceOrigin)return!0}if(C.url!==void 0){let b=new URL(C.url);if(b.hostname===p.domain&&b.pathname===p.path)return!0}return!0}return!1}));await this.deleteCookie(...f)}get closed(){return!this.browser().browserContexts().includes(this)}get id(){}[go](){return void this.close().catch(Ss)}[bh](){return this.close()}};w5=new WeakMap,Eq=new WeakMap});var bl,Bq,vB=Nn(()=>{Nf();(function(a){a.Disconnected=Symbol("CDPSession.Disconnected"),a.Swapped=Symbol("CDPSession.Swapped"),a.Ready=Symbol("CDPSession.Ready"),a.SessionAttached="sessionattached",a.SessionDetached="sessiondetached"})(bl||(bl={}));Bq=class extends ya{constructor(){super()}parentSession(){}}});var Qq,lQe=Nn(()=>{Qq=class{constructor(){Hr(this,"devices",[])}}});var Qae,vae,wae,vq,fQe=Nn(()=>{Rf();vq=class{constructor(r,s,c=""){Ae(this,Qae);Ae(this,vae);Ae(this,wae);Hr(this,"handled",!1);Be(this,Qae,r),Be(this,vae,s),Be(this,wae,c)}type(){return I(this,Qae)}message(){return I(this,vae)}defaultValue(){return I(this,wae)}async accept(r){Is(!this.handled,"Cannot accept dialog which is already handled!"),this.handled=!0,await this.handle({accept:!0,text:r})}async dismiss(){Is(!this.handled,"Cannot dismiss dialog which is already handled!"),this.handled=!0,await this.handle({accept:!1})}};Qae=new WeakMap,vae=new WeakMap,wae=new WeakMap});var wB,C3=Nn(()=>{wB=class{static async*map(r,s){for await(let c of r)yield await s(c)}static async*flatMap(r,s){for await(let c of r)yield*s(c)}static async collect(r){let s=[];for await(let c of r)s.push(c);return s}static async first(r){for await(let s of r)return s}}});var wq,BKe=Nn(()=>{wq=Symbol("_isElementHandle")});function g_(a){return typeof a=="object"&&a!==null&&"name"in a&&"message"in a}function QKe(a,r,s){return a.message=r,a.originalMessage=s??a.originalMessage,a}function gQe(a){let r=a.error.message;return a.error&&typeof a.error=="object"&&"data"in a.error&&(r+=` ${a.error.data}`),r}var LI=Nn(()=>{});function OI(a){let r=a.toString();if(r.match(/^(async )*function(\(|\s)/)||r.match(/^(async )*function\s*\*\s*/)||r.startsWith("(")||r.match(/^async\s*\(/)||r.match(/^(async)*\s*(?:[$_\p{ID_Start}])(?:[$\u200C\u200D\p{ID_Continue}])*\s*=>/u))return r;let c="function ";return r.startsWith("async ")&&(c=`async ${c}`,r=r.substring(6)),`${c}${r}`}var HDt,Ewr,hN,b5=Nn(()=>{HDt=new Map,Ewr=a=>{let r=HDt.get(a);return r||(r=new Function(`return ${a}`)(),HDt.set(a,r),r)};hN=(a,r)=>{let s=OI(a);for(let[c,f]of Object.entries(r))s=s.replace(new RegExp(`PLACEHOLDER\\(\\s*(?:'${c}'|"${c}")\\s*\\)`,"g"),`(${f})`);return Ewr(s)}});async function*Bwr(a,r){let s={stack:[],error:void 0,hasError:!1};try{let f=await dQe(s,await a.evaluateHandle(async(b,N)=>{let L=[];for(;L.length{for(let b of p){let N={stack:[],error:void 0,hasError:!1};try{dQe(N,b,!1)[go]()}catch(L){N.error=L,N.hasError=!0}finally{vKe(N)}}}),yield*p,f.size===0}catch(c){s.error=c,s.hasError=!0}finally{vKe(s)}}async function*Qwr(a){let r=ywr;for(;!(yield*Bwr(a,r));)r<<=1}async function*pQe(a){let r={stack:[],error:void 0,hasError:!1};try{let s=dQe(r,await a.evaluateHandle(c=>(async function*(){yield*c})()),!1);yield*Qwr(s)}catch(s){r.error=s,r.hasError=!0}finally{vKe(r)}}var dQe,vKe,ywr,_Qe=Nn(()=>{tg();dQe=function(a,r,s){if(r!=null){if(typeof r!="object"&&typeof r!="function")throw new TypeError("Object expected.");var c,f;if(s){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");c=r[Symbol.asyncDispose]}if(c===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");c=r[Symbol.dispose],s&&(f=c)}if(typeof c!="function")throw new TypeError("Object not disposable.");f&&(c=function(){try{f.call(this)}catch(p){return Promise.reject(p)}}),a.stack.push({value:r,dispose:c,async:s})}else s&&a.stack.push({async:!0});return r},vKe=(function(a){return function(r){function s(C){r.error=r.hasError?new a(C,r.error,"An error was suppressed during disposal."):C,r.hasError=!0}var c,f=0;function p(){for(;c=r.stack.pop();)try{if(!c.async&&f===1)return f=0,r.stack.push(c),Promise.resolve().then(p);if(c.dispose){var C=c.dispose.call(c.value);if(c.async)return f|=2,Promise.resolve(C).then(p,function(b){return s(b),p()})}else f|=1}catch(b){s(b)}if(f===1)return r.hasError?Promise.reject(r.error):Promise.resolve();if(r.hasError)throw r.error}return p()}})(typeof SuppressedError=="function"?SuppressedError:function(a,r,s){var c=new Error(s);return c.name="SuppressedError",c.error=a,c.suppressed=r,c}),ywr=20});var bae,hQe,WC,D5=Nn(()=>{hQe=class hQe{constructor(r){Ae(this,bae);Be(this,bae,r)}async get(r){return await I(this,bae).call(this,r)}};bae=new WeakMap,Hr(hQe,"create",r=>new hQe(r));WC=hQe});var mQe,CQe,YC,mN=Nn(()=>{BKe();LI();b5();wl();_Qe();D5();mQe=function(a,r,s){if(r!=null){if(typeof r!="object"&&typeof r!="function")throw new TypeError("Object expected.");var c,f;if(s){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");c=r[Symbol.asyncDispose]}if(c===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");c=r[Symbol.dispose],s&&(f=c)}if(typeof c!="function")throw new TypeError("Object not disposable.");f&&(c=function(){try{f.call(this)}catch(p){return Promise.reject(p)}}),a.stack.push({value:r,dispose:c,async:s})}else s&&a.stack.push({async:!0});return r},CQe=(function(a){return function(r){function s(C){r.error=r.hasError?new a(C,r.error,"An error was suppressed during disposal."):C,r.hasError=!0}var c,f=0;function p(){for(;c=r.stack.pop();)try{if(!c.async&&f===1)return f=0,r.stack.push(c),Promise.resolve().then(p);if(c.dispose){var C=c.dispose.call(c.value);if(c.async)return f|=2,Promise.resolve(C).then(p,function(b){return s(b),p()})}else f|=1}catch(b){s(b)}if(f===1)return r.hasError?Promise.reject(r.error):Promise.resolve();if(r.hasError)throw r.error}return p()}})(typeof SuppressedError=="function"?SuppressedError:function(a,r,s){var c=new Error(s);return c.name="SuppressedError",c.error=a,c.suppressed=r,c}),YC=class{static get _querySelector(){if(this.querySelector)return this.querySelector;if(!this.querySelectorAll)throw new Error("Cannot create default `querySelector`.");return this.querySelector=hN(async(r,s,c)=>{let p=PLACEHOLDER("querySelectorAll")(r,s,c);for await(let C of p)return C;return null},{querySelectorAll:OI(this.querySelectorAll)})}static get _querySelectorAll(){if(this.querySelectorAll)return this.querySelectorAll;if(!this.querySelector)throw new Error("Cannot create default `querySelectorAll`.");return this.querySelectorAll=hN(async function*(r,s,c){let p=await PLACEHOLDER("querySelector")(r,s,c);p&&(yield p)},{querySelector:OI(this.querySelector)})}static async*queryAll(r,s){let c={stack:[],error:void 0,hasError:!1};try{let f=mQe(c,await r.evaluateHandle(this._querySelectorAll,s,WC.create(p=>p.puppeteerUtil)),!1);yield*pQe(f)}catch(f){c.error=f,c.hasError=!0}finally{CQe(c)}}static async queryOne(r,s){let c={stack:[],error:void 0,hasError:!1};try{let f=mQe(c,await r.evaluateHandle(this._querySelector,s,WC.create(p=>p.puppeteerUtil)),!1);return wq in f?f.move():null}catch(f){c.error=f,c.hasError=!0}finally{CQe(c)}}static async waitFor(r,s,c){let f={stack:[],error:void 0,hasError:!1};try{let p,C=mQe(f,await(async()=>{if(!(wq in r)){p=r;return}return p=r.frame,await p.isolatedRealm().adoptHandle(r)})(),!1),{visible:b=!1,hidden:N=!1,timeout:L,signal:O}=c,j=b||N?"raf":c.polling;try{let k={stack:[],error:void 0,hasError:!1};try{O?.throwIfAborted();let R=mQe(k,await p.isolatedRealm().waitForFunction(async(J,H,X,ge,Te)=>{let be=await J.createFunction(H)(ge??document,X,J);return J.checkVisibility(be,Te)},{polling:j,root:C,timeout:L,signal:O},WC.create(J=>J.puppeteerUtil),OI(this._querySelector),s,C,b?!0:N?!1:void 0),!1);if(O?.aborted)throw O.reason;return wq in R?await p.mainRealm().transferHandle(R):null}catch(R){k.error=R,k.hasError=!0}finally{CQe(k)}}catch(k){if(!g_(k)||k.name==="AbortError")throw k;let R=new(k instanceof ay?ay:Error)(`Waiting for selector \`${s}\` failed`);throw R.cause=k,R}}catch(p){f.error=p,f.hasError=!0}finally{CQe(f)}}};Hr(YC,"querySelectorAll"),Hr(YC,"querySelector")});var vwr,wwr,bwr,Dae,Qk,Sae=Nn(()=>{Rf();C3();mN();vwr=a=>["name","role"].includes(a),wwr=/\[\s*(?\w+)\s*=\s*(?"|')(?\\.|.*?(?=\k))\k\s*\]/g,bwr=a=>{if(a.length>1e4)throw new Error(`Selector ${a} is too long`);let r={},s=a.replace(wwr,(c,f,p,C)=>(Is(vwr(f),`Unknown aria attribute "${f}" in selector`),r[f]=C,""));return s&&!r.name&&(r.name=s),r},Dae=class Dae extends YC{static async*queryAll(r,s){let{name:c,role:f}=bwr(s);yield*r.queryAXTree(c,f)}};Hr(Dae,"querySelector",async(r,s,{ariaQuerySelector:c})=>await c(r,s)),Hr(Dae,"queryOne",async(r,s)=>await wB.first(Dae.queryAll(r,s))??null);Qk=Dae});var S5,jDt=Nn(()=>{mN();S5=class extends YC{};Hr(S5,"querySelector",(r,s,{cssQuerySelector:c})=>c(r,s)),Hr(S5,"querySelectorAll",(r,s,{cssQuerySelectorAll:c})=>c(r,s))});var KDt,qDt=Nn(()=>{KDt='"use strict";var g=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var Y=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var r in e)g(t,r,{get:e[r],enumerable:!0})},G=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of B(e))!Y.call(t,s)&&s!==r&&g(t,s,{get:()=>e[s],enumerable:!(o=X(e,s))||o.enumerable});return t};var J=t=>G(g({},"__esModule",{value:!0}),t);var pe={};l(pe,{default:()=>he});module.exports=J(pe);var N=class extends Error{constructor(e,r){super(e,r),this.name=this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}},p=class extends N{};var c=class t{static create(e){return new t(e)}static async race(e){let r=new Set;try{let o=e.map(s=>s instanceof t?(s.#s&&r.add(s),s.valueOrThrow()):s);return await Promise.race(o)}finally{for(let o of r)o.reject(new Error("Timeout cleared"))}}#e=!1;#r=!1;#o;#t;#a=new Promise(e=>{this.#t=e});#s;#i;constructor(e){e&&e.timeout>0&&(this.#i=new p(e.message),this.#s=setTimeout(()=>{this.reject(this.#i)},e.timeout))}#l(e){clearTimeout(this.#s),this.#o=e,this.#t()}resolve(e){this.#r||this.#e||(this.#e=!0,this.#l(e))}reject(e){this.#r||this.#e||(this.#r=!0,this.#l(e))}resolved(){return this.#e}finished(){return this.#e||this.#r}value(){return this.#o}#n;valueOrThrow(){return this.#n||(this.#n=(async()=>{if(await this.#a,this.#r)throw this.#o;return this.#o})()),this.#n}};var L=new Map,W=t=>{let e=L.get(t);return e||(e=new Function(`return ${t}`)(),L.set(t,e),e)};var b={};l(b,{ariaQuerySelector:()=>z,ariaQuerySelectorAll:()=>x});var z=(t,e)=>globalThis.__ariaQuerySelector(t,e),x=async function*(t,e){yield*await globalThis.__ariaQuerySelectorAll(t,e)};var E={};l(E,{cssQuerySelector:()=>K,cssQuerySelectorAll:()=>Z});var K=(t,e)=>t.querySelector(e),Z=function(t,e){return t.querySelectorAll(e)};var A={};l(A,{customQuerySelectors:()=>P});var v=class{#e=new Map;register(e,r){if(!r.queryOne&&r.queryAll){let o=r.queryAll;r.queryOne=(s,i)=>{for(let n of o(s,i))return n;return null}}else if(r.queryOne&&!r.queryAll){let o=r.queryOne;r.queryAll=(s,i)=>{let n=o(s,i);return n?[n]:[]}}else if(!r.queryOne||!r.queryAll)throw new Error("At least one query method must be defined.");this.#e.set(e,{querySelector:r.queryOne,querySelectorAll:r.queryAll})}unregister(e){this.#e.delete(e)}get(e){return this.#e.get(e)}clear(){this.#e.clear()}},P=new v;var R={};l(R,{pierceQuerySelector:()=>ee,pierceQuerySelectorAll:()=>te});var ee=(t,e)=>{let r=null,o=s=>{let i=document.createTreeWalker(s,NodeFilter.SHOW_ELEMENT);do{let n=i.currentNode;n.shadowRoot&&o(n.shadowRoot),!(n instanceof ShadowRoot)&&n!==s&&!r&&n.matches(e)&&(r=n)}while(!r&&i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r},te=(t,e)=>{let r=[],o=s=>{let i=document.createTreeWalker(s,NodeFilter.SHOW_ELEMENT);do{let n=i.currentNode;n.shadowRoot&&o(n.shadowRoot),!(n instanceof ShadowRoot)&&n!==s&&n.matches(e)&&r.push(n)}while(i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r};var u=(t,e)=>{if(!t)throw new Error(e)};var y=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=new MutationObserver(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())}),this.#o.observe(this.#r,{childList:!0,subtree:!0,attributes:!0})}async stop(){u(this.#t,"Polling never started."),this.#t.finished()||this.#t.reject(new Error("Polling stopped")),this.#o&&(this.#o.disconnect(),this.#o=void 0)}result(){return u(this.#t,"Polling never started."),this.#t.valueOrThrow()}},w=class{#e;#r;constructor(e){this.#e=e}async start(){let e=this.#r=c.create(),r=await this.#e();if(r){e.resolve(r);return}let o=async()=>{if(e.finished())return;let s=await this.#e();if(!s){window.requestAnimationFrame(o);return}e.resolve(s),await this.stop()};window.requestAnimationFrame(o)}async stop(){u(this.#r,"Polling never started."),this.#r.finished()||this.#r.reject(new Error("Polling stopped"))}result(){return u(this.#r,"Polling never started."),this.#r.valueOrThrow()}},T=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=setInterval(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())},this.#r)}async stop(){u(this.#t,"Polling never started."),this.#t.finished()||this.#t.reject(new Error("Polling stopped")),this.#o&&(clearInterval(this.#o),this.#o=void 0)}result(){return u(this.#t,"Polling never started."),this.#t.valueOrThrow()}};var _={};l(_,{PCombinator:()=>H,pQuerySelector:()=>fe,pQuerySelectorAll:()=>$});var a=class{static async*map(e,r){for await(let o of e)yield await r(o)}static async*flatMap(e,r){for await(let o of e)yield*r(o)}static async collect(e){let r=[];for await(let o of e)r.push(o);return r}static async first(e){for await(let r of e)return r}};var C={};l(C,{textQuerySelectorAll:()=>m});var re=new Set(["checkbox","image","radio"]),oe=t=>t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLInputElement&&!re.has(t.type),se=new Set(["SCRIPT","STYLE"]),f=t=>!se.has(t.nodeName)&&!document.head?.contains(t),I=new WeakMap,F=t=>{for(;t;)I.delete(t),t instanceof ShadowRoot?t=t.host:t=t.parentNode},j=new WeakSet,ne=new MutationObserver(t=>{for(let e of t)F(e.target)}),d=t=>{let e=I.get(t);if(e||(e={full:"",immediate:[]},!f(t)))return e;let r="";if(oe(t))e.full=t.value,e.immediate.push(t.value),t.addEventListener("input",o=>{F(o.target)},{once:!0,capture:!0});else{for(let o=t.firstChild;o;o=o.nextSibling){if(o.nodeType===Node.TEXT_NODE){e.full+=o.nodeValue??"",r+=o.nodeValue??"";continue}r&&e.immediate.push(r),r="",o.nodeType===Node.ELEMENT_NODE&&(e.full+=d(o).full)}r&&e.immediate.push(r),t instanceof Element&&t.shadowRoot&&(e.full+=d(t.shadowRoot).full),j.has(t)||(ne.observe(t,{childList:!0,characterData:!0,subtree:!0}),j.add(t))}return I.set(t,e),e};var m=function*(t,e){let r=!1;for(let o of t.childNodes)if(o instanceof Element&&f(o)){let s;o.shadowRoot?s=m(o.shadowRoot,e):s=m(o,e);for(let i of s)yield i,r=!0}r||t instanceof Element&&f(t)&&d(t).full.includes(e)&&(yield t)};var k={};l(k,{checkVisibility:()=>le,pierce:()=>S,pierceAll:()=>O});var ie=["hidden","collapse"],le=(t,e)=>{if(!t)return e===!1;if(e===void 0)return t;let r=t.nodeType===Node.TEXT_NODE?t.parentElement:t,o=window.getComputedStyle(r),s=o&&!ie.includes(o.visibility)&&!ae(r);return e===s?t:!1};function ae(t){let e=t.getBoundingClientRect();return e.width===0||e.height===0}var ce=t=>"shadowRoot"in t&&t.shadowRoot instanceof ShadowRoot;function*S(t){ce(t)?yield t.shadowRoot:yield t}function*O(t){t=S(t).next().value,yield t;let e=[document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT)];for(let r of e){let o;for(;o=r.nextNode();)o.shadowRoot&&(yield o.shadowRoot,e.push(document.createTreeWalker(o.shadowRoot,NodeFilter.SHOW_ELEMENT)))}}var D={};l(D,{xpathQuerySelectorAll:()=>q});var q=function*(t,e,r=-1){let s=(t.ownerDocument||document).evaluate(e,t,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE),i=[],n;for(;(n=s.iterateNext())&&(i.push(n),!(r&&i.length===r)););for(let h=0;h(r.Descendent=">>>",r.Child=">>>>",r))(H||{}),V=t=>"querySelectorAll"in t,Q=class{#e;#r=[];#o=void 0;elements;constructor(e,r){this.elements=[e],this.#e=r,this.#t()}async run(){for(typeof this.#o=="string"&&this.#o.trimStart()===":scope"&&this.#t();this.#o!==void 0;this.#t()){let e=this.#o;typeof e=="string"?e[0]&&ue.test(e[0])?this.elements=a.flatMap(this.elements,async function*(r){V(r)&&(yield*r.querySelectorAll(e))}):this.elements=a.flatMap(this.elements,async function*(r){if(!r.parentElement){if(!V(r))return;yield*r.querySelectorAll(e);return}let o=0;for(let s of r.parentElement.children)if(++o,s===r)break;yield*r.parentElement.querySelectorAll(`:scope>:nth-child(${o})${e}`)}):this.elements=a.flatMap(this.elements,async function*(r){switch(e.name){case"text":yield*m(r,e.value);break;case"xpath":yield*q(r,e.value);break;case"aria":yield*x(r,e.value);break;default:let o=P.get(e.name);if(!o)throw new Error(`Unknown selector type: ${e.name}`);yield*o.querySelectorAll(r,e.value)}})}}#t(){if(this.#r.length!==0){this.#o=this.#r.shift();return}if(this.#e.length===0){this.#o=void 0;return}let e=this.#e.shift();switch(e){case">>>>":{this.elements=a.flatMap(this.elements,S),this.#t();break}case">>>":{this.elements=a.flatMap(this.elements,O),this.#t();break}default:this.#r=e,this.#t();break}}},M=class{#e=new WeakMap;calculate(e,r=[]){if(e===null)return r;e instanceof ShadowRoot&&(e=e.host);let o=this.#e.get(e);if(o)return[...o,...r];let s=0;for(let n=e.previousSibling;n;n=n.previousSibling)++s;let i=this.calculate(e.parentNode,[s]);return this.#e.set(e,i),[...i,...r]}},U=(t,e)=>{if(t.length+e.length===0)return 0;let[r=-1,...o]=t,[s=-1,...i]=e;return r===s?U(o,i):r[o,r.calculate(o)]).sort(([,o],[,s])=>U(o,s)).map(([o])=>o)},$=function(t,e){let r=JSON.parse(e);if(r.some(o=>{let s=0;return o.some(i=>(typeof i=="string"?++s:s=0,s>1))}))throw new Error("Multiple deep combinators found in sequence.");return de(a.flatMap(r,o=>{let s=new Q(t,o);return s.run(),s.elements}))},fe=async function(t,e){for await(let r of $(t,e))return r;return null};var me=Object.freeze({...b,...A,...R,..._,...C,...k,...D,...E,Deferred:c,createFunction:W,createTextContent:d,IntervalPoller:T,isSuitableNodeForTextMatching:f,MutationPoller:y,RAFPoller:w}),he=me;\n'});var bq,Dq,x5,bKe,WDt,wKe,I3,xae=Nn(()=>{qDt();wKe=class{constructor(){Ae(this,x5);Ae(this,bq,!1);Ae(this,Dq,new Set)}append(r){Ke(this,x5,bKe).call(this,()=>{I(this,Dq).add(r)})}pop(r){Ke(this,x5,bKe).call(this,()=>{I(this,Dq).delete(r)})}inject(r,s=!1){(I(this,bq)||s)&&r(Ke(this,x5,WDt).call(this)),Be(this,bq,!1)}};bq=new WeakMap,Dq=new WeakMap,x5=new WeakSet,bKe=function(r){r(),Be(this,bq,!0)},WDt=function(){return`(() => { + const module = {}; + ${KDt} + ${[...I(this,Dq)].map(r=>`(${r})(module.exports.default);`).join("")} + return module.exports.default; + })()`};I3=new wKe});var LD,DKe,kae,IQe=Nn(()=>{Rf();b5();mN();xae();DKe=class{constructor(){Ae(this,LD,new Map)}get(r){let s=I(this,LD).get(r);return s?s[1]:void 0}register(r,s){var p;Is(!I(this,LD).has(r),`Cannot register over existing handler: ${r}`),Is(/^[a-zA-Z]+$/.test(r),"Custom query handler names may only contain [a-zA-Z]"),Is(s.queryAll||s.queryOne,"At least one query method must be implemented.");let c=(p=class extends YC{},Hr(p,"querySelectorAll",hN((C,b,N)=>N.customQuerySelectors.get(PLACEHOLDER("name")).querySelectorAll(C,b),{name:JSON.stringify(r)})),Hr(p,"querySelector",hN((C,b,N)=>N.customQuerySelectors.get(PLACEHOLDER("name")).querySelector(C,b),{name:JSON.stringify(r)})),p),f=hN(C=>{C.customQuerySelectors.register(PLACEHOLDER("name"),{queryAll:PLACEHOLDER("queryAll"),queryOne:PLACEHOLDER("queryOne")})},{name:JSON.stringify(r),queryAll:s.queryAll?OI(s.queryAll):String(void 0),queryOne:s.queryOne?OI(s.queryOne):String(void 0)}).toString();I(this,LD).set(r,[f,c]),I3.append(f)}unregister(r){let s=I(this,LD).get(r);if(!s)throw new Error(`Cannot unregister unknown handler: ${r}`);I3.pop(s[0]),I(this,LD).delete(r)}names(){return[...I(this,LD).keys()]}clear(){for(let[r]of I(this,LD))I3.pop(r);I(this,LD).clear()}};LD=new WeakMap;kae=new DKe});var Sq,SKe=Nn(()=>{mN();Sq=class extends YC{};Hr(Sq,"querySelector",(r,s,{pierceQuerySelector:c})=>c(r,s)),Hr(Sq,"querySelectorAll",(r,s,{pierceQuerySelectorAll:c})=>c(r,s))});var xq,xKe=Nn(()=>{mN();xq=class extends YC{};Hr(xq,"querySelectorAll",(r,s,{pQuerySelectorAll:c})=>c(r,s)),Hr(xq,"querySelector",(r,s,{pQuerySelector:c})=>c(r,s))});function xwr(a,r){let s=0,c="";for(;r(s.push({value:p,offset:C}),"\uE000".repeat(p.length))),a=a.replace(Twr,(p,C,b,N)=>(s.push({value:p,offset:N}),`${C}${"\uE001".repeat(b.length)}${C}`));{let p=0,C;for(;(C=a.indexOf("(",p))>-1;){let b=xwr(a,C);s.push({value:b,offset:C}),a=`${a.substring(0,C)}(${"\xB6".repeat(b.length-2)})${a.substring(C+b.length)}`,p=C+b.length}}let c=kwr(a,r),f=new Set;for(let p of s.reverse())for(let C of c){let{offset:b,value:N}=p;if(!(C.pos[0]<=b&&b+N.length<=C.pos[1]))continue;let{content:L}=C,O=b-C.pos[0];C.content=L.slice(0,O)+N+L.slice(O+N.length),C.content!==L&&f.add(C)}for(let p of f){let C=Swr(p.type);if(!C)throw new Error(`Unknown token type: ${p.type}`);C.lastIndex=0;let b=C.exec(p.content);if(!b)throw new Error(`Unable to parse content for ${p.type}: ${p.content}`);Object.assign(p,b.groups)}return c}function OD(a){if(Array.isArray(a))return a.map(r=>r.content).join("");switch(a.type){case"list":return a.list.map(OD).join(",");case"relative":return a.combinator+OD(a.right);case"complex":return OD(a.left)+a.combinator+OD(a.right);case"compound":return a.list.map(OD).join("");default:return a.content}}var k5,Dwr,Swr,Twr,Fwr,VDt=Nn(()=>{k5={attribute:/\[\s*(?:(?\*|[-\w\P{ASCII}]*)\|)?(?[-\w\P{ASCII}]+)\s*(?:(?\W?=)\s*(?.+?)\s*(\s(?[iIsS]))?\s*)?\]/gu,id:/#(?[-\w\P{ASCII}]+)/gu,class:/\.(?[-\w\P{ASCII}]+)/gu,comma:/\s*,\s*/g,combinator:/\s*[\s>+~]\s*/g,"pseudo-element":/::(?[-\w\P{ASCII}]+)(?:\((?¶*)\))?/gu,"pseudo-class":/:(?[-\w\P{ASCII}]+)(?:\((?¶*)\))?/gu,universal:/(?:(?\*|[-\w\P{ASCII}]*)\|)?\*/gu,type:/(?:(?\*|[-\w\P{ASCII}]*)\|)?(?[-\w\P{ASCII}]+)/gu},Dwr=new Set(["combinator","comma"]),Swr=a=>{switch(a){case"pseudo-element":case"pseudo-class":return new RegExp(k5[a].source.replace("(?\xB6*)","(?.*)"),"gu");default:return k5[a]}};Twr=/(['"])([^\\\n]*?)\1/g,Fwr=/\\./g});function zDt(a){let r=!0,s=!1,c=!1,f=YDt(a);if(f.length===0)return[[],r,c,!1];let p=[],C=[p],b=[C],N=[];for(let L of f){switch(L.type){case"combinator":switch(L.content){case">>>":r=!1,N.length&&(p.push(OD(N)),N.splice(0)),p=[],C.push(">>>"),C.push(p);continue;case">>>>":r=!1,N.length&&(p.push(OD(N)),N.splice(0)),p=[],C.push(">>>>"),C.push(p);continue}break;case"pseudo-element":if(!L.name.startsWith("-p-"))break;r=!1,N.length&&(p.push(OD(N)),N.splice(0));let O=L.name.slice(3);O==="aria"&&(s=!0),p.push({name:O,value:Rwr(L.argument??"")});continue;case"pseudo-class":c=!0;break;case"comma":N.length&&(p.push(OD(N)),N.splice(0)),p=[],C=[p],b.push(C);continue}N.push(L)}return N.length&&p.push(OD(N)),[b,r,c,s]}var Nwr,Rwr,kKe=Nn(()=>{VDt();k5.nesting=/&/g;k5.combinator=/\s*(>>>>?|[\s>+~])\s*/g;Nwr=/\\[\s\S]/g,Rwr=a=>a.length<=1?a:((a[0]==='"'||a[0]==="'")&&a.endsWith(a[0])&&(a=a.slice(1,-1)),a.replace(Nwr,r=>r[1]))});var Tae,TKe=Nn(()=>{mN();Tae=class extends YC{};Hr(Tae,"querySelectorAll",(r,s,{textQuerySelectorAll:c})=>c(r,s))});var kq,FKe=Nn(()=>{mN();kq=class extends YC{};Hr(kq,"querySelectorAll",(r,s,{xpathQuerySelectorAll:c})=>c(r,s)),Hr(kq,"querySelector",(r,s,{xpathQuerySelectorAll:c})=>{for(let f of c(r,s,1))return f;return null})});function Tq(a){for(let r of[kae.names().map(s=>[s,kae.get(s)]),Object.entries(Pwr)])for(let[s,c]of r)for(let f of Mwr){let p=`${s}${f}`;if(a.startsWith(p))return a=a.slice(p.length),{updatedSelector:a,polling:s==="aria"?"raf":"mutation",QueryHandler:c}}try{let[r,s,c,f]=zDt(a);return s?{updatedSelector:a,polling:c?"raf":"mutation",QueryHandler:S5}:{updatedSelector:JSON.stringify(r),polling:f?"raf":"mutation",QueryHandler:xq}}catch{return{updatedSelector:a,polling:"mutation",QueryHandler:S5}}}var Pwr,Mwr,EQe=Nn(()=>{Sae();jDt();IQe();SKe();xKe();kKe();TKe();FKe();Pwr={aria:Qk,pierce:Sq,xpath:kq,text:Tae},Mwr=["=","/"]});function ZDt(a,r){let s=!1;if(a.prototype[go]){let c=a.prototype[go];a.prototype[go]=function(){if(Fae.has(this)){Fae.delete(this);return}return c.call(this)},s=!0}if(a.prototype[bh]){let c=a.prototype[bh];a.prototype[bh]=function(){if(Fae.has(this)){Fae.delete(this);return}return c.call(this)},s=!0}return s&&(a.prototype.move=function(){return Fae.add(this),this}),a}function aa(a=r=>`Attempted to use disposed ${r.constructor.name}.`){return(r,s)=>function(...c){if(this.disposed)throw new Error(a(this));return r.call(this,...c)}}function UI(a,r){return function(...s){if(!this.disposed)return a.call(this,...s)}}function bB(a,r){let s=new WeakMap,c=-1;return function(...f){if(c===-1&&(c=f.length),c!==f.length)throw new Error("Memoized method was called with the wrong number of arguments");let p=!1,C=s;for(let b of f)C.has(b)||(p=!0,C.set(b,new WeakMap)),C=C.get(b);if(p)return a.call(this,...f)}}function Nae(a=function(){return this}){return(r,s)=>{let c=new WeakMap;return async function(...f){let p={stack:[],error:void 0,hasError:!1};try{let C=a.call(this),b=c.get(C);b||(b=new m3,c.set(C,b));let N=Lwr(p,await b.acquire(),!0);return await r.call(this,...f)}catch(C){p.error=C,p.hasError=!0}finally{let C=Owr(p);C&&await C}}}}function E3(a){return({set:r,get:s},c)=>(c.addInitializer(function(){return XDt.apply(this,[a])}),{set(f){let p=yQe.get(this).get(a),C=s.call(this);C!==void 0&&C.off("*",p),f!==void 0&&(f.on("*",p),r.call(this,f))},init(f){if(f===void 0)return f;XDt.apply(this,[a]);let p=yQe.get(this).get(a);return f.on("*",p),f}})}var Lwr,Owr,Fae,yQe,XDt,xh=Nn(()=>{tg();Bae();Lwr=function(a,r,s){if(r!=null){if(typeof r!="object"&&typeof r!="function")throw new TypeError("Object expected.");var c,f;if(s){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");c=r[Symbol.asyncDispose]}if(c===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");c=r[Symbol.dispose],s&&(f=c)}if(typeof c!="function")throw new TypeError("Object not disposable.");f&&(c=function(){try{f.call(this)}catch(p){return Promise.reject(p)}}),a.stack.push({value:r,dispose:c,async:s})}else s&&a.stack.push({async:!0});return r},Owr=(function(a){return function(r){function s(C){r.error=r.hasError?new a(C,r.error,"An error was suppressed during disposal."):C,r.hasError=!0}var c,f=0;function p(){for(;c=r.stack.pop();)try{if(!c.async&&f===1)return f=0,r.stack.push(c),Promise.resolve().then(p);if(c.dispose){var C=c.dispose.call(c.value);if(c.async)return f|=2,Promise.resolve(C).then(p,function(b){return s(b),p()})}else f|=1}catch(b){s(b)}if(f===1)return r.hasError?Promise.reject(r.error):Promise.resolve();if(r.hasError)throw r.error}return p()}})(typeof SuppressedError=="function"?SuppressedError:function(a,r,s){var c=new Error(s);return c.name="SuppressedError",c.error=a,c.suppressed=r,c}),Fae=new WeakSet;yQe=new WeakMap,XDt=function(a){let r=yQe.get(this)??new Map;if(r.has(a))return;let s=a!==void 0?(c,f)=>{a.includes(c)&&this.emit(c,f)}:(c,f)=>{this.emit(c,f)};r.set(a,s),yQe.set(this,r)}});var $Dt,NKe,Uwr,Gwr,UD,Fq=Nn(()=>{GA();xh();tg();$Dt=function(a,r,s){for(var c=arguments.length>2,f=0;f=0;R--){var J={};for(var H in c)J[H]=H==="access"?{}:c[H];for(var H in c.access)J.access[H]=c.access[H];J.addInitializer=function(ge){if(k)throw new TypeError("Cannot add initializers after decoration has completed");p.push(C(ge||null))};var X=(0,s[R])(b==="accessor"?{get:O.get,set:O.set}:O[N],J);if(b==="accessor"){if(X===void 0)continue;if(X===null||typeof X!="object")throw new TypeError("Object expected");(j=C(X.get))&&(O.get=j),(j=C(X.set))&&(O.set=j),(j=C(X.init))&&f.unshift(j)}else(j=C(X))&&(b==="field"?f.unshift(j):O[N]=j)}L&&Object.defineProperty(L,c.name,O),k=!0},Uwr=function(a,r,s){if(r!=null){if(typeof r!="object"&&typeof r!="function")throw new TypeError("Object expected.");var c,f;if(s){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");c=r[Symbol.asyncDispose]}if(c===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");c=r[Symbol.dispose],s&&(f=c)}if(typeof c!="function")throw new TypeError("Object not disposable.");f&&(c=function(){try{f.call(this)}catch(p){return Promise.reject(p)}}),a.stack.push({value:r,dispose:c,async:s})}else s&&a.stack.push({async:!0});return r},Gwr=(function(a){return function(r){function s(C){r.error=r.hasError?new a(C,r.error,"An error was suppressed during disposal."):C,r.hasError=!0}var c,f=0;function p(){for(;c=r.stack.pop();)try{if(!c.async&&f===1)return f=0,r.stack.push(c),Promise.resolve().then(p);if(c.dispose){var C=c.dispose.call(c.value);if(c.async)return f|=2,Promise.resolve(C).then(p,function(b){return s(b),p()})}else f|=1}catch(b){s(b)}if(f===1)return r.hasError?Promise.reject(r.error):Promise.resolve();if(r.hasError)throw r.error}return p()}})(typeof SuppressedError=="function"?SuppressedError:function(a,r,s){var c=new Error(s);return c.name="SuppressedError",c.error=a,c.suppressed=r,c}),UD=(()=>{var N;let a=[ZDt],r,s=[],c,f=[],p,C;var b=(N=class{constructor(){$Dt(this,f)}async evaluate(O,...j){return O=Pp(this.evaluate.name,O),await this.realm.evaluate(O,this,...j)}async evaluateHandle(O,...j){return O=Pp(this.evaluateHandle.name,O),await this.realm.evaluateHandle(O,this,...j)}async getProperty(O){return await this.evaluateHandle((j,k)=>j[k],O)}async getProperties(){let O=await this.evaluate(R=>{let J=[],H=Object.getOwnPropertyDescriptors(R);for(let X in H)H[X]?.enumerable&&J.push(X);return J}),j=new Map,k=await Promise.all(O.map(R=>this.getProperty(R)));for(let[R,J]of Object.entries(O)){let H={stack:[],error:void 0,hasError:!1};try{let X=Uwr(H,k[R],!1);X&&j.set(J,X.move())}catch(X){H.error=X,H.hasError=!0}finally{Gwr(H)}}return j}[(p=[aa()],C=[aa()],go)](){return void this.dispose().catch(Ss)}[bh](){return this.dispose()}},c=N,(()=>{let O=typeof Symbol=="function"&&Symbol.metadata?Object.create(null):void 0;NKe(N,null,p,{kind:"method",name:"getProperty",static:!1,private:!1,access:{has:j=>"getProperty"in j,get:j=>j.getProperty},metadata:O},null,f),NKe(N,null,C,{kind:"method",name:"getProperties",static:!1,private:!1,access:{has:j=>"getProperties"in j,get:j=>j.getProperties},metadata:O},null,f),NKe(null,r={value:c},a,{kind:"class",name:c.name,metadata:O},null,s),b=c=r.value,O&&Object.defineProperty(c,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:O}),$Dt(c,s)})(),N);return b=c})()});function jwr(a){for(let r of a)if(!(r instanceof CN))throw new Error("Unknown locator for race candidate");return a}var Jwr,Hwr,Nq,T5,F5,N5,Pae,R5,P5,vk,eSt,tSt,rSt,iSt,CN,Rq,Pq,bQe,Gq,GI,QQe,Mq,PKe,vQe,Lq,MKe,wQe,Oq,y3,DQe,Rae,B3,Uq,SQe,RKe,BQe,Mae=Nn(()=>{vw();Nf();GA();Jwr=function(a,r,s){if(r!=null){if(typeof r!="object"&&typeof r!="function")throw new TypeError("Object expected.");var c,f;if(s){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");c=r[Symbol.asyncDispose]}if(c===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");c=r[Symbol.dispose],s&&(f=c)}if(typeof c!="function")throw new TypeError("Object not disposable.");f&&(c=function(){try{f.call(this)}catch(p){return Promise.reject(p)}}),a.stack.push({value:r,dispose:c,async:s})}else s&&a.stack.push({async:!0});return r},Hwr=(function(a){return function(r){function s(C){r.error=r.hasError?new a(C,r.error,"An error was suppressed during disposal."):C,r.hasError=!0}var c,f=0;function p(){for(;c=r.stack.pop();)try{if(!c.async&&f===1)return f=0,r.stack.push(c),Promise.resolve().then(p);if(c.dispose){var C=c.dispose.call(c.value);if(c.async)return f|=2,Promise.resolve(C).then(p,function(b){return s(b),p()})}else f|=1}catch(b){s(b)}if(f===1)return r.hasError?Promise.reject(r.error):Promise.resolve();if(r.hasError)throw r.error}return p()}})(typeof SuppressedError=="function"?SuppressedError:function(a,r,s){var c=new Error(s);return c.name="SuppressedError",c.error=a,c.suppressed=r,c});(function(a){a.Action="action"})(Nq||(Nq={}));CN=class extends ya{constructor(){super(...arguments);Ae(this,vk);Hr(this,"visibility",null);Hr(this,"_timeout",3e4);Ae(this,T5,!0);Ae(this,F5,!0);Ae(this,N5,!0);Hr(this,"operators",{conditions:(s,c)=>f_(f=>fN(...s.map(p=>p(f,c))).pipe(cKe(f))),retryAndRaceWithSignalAndTimer:(s,c)=>{let f=[];return s&&f.push(MD(s,c)),f.push(q_(this._timeout,c)),Xbt(cae({delay:BQe}),Cp(...f))}});Ae(this,Pae,(s,c)=>I(this,F5)?cu(s.frame.waitForFunction(f=>f instanceof HTMLElement?!["BUTTON","INPUT","SELECT","TEXTAREA","OPTION","OPTGROUP"].includes(f.nodeName)||!f.hasAttribute("disabled"):!0,{timeout:this._timeout,signal:c},s)).pipe(nq()):uN);Ae(this,R5,s=>I(this,N5)?lN(()=>cu(s.evaluate(c=>new Promise(f=>{window.requestAnimationFrame(()=>{let p=c.getBoundingClientRect();window.requestAnimationFrame(()=>{let C=c.getBoundingClientRect();f([{x:p.x,y:p.y,width:p.width,height:p.height},{x:C.x,y:C.y,width:C.width,height:C.height}])})})})))).pipe(gN(([c,f])=>c.x===f.x&&c.y===f.y&&c.width===f.width&&c.height===f.height),cae({delay:BQe}),nq()):uN);Ae(this,P5,s=>I(this,T5)?cu(s.isIntersectingViewport({threshold:0})).pipe(pQ(c=>!c),f_(()=>cu(s.scrollIntoView())),f_(()=>lN(()=>cu(s.isIntersectingViewport({threshold:0}))).pipe(gN(Qw),cae({delay:BQe}),nq()))):uN)}static race(s){return RKe.create(s)}get timeout(){return this._timeout}setTimeout(s){let c=this._clone();return c._timeout=s,c}setVisibility(s){let c=this._clone();return c.visibility=s,c}setWaitForEnabled(s){let c=this._clone();return Be(c,F5,s),c}setEnsureElementIsInTheViewport(s){let c=this._clone();return Be(c,T5,s),c}setWaitForStableBoundingBox(s){let c=this._clone();return Be(c,N5,s),c}copyOptions(s){return this._timeout=s._timeout,this.visibility=s.visibility,Be(this,F5,I(s,F5)),Be(this,T5,I(s,T5)),Be(this,N5,I(s,N5)),this}clone(){return this._clone()}async waitHandle(s){let c=new Error("Locator.waitHandle");return await ed(this._wait(s).pipe(this.operators.retryAndRaceWithSignalAndTimer(s?.signal,c)))}async wait(s){let c={stack:[],error:void 0,hasError:!1};try{return await Jwr(c,await this.waitHandle(s),!1).jsonValue()}catch(f){c.error=f,c.hasError=!0}finally{Hwr(c)}}map(s){return new wQe(this._clone(),c=>c.evaluateHandle(s))}filter(s){return new vQe(this._clone(),async(c,f)=>(await c.frame.waitForFunction(s,{signal:f,timeout:this._timeout},c),!0))}filterHandle(s){return new vQe(this._clone(),s)}mapHandle(s){return new wQe(this._clone(),s)}click(s){return ed(Ke(this,vk,eSt).call(this,s))}fill(s,c){return ed(Ke(this,vk,tSt).call(this,s,c))}hover(s){return ed(Ke(this,vk,rSt).call(this,s))}scroll(s){return ed(Ke(this,vk,iSt).call(this,s))}};T5=new WeakMap,F5=new WeakMap,N5=new WeakMap,Pae=new WeakMap,R5=new WeakMap,P5=new WeakMap,vk=new WeakSet,eSt=function(s){let c=s?.signal,f=new Error("Locator.click");return this._wait(s).pipe(this.operators.conditions([I(this,P5),I(this,R5),I(this,Pae)],c),I5(()=>this.emit(Nq.Action,void 0)),f_(p=>cu(p.click(s)).pipe(iq(C=>{throw p.dispose().catch(Ss),C}))),this.operators.retryAndRaceWithSignalAndTimer(c,f))},tSt=function(s,c){let f=c?.signal,p=c?.typingThreshold??100,C=new Error("Locator.fill");return this._wait(c).pipe(this.operators.conditions([I(this,P5),I(this,R5),I(this,Pae)],f),I5(()=>this.emit(Nq.Action,void 0)),f_(b=>cu(b.evaluate(N=>N instanceof HTMLSelectElement?"select":N instanceof HTMLTextAreaElement?"typeable-input":N instanceof HTMLInputElement?new Set(["textarea","text","url","tel","search","password","number","email"]).has(N.type)?"typeable-input":"other-input":N.isContentEditable?"contenteditable":"unknown")).pipe(f_(N=>{let L=()=>cu(b.focus()).pipe(f_(()=>cu(b.evaluate((O,j)=>{let k=O;(k.isContentEditable?k.innerText:k.value)!==j&&(k.isContentEditable?k.innerText=j:k.value=j,k.dispatchEvent(new Event("input",{bubbles:!0})),k.dispatchEvent(new Event("change",{bubbles:!0})))},s))));switch(N){case"select":return cu(b.select(s).then(h5));case"contenteditable":case"typeable-input":return s.length{let k=O,R=k.isContentEditable?k.innerText:O.value;return j.length<=R.length||!j.startsWith(R)?(k.isContentEditable?k.innerText="":O.value="",j):(k.isContentEditable?(k.innerText="",k.innerText=R):(O.value="",O.value=R),j.substring(R.length))},s)).pipe(f_(O=>O?cu(b.type(O)):sy(void 0))):L();case"other-input":return L();case"unknown":throw new Error("Element cannot be filled out.")}})).pipe(iq(N=>{throw b.dispose().catch(Ss),N}))),this.operators.retryAndRaceWithSignalAndTimer(f,C))},rSt=function(s){let c=s?.signal,f=new Error("Locator.hover");return this._wait(s).pipe(this.operators.conditions([I(this,P5),I(this,R5)],c),I5(()=>this.emit(Nq.Action,void 0)),f_(p=>cu(p.hover()).pipe(iq(C=>{throw p.dispose().catch(Ss),C}))),this.operators.retryAndRaceWithSignalAndTimer(c,f))},iSt=function(s){let c=s?.signal,f=new Error("Locator.scroll");return this._wait(s).pipe(this.operators.conditions([I(this,P5),I(this,R5)],c),I5(()=>this.emit(Nq.Action,void 0)),f_(p=>cu(p.evaluate((C,b,N)=>{b!==void 0&&(C.scrollTop=b),N!==void 0&&(C.scrollLeft=N)},s?.scrollTop,s?.scrollLeft)).pipe(iq(C=>{throw p.dispose().catch(Ss),C}))),this.operators.retryAndRaceWithSignalAndTimer(c,f))};bQe=class bQe extends CN{constructor(s,c){super();Ae(this,Rq);Ae(this,Pq);Be(this,Rq,s),Be(this,Pq,c)}static create(s,c){return new bQe(s,c).setTimeout("getDefaultTimeout"in s?s.getDefaultTimeout():s.page().getDefaultTimeout())}_clone(){return new bQe(I(this,Rq),I(this,Pq))}_wait(s){let c=s?.signal;return lN(()=>cu(I(this,Rq).waitForFunction(I(this,Pq),{timeout:this.timeout,signal:c}))).pipe(oae())}};Rq=new WeakMap,Pq=new WeakMap;Gq=bQe,QQe=class extends CN{constructor(s){super();Ae(this,GI);Be(this,GI,s),this.copyOptions(I(this,GI))}get delegate(){return I(this,GI)}setTimeout(s){let c=super.setTimeout(s);return Be(c,GI,I(this,GI).setTimeout(s)),c}setVisibility(s){let c=super.setVisibility(s);return Be(c,GI,I(c,GI).setVisibility(s)),c}setWaitForEnabled(s){let c=super.setWaitForEnabled(s);return Be(c,GI,I(this,GI).setWaitForEnabled(s)),c}setEnsureElementIsInTheViewport(s){let c=super.setEnsureElementIsInTheViewport(s);return Be(c,GI,I(this,GI).setEnsureElementIsInTheViewport(s)),c}setWaitForStableBoundingBox(s){let c=super.setWaitForStableBoundingBox(s);return Be(c,GI,I(this,GI).setWaitForStableBoundingBox(s)),c}};GI=new WeakMap;PKe=class PKe extends QQe{constructor(s,c){super(s);Ae(this,Mq);Be(this,Mq,c)}_clone(){return new PKe(this.delegate.clone(),I(this,Mq)).copyOptions(this)}_wait(s){return this.delegate._wait(s).pipe(f_(c=>cu(Promise.resolve(I(this,Mq).call(this,c,s?.signal))).pipe(pQ(f=>f),eg(()=>c))),oae())}};Mq=new WeakMap;vQe=PKe,MKe=class MKe extends QQe{constructor(s,c){super(s);Ae(this,Lq);Be(this,Lq,c)}_clone(){return new MKe(this.delegate.clone(),I(this,Lq)).copyOptions(this)}_wait(s){return this.delegate._wait(s).pipe(f_(c=>cu(Promise.resolve(I(this,Lq).call(this,c,s?.signal)))))}};Lq=new WeakMap;wQe=MKe,Rae=class Rae extends CN{constructor(s,c){super();Ae(this,Oq);Ae(this,y3);Ae(this,DQe,s=>this.visibility?(()=>{switch(this.visibility){case"hidden":return lN(()=>cu(s.isHidden()));case"visible":return lN(()=>cu(s.isVisible()))}})().pipe(gN(Qw),cae({delay:BQe}),nq()):uN);Be(this,Oq,s),Be(this,y3,c)}static create(s,c){return new Rae(s,c).setTimeout("getDefaultTimeout"in s?s.getDefaultTimeout():s.page().getDefaultTimeout())}static createFromHandle(s,c){return new Rae(s,c).setTimeout("getDefaultTimeout"in s?s.getDefaultTimeout():s.page().getDefaultTimeout())}_clone(){return new Rae(I(this,Oq),I(this,y3)).copyOptions(this)}_wait(s){let c=s?.signal;return lN(()=>typeof I(this,y3)=="string"?cu(I(this,Oq).waitForSelector(I(this,y3),{visible:!1,timeout:this._timeout,signal:c})):sy(I(this,y3))).pipe(pQ(f=>f!==null),oae(),this.operators.conditions([I(this,DQe)],c))}};Oq=new WeakMap,y3=new WeakMap,DQe=new WeakMap;B3=Rae;SQe=class SQe extends CN{constructor(s){super();Ae(this,Uq);Be(this,Uq,s)}static create(s){let c=jwr(s);return new SQe(c)}_clone(){return new SQe(I(this,Uq).map(s=>s.clone())).copyOptions(this)}_wait(s){return rq(...I(this,Uq).map(c=>c._wait(s)))}};Uq=new WeakMap;RKe=SQe,BQe=100});function Yl(a,r){return async function(...s){if(this.realm===this.frame.isolatedRealm())return await a.call(this,...s);let c;this.isolatedHandle?c=this.isolatedHandle:this.isolatedHandle=c=await this.frame.isolatedRealm().adoptHandle(this);let f=await a.call(c,...s);return f===c?this:f instanceof UD?await this.realm.transferHandle(f):(Array.isArray(f)&&await Promise.all(f.map(async(p,C,b)=>{p instanceof UD&&(b[C]=await this.realm.transferHandle(p))})),f instanceof Map&&await Promise.all([...f.entries()].map(async([p,C])=>{C instanceof UD&&f.set(p,await this.realm.transferHandle(C))})),f)}}function Wwr(a,r,s){a.width=Math.max(a.x>=0?Math.min(r-a.x,a.width):Math.min(r,a.width+a.x),0),a.height=Math.max(a.y>=0?Math.min(s-a.y,a.height):Math.min(s,a.height+a.y),0),a.x=Math.max(a.x,0),a.y=Math.max(a.y,0)}var Kwr,Pf,Lae,Oae,qwr,xQe,kQe=Nn(()=>{EQe();D5();GA();Rf();C3();xh();BKe();Fq();Mae();Kwr=function(a,r,s){for(var c=arguments.length>2,f=0;f=0;R--){var J={};for(var H in c)J[H]=H==="access"?{}:c[H];for(var H in c.access)J.access[H]=c.access[H];J.addInitializer=function(ge){if(k)throw new TypeError("Cannot add initializers after decoration has completed");p.push(C(ge||null))};var X=(0,s[R])(b==="accessor"?{get:O.get,set:O.set}:O[N],J);if(b==="accessor"){if(X===void 0)continue;if(X===null||typeof X!="object")throw new TypeError("Object expected");(j=C(X.get))&&(O.get=j),(j=C(X.set))&&(O.set=j),(j=C(X.init))&&f.unshift(j)}else(j=C(X))&&(b==="field"?f.unshift(j):O[N]=j)}L&&Object.defineProperty(L,c.name,O),k=!0},Lae=function(a,r,s){if(r!=null){if(typeof r!="object"&&typeof r!="function")throw new TypeError("Object expected.");var c,f;if(s){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");c=r[Symbol.asyncDispose]}if(c===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");c=r[Symbol.dispose],s&&(f=c)}if(typeof c!="function")throw new TypeError("Object not disposable.");f&&(c=function(){try{f.call(this)}catch(p){return Promise.reject(p)}}),a.stack.push({value:r,dispose:c,async:s})}else s&&a.stack.push({async:!0});return r},Oae=(function(a){return function(r){function s(C){r.error=r.hasError?new a(C,r.error,"An error was suppressed during disposal."):C,r.hasError=!0}var c,f=0;function p(){for(;c=r.stack.pop();)try{if(!c.async&&f===1)return f=0,r.stack.push(c),Promise.resolve().then(p);if(c.dispose){var C=c.dispose.call(c.value);if(c.async)return f|=2,Promise.resolve(C).then(p,function(b){return s(b),p()})}else f|=1}catch(b){s(b)}if(f===1)return r.hasError?Promise.reject(r.error):Promise.resolve();if(r.hasError)throw r.error}return p()}})(typeof SuppressedError=="function"?SuppressedError:function(a,r,s){var c=new Error(s);return c.name="SuppressedError",c.error=a,c.suppressed=r,c}),qwr=function(a,r,s){return typeof r=="symbol"&&(r=r.description?"[".concat(r.description,"]"):""),Object.defineProperty(a,"name",{configurable:!0,value:s?"".concat(s," ",r):r})};xQe=(()=>{var Yr,LKe,OKe,UKe,nSt,GKe,JKe,sSt,aSt,oSt,Zn;let a=UD,r=[],s,c,f,p,C,b,N,L,O,j,k,R,J,H,X,ge,Te,Ue,be,ut,We,st,or,gt,jt,Et,Nt,Dt,Tt,qr,zr,bt,ji;return Zn=class extends a{constructor(Fi){super();Ae(this,Yr);Hr(this,"isolatedHandle",Kwr(this,r));Hr(this,"handle");this.handle=Fi,this[wq]=!0}get id(){return this.handle.id}get disposed(){return this.handle.disposed}async getProperty(Fi){return await this.handle.getProperty(Fi)}async getProperties(){return await this.handle.getProperties()}async evaluate(Fi,...Qe){return Fi=Pp(this.evaluate.name,Fi),await this.handle.evaluate(Fi,...Qe)}async evaluateHandle(Fi,...Qe){return Fi=Pp(this.evaluateHandle.name,Fi),await this.handle.evaluateHandle(Fi,...Qe)}async jsonValue(){return await this.handle.jsonValue()}toString(){return this.handle.toString()}remoteObject(){return this.handle.remoteObject()}async dispose(){await Promise.all([this.handle.dispose(),this.isolatedHandle?.dispose()])}asElement(){return this}async $(Fi){let{updatedSelector:Qe,QueryHandler:Vr}=Tq(Fi);return await Vr.queryOne(this,Qe)}async $$(Fi,Qe){return Qe?.isolate===!1?await Ke(this,Yr,OKe).call(this,Fi):await I(this,Yr,LKe).call(this,Fi)}async $eval(Fi,Qe,...Vr){let vt={stack:[],error:void 0,hasError:!1};try{Qe=Pp(this.$eval.name,Qe);let ai=Lae(vt,await this.$(Fi),!1);if(!ai)throw new Error(`Error: failed to find element matching selector "${Fi}"`);return await ai.evaluate(Qe,...Vr)}catch(ai){vt.error=ai,vt.hasError=!0}finally{Oae(vt)}}async $$eval(Fi,Qe,...Vr){let vt={stack:[],error:void 0,hasError:!1};try{Qe=Pp(this.$$eval.name,Qe);let ai=await this.$$(Fi),Ci=Lae(vt,await this.evaluateHandle((ei,...ms)=>ms,...ai),!1),[Zr]=await Promise.all([Ci.evaluate(Qe,...Vr),...ai.map(ei=>ei.dispose())]);return Zr}catch(ai){vt.error=ai,vt.hasError=!0}finally{Oae(vt)}}async waitForSelector(Fi,Qe={}){let{updatedSelector:Vr,QueryHandler:vt,polling:ai}=Tq(Fi);return await vt.waitFor(this,Vr,{polling:ai,...Qe})}async isVisible(){return await Ke(this,Yr,UKe).call(this,!0)}async isHidden(){return await Ke(this,Yr,UKe).call(this,!1)}async toElement(Fi){if(!await this.evaluate((Vr,vt)=>Vr.nodeName===vt.toUpperCase(),Fi))throw new Error(`Element is not a(n) \`${Fi}\` element`);return this}async clickablePoint(Fi){let Qe=await Ke(this,Yr,nSt).call(this);if(!Qe)throw new Error("Node is either not clickable or not an Element");return Fi!==void 0?{x:Qe.x+Fi.x,y:Qe.y+Fi.y}:{x:Qe.x+Qe.width/2,y:Qe.y+Qe.height/2}}async hover(){await this.scrollIntoViewIfNeeded();let{x:Fi,y:Qe}=await this.clickablePoint();await this.frame.page().mouse.move(Fi,Qe)}async click(Fi={}){await this.scrollIntoViewIfNeeded();let{x:Qe,y:Vr}=await this.clickablePoint(Fi.offset);try{await this.frame.page().mouse.click(Qe,Vr,Fi)}finally{Fi.debugHighlight&&await this.frame.page().evaluate((vt,ai)=>{let Ci=document.createElement("div");Ci.innerHTML=``,Ci.addEventListener("animationend",()=>{Ci.remove()},{once:!0}),document.body.append(Ci)},Qe,Vr)}}async drag(Fi){await this.scrollIntoViewIfNeeded();let Qe=this.frame.page();if(Qe.isDragInterceptionEnabled()){let Vr=await this.clickablePoint();return Fi instanceof Zn&&(Fi=await Fi.clickablePoint()),await Qe.mouse.drag(Vr,Fi)}try{Qe._isDragging||(Qe._isDragging=!0,await this.hover(),await Qe.mouse.down()),Fi instanceof Zn?await Fi.hover():await Qe.mouse.move(Fi.x,Fi.y)}catch(Vr){throw Qe._isDragging=!1,Vr}}async dragEnter(Fi={items:[],dragOperationsMask:1}){let Qe=this.frame.page();await this.scrollIntoViewIfNeeded();let Vr=await this.clickablePoint();await Qe.mouse.dragEnter(Vr,Fi)}async dragOver(Fi={items:[],dragOperationsMask:1}){let Qe=this.frame.page();await this.scrollIntoViewIfNeeded();let Vr=await this.clickablePoint();await Qe.mouse.dragOver(Vr,Fi)}async drop(Fi={items:[],dragOperationsMask:1}){let Qe=this.frame.page();if("items"in Fi){await this.scrollIntoViewIfNeeded();let Vr=await this.clickablePoint();await Qe.mouse.drop(Vr,Fi)}else await Fi.drag(this),Qe._isDragging=!1,await Qe.mouse.up()}async dragAndDrop(Fi,Qe){let Vr=this.frame.page();Is(Vr.isDragInterceptionEnabled(),"Drag Interception is not enabled!"),await this.scrollIntoViewIfNeeded();let vt=await this.clickablePoint(),ai=await Fi.clickablePoint();await Vr.mouse.dragAndDrop(vt,ai,Qe)}async select(...Fi){for(let Qe of Fi)Is(MI(Qe),'Values must be strings. Found value "'+Qe+'" of type "'+typeof Qe+'"');return await this.evaluate((Qe,Vr)=>{let vt=new Set(Vr);if(!(Qe instanceof HTMLSelectElement))throw new Error("Element is not a ");let J=Ym.value.path;if(J&&(k=k.map(X=>J.win32.isAbsolute(X)||J.posix.isAbsolute(X)?X:J.resolve(X))),k.length===0){await this.evaluate(X=>{X.files=new DataTransfer().files,X.dispatchEvent(new Event("input",{bubbles:!0,composed:!0})),X.dispatchEvent(new Event("change",{bubbles:!0}))});return}let{node:{backendNodeId:H}}=await this.client.send("DOM.describeNode",{objectId:this.id});await this.client.send("DOM.setFileInputFiles",{objectId:this.id,files:k,backendNodeId:H})}async autofill(k){let J=(await this.client.send("DOM.describeNode",{objectId:this.handle.id})).node.backendNodeId,H=this.frame._id;await this.client.send("Autofill.trigger",{fieldId:J,frameId:H,card:k.creditCard})}async*queryAXTree(k,R){let{nodes:J}=await this.client.send("Accessibility.queryAXTree",{objectId:this.id,accessibleName:k,role:R}),H=J.filter(X=>!(X.ignored||!X.role||abr.has(X.role.value)));return yield*wB.map(H,X=>this.realm.adoptBackendNode(X.backendDOMNodeId))}async backendNodeId(){if(I(this,C))return I(this,C);let{node:k}=await this.client.send("DOM.describeNode",{objectId:this.handle.id});return Be(this,C,k.backendNodeId),I(this,C)}},C=new WeakMap,b=new WeakSet,wSt=function(){return this.frame._frameManager},(()=>{let k=typeof Symbol=="function"&&Symbol.metadata?Object.create(a[Symbol.metadata]??null):void 0;s=[aa()],c=[aa(),Yl],f=[aa(),Yl],p=[aa()],eve(L,null,s,{kind:"method",name:"contentFrame",static:!1,private:!1,access:{has:R=>"contentFrame"in R,get:R=>R.contentFrame},metadata:k},null,r),eve(L,null,c,{kind:"method",name:"scrollIntoView",static:!1,private:!1,access:{has:R=>"scrollIntoView"in R,get:R=>R.scrollIntoView},metadata:k},null,r),eve(L,null,f,{kind:"method",name:"uploadFile",static:!1,private:!1,access:{has:R=>"uploadFile"in R,get:R=>R.uploadFile},metadata:k},null,r),eve(L,null,p,{kind:"method",name:"autofill",static:!1,private:!1,access:{has:R=>"autofill"in R,get:R=>R.autofill},metadata:k},null,r),k&&Object.defineProperty(L,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:k})})(),L})();var obr=function(a,r,s){if(r!=null){if(typeof r!="object"&&typeof r!="function")throw new TypeError("Object expected.");var c,f;if(s){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");c=r[Symbol.asyncDispose]}if(c===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");c=r[Symbol.dispose],s&&(f=c)}if(typeof c!="function")throw new TypeError("Object not disposable.");f&&(c=function(){try{f.call(this)}catch(p){return Promise.reject(p)}}),a.stack.push({value:r,dispose:c,async:s})}else s&&a.stack.push({async:!0});return r},cbr=(function(a){return function(r){function s(C){r.error=r.hasError?new a(C,r.error,"An error was suppressed during disposal."):C,r.hasError=!0}var c,f=0;function p(){for(;c=r.stack.pop();)try{if(!c.async&&f===1)return f=0,r.stack.push(c),Promise.resolve().then(p);if(c.dispose){var C=c.dispose.call(c.value);if(c.async)return f|=2,Promise.resolve(C).then(p,function(b){return s(b),p()})}else f|=1}catch(b){s(b)}if(f===1)return r.hasError?Promise.reject(r.error):Promise.resolve();if(r.hasError)throw r.error}return p()}})(typeof SuppressedError=="function"?SuppressedError:function(a,r,s){var c=new Error(s);return c.name="SuppressedError",c.error=a,c.suppressed=r,c}),Abr=new k3("__ariaQuerySelector",Qk.queryOne,""),ubr=new k3("__ariaQuerySelectorAll",(async(a,r)=>{let s=Qk.queryAll(a,r);return await a.realm.evaluateHandle((...c)=>c,...await wB.collect(s))}),""),M3,a7,jD,xW,koe,o7,rve,xB,DSt,SSt,xSt,Toe,L3,pqe,_qe,kW=class extends ya{constructor(s,c,f){super();Ae(this,xB);Ae(this,M3);Ae(this,a7);Ae(this,jD);Ae(this,xW);Ae(this,koe,new Jl);Ae(this,o7,new Map);Ae(this,rve,new m3);Ae(this,Toe,!1);Ae(this,L3);Be(this,M3,s),Be(this,a7,f),Be(this,jD,c.id),c.name&&Be(this,xW,c.name);let p=I(this,koe).use(new ya(I(this,M3)));p.on("Runtime.bindingCalled",Ke(this,xB,SSt).bind(this)),p.on("Runtime.executionContextDestroyed",async C=>{C.executionContextId===I(this,jD)&&this[go]()}),p.on("Runtime.executionContextsCleared",async()=>{this[go]()}),p.on("Runtime.consoleAPICalled",Ke(this,xB,xSt).bind(this)),p.on(bl.Disconnected,()=>{this[go]()})}get id(){return I(this,jD)}get puppeteerUtil(){let s=Promise.resolve();return I(this,Toe)||(s=Promise.all([Ke(this,xB,pqe).call(this,Abr),Ke(this,xB,pqe).call(this,ubr)]),Be(this,Toe,!0)),I3.inject(c=>{I(this,L3)&&I(this,L3).then(f=>{f.dispose()}),Be(this,L3,s.then(()=>this.evaluateHandle(c)))},!I(this,L3)),I(this,L3)}async evaluate(s,...c){return await Ke(this,xB,_qe).call(this,!0,s,...c)}async evaluateHandle(s,...c){return await Ke(this,xB,_qe).call(this,!1,s,...c)}[go](){I(this,koe).dispose(),this.emit("disposed",void 0)}};M3=new WeakMap,a7=new WeakMap,jD=new WeakMap,xW=new WeakMap,koe=new WeakMap,o7=new WeakMap,rve=new WeakMap,xB=new WeakSet,DSt=async function(s){let c={stack:[],error:void 0,hasError:!1};try{if(I(this,o7).has(s.name))return;let f=obr(c,await I(this,rve).acquire(),!1);try{await I(this,M3).send("Runtime.addBinding",I(this,xW)?{name:R3+s.name,executionContextName:I(this,xW)}:{name:R3+s.name,executionContextId:I(this,jD)}),await this.evaluate(gqe,"internal",s.name,R3),I(this,o7).set(s.name,s)}catch(p){if(p instanceof Error&&(p.message.includes("Execution context was destroyed")||p.message.includes("Cannot find context with specified id")))return;Ss(p)}}catch(f){c.error=f,c.hasError=!0}finally{cbr(c)}},SSt=async function(s){if(s.executionContextId!==I(this,jD))return;let c;try{c=JSON.parse(s.payload)}catch{return}let{type:f,name:p,seq:C,args:b,isTrivial:N}=c;if(f!=="internal"){this.emit("bindingcalled",s);return}if(!I(this,o7).has(p)){this.emit("bindingcalled",s);return}try{await I(this,o7).get(p)?.run(this,C,b,N)}catch(L){Ss(L)}},xSt=function(s){s.executionContextId===I(this,jD)&&this.emit("consoleapicalled",s)},Toe=new WeakMap,L3=new WeakMap,pqe=async function(s){try{await Ke(this,xB,DSt).call(this,s)}catch(c){Ss(c)}},_qe=async function(s,c,...f){let p=aQe(iQe(c)?.toString()??Vm.INTERNAL_URL);if(MI(c)){let R=I(this,jD),J=c,H=pq.test(J)?J:`${J} +${p} +`,{exceptionDetails:X,result:ge}=await I(this,M3).send("Runtime.evaluate",{expression:H,contextId:R,returnByValue:s,awaitPromise:!0,userGesture:!0}).catch(bSt);if(X)throw fqe(X);return s?DN(ge):I(this,a7).createCdpHandle(ge)}let C=OI(c),b=pq.test(C)?C:`${C} +${p} +`,N;try{N=I(this,M3).send("Runtime.callFunctionOn",{functionDeclaration:b,executionContextId:I(this,jD),arguments:f.some(R=>R instanceof WC)?await Promise.all(f.map(R=>j(this,R))):f.map(R=>k(this,R)),returnByValue:s,awaitPromise:!0,userGesture:!0})}catch(R){throw R instanceof TypeError&&R.message.startsWith("Converting circular structure to JSON")&&(R.message+=" Recursive objects are not allowed."),R}let{exceptionDetails:L,result:O}=await N.catch(bSt);if(L)throw fqe(L);if(s)return DN(O);return I(this,a7).createCdpHandle(O);async function j(R,J){return J instanceof WC&&(J=await J.get(R)),k(R,J)}function k(R,J){if(typeof J=="bigint")return{unserializableValue:`${J.toString()}n`};if(Object.is(J,-0))return{unserializableValue:"-0"};if(Object.is(J,1/0))return{unserializableValue:"Infinity"};if(Object.is(J,-1/0))return{unserializableValue:"-Infinity"};if(Object.is(J,NaN))return{unserializableValue:"NaN"};let H=J&&(J instanceof P3||J instanceof tve)?J:null;if(H){if(H.realm!==I(R,a7))throw new Error("JSHandles can be evaluated only in the context they were created!");if(H.disposed)throw new Error("JSHandle is disposed!");return H.remoteObject().unserializableValue?{unserializableValue:H.remoteObject().unserializableValue}:H.remoteObject().objectId?{objectId:H.remoteObject().objectId}:{value:H.remoteObject().value}}return{value:J}}};var bSt=a=>{if(a.message.includes("Object reference chain is too long"))return{result:{type:"undefined"}};if(a.message.includes("Object couldn't be returned by value"))return{result:{type:"undefined"}};throw a.message.endsWith("Cannot find context with specified id")||a.message.endsWith("Inspected target navigated or closed")?new Error("Execution context was destroyed, most likely because of a navigation."):a};Jq();wl();GA();qC();tg();LI();HQe();var W_;(function(a){a.FrameAttached=Symbol("FrameManager.FrameAttached"),a.FrameNavigated=Symbol("FrameManager.FrameNavigated"),a.FrameDetached=Symbol("FrameManager.FrameDetached"),a.FrameSwapped=Symbol("FrameManager.FrameSwapped"),a.LifecycleEvent=Symbol("FrameManager.LifecycleEvent"),a.FrameNavigatedWithinDocument=Symbol("FrameManager.FrameNavigatedWithinDocument"),a.ConsoleApiCalled=Symbol("FrameManager.ConsoleApiCalled"),a.BindingCalled=Symbol("FrameManager.BindingCalled")})(W_||(W_={}));vw();GQe();Nf();GA();tg();var xk,KD,O3,JI,kSt,TSt,FSt,ive,nve,c7=class extends zq{constructor(s,c){super(c);Ae(this,JI);Ae(this,xk);Ae(this,KD,new ya);Ae(this,O3);Be(this,O3,s)}get environment(){return I(this,O3)}get client(){return I(this,O3).client}get emitter(){return I(this,KD)}setContext(s){I(this,xk)?.[go](),s.once("disposed",Ke(this,JI,kSt).bind(this)),s.on("consoleapicalled",Ke(this,JI,TSt).bind(this)),s.on("bindingcalled",Ke(this,JI,FSt).bind(this)),Be(this,xk,s),I(this,KD).emit("context",s),this.taskManager.rerunAll()}hasContext(){return!!I(this,xk)}get context(){return I(this,xk)}async evaluateHandle(s,...c){s=Pp(this.evaluateHandle.name,s);let f=Ke(this,JI,ive).call(this);return f||(f=await Ke(this,JI,nve).call(this)),await f.evaluateHandle(s,...c)}async evaluate(s,...c){s=Pp(this.evaluate.name,s);let f=Ke(this,JI,ive).call(this);return f||(f=await Ke(this,JI,nve).call(this)),await f.evaluate(s,...c)}async adoptBackendNode(s){let c=Ke(this,JI,ive).call(this);c||(c=await Ke(this,JI,nve).call(this));let{object:f}=await this.client.send("DOM.resolveNode",{backendNodeId:s,executionContextId:c.id});return this.createCdpHandle(f)}async adoptHandle(s){if(s.realm===this)return await s.evaluateHandle(f=>f);let c=await this.client.send("DOM.describeNode",{objectId:s.id});return await this.adoptBackendNode(c.node.backendNodeId)}async transferHandle(s){if(s.realm===this||s.remoteObject().objectId===void 0)return s;let c=await this.client.send("DOM.describeNode",{objectId:s.remoteObject().objectId}),f=await this.adoptBackendNode(c.node.backendNodeId);return await s.dispose(),f}createCdpHandle(s){return s.subtype==="node"?new tve(this,s):new P3(this,s)}[go](){I(this,xk)?.[go](),I(this,KD).emit("disposed",void 0),super[go](),I(this,KD).removeAllListeners()}};xk=new WeakMap,KD=new WeakMap,O3=new WeakMap,JI=new WeakSet,kSt=function(){Be(this,xk,void 0),"clearDocumentHandle"in I(this,O3)&&I(this,O3).clearDocumentHandle()},TSt=function(s){I(this,KD).emit("consoleapicalled",s)},FSt=function(s){I(this,KD).emit("bindingcalled",s)},ive=function(){if(this.disposed)throw new Error(`Execution context is not available in detached frame or worker "${this.environment.url()}" (are you trying to evaluate?)`);return I(this,xk)},nve=async function(){let s=new Error("Execution context was destroyed");return await ed(Hl(I(this,KD),"context").pipe(Cp(Hl(I(this,KD),"disposed").pipe(eg(()=>{throw s})),q_(this.timeoutSettings.timeout()))))};var EQ=Symbol("mainWorld"),TW=Symbol("puppeteerWorld");Jq();Nf();Rf();qC();tg();var lbr=new Map([["load","load"],["domcontentloaded","DOMContentLoaded"],["networkidle0","networkIdle"],["networkidle2","networkAlmostIdle"]]),Foe,U3,FW,G3,u7,Noe,J3,Roe,Poe,Moe,H3,Loe,Ooe,SN,Ip,NSt,RSt,PSt,MSt,LSt,OSt,sve,A7,NW=class{constructor(r,s,c,f,p){Ae(this,Ip);Ae(this,Foe);Ae(this,U3);Ae(this,FW);Ae(this,G3,null);Ae(this,u7,new Jl);Ae(this,Noe);Ae(this,J3);Ae(this,Roe,ZA.create());Ae(this,Poe,ZA.create());Ae(this,Moe,ZA.create());Ae(this,H3,new Error("LifecycleWatcher terminated"));Ae(this,Loe);Ae(this,Ooe);Ae(this,SN);Array.isArray(c)?c=c.slice():typeof c=="string"&&(c=[c]),Be(this,Noe,s._loaderId),Be(this,Foe,c.map(L=>{let O=lbr.get(L);return Is(O,"Unknown value for options.waitUntil: "+L),O})),p?.addEventListener("abort",()=>{p.reason instanceof Error&&(p.reason.cause=I(this,H3)),I(this,J3).reject(p.reason)}),Be(this,U3,s),Be(this,FW,f),I(this,u7).use(new ya(s._frameManager)).on(W_.LifecycleEvent,Ke(this,Ip,A7).bind(this));let b=I(this,u7).use(new ya(s));b.on(om.FrameNavigatedWithinDocument,Ke(this,Ip,LSt).bind(this)),b.on(om.FrameNavigated,Ke(this,Ip,OSt).bind(this)),b.on(om.FrameSwapped,Ke(this,Ip,sve).bind(this)),b.on(om.FrameSwappedByActivation,Ke(this,Ip,sve).bind(this)),b.on(om.FrameDetached,Ke(this,Ip,MSt).bind(this));let N=I(this,u7).use(new ya(r));N.on(kh.Request,Ke(this,Ip,NSt).bind(this)),N.on(kh.Response,Ke(this,Ip,PSt).bind(this)),N.on(kh.RequestFailed,Ke(this,Ip,RSt).bind(this)),Be(this,J3,ZA.create({timeout:I(this,FW),message:`Navigation timeout of ${I(this,FW)} ms exceeded`})),Ke(this,Ip,A7).call(this)}async navigationResponse(){return await I(this,SN)?.valueOrThrow(),I(this,G3)?I(this,G3).response():null}sameDocumentNavigationPromise(){return I(this,Roe).valueOrThrow()}newDocumentNavigationPromise(){return I(this,Moe).valueOrThrow()}lifecyclePromise(){return I(this,Poe).valueOrThrow()}terminationPromise(){return I(this,J3).valueOrThrow()}dispose(){I(this,u7).dispose(),I(this,H3).cause=new Error("LifecycleWatcher disposed"),I(this,J3).resolve(I(this,H3))}};Foe=new WeakMap,U3=new WeakMap,FW=new WeakMap,G3=new WeakMap,u7=new WeakMap,Noe=new WeakMap,J3=new WeakMap,Roe=new WeakMap,Poe=new WeakMap,Moe=new WeakMap,H3=new WeakMap,Loe=new WeakMap,Ooe=new WeakMap,SN=new WeakMap,Ip=new WeakSet,NSt=function(r){r.frame()!==I(this,U3)||!r.isNavigationRequest()||(Be(this,G3,r),I(this,SN)?.resolve(),Be(this,SN,ZA.create()),r.response()!==null&&I(this,SN)?.resolve())},RSt=function(r){I(this,G3)?.id===r.id&&I(this,SN)?.resolve()},PSt=function(r){I(this,G3)?.id===r.request().id&&I(this,SN)?.resolve()},MSt=function(r){if(I(this,U3)===r){I(this,H3).message="Navigating frame was detached",I(this,J3).resolve(I(this,H3));return}Ke(this,Ip,A7).call(this)},LSt=function(){Be(this,Loe,!0),Ke(this,Ip,A7).call(this)},OSt=function(r){if(r==="BackForwardCacheRestore")return Ke(this,Ip,sve).call(this);Ke(this,Ip,A7).call(this)},sve=function(){Be(this,Ooe,!0),Ke(this,Ip,A7).call(this)},A7=function(){if(!r(I(this,U3),I(this,Foe)))return;I(this,Poe).resolve(),I(this,Loe)&&I(this,Roe).resolve(void 0),(I(this,Ooe)||I(this,U3)._loaderId!==I(this,Noe))&&I(this,Moe).resolve(void 0);function r(s,c){for(let f of c)if(!s._lifecycleEvents.has(f))return!1;for(let f of s.childFrames())if(f._hasStartedLoading&&!r(f,c))return!1;return!0}};var fbr=function(a,r,s){for(var c=arguments.length>2,f=0;f=0;R--){var J={};for(var H in c)J[H]=H==="access"?{}:c[H];for(var H in c.access)J.access[H]=c.access[H];J.addInitializer=function(ge){if(k)throw new TypeError("Cannot add initializers after decoration has completed");p.push(C(ge||null))};var X=(0,s[R])(b==="accessor"?{get:O.get,set:O.set}:O[N],J);if(b==="accessor"){if(X===void 0)continue;if(X===null||typeof X!="object")throw new TypeError("Object expected");(j=C(X.get))&&(O.get=j),(j=C(X.set))&&(O.set=j),(j=C(X.init))&&f.unshift(j)}else(j=C(X))&&(b==="field"?f.unshift(j):O[N]=j)}L&&Object.defineProperty(L,c.name,O),k=!0},hqe=(()=>{var L,O,j,k,USt,GSt,JSt,X;let a=TQe,r=[],s,c,f,p,C,b,N;return X=class extends a{constructor(Ue,be,ut,We){super();Ae(this,k);Ae(this,L,(fbr(this,r),""));Ae(this,O,!1);Ae(this,j);Hr(this,"_frameManager");Hr(this,"_loaderId","");Hr(this,"_lifecycleEvents",new Set);Hr(this,"_id");Hr(this,"_parentId");Hr(this,"accessibility");Hr(this,"worlds");this._frameManager=Ue,Be(this,L,""),this._id=be,this._parentId=ut,Be(this,O,!1),Be(this,j,We),this._loaderId="",this.worlds={[EQ]:new c7(this,this._frameManager.timeoutSettings),[TW]:new c7(this,this._frameManager.timeoutSettings)},this.accessibility=new iW(this.worlds[EQ],be),this.on(om.FrameSwappedByActivation,()=>{this._onLoadingStarted(),this._onLoadingStopped()}),this.worlds[EQ].emitter.on("consoleapicalled",Ke(this,k,USt).bind(this)),this.worlds[EQ].emitter.on("bindingcalled",Ke(this,k,GSt).bind(this))}_client(){return I(this,j)}updateId(Ue){this._id=Ue}updateClient(Ue){Be(this,j,Ue)}page(){return this._frameManager.page()}async goto(Ue,be={}){let{referer:ut=this._frameManager.networkManager.extraHTTPHeaders().referer,referrerPolicy:We=this._frameManager.networkManager.extraHTTPHeaders()["referer-policy"],waitUntil:st=["load"],timeout:or=this._frameManager.timeoutSettings.navigationTimeout()}=be,gt=!1,jt=new NW(this._frameManager.networkManager,this,st,or),Et=await ZA.race([Nt(I(this,j),Ue,ut,We?gbr(We):void 0,this._id),jt.terminationPromise()]);Et||(Et=await ZA.race([jt.terminationPromise(),gt?jt.newDocumentNavigationPromise():jt.sameDocumentNavigationPromise()]));try{if(Et)throw Et;return await jt.navigationResponse()}finally{jt.dispose()}async function Nt(Dt,Tt,qr,zr,bt){try{let ji=await Dt.send("Page.navigate",{url:Tt,referrer:qr,frameId:bt,referrerPolicy:zr});return gt=!!ji.loaderId,ji.errorText==="net::ERR_HTTP_RESPONSE_CODE_FAILURE"?null:ji.errorText?new Error(`${ji.errorText} at ${Tt}`):null}catch(ji){if(g_(ji))return ji;throw ji}}}async waitForNavigation(Ue={}){let{waitUntil:be=["load"],timeout:ut=this._frameManager.timeoutSettings.navigationTimeout(),signal:We}=Ue,st=new NW(this._frameManager.networkManager,this,be,ut,We),or=await ZA.race([st.terminationPromise(),...Ue.ignoreSameDocumentNavigation?[]:[st.sameDocumentNavigationPromise()],st.newDocumentNavigationPromise()]);try{if(or)throw or;let gt=await ZA.race([st.terminationPromise(),st.navigationResponse()]);if(gt instanceof Error)throw or;return gt||null}finally{st.dispose()}}get client(){return I(this,j)}mainRealm(){return this.worlds[EQ]}isolatedRealm(){return this.worlds[TW]}async setContent(Ue,be={}){let{waitUntil:ut=["load"],timeout:We=this._frameManager.timeoutSettings.navigationTimeout()}=be;await this.setFrameContent(Ue);let st=new NW(this._frameManager.networkManager,this,ut,We),or=await ZA.race([st.terminationPromise(),st.lifecyclePromise()]);if(st.dispose(),or)throw or}url(){return I(this,L)}parentFrame(){return this._frameManager._frameTree.parentFrame(this._id)||null}childFrames(){return this._frameManager._frameTree.childFrames(this._id)}async addPreloadScript(Ue){let be=this.parentFrame();if(be&&I(this,j)===be.client||Ue.getIdForFrame(this))return;let{identifier:ut}=await I(this,j).send("Page.addScriptToEvaluateOnNewDocument",{source:Ue.source});Ue.setIdForFrame(this,ut)}async addExposedFunctionBinding(Ue){this!==this._frameManager.mainFrame()&&!this._hasStartedLoading||await Promise.all([I(this,j).send("Runtime.addBinding",{name:R3+Ue.name}),this.evaluate(Ue.initSource).catch(Ss)])}async removeExposedFunctionBinding(Ue){this!==this._frameManager.mainFrame()&&!this._hasStartedLoading||await Promise.all([I(this,j).send("Runtime.removeBinding",{name:R3+Ue.name}),this.evaluate(be=>{globalThis[be]=void 0},Ue.name).catch(Ss)])}async waitForDevicePrompt(Ue={}){return await Ke(this,k,JSt).call(this).waitForDevicePrompt(Ue)}_navigated(Ue){this._name=Ue.name,Be(this,L,`${Ue.url}${Ue.urlFragment||""}`)}_navigatedWithinDocument(Ue){Be(this,L,Ue)}_onLifecycleEvent(Ue,be){be==="init"&&(this._loaderId=Ue,this._lifecycleEvents.clear()),this._lifecycleEvents.add(be)}_onLoadingStopped(){this._lifecycleEvents.add("DOMContentLoaded"),this._lifecycleEvents.add("load")}_onLoadingStarted(){this._hasStartedLoading=!0}get detached(){return I(this,O)}[(s=[Dl],c=[Dl],f=[Dl],p=[Dl],C=[Dl],b=[Dl],N=[Dl],go)](){I(this,O)||(Be(this,O,!0),this.worlds[EQ][go](),this.worlds[TW][go]())}exposeFunction(){throw new Uo}async frameElement(){let Ue=this.parentFrame();if(!Ue)return null;let{backendNodeId:be}=await Ue.client.send("DOM.getFrameOwner",{frameId:this._id});return await Ue.mainRealm().adoptBackendNode(be)}},L=new WeakMap,O=new WeakMap,j=new WeakMap,k=new WeakSet,USt=function(Ue){this._frameManager.emit(W_.ConsoleApiCalled,[this.worlds[EQ],Ue])},GSt=function(Ue){this._frameManager.emit(W_.BindingCalled,[this.worlds[EQ],Ue])},JSt=function(){return this._frameManager._deviceRequestPromptManager(I(this,j))},(()=>{let Ue=typeof Symbol=="function"&&Symbol.metadata?Object.create(a[Symbol.metadata]??null):void 0;l7(X,null,s,{kind:"method",name:"goto",static:!1,private:!1,access:{has:be=>"goto"in be,get:be=>be.goto},metadata:Ue},null,r),l7(X,null,c,{kind:"method",name:"waitForNavigation",static:!1,private:!1,access:{has:be=>"waitForNavigation"in be,get:be=>be.waitForNavigation},metadata:Ue},null,r),l7(X,null,f,{kind:"method",name:"setContent",static:!1,private:!1,access:{has:be=>"setContent"in be,get:be=>be.setContent},metadata:Ue},null,r),l7(X,null,p,{kind:"method",name:"addPreloadScript",static:!1,private:!1,access:{has:be=>"addPreloadScript"in be,get:be=>be.addPreloadScript},metadata:Ue},null,r),l7(X,null,C,{kind:"method",name:"addExposedFunctionBinding",static:!1,private:!1,access:{has:be=>"addExposedFunctionBinding"in be,get:be=>be.addExposedFunctionBinding},metadata:Ue},null,r),l7(X,null,b,{kind:"method",name:"removeExposedFunctionBinding",static:!1,private:!1,access:{has:be=>"removeExposedFunctionBinding"in be,get:be=>be.removeExposedFunctionBinding},metadata:Ue},null,r),l7(X,null,N,{kind:"method",name:"waitForDevicePrompt",static:!1,private:!1,access:{has:be=>"waitForDevicePrompt"in be,get:be=>be.waitForDevicePrompt},metadata:Ue},null,r),Ue&&Object.defineProperty(X,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:Ue})})(),X})();function gbr(a){return a.replaceAll(/-./g,r=>r[1].toUpperCase())}qC();var f7,RW,j3,PW,MW,Uoe,ave=class{constructor(){Ae(this,f7,new Map);Ae(this,RW,new Map);Ae(this,j3,new Map);Ae(this,PW);Ae(this,MW,!1);Ae(this,Uoe,new Map)}getMainFrame(){return I(this,PW)}getById(r){return I(this,f7).get(r)}waitForFrame(r){let s=this.getById(r);if(s)return Promise.resolve(s);let c=ZA.create();return(I(this,Uoe).get(r)||new Set).add(c),c.valueOrThrow()}frames(){return Array.from(I(this,f7).values())}addFrame(r){I(this,f7).set(r._id,r),r._parentId?(I(this,RW).set(r._id,r._parentId),I(this,j3).has(r._parentId)||I(this,j3).set(r._parentId,new Set),I(this,j3).get(r._parentId).add(r._id)):(!I(this,PW)||I(this,MW))&&(Be(this,PW,r),Be(this,MW,!1)),I(this,Uoe).get(r._id)?.forEach(s=>s.resolve(r))}removeFrame(r){I(this,f7).delete(r._id),I(this,RW).delete(r._id),r._parentId?I(this,j3).get(r._parentId)?.delete(r._id):Be(this,MW,!0)}childFrames(r){let s=I(this,j3).get(r);return s?Array.from(s).map(c=>this.getById(c)).filter(c=>c!==void 0):[]}parentFrame(r){let s=I(this,RW).get(r);return s?this.getById(s):void 0}};f7=new WeakMap,RW=new WeakMap,j3=new WeakMap,PW=new WeakMap,MW=new WeakMap,Uoe=new WeakMap;vB();Nf();GA();Rf();tg();LI();NQe();GA();pN();var kk,Goe,Joe,Hoe,joe,Koe,LW,qoe,Woe,Yoe,g7=class extends w3{constructor(s,c,f,p,C,b){super();Hr(this,"id");Ae(this,kk);Ae(this,Goe);Ae(this,Joe);Ae(this,Hoe);Ae(this,joe);Ae(this,Koe,!1);Ae(this,LW);Ae(this,qoe,{});Ae(this,Woe);Ae(this,Yoe);Be(this,kk,s),this.id=C.requestId,Be(this,Goe,C.requestId===C.loaderId&&C.type==="Document"),this._interceptionId=f,Be(this,Joe,C.request.url+(C.request.urlFragment??"")),Be(this,Hoe,(C.type||"other").toLowerCase()),Be(this,joe,C.request.method),C.request.postDataEntries&&C.request.postDataEntries.length>0?Be(this,LW,new TextDecoder().decode(z1e(C.request.postDataEntries.map(N=>N.bytes?ww(N.bytes,!0):null).filter(N=>N!==null)))):Be(this,LW,C.request.postData),Be(this,Koe,C.request.hasPostData??!1),Be(this,Woe,c),this._redirectChain=b,Be(this,Yoe,C.initiator),this.interception.enabled=p,this.updateHeaders(C.request.headers)}get client(){return I(this,kk)}set client(s){Be(this,kk,s)}updateHeaders(s){for(let[c,f]of Object.entries(s))I(this,qoe)[c.toLowerCase()]=f}url(){return I(this,Joe)}resourceType(){return I(this,Hoe)}method(){return I(this,joe)}postData(){return I(this,LW)}hasPostData(){return I(this,Koe)}async fetchPostData(){try{return(await I(this,kk).send("Network.getRequestPostData",{requestId:this.id})).postData}catch(s){Ss(s);return}}headers(){return structuredClone(I(this,qoe))}response(){return this._response}frame(){return I(this,Woe)}isNavigationRequest(){return I(this,Goe)}initiator(){return I(this,Yoe)}redirectChain(){return this._redirectChain.slice()}failure(){return this._failureText?{errorText:this._failureText}:null}canBeIntercepted(){return!this.url().startsWith("data:")&&!this._fromMemoryCache}async _continue(s={}){let{url:c,method:f,postData:p,headers:C}=s;this.interception.handled=!0;let b=p?V1e(p):void 0;if(this._interceptionId===void 0)throw new Error("HTTPRequest is missing _interceptionId needed for Fetch.continueRequest");await I(this,kk).send("Fetch.continueRequest",{requestId:this._interceptionId,url:c,method:f,postData:b,headers:C?HKe(C):void 0}).catch(N=>(this.interception.handled=!1,Hq(N)))}async _respond(s){this.interception.handled=!0;let c;s.body&&(c=w3.getResponse(s.body));let f={};if(s.headers)for(let C of Object.keys(s.headers)){let b=s.headers[C];f[C.toLowerCase()]=Array.isArray(b)?b.map(N=>String(N)):String(b)}s.contentType&&(f["content-type"]=s.contentType),c?.contentLength&&!("content-length"in f)&&(f["content-length"]=String(c.contentLength));let p=s.status||200;if(this._interceptionId===void 0)throw new Error("HTTPRequest is missing _interceptionId needed for Fetch.fulfillRequest");await I(this,kk).send("Fetch.fulfillRequest",{requestId:this._interceptionId,responseCode:p,responsePhrase:FQe[p],responseHeaders:HKe(f),body:c?.base64}).catch(C=>(this.interception.handled=!1,Hq(C)))}async _abort(s){if(this.interception.handled=!0,this._interceptionId===void 0)throw new Error("HTTPRequest is missing _interceptionId needed for Fetch.failRequest");await I(this,kk).send("Fetch.failRequest",{requestId:this._interceptionId,errorReason:s||"Failed"}).catch(Hq)}};kk=new WeakMap,Goe=new WeakMap,Joe=new WeakMap,Hoe=new WeakMap,joe=new WeakMap,Koe=new WeakMap,LW=new WeakMap,qoe=new WeakMap,Woe=new WeakMap,Yoe=new WeakMap;RQe();wl();ove();qC();pN();var Tk,UW,GW,rce,ice,nce,sce,ace,oce,cce,Ace,cve,HSt,tce=class extends jq{constructor(s,c,f){super();Ae(this,cve);Ae(this,Tk);Ae(this,UW,null);Ae(this,GW,ZA.create());Ae(this,rce);Ae(this,ice);Ae(this,nce);Ae(this,sce);Ae(this,ace);Ae(this,oce,{});Ae(this,cce);Ae(this,Ace);Be(this,Tk,s),Be(this,rce,{ip:c.remoteIPAddress,port:c.remotePort}),Be(this,nce,Ke(this,cve,HSt).call(this,f)||c.statusText),Be(this,sce,!!c.fromDiskCache),Be(this,ace,!!c.fromServiceWorker),Be(this,ice,f?f.statusCode:c.status);let p=f?f.headers:c.headers;for(let[C,b]of Object.entries(p))I(this,oce)[C.toLowerCase()]=b;Be(this,cce,c.securityDetails?new OW(c.securityDetails):null),Be(this,Ace,c.timing||null)}_resolveBody(s){return s?I(this,GW).reject(s):I(this,GW).resolve()}remoteAddress(){return I(this,rce)}url(){return I(this,Tk).url()}status(){return I(this,ice)}statusText(){return I(this,nce)}headers(){return I(this,oce)}securityDetails(){return I(this,cce)}timing(){return I(this,Ace)}content(){return I(this,UW)||Be(this,UW,I(this,GW).valueOrThrow().then(async()=>{try{let s=await I(this,Tk).client.send("Network.getResponseBody",{requestId:I(this,Tk).id});return ww(s.body,s.base64Encoded)}catch(s){throw s instanceof Dh&&s.originalMessage==="No resource with given identifier found"?new Dh("Could not load response body for this request. This might happen if the request is a preflight request."):s}})),I(this,UW)}request(){return I(this,Tk)}fromCache(){return I(this,sce)||I(this,Tk)._fromMemoryCache}fromServiceWorker(){return I(this,ace)}frame(){return I(this,Tk).frame()}};Tk=new WeakMap,UW=new WeakMap,GW=new WeakMap,rce=new WeakMap,ice=new WeakMap,nce=new WeakMap,sce=new WeakMap,ace=new WeakMap,oce=new WeakMap,cce=new WeakMap,Ace=new WeakMap,cve=new WeakSet,HSt=function(s){if(!s||!s.headersText)return;let c=s.headersText.split("\r",1)[0];if(!c||c.length>1e3)return;let f=c.match(/[^ ]* [^ ]* (.*)/);if(!f)return;let p=f[1];if(p)return p};var K3,q3,W3,d7,Y3,p7,_7,Ave=class{constructor(){Ae(this,K3,new Map);Ae(this,q3,new Map);Ae(this,W3,new Map);Ae(this,d7,new Map);Ae(this,Y3,new Map);Ae(this,p7,new Map);Ae(this,_7,new Map)}forget(r){I(this,K3).delete(r),I(this,q3).delete(r),I(this,d7).delete(r),I(this,_7).delete(r),I(this,p7).delete(r),I(this,Y3).delete(r)}requestExtraInfo(r){return I(this,d7).has(r)||I(this,d7).set(r,[]),I(this,d7).get(r)}responseExtraInfo(r){return I(this,Y3).has(r)||I(this,Y3).set(r,[]),I(this,Y3).get(r)}queuedRedirectInfo(r){return I(this,p7).has(r)||I(this,p7).set(r,[]),I(this,p7).get(r)}queueRedirectInfo(r,s){this.queuedRedirectInfo(r).push(s)}takeQueuedRedirectInfo(r){return this.queuedRedirectInfo(r).shift()}inFlightRequestsCount(){let r=0;for(let s of I(this,W3).values())s.response()||r++;return r}storeRequestWillBeSent(r,s){I(this,K3).set(r,s)}getRequestWillBeSent(r){return I(this,K3).get(r)}forgetRequestWillBeSent(r){I(this,K3).delete(r)}getRequestPaused(r){return I(this,q3).get(r)}forgetRequestPaused(r){I(this,q3).delete(r)}storeRequestPaused(r,s){I(this,q3).set(r,s)}getRequest(r){return I(this,W3).get(r)}storeRequest(r,s){I(this,W3).set(r,s)}forgetRequest(r){I(this,W3).delete(r)}getQueuedEventGroup(r){return I(this,_7).get(r)}queueEventGroup(r,s){I(this,_7).set(r,s)}forgetQueuedEventGroup(r){I(this,_7).delete(r)}printState(){function r(s,c){return c instanceof Map?{dataType:"Map",value:Array.from(c.entries())}:c instanceof g7?{dataType:"CdpHTTPRequest",value:`${c.id}: ${c.url()}`}:c}console.log("httpRequestsMap",JSON.stringify(I(this,W3),r,2)),console.log("requestWillBeSentMap",JSON.stringify(I(this,K3),r,2)),console.log("requestWillBeSentMap",JSON.stringify(I(this,Y3),r,2)),console.log("requestWillBeSentMap",JSON.stringify(I(this,q3),r,2))}};K3=new WeakMap,q3=new WeakMap,W3=new WeakMap,d7=new WeakMap,Y3=new WeakMap,p7=new WeakMap,_7=new WeakMap;var HW,Sl,m7,z3,jW,Fk,Nk,X3,O0,KW,lce,fce,dve,Z3,gce,Xa,h7,jSt,mqe,V3,uve,Cqe,lve,uce,KSt,qSt,WSt,Iqe,YSt,JW,VSt,zSt,XSt,Eqe,ZSt,$St,fve,ext,yqe,txt,Bqe,Qqe,gve=class extends ya{constructor(s,c){super();Ae(this,Xa);Ae(this,HW);Ae(this,Sl,new Ave);Ae(this,m7);Ae(this,z3,null);Ae(this,jW,new Set);Ae(this,Fk,!1);Ae(this,Nk);Ae(this,X3);Ae(this,O0);Ae(this,KW);Ae(this,lce);Ae(this,fce);Ae(this,dve,[["Fetch.requestPaused",Ke(this,Xa,WSt)],["Fetch.authRequired",Ke(this,Xa,qSt)],["Network.requestWillBeSent",Ke(this,Xa,KSt)],["Network.requestWillBeSentExtraInfo",Ke(this,Xa,VSt)],["Network.requestServedFromCache",Ke(this,Xa,zSt)],["Network.responseReceived",Ke(this,Xa,ZSt)],["Network.loadingFinished",Ke(this,Xa,ext)],["Network.loadingFailed",Ke(this,Xa,txt)],["Network.responseReceivedExtraInfo",Ke(this,Xa,$St)],[bl.Disconnected,Ke(this,Xa,jSt)]]);Ae(this,Z3,new Map);Ae(this,gce,!0);Be(this,HW,s),Be(this,gce,c??!0)}async addClient(s){if(!I(this,gce)||I(this,Z3).has(s))return;let c=new Jl;I(this,Z3).set(s,c);let f=c.use(new ya(s));for(let[p,C]of I(this,dve))f.on(p,b=>C.bind(this)(s,b));try{await Promise.all([s.send("Network.enable"),Ke(this,Xa,mqe).call(this,s),Ke(this,Xa,uve).call(this,s),Ke(this,Xa,uce).call(this,s),Ke(this,Xa,lve).call(this,s),Ke(this,Xa,Cqe).call(this,s)])}catch(p){if(Ke(this,Xa,h7).call(this,p))return;throw p}}async authenticate(s){Be(this,z3,s);let c=I(this,Fk)||!!I(this,z3);c!==I(this,Nk)&&(Be(this,Nk,c),await Ke(this,Xa,V3).call(this,Ke(this,Xa,lve).bind(this)))}async setExtraHTTPHeaders(s){let c={};for(let[f,p]of Object.entries(s))Is(MI(p),`Expected value of header "${f}" to be String, but "${typeof p}" is found.`),c[f.toLowerCase()]=p;Be(this,m7,c),await Ke(this,Xa,V3).call(this,Ke(this,Xa,mqe).bind(this))}extraHTTPHeaders(){return Object.assign({},I(this,m7))}inFlightRequestsCount(){return I(this,Sl).inFlightRequestsCount()}async setOfflineMode(s){I(this,O0)||Be(this,O0,{offline:!1,upload:-1,download:-1,latency:0}),I(this,O0).offline=s,await Ke(this,Xa,V3).call(this,Ke(this,Xa,uve).bind(this))}async emulateNetworkConditions(s){I(this,O0)||Be(this,O0,{offline:s?.offline??!1,upload:-1,download:-1,latency:0}),I(this,O0).upload=s?s.upload:-1,I(this,O0).download=s?s.download:-1,I(this,O0).latency=s?s.latency:0,I(this,O0).offline=s?.offline??!1,await Ke(this,Xa,V3).call(this,Ke(this,Xa,uve).bind(this))}async setUserAgent(s,c,f){Be(this,KW,s),Be(this,lce,c),Be(this,fce,f),await Ke(this,Xa,V3).call(this,Ke(this,Xa,Cqe).bind(this))}async setCacheEnabled(s){Be(this,X3,!s),await Ke(this,Xa,V3).call(this,Ke(this,Xa,uce).bind(this))}async setRequestInterception(s){Be(this,Fk,s);let c=I(this,Fk)||!!I(this,z3);c!==I(this,Nk)&&(Be(this,Nk,c),await Ke(this,Xa,V3).call(this,Ke(this,Xa,lve).bind(this)))}};HW=new WeakMap,Sl=new WeakMap,m7=new WeakMap,z3=new WeakMap,jW=new WeakMap,Fk=new WeakMap,Nk=new WeakMap,X3=new WeakMap,O0=new WeakMap,KW=new WeakMap,lce=new WeakMap,fce=new WeakMap,dve=new WeakMap,Z3=new WeakMap,gce=new WeakMap,Xa=new WeakSet,h7=function(s){return g_(s)&&(V5(s)||s.message.includes("Not supported")||s.message.includes("wasn't found"))},jSt=async function(s){I(this,Z3).get(s)?.dispose(),I(this,Z3).delete(s)},mqe=async function(s){if(I(this,m7)!==void 0)try{await s.send("Network.setExtraHTTPHeaders",{headers:I(this,m7)})}catch(c){if(Ke(this,Xa,h7).call(this,c))return;throw c}},V3=async function(s){await Promise.all(Array.from(I(this,Z3).keys()).map(c=>s(c)))},uve=async function(s){if(I(this,O0)!==void 0)try{await s.send("Network.emulateNetworkConditions",{offline:I(this,O0).offline,latency:I(this,O0).latency,uploadThroughput:I(this,O0).upload,downloadThroughput:I(this,O0).download})}catch(c){if(Ke(this,Xa,h7).call(this,c))return;throw c}},Cqe=async function(s){if(I(this,KW)!==void 0)try{await s.send("Network.setUserAgentOverride",{userAgent:I(this,KW),userAgentMetadata:I(this,lce),platform:I(this,fce)})}catch(c){if(Ke(this,Xa,h7).call(this,c))return;throw c}},lve=async function(s){if(I(this,Nk)!==void 0){I(this,X3)===void 0&&Be(this,X3,!1);try{I(this,Nk)?await Promise.all([Ke(this,Xa,uce).call(this,s),s.send("Fetch.enable",{handleAuthRequests:!0,patterns:[{urlPattern:"*"}]})]):await Promise.all([Ke(this,Xa,uce).call(this,s),s.send("Fetch.disable")])}catch(c){if(Ke(this,Xa,h7).call(this,c))return;throw c}}},uce=async function(s){if(I(this,X3)!==void 0)try{await s.send("Network.setCacheDisabled",{cacheDisabled:I(this,X3)})}catch(c){if(Ke(this,Xa,h7).call(this,c))return;throw c}},KSt=function(s,c){if(I(this,Fk)&&!c.request.url.startsWith("data:")){let{requestId:f}=c;I(this,Sl).storeRequestWillBeSent(f,c);let p=I(this,Sl).getRequestPaused(f);if(p){let{requestId:C}=p;Ke(this,Xa,Iqe).call(this,c,p),Ke(this,Xa,JW).call(this,s,c,C),I(this,Sl).forgetRequestPaused(f)}return}Ke(this,Xa,JW).call(this,s,c,void 0)},qSt=function(s,c){let f="Default";I(this,jW).has(c.requestId)?f="CancelAuth":I(this,z3)&&(f="ProvideCredentials",I(this,jW).add(c.requestId));let{username:p,password:C}=I(this,z3)||{username:void 0,password:void 0};s.send("Fetch.continueWithAuth",{requestId:c.requestId,authChallengeResponse:{response:f,username:p,password:C}}).catch(Ss)},WSt=function(s,c){!I(this,Fk)&&I(this,Nk)&&s.send("Fetch.continueRequest",{requestId:c.requestId}).catch(Ss);let{networkId:f,requestId:p}=c;if(!f){Ke(this,Xa,YSt).call(this,s,c);return}let C=(()=>{let b=I(this,Sl).getRequestWillBeSent(f);if(b&&(b.request.url!==c.request.url||b.request.method!==c.request.method)){I(this,Sl).forgetRequestWillBeSent(f);return}return b})();C?(Ke(this,Xa,Iqe).call(this,C,c),Ke(this,Xa,JW).call(this,s,C,p)):I(this,Sl).storeRequestPaused(f,c)},Iqe=function(s,c){s.request.headers={...s.request.headers,...c.request.headers}},YSt=function(s,c){let f=c.frameId?I(this,HW).frame(c.frameId):null,p=new g7(s,f,c.requestId,I(this,Fk),c,[]);this.emit(kh.Request,p),p.finalizeInterceptions()},JW=function(s,c,f,p=!1){let C=[];if(c.redirectResponse){let O=null;if(c.redirectHasExtraInfo&&(O=I(this,Sl).responseExtraInfo(c.requestId).shift(),!O)){I(this,Sl).queueRedirectInfo(c.requestId,{event:c,fetchRequestId:f});return}let j=I(this,Sl).getRequest(c.requestId);if(j){Ke(this,Xa,XSt).call(this,s,j,c.redirectResponse,O),C=j._redirectChain;let k=I(this,Sl).requestExtraInfo(c.requestId).shift();k&&j.updateHeaders(k.headers)}}let b=c.frameId?I(this,HW).frame(c.frameId):null,N=new g7(s,b,f,I(this,Fk),c,C),L=I(this,Sl).requestExtraInfo(c.requestId).shift();L&&N.updateHeaders(L.headers),N._fromMemoryCache=p,I(this,Sl).storeRequest(c.requestId,N),this.emit(kh.Request,N),N.finalizeInterceptions()},VSt=function(s,c){let f=I(this,Sl).getRequest(c.requestId);f?f.updateHeaders(c.headers):I(this,Sl).requestExtraInfo(c.requestId).push(c)},zSt=function(s,c){let f=I(this,Sl).getRequestWillBeSent(c.requestId),p=I(this,Sl).getRequest(c.requestId);if(p&&(p._fromMemoryCache=!0),!p&&f&&(Ke(this,Xa,JW).call(this,s,f,void 0,!0),p=I(this,Sl).getRequest(c.requestId)),!p){Ss(new Error(`Request ${c.requestId} was served from cache but we could not find the corresponding request object`));return}this.emit(kh.RequestServedFromCache,p)},XSt=function(s,c,f,p){let C=new tce(c,f,p);c._response=C,c._redirectChain.push(c),C._resolveBody(new Error("Response body is unavailable for redirect responses")),Ke(this,Xa,fve).call(this,c,!1),this.emit(kh.Response,C),this.emit(kh.RequestFinished,c)},Eqe=function(s,c,f){let p=I(this,Sl).getRequest(c.requestId);if(!p)return;I(this,Sl).responseExtraInfo(c.requestId).length&&Ss(new Error("Unexpected extraInfo events for request "+c.requestId)),c.response.fromDiskCache&&(f=null);let b=new tce(p,c.response,f);p._response=b,this.emit(kh.Response,b)},ZSt=function(s,c){let f=I(this,Sl).getRequest(c.requestId),p=null;if(f&&!f._fromMemoryCache&&c.hasExtraInfo&&(p=I(this,Sl).responseExtraInfo(c.requestId).shift(),!p)){I(this,Sl).queueEventGroup(c.requestId,{responseReceivedEvent:c});return}Ke(this,Xa,Eqe).call(this,s,c,p)},$St=function(s,c){let f=I(this,Sl).takeQueuedRedirectInfo(c.requestId);if(f){I(this,Sl).responseExtraInfo(c.requestId).push(c),Ke(this,Xa,JW).call(this,s,f.event,f.fetchRequestId);return}let p=I(this,Sl).getQueuedEventGroup(c.requestId);if(p){I(this,Sl).forgetQueuedEventGroup(c.requestId),Ke(this,Xa,Eqe).call(this,s,p.responseReceivedEvent,c),p.loadingFinishedEvent&&Ke(this,Xa,yqe).call(this,s,p.loadingFinishedEvent),p.loadingFailedEvent&&Ke(this,Xa,Bqe).call(this,s,p.loadingFailedEvent);return}I(this,Sl).responseExtraInfo(c.requestId).push(c)},fve=function(s,c){let f=s.id,p=s._interceptionId;I(this,Sl).forgetRequest(f),p!==void 0&&I(this,jW).delete(p),c&&I(this,Sl).forget(f)},ext=function(s,c){let f=I(this,Sl).getQueuedEventGroup(c.requestId);f?f.loadingFinishedEvent=c:Ke(this,Xa,yqe).call(this,s,c)},yqe=function(s,c){let f=I(this,Sl).getRequest(c.requestId);f&&(Ke(this,Xa,Qqe).call(this,s,f),f.response()&&f.response()?._resolveBody(),Ke(this,Xa,fve).call(this,f,!0),this.emit(kh.RequestFinished,f))},txt=function(s,c){let f=I(this,Sl).getQueuedEventGroup(c.requestId);f?f.loadingFailedEvent=c:Ke(this,Xa,Bqe).call(this,s,c)},Bqe=function(s,c){let f=I(this,Sl).getRequest(c.requestId);if(!f)return;Ke(this,Xa,Qqe).call(this,s,f),f._failureText=c.errorText;let p=f.response();p&&p._resolveBody(),Ke(this,Xa,fve).call(this,f,!0),this.emit(kh.RequestFailed,f)},Qqe=function(s,c){s!==c.client&&(c.client=s)};var dbr=100,qW,$3,WW,dce,qD,I7,YW,E7,pce,Ay,Vl,vqe,rxt,ixt,nxt,wqe,bqe,Dqe,sxt,axt,oxt,cxt,C7,pve=class extends ya{constructor(s,c,f){super();Ae(this,Vl);Ae(this,qW);Ae(this,$3);Ae(this,WW);Ae(this,dce,new Set);Ae(this,qD);Ae(this,I7,new Map);Ae(this,YW,new Set);Hr(this,"_frameTree",new ave);Ae(this,E7,new Set);Ae(this,pce,new WeakMap);Ae(this,Ay);Be(this,qD,s),Be(this,qW,c),Be(this,$3,new gve(this,c.browser().isNetworkEnabled())),Be(this,WW,f),this.setupEventListeners(I(this,qD)),s.once(bl.Disconnected,()=>{Ke(this,Vl,vqe).call(this).catch(Ss)})}get timeoutSettings(){return I(this,WW)}get networkManager(){return I(this,$3)}get client(){return I(this,qD)}async swapFrameTree(s){Be(this,qD,s);let c=this._frameTree.getMainFrame();c&&(I(this,E7).add(I(this,qD).target()._targetId),this._frameTree.removeFrame(c),c.updateId(I(this,qD).target()._targetId),this._frameTree.addFrame(c),c.updateClient(s)),this.setupEventListeners(s),s.once(bl.Disconnected,()=>{Ke(this,Vl,vqe).call(this).catch(Ss)}),await this.initialize(s,c),await I(this,$3).addClient(s),c&&c.emit(om.FrameSwappedByActivation,void 0)}async registerSpeculativeSession(s){await I(this,$3).addClient(s)}setupEventListeners(s){s.on("Page.frameAttached",async c=>{await I(this,Ay)?.valueOrThrow(),Ke(this,Vl,bqe).call(this,s,c.frameId,c.parentFrameId)}),s.on("Page.frameNavigated",async c=>{I(this,E7).add(c.frame.id),await I(this,Ay)?.valueOrThrow(),Ke(this,Vl,Dqe).call(this,c.frame,c.type)}),s.on("Page.navigatedWithinDocument",async c=>{await I(this,Ay)?.valueOrThrow(),Ke(this,Vl,axt).call(this,c.frameId,c.url)}),s.on("Page.frameDetached",async c=>{await I(this,Ay)?.valueOrThrow(),Ke(this,Vl,oxt).call(this,c.frameId,c.reason)}),s.on("Page.frameStartedLoading",async c=>{await I(this,Ay)?.valueOrThrow(),Ke(this,Vl,ixt).call(this,c.frameId)}),s.on("Page.frameStoppedLoading",async c=>{await I(this,Ay)?.valueOrThrow(),Ke(this,Vl,nxt).call(this,c.frameId)}),s.on("Runtime.executionContextCreated",async c=>{await I(this,Ay)?.valueOrThrow(),Ke(this,Vl,cxt).call(this,c.context,s)}),s.on("Page.lifecycleEvent",async c=>{await I(this,Ay)?.valueOrThrow(),Ke(this,Vl,rxt).call(this,c)})}async initialize(s,c){try{I(this,Ay)?.resolve(),Be(this,Ay,ZA.create()),await Promise.all([I(this,$3).addClient(s),s.send("Page.enable"),s.send("Page.getFrameTree").then(({frameTree:f})=>{Ke(this,Vl,wqe).call(this,s,f),I(this,Ay)?.resolve()}),s.send("Page.setLifecycleEventsEnabled",{enabled:!0}),s.send("Runtime.enable").then(()=>Ke(this,Vl,sxt).call(this,s,EKe)),...(c?Array.from(I(this,I7).values()):[]).map(f=>c?.addPreloadScript(f)),...(c?Array.from(I(this,YW).values()):[]).map(f=>c?.addExposedFunctionBinding(f))])}catch(f){if(I(this,Ay)?.resolve(),g_(f)&&V5(f))return;throw f}}page(){return I(this,qW)}mainFrame(){let s=this._frameTree.getMainFrame();return Is(s,"Requesting main frame too early!"),s}frames(){return Array.from(this._frameTree.frames())}frame(s){return this._frameTree.getById(s)||null}async addExposedFunctionBinding(s){I(this,YW).add(s),await Promise.all(this.frames().map(async c=>await c.addExposedFunctionBinding(s)))}async removeExposedFunctionBinding(s){I(this,YW).delete(s),await Promise.all(this.frames().map(async c=>await c.removeExposedFunctionBinding(s)))}async evaluateOnNewDocument(s){let{identifier:c}=await this.mainFrame()._client().send("Page.addScriptToEvaluateOnNewDocument",{source:s}),f=new XQe(this.mainFrame(),c,s);return I(this,I7).set(c,f),await Promise.all(this.frames().map(async p=>await p.addPreloadScript(f))),{identifier:c}}async removeScriptToEvaluateOnNewDocument(s){let c=I(this,I7).get(s);if(!c)throw new Error(`Script to evaluate on new document with id ${s} not found`);I(this,I7).delete(s),await Promise.all(this.frames().map(f=>{let p=c.getIdForFrame(f);if(p)return f._client().send("Page.removeScriptToEvaluateOnNewDocument",{identifier:p}).catch(Ss)}))}onAttachedToTarget(s){if(s._getTargetInfo().type!=="iframe")return;let c=this.frame(s._getTargetInfo().targetId);c&&c.updateClient(s._session()),this.setupEventListeners(s._session()),this.initialize(s._session(),c).catch(Ss)}_deviceRequestPromptManager(s){let c=I(this,pce).get(s);return c===void 0&&(c=new ZQe(s,I(this,WW)),I(this,pce).set(s,c)),c}};qW=new WeakMap,$3=new WeakMap,WW=new WeakMap,dce=new WeakMap,qD=new WeakMap,I7=new WeakMap,YW=new WeakMap,E7=new WeakMap,pce=new WeakMap,Ay=new WeakMap,Vl=new WeakSet,vqe=async function(){let s=this._frameTree.getMainFrame();if(!s)return;if(!I(this,qW).browser().connected){Ke(this,Vl,C7).call(this,s);return}for(let f of s.childFrames())Ke(this,Vl,C7).call(this,f);let c=ZA.create({timeout:dbr,message:"Frame was not swapped"});s.once(om.FrameSwappedByActivation,()=>{c.resolve()});try{await c.valueOrThrow()}catch{Ke(this,Vl,C7).call(this,s)}},rxt=function(s){let c=this.frame(s.frameId);c&&(c._onLifecycleEvent(s.loaderId,s.name),this.emit(W_.LifecycleEvent,c),c.emit(om.LifecycleEvent,void 0))},ixt=function(s){let c=this.frame(s);c&&c._onLoadingStarted()},nxt=function(s){let c=this.frame(s);c&&(c._onLoadingStopped(),this.emit(W_.LifecycleEvent,c),c.emit(om.LifecycleEvent,void 0))},wqe=function(s,c){if(c.frame.parentId&&Ke(this,Vl,bqe).call(this,s,c.frame.id,c.frame.parentId),I(this,E7).has(c.frame.id)?I(this,E7).delete(c.frame.id):Ke(this,Vl,Dqe).call(this,c.frame,"Navigation"),!!c.childFrames)for(let f of c.childFrames)Ke(this,Vl,wqe).call(this,s,f)},bqe=function(s,c,f){let p=this.frame(c);if(p){let C=this.frame(f);s&&C&&p.client!==C?.client&&p.updateClient(s);return}p=new hqe(this,c,f,s),this._frameTree.addFrame(p),this.emit(W_.FrameAttached,p)},Dqe=async function(s,c){let f=s.id,p=!s.parentId,C=this._frameTree.getById(f);if(C)for(let b of C.childFrames())Ke(this,Vl,C7).call(this,b);p&&(C?(this._frameTree.removeFrame(C),C._id=f):C=new hqe(this,f,void 0,I(this,qD)),this._frameTree.addFrame(C)),C=await this._frameTree.waitForFrame(f),C._navigated(s),this.emit(W_.FrameNavigated,C),C.emit(om.FrameNavigated,c)},sxt=async function(s,c){let f=`${s.id()}:${c}`;I(this,dce).has(f)||(await s.send("Page.addScriptToEvaluateOnNewDocument",{source:`//# sourceURL=${Vm.INTERNAL_URL}`,worldName:c}),await Promise.all(this.frames().filter(p=>p.client===s).map(p=>s.send("Page.createIsolatedWorld",{frameId:p._id,worldName:c,grantUniveralAccess:!0}).catch(Ss))),I(this,dce).add(f))},axt=function(s,c){let f=this.frame(s);f&&(f._navigatedWithinDocument(c),this.emit(W_.FrameNavigatedWithinDocument,f),f.emit(om.FrameNavigatedWithinDocument,void 0),this.emit(W_.FrameNavigated,f),f.emit(om.FrameNavigated,"Navigation"))},oxt=function(s,c){let f=this.frame(s);if(f)switch(c){case"remove":Ke(this,Vl,C7).call(this,f);break;case"swap":this.emit(W_.FrameSwapped,f),f.emit(om.FrameSwapped,void 0);break}},cxt=function(s,c){let f=s.auxData,p=f&&f.frameId,C=typeof p=="string"?this.frame(p):void 0,b;if(C){if(C.client!==c)return;s.auxData&&s.auxData.isDefault?b=C.worlds[EQ]:s.name===EKe&&(b=C.worlds[TW])}if(!b)return;let N=new kW(C?.client||I(this,qD),s,b);b.setContext(N)},C7=function(s){for(let c of s.childFrames())Ke(this,Vl,C7).call(this,c);s[go](),this._frameTree.removeFrame(s),this.emit(W_.FrameDetached,s),s.emit(om.FrameDetached,s)};PQe();wl();var Sqe={0:{keyCode:48,key:"0",code:"Digit0"},1:{keyCode:49,key:"1",code:"Digit1"},2:{keyCode:50,key:"2",code:"Digit2"},3:{keyCode:51,key:"3",code:"Digit3"},4:{keyCode:52,key:"4",code:"Digit4"},5:{keyCode:53,key:"5",code:"Digit5"},6:{keyCode:54,key:"6",code:"Digit6"},7:{keyCode:55,key:"7",code:"Digit7"},8:{keyCode:56,key:"8",code:"Digit8"},9:{keyCode:57,key:"9",code:"Digit9"},Power:{key:"Power",code:"Power"},Eject:{key:"Eject",code:"Eject"},Abort:{keyCode:3,code:"Abort",key:"Cancel"},Help:{keyCode:6,code:"Help",key:"Help"},Backspace:{keyCode:8,code:"Backspace",key:"Backspace"},Tab:{keyCode:9,code:"Tab",key:"Tab"},Numpad5:{keyCode:12,shiftKeyCode:101,key:"Clear",code:"Numpad5",shiftKey:"5",location:3},NumpadEnter:{keyCode:13,code:"NumpadEnter",key:"Enter",text:"\r",location:3},Enter:{keyCode:13,code:"Enter",key:"Enter",text:"\r"},"\r":{keyCode:13,code:"Enter",key:"Enter",text:"\r"},"\n":{keyCode:13,code:"Enter",key:"Enter",text:"\r"},ShiftLeft:{keyCode:16,code:"ShiftLeft",key:"Shift",location:1},ShiftRight:{keyCode:16,code:"ShiftRight",key:"Shift",location:2},ControlLeft:{keyCode:17,code:"ControlLeft",key:"Control",location:1},ControlRight:{keyCode:17,code:"ControlRight",key:"Control",location:2},AltLeft:{keyCode:18,code:"AltLeft",key:"Alt",location:1},AltRight:{keyCode:18,code:"AltRight",key:"Alt",location:2},Pause:{keyCode:19,code:"Pause",key:"Pause"},CapsLock:{keyCode:20,code:"CapsLock",key:"CapsLock"},Escape:{keyCode:27,code:"Escape",key:"Escape"},Convert:{keyCode:28,code:"Convert",key:"Convert"},NonConvert:{keyCode:29,code:"NonConvert",key:"NonConvert"},Space:{keyCode:32,code:"Space",key:" "},Numpad9:{keyCode:33,shiftKeyCode:105,key:"PageUp",code:"Numpad9",shiftKey:"9",location:3},PageUp:{keyCode:33,code:"PageUp",key:"PageUp"},Numpad3:{keyCode:34,shiftKeyCode:99,key:"PageDown",code:"Numpad3",shiftKey:"3",location:3},PageDown:{keyCode:34,code:"PageDown",key:"PageDown"},End:{keyCode:35,code:"End",key:"End"},Numpad1:{keyCode:35,shiftKeyCode:97,key:"End",code:"Numpad1",shiftKey:"1",location:3},Home:{keyCode:36,code:"Home",key:"Home"},Numpad7:{keyCode:36,shiftKeyCode:103,key:"Home",code:"Numpad7",shiftKey:"7",location:3},ArrowLeft:{keyCode:37,code:"ArrowLeft",key:"ArrowLeft"},Numpad4:{keyCode:37,shiftKeyCode:100,key:"ArrowLeft",code:"Numpad4",shiftKey:"4",location:3},Numpad8:{keyCode:38,shiftKeyCode:104,key:"ArrowUp",code:"Numpad8",shiftKey:"8",location:3},ArrowUp:{keyCode:38,code:"ArrowUp",key:"ArrowUp"},ArrowRight:{keyCode:39,code:"ArrowRight",key:"ArrowRight"},Numpad6:{keyCode:39,shiftKeyCode:102,key:"ArrowRight",code:"Numpad6",shiftKey:"6",location:3},Numpad2:{keyCode:40,shiftKeyCode:98,key:"ArrowDown",code:"Numpad2",shiftKey:"2",location:3},ArrowDown:{keyCode:40,code:"ArrowDown",key:"ArrowDown"},Select:{keyCode:41,code:"Select",key:"Select"},Open:{keyCode:43,code:"Open",key:"Execute"},PrintScreen:{keyCode:44,code:"PrintScreen",key:"PrintScreen"},Insert:{keyCode:45,code:"Insert",key:"Insert"},Numpad0:{keyCode:45,shiftKeyCode:96,key:"Insert",code:"Numpad0",shiftKey:"0",location:3},Delete:{keyCode:46,code:"Delete",key:"Delete"},NumpadDecimal:{keyCode:46,shiftKeyCode:110,code:"NumpadDecimal",key:"\0",shiftKey:".",location:3},Digit0:{keyCode:48,code:"Digit0",shiftKey:")",key:"0"},Digit1:{keyCode:49,code:"Digit1",shiftKey:"!",key:"1"},Digit2:{keyCode:50,code:"Digit2",shiftKey:"@",key:"2"},Digit3:{keyCode:51,code:"Digit3",shiftKey:"#",key:"3"},Digit4:{keyCode:52,code:"Digit4",shiftKey:"$",key:"4"},Digit5:{keyCode:53,code:"Digit5",shiftKey:"%",key:"5"},Digit6:{keyCode:54,code:"Digit6",shiftKey:"^",key:"6"},Digit7:{keyCode:55,code:"Digit7",shiftKey:"&",key:"7"},Digit8:{keyCode:56,code:"Digit8",shiftKey:"*",key:"8"},Digit9:{keyCode:57,code:"Digit9",shiftKey:"(",key:"9"},KeyA:{keyCode:65,code:"KeyA",shiftKey:"A",key:"a"},KeyB:{keyCode:66,code:"KeyB",shiftKey:"B",key:"b"},KeyC:{keyCode:67,code:"KeyC",shiftKey:"C",key:"c"},KeyD:{keyCode:68,code:"KeyD",shiftKey:"D",key:"d"},KeyE:{keyCode:69,code:"KeyE",shiftKey:"E",key:"e"},KeyF:{keyCode:70,code:"KeyF",shiftKey:"F",key:"f"},KeyG:{keyCode:71,code:"KeyG",shiftKey:"G",key:"g"},KeyH:{keyCode:72,code:"KeyH",shiftKey:"H",key:"h"},KeyI:{keyCode:73,code:"KeyI",shiftKey:"I",key:"i"},KeyJ:{keyCode:74,code:"KeyJ",shiftKey:"J",key:"j"},KeyK:{keyCode:75,code:"KeyK",shiftKey:"K",key:"k"},KeyL:{keyCode:76,code:"KeyL",shiftKey:"L",key:"l"},KeyM:{keyCode:77,code:"KeyM",shiftKey:"M",key:"m"},KeyN:{keyCode:78,code:"KeyN",shiftKey:"N",key:"n"},KeyO:{keyCode:79,code:"KeyO",shiftKey:"O",key:"o"},KeyP:{keyCode:80,code:"KeyP",shiftKey:"P",key:"p"},KeyQ:{keyCode:81,code:"KeyQ",shiftKey:"Q",key:"q"},KeyR:{keyCode:82,code:"KeyR",shiftKey:"R",key:"r"},KeyS:{keyCode:83,code:"KeyS",shiftKey:"S",key:"s"},KeyT:{keyCode:84,code:"KeyT",shiftKey:"T",key:"t"},KeyU:{keyCode:85,code:"KeyU",shiftKey:"U",key:"u"},KeyV:{keyCode:86,code:"KeyV",shiftKey:"V",key:"v"},KeyW:{keyCode:87,code:"KeyW",shiftKey:"W",key:"w"},KeyX:{keyCode:88,code:"KeyX",shiftKey:"X",key:"x"},KeyY:{keyCode:89,code:"KeyY",shiftKey:"Y",key:"y"},KeyZ:{keyCode:90,code:"KeyZ",shiftKey:"Z",key:"z"},MetaLeft:{keyCode:91,code:"MetaLeft",key:"Meta",location:1},MetaRight:{keyCode:92,code:"MetaRight",key:"Meta",location:2},ContextMenu:{keyCode:93,code:"ContextMenu",key:"ContextMenu"},NumpadMultiply:{keyCode:106,code:"NumpadMultiply",key:"*",location:3},NumpadAdd:{keyCode:107,code:"NumpadAdd",key:"+",location:3},NumpadSubtract:{keyCode:109,code:"NumpadSubtract",key:"-",location:3},NumpadDivide:{keyCode:111,code:"NumpadDivide",key:"/",location:3},F1:{keyCode:112,code:"F1",key:"F1"},F2:{keyCode:113,code:"F2",key:"F2"},F3:{keyCode:114,code:"F3",key:"F3"},F4:{keyCode:115,code:"F4",key:"F4"},F5:{keyCode:116,code:"F5",key:"F5"},F6:{keyCode:117,code:"F6",key:"F6"},F7:{keyCode:118,code:"F7",key:"F7"},F8:{keyCode:119,code:"F8",key:"F8"},F9:{keyCode:120,code:"F9",key:"F9"},F10:{keyCode:121,code:"F10",key:"F10"},F11:{keyCode:122,code:"F11",key:"F11"},F12:{keyCode:123,code:"F12",key:"F12"},F13:{keyCode:124,code:"F13",key:"F13"},F14:{keyCode:125,code:"F14",key:"F14"},F15:{keyCode:126,code:"F15",key:"F15"},F16:{keyCode:127,code:"F16",key:"F16"},F17:{keyCode:128,code:"F17",key:"F17"},F18:{keyCode:129,code:"F18",key:"F18"},F19:{keyCode:130,code:"F19",key:"F19"},F20:{keyCode:131,code:"F20",key:"F20"},F21:{keyCode:132,code:"F21",key:"F21"},F22:{keyCode:133,code:"F22",key:"F22"},F23:{keyCode:134,code:"F23",key:"F23"},F24:{keyCode:135,code:"F24",key:"F24"},NumLock:{keyCode:144,code:"NumLock",key:"NumLock"},ScrollLock:{keyCode:145,code:"ScrollLock",key:"ScrollLock"},AudioVolumeMute:{keyCode:173,code:"AudioVolumeMute",key:"AudioVolumeMute"},AudioVolumeDown:{keyCode:174,code:"AudioVolumeDown",key:"AudioVolumeDown"},AudioVolumeUp:{keyCode:175,code:"AudioVolumeUp",key:"AudioVolumeUp"},MediaTrackNext:{keyCode:176,code:"MediaTrackNext",key:"MediaTrackNext"},MediaTrackPrevious:{keyCode:177,code:"MediaTrackPrevious",key:"MediaTrackPrevious"},MediaStop:{keyCode:178,code:"MediaStop",key:"MediaStop"},MediaPlayPause:{keyCode:179,code:"MediaPlayPause",key:"MediaPlayPause"},Semicolon:{keyCode:186,code:"Semicolon",shiftKey:":",key:";"},Equal:{keyCode:187,code:"Equal",shiftKey:"+",key:"="},NumpadEqual:{keyCode:187,code:"NumpadEqual",key:"=",location:3},Comma:{keyCode:188,code:"Comma",shiftKey:"<",key:","},Minus:{keyCode:189,code:"Minus",shiftKey:"_",key:"-"},Period:{keyCode:190,code:"Period",shiftKey:">",key:"."},Slash:{keyCode:191,code:"Slash",shiftKey:"?",key:"/"},Backquote:{keyCode:192,code:"Backquote",shiftKey:"~",key:"`"},BracketLeft:{keyCode:219,code:"BracketLeft",shiftKey:"{",key:"["},Backslash:{keyCode:220,code:"Backslash",shiftKey:"|",key:"\\"},BracketRight:{keyCode:221,code:"BracketRight",shiftKey:"}",key:"]"},Quote:{keyCode:222,code:"Quote",shiftKey:'"',key:"'"},AltGraph:{keyCode:225,code:"AltGraph",key:"AltGraph"},Props:{keyCode:247,code:"Props",key:"CrSel"},Cancel:{keyCode:3,key:"Cancel",code:"Abort"},Clear:{keyCode:12,key:"Clear",code:"Numpad5",location:3},Shift:{keyCode:16,key:"Shift",code:"ShiftLeft",location:1},Control:{keyCode:17,key:"Control",code:"ControlLeft",location:1},Alt:{keyCode:18,key:"Alt",code:"AltLeft",location:1},Accept:{keyCode:30,key:"Accept"},ModeChange:{keyCode:31,key:"ModeChange"}," ":{keyCode:32,key:" ",code:"Space"},Print:{keyCode:42,key:"Print"},Execute:{keyCode:43,key:"Execute",code:"Open"},"\0":{keyCode:46,key:"\0",code:"NumpadDecimal",location:3},a:{keyCode:65,key:"a",code:"KeyA"},b:{keyCode:66,key:"b",code:"KeyB"},c:{keyCode:67,key:"c",code:"KeyC"},d:{keyCode:68,key:"d",code:"KeyD"},e:{keyCode:69,key:"e",code:"KeyE"},f:{keyCode:70,key:"f",code:"KeyF"},g:{keyCode:71,key:"g",code:"KeyG"},h:{keyCode:72,key:"h",code:"KeyH"},i:{keyCode:73,key:"i",code:"KeyI"},j:{keyCode:74,key:"j",code:"KeyJ"},k:{keyCode:75,key:"k",code:"KeyK"},l:{keyCode:76,key:"l",code:"KeyL"},m:{keyCode:77,key:"m",code:"KeyM"},n:{keyCode:78,key:"n",code:"KeyN"},o:{keyCode:79,key:"o",code:"KeyO"},p:{keyCode:80,key:"p",code:"KeyP"},q:{keyCode:81,key:"q",code:"KeyQ"},r:{keyCode:82,key:"r",code:"KeyR"},s:{keyCode:83,key:"s",code:"KeyS"},t:{keyCode:84,key:"t",code:"KeyT"},u:{keyCode:85,key:"u",code:"KeyU"},v:{keyCode:86,key:"v",code:"KeyV"},w:{keyCode:87,key:"w",code:"KeyW"},x:{keyCode:88,key:"x",code:"KeyX"},y:{keyCode:89,key:"y",code:"KeyY"},z:{keyCode:90,key:"z",code:"KeyZ"},Meta:{keyCode:91,key:"Meta",code:"MetaLeft",location:1},"*":{keyCode:106,key:"*",code:"NumpadMultiply",location:3},"+":{keyCode:107,key:"+",code:"NumpadAdd",location:3},"-":{keyCode:109,key:"-",code:"NumpadSubtract",location:3},"/":{keyCode:111,key:"/",code:"NumpadDivide",location:3},";":{keyCode:186,key:";",code:"Semicolon"},"=":{keyCode:187,key:"=",code:"Equal"},",":{keyCode:188,key:",",code:"Comma"},".":{keyCode:190,key:".",code:"Period"},"`":{keyCode:192,key:"`",code:"Backquote"},"[":{keyCode:219,key:"[",code:"BracketLeft"},"\\":{keyCode:220,key:"\\",code:"Backslash"},"]":{keyCode:221,key:"]",code:"BracketRight"},"'":{keyCode:222,key:"'",code:"Quote"},Attn:{keyCode:246,key:"Attn"},CrSel:{keyCode:247,key:"CrSel",code:"Props"},ExSel:{keyCode:248,key:"ExSel"},EraseEof:{keyCode:249,key:"EraseEof"},Play:{keyCode:250,key:"Play"},ZoomOut:{keyCode:251,key:"ZoomOut"},")":{keyCode:48,key:")",code:"Digit0"},"!":{keyCode:49,key:"!",code:"Digit1"},"@":{keyCode:50,key:"@",code:"Digit2"},"#":{keyCode:51,key:"#",code:"Digit3"},$:{keyCode:52,key:"$",code:"Digit4"},"%":{keyCode:53,key:"%",code:"Digit5"},"^":{keyCode:54,key:"^",code:"Digit6"},"&":{keyCode:55,key:"&",code:"Digit7"},"(":{keyCode:57,key:"(",code:"Digit9"},A:{keyCode:65,key:"A",code:"KeyA"},B:{keyCode:66,key:"B",code:"KeyB"},C:{keyCode:67,key:"C",code:"KeyC"},D:{keyCode:68,key:"D",code:"KeyD"},E:{keyCode:69,key:"E",code:"KeyE"},F:{keyCode:70,key:"F",code:"KeyF"},G:{keyCode:71,key:"G",code:"KeyG"},H:{keyCode:72,key:"H",code:"KeyH"},I:{keyCode:73,key:"I",code:"KeyI"},J:{keyCode:74,key:"J",code:"KeyJ"},K:{keyCode:75,key:"K",code:"KeyK"},L:{keyCode:76,key:"L",code:"KeyL"},M:{keyCode:77,key:"M",code:"KeyM"},N:{keyCode:78,key:"N",code:"KeyN"},O:{keyCode:79,key:"O",code:"KeyO"},P:{keyCode:80,key:"P",code:"KeyP"},Q:{keyCode:81,key:"Q",code:"KeyQ"},R:{keyCode:82,key:"R",code:"KeyR"},S:{keyCode:83,key:"S",code:"KeyS"},T:{keyCode:84,key:"T",code:"KeyT"},U:{keyCode:85,key:"U",code:"KeyU"},V:{keyCode:86,key:"V",code:"KeyV"},W:{keyCode:87,key:"W",code:"KeyW"},X:{keyCode:88,key:"X",code:"KeyX"},Y:{keyCode:89,key:"Y",code:"KeyY"},Z:{keyCode:90,key:"Z",code:"KeyZ"},":":{keyCode:186,key:":",code:"Semicolon"},"<":{keyCode:188,key:"<",code:"Comma"},_:{keyCode:189,key:"_",code:"Minus"},">":{keyCode:190,key:">",code:"Period"},"?":{keyCode:191,key:"?",code:"Slash"},"~":{keyCode:192,key:"~",code:"Backquote"},"{":{keyCode:219,key:"{",code:"BracketLeft"},"|":{keyCode:220,key:"|",code:"Backslash"},"}":{keyCode:221,key:"}",code:"BracketRight"},'"':{keyCode:222,key:'"',code:"Quote"},SoftLeft:{key:"SoftLeft",code:"SoftLeft",location:4},SoftRight:{key:"SoftRight",code:"SoftRight",location:4},Camera:{keyCode:44,key:"Camera",code:"Camera",location:4},Call:{key:"Call",code:"Call",location:4},EndCall:{keyCode:95,key:"EndCall",code:"EndCall",location:4},VolumeDown:{keyCode:182,key:"VolumeDown",code:"VolumeDown",location:4},VolumeUp:{keyCode:183,key:"VolumeUp",code:"VolumeUp",location:4}};Rf();var eM,VW,rM,xqe,kqe,hve=class extends Kq{constructor(s){super();Ae(this,rM);Ae(this,eM);Ae(this,VW,new Set);Hr(this,"_modifiers",0);Be(this,eM,s)}updateClient(s){Be(this,eM,s)}async down(s,c={text:void 0,commands:[]}){let f=Ke(this,rM,kqe).call(this,s),p=I(this,VW).has(f.code);I(this,VW).add(f.code),this._modifiers|=Ke(this,rM,xqe).call(this,f.key);let C=c.text===void 0?f.text:c.text;await I(this,eM).send("Input.dispatchKeyEvent",{type:C?"keyDown":"rawKeyDown",modifiers:this._modifiers,windowsVirtualKeyCode:f.keyCode,code:f.code,key:f.key,text:C,unmodifiedText:C,autoRepeat:p,location:f.location,isKeypad:f.location===3,commands:c.commands})}async up(s){let c=Ke(this,rM,kqe).call(this,s);this._modifiers&=~Ke(this,rM,xqe).call(this,c.key),I(this,VW).delete(c.code),await I(this,eM).send("Input.dispatchKeyEvent",{type:"keyUp",modifiers:this._modifiers,key:c.key,windowsVirtualKeyCode:c.keyCode,code:c.code,location:c.location})}async sendCharacter(s){await I(this,eM).send("Input.insertText",{text:s})}charIsKey(s){return!!Sqe[s]}async type(s,c={}){let f=c.delay||void 0;for(let p of s)this.charIsKey(p)?await this.press(p,{delay:f}):(f&&await new Promise(C=>setTimeout(C,f)),await this.sendCharacter(p))}async press(s,c={}){let{delay:f=null}=c;await this.down(s,c),f&&await new Promise(p=>setTimeout(p,c.delay)),await this.up(s)}};eM=new WeakMap,VW=new WeakMap,rM=new WeakSet,xqe=function(s){return s==="Alt"?1:s==="Control"?2:s==="Meta"?4:s==="Shift"?8:0},kqe=function(s){let c=this._modifiers&8,f={key:"",keyCode:0,code:"",text:"",location:0},p=Sqe[s];return Is(p,`Unknown key: "${s}"`),p.key&&(f.key=p.key),c&&p.shiftKey&&(f.key=p.shiftKey),p.keyCode&&(f.keyCode=p.keyCode),c&&p.shiftKeyCode&&(f.keyCode=p.shiftKeyCode),p.code&&(f.code=p.code),p.location&&(f.location=p.location),f.key.length===1&&(f.text=f.key),p.text&&(f.text=p.text),c&&p.shiftText&&(f.text=p.shiftText),this._modifiers&-9&&(f.text=""),f};var Axt=a=>{switch(a){case vd.Left:return 1;case vd.Right:return 2;case vd.Middle:return 4;case vd.Back:return 8;case vd.Forward:return 16}},pbr=a=>a&1?vd.Left:a&2?vd.Right:a&4?vd.Middle:a&8?vd.Back:a&16?vd.Forward:"none",BQ,WD,zW,Th,yQ,y7,uxt,_ve,mve=class extends qq{constructor(s,c){super();Ae(this,Th);Ae(this,BQ);Ae(this,WD);Ae(this,zW,{position:{x:0,y:0},buttons:0});Ae(this,y7,[]);Be(this,BQ,s),Be(this,WD,c)}updateClient(s){Be(this,BQ,s)}async reset(){let s=[];for(let[c,f]of[[1,vd.Left],[4,vd.Middle],[2,vd.Right],[16,vd.Forward],[8,vd.Back]])I(this,Th,yQ).buttons&c&&s.push(this.up({button:f}));(I(this,Th,yQ).position.x!==0||I(this,Th,yQ).position.y!==0)&&s.push(this.move(0,0)),await Promise.all(s)}async move(s,c,f={}){let{steps:p=1}=f,C=I(this,Th,yQ).position,b={x:s,y:c};for(let N=1;N<=p;N++)await Ke(this,Th,_ve).call(this,L=>{L({position:{x:C.x+(b.x-C.x)*(N/p),y:C.y+(b.y-C.y)*(N/p)}});let{buttons:O,position:j}=I(this,Th,yQ);return I(this,BQ).send("Input.dispatchMouseEvent",{type:"mouseMoved",modifiers:I(this,WD)._modifiers,buttons:O,button:pbr(O),...j})})}async down(s={}){let{button:c=vd.Left,clickCount:f=1}=s,p=Axt(c);if(!p)throw new Error(`Unsupported mouse button: ${c}`);if(I(this,Th,yQ).buttons&p)throw new Error(`'${c}' is already pressed.`);await Ke(this,Th,_ve).call(this,C=>{C({buttons:I(this,Th,yQ).buttons|p});let{buttons:b,position:N}=I(this,Th,yQ);return I(this,BQ).send("Input.dispatchMouseEvent",{type:"mousePressed",modifiers:I(this,WD)._modifiers,clickCount:f,buttons:b,button:c,...N})})}async up(s={}){let{button:c=vd.Left,clickCount:f=1}=s,p=Axt(c);if(!p)throw new Error(`Unsupported mouse button: ${c}`);if(!(I(this,Th,yQ).buttons&p))throw new Error(`'${c}' is not pressed.`);await Ke(this,Th,_ve).call(this,C=>{C({buttons:I(this,Th,yQ).buttons&~p});let{buttons:b,position:N}=I(this,Th,yQ);return I(this,BQ).send("Input.dispatchMouseEvent",{type:"mouseReleased",modifiers:I(this,WD)._modifiers,clickCount:f,buttons:b,button:c,...N})})}async click(s,c,f={}){let{delay:p,count:C=1,clickCount:b=C}=f;if(C<1)throw new Error("Click must occur a positive number of times.");let N=[this.move(s,c)];if(b===C)for(let L=1;L{setTimeout(L,p)})),N.push(this.up({...f,clickCount:b})),await Promise.all(N)}async wheel(s={}){let{deltaX:c=0,deltaY:f=0}=s,{position:p,buttons:C}=I(this,Th,yQ);await I(this,BQ).send("Input.dispatchMouseEvent",{type:"mouseWheel",pointerType:"mouse",modifiers:I(this,WD)._modifiers,deltaY:f,deltaX:c,buttons:C,...p})}async drag(s,c){let f=new Promise(p=>{I(this,BQ).once("Input.dragIntercepted",C=>p(C.data))});return await this.move(s.x,s.y),await this.down(),await this.move(c.x,c.y),await f}async dragEnter(s,c){await I(this,BQ).send("Input.dispatchDragEvent",{type:"dragEnter",x:s.x,y:s.y,modifiers:I(this,WD)._modifiers,data:c})}async dragOver(s,c){await I(this,BQ).send("Input.dispatchDragEvent",{type:"dragOver",x:s.x,y:s.y,modifiers:I(this,WD)._modifiers,data:c})}async drop(s,c){await I(this,BQ).send("Input.dispatchDragEvent",{type:"drop",x:s.x,y:s.y,modifiers:I(this,WD)._modifiers,data:c})}async dragAndDrop(s,c,f={}){let{delay:p=null}=f,C=await this.drag(s,c);await this.dragEnter(c,C),await this.dragOver(c,C),p&&await new Promise(b=>setTimeout(b,p)),await this.drop(c,C),await this.up()}};BQ=new WeakMap,WD=new WeakMap,zW=new WeakMap,Th=new WeakSet,yQ=function(){return Object.assign({...I(this,zW)},...I(this,y7))},y7=new WeakMap,uxt=function(){let s={};I(this,y7).push(s);let c=()=>{I(this,y7).splice(I(this,y7).indexOf(s),1)};return{update:f=>{Object.assign(s,f)},commit:()=>{Be(this,zW,{...I(this,zW),...s}),c()},rollback:c}},_ve=async function(s){let{update:c,commit:f,rollback:p}=Ke(this,Th,uxt).call(this);try{await s(c),f()}catch(C){throw p(),C}};var _ce,hce,xN,tM,B7,Tqe=class{constructor(r,s,c,f){Ae(this,_ce,!1);Ae(this,hce);Ae(this,xN);Ae(this,tM);Ae(this,B7);Be(this,tM,r),Be(this,hce,s),Be(this,B7,c),Be(this,xN,f)}updateClient(r){Be(this,tM,r)}async start(){if(I(this,_ce))throw new _N("Touch has already started");await I(this,tM).send("Input.dispatchTouchEvent",{type:"touchStart",touchPoints:[I(this,xN)],modifiers:I(this,B7)._modifiers}),Be(this,_ce,!0)}move(r,s){return I(this,xN).x=Math.round(r),I(this,xN).y=Math.round(s),I(this,tM).send("Input.dispatchTouchEvent",{type:"touchMove",touchPoints:[I(this,xN)],modifiers:I(this,B7)._modifiers})}async end(){await I(this,tM).send("Input.dispatchTouchEvent",{type:"touchEnd",touchPoints:[I(this,xN)],modifiers:I(this,B7)._modifiers}),I(this,hce).removeHandle(this)}};_ce=new WeakMap,hce=new WeakMap,xN=new WeakMap,tM=new WeakMap,B7=new WeakMap;var XW,mce,Cve=class extends Wq{constructor(s,c){super();Ae(this,XW);Ae(this,mce);Be(this,XW,s),Be(this,mce,c)}updateClient(s){Be(this,XW,s),this.touches.forEach(c=>{c.updateClient(s)})}async touchStart(s,c){let f=this.idGenerator(),p={x:Math.round(s),y:Math.round(c),radiusX:.5,radiusY:.5,force:.5,id:f},C=new Tqe(I(this,XW),this,I(this,mce),p);return await C.start(),this.touches.push(C),C}};XW=new WeakMap,mce=new WeakMap;Ive();vB();Yae();JQe();Gae();GA();var Rk,Pk,eY,Ice,tY=class extends Xq{constructor(s,c,f,p,C,b,N){super(c);Ae(this,Rk);Ae(this,Pk);Ae(this,eY);Ae(this,Ice);Be(this,eY,f),Be(this,Pk,s),Be(this,Ice,p),Be(this,Rk,new c7(this,new b3)),I(this,Pk).once("Runtime.executionContextCreated",async L=>{I(this,Rk).setContext(new kW(s,L.context,I(this,Rk)))}),I(this,Rk).emitter.on("consoleapicalled",async L=>{try{return C(I(this,Rk),L)}catch(O){Ss(O)}}),I(this,Pk).on("Runtime.exceptionThrown",b),I(this,Pk).once(bl.Disconnected,()=>{I(this,Rk).dispose()}),N?.addClient(I(this,Pk)).catch(Ss),I(this,Pk).send("Runtime.enable").catch(Ss)}mainRealm(){return I(this,Rk)}get client(){return I(this,Pk)}async close(){switch(I(this,Ice)){case cm.SERVICE_WORKER:{await this.client.connection()?.send("Target.closeTarget",{targetId:I(this,eY)}),await this.client.connection()?.send("Target.detachFromTarget",{sessionId:this.client.id()});break}case cm.SHARED_WORKER:{await this.client.connection()?.send("Target.closeTarget",{targetId:I(this,eY)});break}default:await this.evaluate(()=>{self.close()})}}};Rk=new WeakMap,Pk=new WeakMap,eY=new WeakMap,Ice=new WeakMap;var Fqe=function(a,r,s){if(r!=null){if(typeof r!="object"&&typeof r!="function")throw new TypeError("Object expected.");var c,f;if(s){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");c=r[Symbol.asyncDispose]}if(c===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");c=r[Symbol.dispose],s&&(f=c)}if(typeof c!="function")throw new TypeError("Object not disposable.");f&&(c=function(){try{f.call(this)}catch(p){return Promise.reject(p)}}),a.stack.push({value:r,dispose:c,async:s})}else s&&a.stack.push({async:!0});return r},Nqe=(function(a){return function(r){function s(C){r.error=r.hasError?new a(C,r.error,"An error was suppressed during disposal."):C,r.hasError=!0}var c,f=0;function p(){for(;c=r.stack.pop();)try{if(!c.async&&f===1)return f=0,r.stack.push(c),Promise.resolve().then(p);if(c.dispose){var C=c.dispose.call(c.value);if(c.async)return f|=2,Promise.resolve(C).then(p,function(b){return s(b),p()})}else f|=1}catch(b){s(b)}if(f===1)return r.hasError?Promise.reject(r.error):Promise.resolve();if(r.hasError)throw r.error}return p()}})(typeof SuppressedError=="function"?SuppressedError:function(a,r,s){var c=new Error(s);return c.name="SuppressedError",c.error=a,c.suppressed=r,c});function lxt(a){switch(a){case"warning":return"warn";default:return a}}function Uqe(a){switch(a){case"Strict":case"Lax":case"None":return a;default:return}}var Ece,iM,yce,Af,Sw,nM,sM,aM,rY,iY,td,Fh,nY,oM,sY,aY,oY,Q7,TN,yve,Bce,Qce,xl,fxt,gxt,dxt,Rqe,vce,cY,pxt,_xt,hxt,mxt,Cxt,Pqe,Mqe,Lqe,Ixt,Ext,Oqe,Gqe=class Gqe extends MQe{constructor(s,c){super();Ae(this,xl);Ae(this,Ece,!1);Ae(this,iM);Ae(this,yce);Ae(this,Af);Ae(this,Sw);Ae(this,nM);Ae(this,sM);Ae(this,aM);Ae(this,rY);Ae(this,iY);Ae(this,td);Ae(this,Fh);Ae(this,nY);Ae(this,oM,new Map);Ae(this,sY,new Map);Ae(this,aY);Ae(this,oY);Ae(this,Q7,new Map);Ae(this,TN,new Set);Ae(this,yve,ZA.create());Ae(this,Bce,!1);Ae(this,Qce,!1);Ae(this,vce,s=>{let c=s._session()?.id(),f=I(this,Q7).get(c);f&&(I(this,Q7).delete(c),this.emit("workerdestroyed",f))});Ae(this,cY,s=>{if(Is(s instanceof hQ),I(this,td).onAttachedToTarget(s.target()),s.target()._getTargetInfo().type==="worker"){let c=new tY(s,s.target().url(),s.target()._targetId,s.target().type(),Ke(this,xl,Lqe).bind(this),Ke(this,xl,Mqe).bind(this),I(this,td).networkManager);I(this,Q7).set(s.id(),c),this.emit("workercreated",c)}s.on(bl.Ready,I(this,cY))});Be(this,Af,s),Be(this,nM,s.parentSession()),Is(I(this,nM),"Tab target session is not defined."),Be(this,sM,I(this,nM).target()),Is(I(this,sM),"Tab target is not defined."),this._tabId=I(this,sM)._getTargetInfo().targetId,Be(this,Sw,c),Be(this,iM,c._targetManager()),Be(this,aM,new hve(s)),Be(this,rY,new mve(s,I(this,aM))),Be(this,iY,new Cve(s,I(this,aM))),Be(this,td,new pve(s,this,this._timeoutSettings)),Be(this,Fh,new VQe(s)),Be(this,nY,new $W(s)),Be(this,aY,new IW(s)),Be(this,oY,null),Be(this,yce,new jQe(I(this,Af).connection()));let f=new ya(I(this,td));f.on(W_.FrameAttached,C=>{this.emit("frameattached",C)}),f.on(W_.FrameDetached,C=>{this.emit("framedetached",C)}),f.on(W_.FrameNavigated,C=>{this.emit("framenavigated",C)}),f.on(W_.ConsoleApiCalled,([C,b])=>{Ke(this,xl,Lqe).call(this,C,b)}),f.on(W_.BindingCalled,([C,b])=>{Ke(this,xl,Ixt).call(this,C,b)});let p=new ya(I(this,td).networkManager);p.on(kh.Request,C=>{this.emit("request",C)}),p.on(kh.RequestServedFromCache,C=>{this.emit("requestservedfromcache",C)}),p.on(kh.Response,C=>{this.emit("response",C)}),p.on(kh.RequestFailed,C=>{this.emit("requestfailed",C)}),p.on(kh.RequestFinished,C=>{this.emit("requestfinished",C)}),I(this,nM).on(bl.Swapped,Ke(this,xl,gxt).bind(this)),I(this,nM).on(bl.Ready,Ke(this,xl,dxt).bind(this)),I(this,iM).on("targetGone",I(this,vce)),I(this,sM)._isClosedDeferred.valueOrThrow().then(()=>{I(this,iM).off("targetGone",I(this,vce)),this.emit("close",void 0),Be(this,Ece,!0)}).catch(Ss),Ke(this,xl,Rqe).call(this),Ke(this,xl,fxt).call(this)}static async _create(s,c,f){var C;let p=new Gqe(s,c);if(await Ke(C=p,xl,pxt).call(C),f)try{await p.setViewport(f)}catch(b){if(g_(b)&&V5(b))Ss(b);else throw b}return p}async resize(s){let c=await this.windowId();await I(this,Af).send("Browser.setContentsSize",{windowId:Number(c),width:s.contentWidth,height:s.contentHeight})}async windowId(){let{windowId:s}=await I(this,Af).send("Browser.getWindowForTarget");return s.toString()}_client(){return I(this,Af)}isServiceWorkerBypassed(){return I(this,Bce)}isDragInterceptionEnabled(){return I(this,Qce)}isJavaScriptEnabled(){return I(this,Fh).javascriptEnabled}async openDevTools(){let s=this.target()._targetId;return await this.browser()._createDevToolsPage(s)}async hasDevTools(){return!!await this.browser()._hasDevToolsTarget(this.target()._targetId)}async waitForFileChooser(s={}){let c=I(this,TN).size===0,{timeout:f=this._timeoutSettings.timeout()}=s,p=ZA.create({message:`Waiting for \`FileChooser\` failed: ${f}ms exceeded`,timeout:f});s.signal&&s.signal.addEventListener("abort",()=>{p.reject(s.signal?.reason)},{once:!0}),I(this,TN).add(p);let C;c&&(C=I(this,Af).send("Page.setInterceptFileChooserDialog",{enabled:!0}));try{let[b]=await Promise.all([p.valueOrThrow(),C]);return b}catch(b){throw I(this,TN).delete(p),b}}async setGeolocation(s){return await I(this,Fh).setGeolocation(s)}target(){return I(this,Sw)}browser(){return I(this,Sw).browser()}browserContext(){return I(this,Sw).browserContext()}mainFrame(){return I(this,td).mainFrame()}get keyboard(){return I(this,aM)}get touchscreen(){return I(this,iY)}get coverage(){return I(this,aY)}get tracing(){return I(this,nY)}frames(){return I(this,td).frames()}workers(){return Array.from(I(this,Q7).values())}async setRequestInterception(s){return await I(this,td).networkManager.setRequestInterception(s)}async setBypassServiceWorker(s){return Be(this,Bce,s),await I(this,Af).send("Network.setBypassServiceWorker",{bypass:s})}async setDragInterception(s){return Be(this,Qce,s),await I(this,Af).send("Input.setInterceptDrags",{enabled:s})}async setOfflineMode(s){return await I(this,td).networkManager.setOfflineMode(s)}async emulateNetworkConditions(s){return await I(this,td).networkManager.emulateNetworkConditions(s)}async emulateFocusedPage(s){return await I(this,Fh).emulateFocus(s)}setDefaultNavigationTimeout(s){this._timeoutSettings.setDefaultNavigationTimeout(s)}setDefaultTimeout(s){this._timeoutSettings.setDefaultTimeout(s)}getDefaultTimeout(){return this._timeoutSettings.timeout()}getDefaultNavigationTimeout(){return this._timeoutSettings.navigationTimeout()}async queryObjects(s){Is(!s.disposed,"Prototype JSHandle is disposed!"),Is(s.id,"Prototype JSHandle must not be referencing primitive value");let c=await this.mainFrame().client.send("Runtime.queryObjects",{prototypeObjectId:s.id});return this.mainFrame().mainRealm().createCdpHandle(c.objects)}async cookies(...s){let c=(await I(this,Af).send("Network.getCookies",{urls:s.length?s:[this.url()]})).cookies,f=["sourcePort"],p=C=>{for(let b of f)delete C[b];return C};return c.map(p).map(C=>({...C,partitionKey:C.partitionKey?C.partitionKey.topLevelSite:void 0,sameParty:!1}))}async deleteCookie(...s){let c=this.url();for(let f of s){let p={...f,partitionKey:Eve(f.partitionKey)};if(!f.url&&c.startsWith("http")&&(p.url=c),await I(this,Af).send("Network.deleteCookies",p),c.startsWith("http")&&!p.partitionKey){let C=new URL(c);await I(this,Af).send("Network.deleteCookies",{...p,partitionKey:{topLevelSite:C.origin.replace(`:${C.port}`,""),hasCrossSiteAncestor:!1}})}}}async setCookie(...s){let c=this.url(),f=c.startsWith("http"),p=s.map(C=>{let b=Object.assign({},C);return!b.url&&f&&(b.url=c),Is(b.url!=="about:blank",`Blank page can not have cookie "${b.name}"`),Is(!String.prototype.startsWith.call(b.url||"","data:"),`Data URL page can not have cookie "${b.name}"`),b});await this.deleteCookie(...p),p.length&&await I(this,Af).send("Network.setCookies",{cookies:p.map(C=>({...C,partitionKey:Eve(C.partitionKey),sameSite:Uqe(C.sameSite)}))})}async exposeFunction(s,c){if(I(this,oM).has(s))throw new Error(`Failed to add page binding with name ${s}: window['${s}'] already exists!`);let f=vSt("exposedFun",s),p;switch(typeof c){case"function":p=new k3(s,c,f);break;default:p=new k3(s,c.default,f);break}I(this,oM).set(s,p);let[{identifier:C}]=await Promise.all([I(this,td).evaluateOnNewDocument(f),I(this,td).addExposedFunctionBinding(p)]);I(this,sY).set(s,C)}async removeExposedFunction(s){let c=I(this,sY).get(s);if(!c)throw new Error(`Function with name "${s}" does not exist`);let f=I(this,oM).get(s);I(this,sY).delete(s),I(this,oM).delete(s),await Promise.all([I(this,td).removeScriptToEvaluateOnNewDocument(c),I(this,td).removeExposedFunctionBinding(f)])}async authenticate(s){return await I(this,td).networkManager.authenticate(s)}async setExtraHTTPHeaders(s){return await I(this,td).networkManager.setExtraHTTPHeaders(s)}async setUserAgent(s,c){if(typeof s=="string")return await I(this,td).networkManager.setUserAgent(s,c);{let f=s.userAgent??await this.browser().userAgent();return await I(this,td).networkManager.setUserAgent(f,s.userAgentMetadata,s.platform)}}async metrics(){let s=await I(this,Af).send("Performance.getMetrics");return Ke(this,xl,Pqe).call(this,s.metrics)}async captureHeapSnapshot(s){let{createWriteStream:c}=Ym.value.fs,f=c(s.path),p=new Promise((N,L)=>{f.on("error",L),f.on("finish",N)}),C=I(this,Af);await C.send("HeapProfiler.enable"),await C.send("HeapProfiler.collectGarbage");let b=N=>{f.write(N.chunk)};C.on("HeapProfiler.addHeapSnapshotChunk",b);try{await C.send("HeapProfiler.takeHeapSnapshot",{reportProgress:!1})}finally{C.off("HeapProfiler.addHeapSnapshotChunk",b),await C.send("HeapProfiler.disable")}f.end(),await p}async reload(s){let[c]=await Promise.all([this.waitForNavigation({...s,ignoreSameDocumentNavigation:!0}),I(this,Af).send("Page.reload",{ignoreCache:s?.ignoreCache??!1})]);return c}async createCDPSession(){return await this.target().createCDPSession()}async goBack(s={}){return await Ke(this,xl,Oqe).call(this,-1,s)}async goForward(s={}){return await Ke(this,xl,Oqe).call(this,1,s)}async bringToFront(){await I(this,Af).send("Page.bringToFront")}async setJavaScriptEnabled(s){return await I(this,Fh).setJavaScriptEnabled(s)}async setBypassCSP(s){await I(this,Af).send("Page.setBypassCSP",{enabled:s})}async emulateMediaType(s){return await I(this,Fh).emulateMediaType(s)}async emulateCPUThrottling(s){return await I(this,Fh).emulateCPUThrottling(s)}async emulateMediaFeatures(s){return await I(this,Fh).emulateMediaFeatures(s)}async emulateTimezone(s){return await I(this,Fh).emulateTimezone(s)}async emulateIdleState(s){return await I(this,Fh).emulateIdleState(s)}async emulateVisionDeficiency(s){return await I(this,Fh).emulateVisionDeficiency(s)}async setViewport(s){let c=await I(this,Fh).emulateViewport(s);Be(this,oY,s),c&&await this.reload()}viewport(){return I(this,oY)}async evaluateOnNewDocument(s,...c){let f=dq(s,...c);return await I(this,td).evaluateOnNewDocument(f)}async removeScriptToEvaluateOnNewDocument(s){return await I(this,td).removeScriptToEvaluateOnNewDocument(s)}async setCacheEnabled(s=!0){await I(this,td).networkManager.setCacheEnabled(s)}async _screenshot(s){let c={stack:[],error:void 0,hasError:!1};try{let{fromSurface:f,omitBackground:p,optimizeForSpeed:C,quality:b,clip:N,type:L,captureBeyondViewport:O}=s,j=Fqe(c,new Y1e,!0);p&&(L==="png"||L==="webp")&&(await I(this,Fh).setTransparentBackgroundColor(),j.defer(async()=>{await I(this,Fh).resetDefaultBackgroundColor().catch(Ss)}));let k=N;if(k&&!O){let J=await this.mainFrame().isolatedRealm().evaluate(()=>{let{height:H,pageLeft:X,pageTop:ge,width:Te}=window.visualViewport;return{x:X,y:ge,height:H,width:Te}});k=hbr(k,J)}let{data:R}=await I(this,Af).send("Page.captureScreenshot",{format:L,optimizeForSpeed:C,fromSurface:f,...b!==void 0?{quality:Math.round(b)}:{},...k?{clip:{...k,scale:k.scale??1}}:{},captureBeyondViewport:O});return R}catch(f){c.error=f,c.hasError=!0}finally{let f=Nqe(c);f&&await f}}async createPDFStream(s={}){let{timeout:c=this._timeoutSettings.timeout()}=s,{landscape:f,displayHeaderFooter:p,headerTemplate:C,footerTemplate:b,printBackground:N,scale:L,width:O,height:j,margin:k,pageRanges:R,preferCSSPageSize:J,omitBackground:H,tagged:X,outline:ge,waitForFonts:Te}=oQe(s);H&&await I(this,Fh).setTransparentBackgroundColor(),Te&&await ed(cu(this.mainFrame().isolatedRealm().evaluate(()=>document.fonts.ready)).pipe(Cp(q_(c))));let Ue=I(this,Af).send("Page.printToPDF",{transferMode:"ReturnAsStream",landscape:f,displayHeaderFooter:p,headerTemplate:C,footerTemplate:b,printBackground:N,scale:L,paperWidth:O,paperHeight:j,marginTop:k.top,marginBottom:k.bottom,marginLeft:k.left,marginRight:k.right,pageRanges:R,preferCSSPageSize:J,generateTaggedPDF:X,generateDocumentOutline:ge}),be=await ed(cu(Ue).pipe(Cp(q_(c))));return H&&await I(this,Fh).resetDefaultBackgroundColor(),Is(be.stream,"`stream` is missing from `Page.printToPDF"),await sQe(I(this,Af),be.stream)}async pdf(s={}){let{path:c=void 0}=s,f=await this.createPDFStream(s),p=await nQe(f,c);return Is(p,"Could not create typed array"),p}async close(s={runBeforeUnload:void 0}){let c={stack:[],error:void 0,hasError:!1};try{let f=Fqe(c,await this.browserContext().waitForScreenshotOperations(),!1),p=I(this,Af).connection();Is(p,"Connection closed. Most likely the page has been closed."),!!s.runBeforeUnload?await I(this,Af).send("Page.close"):(await p.send("Target.closeTarget",{targetId:I(this,Sw)._targetId}),await I(this,sM)._isClosedDeferred.valueOrThrow())}catch(f){c.error=f,c.hasError=!0}finally{Nqe(c)}}isClosed(){return I(this,Ece)}get mouse(){return I(this,rY)}async waitForDevicePrompt(s={}){return await this.mainFrame().waitForDevicePrompt(s)}get bluetooth(){return I(this,yce)}};Ece=new WeakMap,iM=new WeakMap,yce=new WeakMap,Af=new WeakMap,Sw=new WeakMap,nM=new WeakMap,sM=new WeakMap,aM=new WeakMap,rY=new WeakMap,iY=new WeakMap,td=new WeakMap,Fh=new WeakMap,nY=new WeakMap,oM=new WeakMap,sY=new WeakMap,aY=new WeakMap,oY=new WeakMap,Q7=new WeakMap,TN=new WeakMap,yve=new WeakMap,Bce=new WeakMap,Qce=new WeakMap,xl=new WeakSet,fxt=function(){let s=[];for(let f of I(this,iM).getChildTargets(I(this,Sw)))s.push(f);let c=0;for(;c{I(this,yve).reject(new Sh("Target closed"))}),s.on("Page.domContentEventFired",()=>{this.emit("domcontentloaded",void 0)}),s.on("Page.loadEventFired",()=>{this.emit("load",void 0)}),s.on("Page.javascriptDialogOpening",Ke(this,xl,Ext).bind(this)),s.on("Runtime.exceptionThrown",Ke(this,xl,Mqe).bind(this)),s.on("Inspector.targetCrashed",Ke(this,xl,hxt).bind(this)),s.on("Performance.metrics",Ke(this,xl,Cxt).bind(this)),s.on("Log.entryAdded",Ke(this,xl,mxt).bind(this)),s.on("Page.fileChooserOpened",Ke(this,xl,_xt).bind(this))},vce=new WeakMap,cY=new WeakMap,pxt=async function(){try{await Promise.all([I(this,td).initialize(I(this,Af)),I(this,Af).send("Performance.enable"),I(this,Af).send("Log.enable")])}catch(s){if(g_(s)&&V5(s))Ss(s);else throw s}},_xt=async function(s){let c={stack:[],error:void 0,hasError:!1};try{if(!I(this,TN).size)return;let f=I(this,td).frame(s.frameId);Is(f,"This should never happen.");let p=Fqe(c,await f.worlds[EQ].adoptBackendNode(s.backendNodeId),!1),C=new oW(p.move(),s.mode!=="selectSingle");for(let b of I(this,TN))b.resolve(C);I(this,TN).clear()}catch(f){c.error=f,c.hasError=!0}finally{Nqe(c)}},hxt=function(){this.emit("error",new Error("Page crashed!"))},mxt=function(s){let{level:c,text:f,args:p,source:C,url:b,lineNumber:N,stackTrace:L}=s.entry;p&&p.map(O=>{dqe(I(this,Af),O)}),C!=="worker"&&this.emit("console",new H5(lxt(c),f,[],[{url:b,lineNumber:N}],void 0,L,I(this,Sw)._targetId))},Cxt=function(s){this.emit("metrics",{title:s.title,metrics:Ke(this,xl,Pqe).call(this,s.metrics)})},Pqe=function(s){let c={};for(let f of s||[])_br.has(f.name)&&(c[f.name]=f.value);return c},Mqe=function(s){this.emit("pageerror",BSt(s.exceptionDetails))},Lqe=function(s,c){let f=c.args.map(L=>s.createCdpHandle(L));if(!this.listenerCount("console")){f.forEach(L=>L.dispose());return}let p=[];for(let L of f)p.push(QSt(L));let C=[];if(c.stackTrace)for(let L of c.stackTrace.callFrames)C.push({url:L.url,lineNumber:L.lineNumber,columnNumber:L.columnNumber});let b;s.environment.client instanceof hQ&&(b=s.environment.client.target()._targetId);let N=new H5(lxt(c.type),p.join(" "),f,C,void 0,c.stackTrace,b);this.emit("console",N)},Ixt=async function(s,c){let f;try{f=JSON.parse(c.payload)}catch{return}let{type:p,name:C,seq:b,args:N,isTrivial:L}=f;if(p!=="exposedFun")return;let O=s.context;if(!O)return;await I(this,oM).get(C)?.run(O,b,N,L)},Ext=function(s){let c=UDt(s.type),f=new YQe(I(this,Af),c,s.message,s.defaultPrompt);this.emit("dialog",f)},Oqe=async function(s,c){let f=await I(this,Af).send("Page.getNavigationHistory"),p=f.entries[f.currentIndex+s];if(!p)throw new Error("History entry to navigate to not found.");return(await Promise.all([this.waitForNavigation(c),I(this,Af).send("Page.navigateToHistoryEntry",{entryId:p.id})]))[0]};var AY=Gqe,_br=new Set(["Timestamp","Documents","Frames","JSEventListeners","Nodes","LayoutCount","RecalcStyleCount","LayoutDuration","RecalcStyleDuration","ScriptDuration","TaskDuration","JSHeapUsedSize","JSHeapTotalSize"]);function hbr(a,r){let s=Math.max(a.x,r.x),c=Math.max(a.y,r.y);return{x:s,y:c,width:Math.max(Math.min(a.x+a.width,r.x+r.width)-s,0),height:Math.max(Math.min(a.y+a.height,r.y+r.height)-c,0)}}function Eve(a){if(a!==void 0)return typeof a=="string"?{topLevelSite:a,hasCrossSiteAncestor:!1}:{topLevelSite:a.sourceOrigin,hasCrossSiteAncestor:a.hasCrossSiteAncestor??!1}}var mbr=function(a,r,s){if(r!=null){if(typeof r!="object"&&typeof r!="function")throw new TypeError("Object expected.");var c,f;if(s){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");c=r[Symbol.asyncDispose]}if(c===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");c=r[Symbol.dispose],s&&(f=c)}if(typeof c!="function")throw new TypeError("Object not disposable.");f&&(c=function(){try{f.call(this)}catch(p){return Promise.reject(p)}}),a.stack.push({value:r,dispose:c,async:s})}else s&&a.stack.push({async:!0});return r},Cbr=(function(a){return function(r){function s(C){r.error=r.hasError?new a(C,r.error,"An error was suppressed during disposal."):C,r.hasError=!0}var c,f=0;function p(){for(;c=r.stack.pop();)try{if(!c.async&&f===1)return f=0,r.stack.push(c),Promise.resolve().then(p);if(c.dispose){var C=c.dispose.call(c.value);if(c.async)return f|=2,Promise.resolve(C).then(p,function(b){return s(b),p()})}else f|=1}catch(b){s(b)}if(f===1)return r.hasError?Promise.reject(r.error):Promise.resolve();if(r.hasError)throw r.error}return p()}})(typeof SuppressedError=="function"?SuppressedError:function(a,r,s){var c=new Error(s);return c.name="SuppressedError",c.error=a,c.suppressed=r,c}),Mk,FN,kB,uY=class extends yq{constructor(s,c,f){super();Ae(this,Mk);Ae(this,FN);Ae(this,kB);Be(this,Mk,s),Be(this,FN,c),Be(this,kB,f)}get id(){return I(this,kB)}targets(){return I(this,FN).targets().filter(s=>s.browserContext()===this)}async pages(s=!1){return(await Promise.all(this.targets().filter(f=>f.type()==="page"||(f.type()==="other"||s)&&I(this,FN)._getIsPageTargetCallback()?.(f)).map(f=>f.page()))).filter(f=>!!f)}async overridePermissions(s,c){let f=c.map(p=>{let C=pae.get(p);if(!C)throw new Error("Unknown permission: "+p);return C});await I(this,Mk).send("Browser.grantPermissions",{origin:s,browserContextId:I(this,kB)||void 0,permissions:f})}async setPermission(s,...c){await Promise.all(c.map(async f=>{let p={name:f.permission.name,userVisibleOnly:f.permission.userVisibleOnly,sysex:f.permission.sysex,allowWithoutSanitization:f.permission.allowWithoutSanitization,panTiltZoom:f.permission.panTiltZoom};await I(this,Mk).send("Browser.setPermission",{origin:s==="*"?void 0:s,browserContextId:I(this,kB)||void 0,permission:p,setting:f.state})}))}async clearPermissionOverrides(){await I(this,Mk).send("Browser.resetPermissions",{browserContextId:I(this,kB)||void 0})}async newPage(s){let c={stack:[],error:void 0,hasError:!1};try{let f=mbr(c,await this.waitForScreenshotOperations(),!1);return await I(this,FN)._createPageInContext(I(this,kB),s)}catch(f){c.error=f,c.hasError=!0}finally{Cbr(c)}}browser(){return I(this,FN)}async close(){Is(I(this,kB),"Default BrowserContext cannot be closed!"),await I(this,FN)._disposeContext(I(this,kB))}async cookies(){let{cookies:s}=await I(this,Mk).send("Storage.getCookies",{browserContextId:I(this,kB)});return s.map(c=>({...c,partitionKey:c.partitionKey?{sourceOrigin:c.partitionKey.topLevelSite,hasCrossSiteAncestor:c.partitionKey.hasCrossSiteAncestor}:void 0,sameParty:!1}))}async setCookie(...s){return await I(this,Mk).send("Storage.setCookies",{browserContextId:I(this,kB),cookies:s.map(c=>({...c,partitionKey:Eve(c.partitionKey),sameSite:Uqe(c.sameSite)}))})}async setDownloadBehavior(s){await I(this,Mk).send("Browser.setDownloadBehavior",{behavior:s.policy,downloadPath:s.downloadPath,browserContextId:I(this,kB)})}};Mk=new WeakMap,FN=new WeakMap,kB=new WeakMap;Yae();GA();qC();var uy;(function(a){a.SUCCESS="success",a.ABORTED="aborted"})(uy||(uy={}));var cM,v7,Lk,lY,AM,fY,wce=class extends yN{constructor(s,c,f,p,C){super();Ae(this,cM);Ae(this,v7);Ae(this,Lk);Ae(this,lY);Ae(this,AM);Ae(this,fY,new Set);Hr(this,"_initializedDeferred",ZA.create());Hr(this,"_isClosedDeferred",ZA.create());Hr(this,"_targetId");Be(this,v7,c),Be(this,lY,p),Be(this,Lk,s),Be(this,cM,f),this._targetId=s.targetId,Be(this,AM,C),I(this,v7)&&I(this,v7).setTarget(this)}async asPage(){let s=this._session();return s?await AY._create(s,this,null):await this.createCDPSession().then(c=>AY._create(c,this,null))}_subtype(){return I(this,Lk).subtype}_session(){return I(this,v7)}_addChildTarget(s){I(this,fY).add(s)}_removeChildTarget(s){I(this,fY).delete(s)}_childTargets(){return I(this,fY)}_sessionFactory(){if(!I(this,AM))throw new Error("sessionFactory is not initialized");return I(this,AM)}createCDPSession(){if(!I(this,AM))throw new Error("sessionFactory is not initialized");return I(this,AM).call(this,!1).then(s=>(s.setTarget(this),s))}url(){return I(this,Lk).url}type(){switch(I(this,Lk).type){case"page":return cm.PAGE;case"background_page":return cm.BACKGROUND_PAGE;case"service_worker":return cm.SERVICE_WORKER;case"shared_worker":return cm.SHARED_WORKER;case"browser":return cm.BROWSER;case"webview":return cm.WEBVIEW;case"tab":return cm.TAB;default:return cm.OTHER}}_targetManager(){if(!I(this,lY))throw new Error("targetManager is not initialized");return I(this,lY)}_getTargetInfo(){return I(this,Lk)}browser(){if(!I(this,cM))throw new Error("browserContext is not initialized");return I(this,cM).browser()}browserContext(){if(!I(this,cM))throw new Error("browserContext is not initialized");return I(this,cM)}opener(){let{openerId:s}=I(this,Lk);if(s)return this.browser().targets().find(c=>c._targetId===s)}_targetInfoChanged(s){Be(this,Lk,s),this._checkIfInitialized()}_initialize(){this._initializedDeferred.resolve(uy.SUCCESS)}_isTargetExposed(){return this.type()!==cm.TAB&&!this._subtype()}_checkIfInitialized(){this._initializedDeferred.resolved()||this._initializedDeferred.resolve(uy.SUCCESS)}};cM=new WeakMap,v7=new WeakMap,Lk=new WeakMap,lY=new WeakMap,AM=new WeakMap,fY=new WeakMap;var Dce,Jqe=class Jqe extends wce{constructor(s,c,f,p,C,b){super(s,c,f,p,C);Ae(this,Dce);Hr(this,"pagePromise");Be(this,Dce,b??void 0)}_initialize(){this._initializedDeferred.valueOrThrow().then(async s=>{if(s===uy.ABORTED)return;let c=this.opener();if(!(c instanceof Jqe))return;if(!c||!c.pagePromise||this.type()!=="page")return!0;let f=await c.pagePromise;if(!f.listenerCount("popup"))return!0;let p=await this.page();return f.emit("popup",p),!0}).catch(Ss),this._checkIfInitialized()}async page(){if(!this.pagePromise){let s=this._session();this.pagePromise=(s?Promise.resolve(s):this._sessionFactory()(!1)).then(c=>AY._create(c,this,I(this,Dce)??null))}return await this.pagePromise??null}_checkIfInitialized(){this._initializedDeferred.resolved()||this._getTargetInfo().url!==""&&this._initializedDeferred.resolve(uy.SUCCESS)}};Dce=new WeakMap;var bce=Jqe,Bve=class extends bce{},gY,Qve=class extends wce{constructor(){super(...arguments);Ae(this,gY)}async worker(){if(!I(this,gY)){let s=this._session();Be(this,gY,(s?Promise.resolve(s):this._sessionFactory()(!1)).then(c=>new tY(c,this._getTargetInfo().url,this._targetId,this.type(),()=>{},()=>{},void 0)))}return await I(this,gY)}};gY=new WeakMap;var vve=class extends wce{};vB();Nf();GA();Rf();qC();function Ibr(a,r){return!!a._subtype()&&!r.subtype}var VC,w7,TB,b7,xce,dY,D7,S7,x7,kce,Tce,pY,_Y,hY,QQ,Hqe,jqe,Fce,bve,Nce,Rce,Pce,Mce,Dve,Sce,Sve,wve=class extends ya{constructor(s,c,f,p=!0){super();Ae(this,QQ);Ae(this,VC);Ae(this,w7,new Map);Ae(this,TB,new Map);Ae(this,b7,new Map);Ae(this,xce,new Set);Ae(this,dY);Ae(this,D7);Ae(this,S7,new WeakMap);Ae(this,x7,new WeakMap);Ae(this,kce,ZA.create());Ae(this,Tce,!0);Ae(this,pY,[{}]);Ae(this,_Y,new Set);Ae(this,hY,!1);Ae(this,Fce,async(s,c)=>{await s.send("Runtime.runIfWaitingForDebugger").catch(Ss),await c.send("Target.detachFromTarget",{sessionId:s.id()}).catch(Ss)});Ae(this,bve,s=>s instanceof hQ?s.target():null);Ae(this,Nce,s=>{Ke(this,QQ,jqe).call(this,s)});Ae(this,Rce,async s=>{if(I(this,w7).set(s.targetInfo.targetId,s.targetInfo),this.emit("targetDiscovered",s.targetInfo),s.targetInfo.type==="browser"&&s.targetInfo.attached){if(I(this,TB).has(s.targetInfo.targetId))return;let c=I(this,D7).call(this,s.targetInfo,void 0);c._initialize(),I(this,TB).set(s.targetInfo.targetId,c)}});Ae(this,Pce,s=>{let c=I(this,w7).get(s.targetId);if(I(this,w7).delete(s.targetId),Ke(this,QQ,Sce).call(this,s.targetId),c?.type==="service_worker"){let f=I(this,TB).get(s.targetId);f&&(this.emit("targetGone",f),I(this,TB).delete(s.targetId))}});Ae(this,Mce,s=>{if(I(this,w7).set(s.targetInfo.targetId,s.targetInfo),I(this,xce).has(s.targetInfo.targetId)||!s.targetInfo.attached)return;let c=I(this,TB).get(s.targetInfo.targetId);if(!c)return;let f=c.url(),p=c._initializedDeferred.value()===uy.SUCCESS;if(Ibr(c,s.targetInfo)){let C=c._session();Is(C,"Target that is being activated is missing a CDPSession."),C.parentSession()?.emit(bl.Swapped,C)}c._targetInfoChanged(s.targetInfo),p&&f!==c.url()&&this.emit("targetChanged",{target:c,wasInitialized:p,previousURL:f})});Ae(this,Dve,async(s,c)=>{let f=c.targetInfo,p=I(this,VC)._session(c.sessionId);if(!p)throw new Error(`Session ${c.sessionId} was not created.`);if(!I(this,VC).isAutoAttached(f.targetId))return;if(f.type==="service_worker"){if(await I(this,Fce).call(this,p,s),I(this,TB).has(f.targetId))return;let L=I(this,D7).call(this,f);L._initialize(),I(this,TB).set(f.targetId,L),this.emit("targetAvailable",L);return}let C=I(this,TB).get(f.targetId),b=C!==void 0;C||(C=I(this,D7).call(this,f,p,s instanceof hQ?s:void 0));let N=I(this,bve).call(this,s);if(I(this,dY)&&!I(this,dY).call(this,C)){I(this,xce).add(f.targetId),N?.type()==="tab"&&Ke(this,QQ,Sce).call(this,N._targetId),await I(this,Fce).call(this,p,s);return}I(this,Tce)&&c.targetInfo.type==="tab"&&!I(this,hY)&&I(this,_Y).add(c.targetInfo.targetId),Ke(this,QQ,Hqe).call(this,p),b?(p.setTarget(C),I(this,b7).set(p.id(),C)):(C._initialize(),I(this,TB).set(f.targetId,C),I(this,b7).set(p.id(),C)),N?._addChildTarget(C),s.emit(bl.Ready,p),b||this.emit("targetAvailable",C),N?.type()==="tab"&&Ke(this,QQ,Sce).call(this,N._targetId),await Promise.all([p.send("Target.setAutoAttach",{waitForDebuggerOnStart:!0,flatten:!0,autoAttach:!0,filter:I(this,pY)}),p.send("Runtime.runIfWaitingForDebugger")]).catch(Ss)});Ae(this,Sve,(s,c)=>{let f=I(this,b7).get(c.sessionId);I(this,b7).delete(c.sessionId),f&&(s instanceof hQ&&s.target()._removeChildTarget(f),I(this,TB).delete(f._targetId),this.emit("targetGone",f))});Be(this,VC,s),Be(this,dY,f),Be(this,D7,c),Be(this,Tce,p),I(this,VC).on("Target.targetCreated",I(this,Rce)),I(this,VC).on("Target.targetDestroyed",I(this,Pce)),I(this,VC).on("Target.targetInfoChanged",I(this,Mce)),I(this,VC).on(bl.SessionDetached,I(this,Nce)),Ke(this,QQ,Hqe).call(this,I(this,VC))}async initialize(){await I(this,VC).send("Target.setDiscoverTargets",{discover:!0,filter:I(this,pY)}),await I(this,VC).send("Target.setAutoAttach",{waitForDebuggerOnStart:!0,flatten:!0,autoAttach:!0,filter:[{type:"page",exclude:!0},...I(this,pY)]}),Be(this,hY,!0),Ke(this,QQ,Sce).call(this),await I(this,kce).valueOrThrow()}getChildTargets(s){return s._childTargets()}dispose(){I(this,VC).off("Target.targetCreated",I(this,Rce)),I(this,VC).off("Target.targetDestroyed",I(this,Pce)),I(this,VC).off("Target.targetInfoChanged",I(this,Mce)),I(this,VC).off(bl.SessionDetached,I(this,Nce)),Ke(this,QQ,jqe).call(this,I(this,VC))}getAvailableTargets(){return I(this,TB)}};VC=new WeakMap,w7=new WeakMap,TB=new WeakMap,b7=new WeakMap,xce=new WeakMap,dY=new WeakMap,D7=new WeakMap,S7=new WeakMap,x7=new WeakMap,kce=new WeakMap,Tce=new WeakMap,pY=new WeakMap,_Y=new WeakMap,hY=new WeakMap,QQ=new WeakSet,Hqe=function(s){let c=p=>{I(this,Dve).call(this,s,p)};Is(!I(this,S7).has(s)),I(this,S7).set(s,c),s.on("Target.attachedToTarget",c);let f=p=>I(this,Sve).call(this,s,p);Is(!I(this,x7).has(s)),I(this,x7).set(s,f),s.on("Target.detachedFromTarget",f)},jqe=function(s){let c=I(this,S7).get(s);c&&(s.off("Target.attachedToTarget",c),I(this,S7).delete(s));let f=I(this,x7).get(s);f&&(s.off("Target.detachedFromTarget",f),I(this,x7).delete(s))},Fce=new WeakMap,bve=new WeakMap,Nce=new WeakMap,Rce=new WeakMap,Pce=new WeakMap,Mce=new WeakMap,Dve=new WeakMap,Sce=function(s){s!==void 0&&I(this,_Y).delete(s),I(this,hY)&&I(this,_Y).size===0&&I(this,kce).resolve()},Sve=new WeakMap;function yxt(a){return a.startsWith("devtools://devtools/bundled/devtools_app.html")}var mY,Lce,wd,Oce,Uce,CY,NN,RN,Gce,Am,Jce,Hce,k7,Bxt,xve,jce,Kce,qce,Wce,Kqe,qqe=class qqe extends _q{constructor(s,c,f,p,C,b,N,L=!0,O=!0,j=!1){super();Ae(this,k7);Hr(this,"protocol","cdp");Ae(this,mY);Ae(this,Lce);Ae(this,wd);Ae(this,Oce);Ae(this,Uce);Ae(this,CY);Ae(this,NN);Ae(this,RN,new Map);Ae(this,Gce,!0);Ae(this,Am);Ae(this,Jce,!1);Ae(this,Hce,()=>{this.emit("disconnected",void 0)});Ae(this,xve,(s,c)=>{let{browserContextId:f}=s,p=f&&I(this,RN).has(f)?I(this,RN).get(f):I(this,NN);if(!p)throw new Error("Missing browser context");let C=N=>I(this,wd)._createSession(s,N),b=new vve(s,c,p,I(this,Am),C);return s.url&&yxt(s.url)?new Bve(s,c,p,I(this,Am),C,I(this,mY)??null):I(this,CY).call(this,b)?new bce(s,c,p,I(this,Am),C,I(this,mY)??null):s.type==="service_worker"||s.type==="shared_worker"?new Qve(s,c,p,I(this,Am),C):b});Ae(this,jce,async s=>{s._isTargetExposed()&&await s._initializedDeferred.valueOrThrow()===uy.SUCCESS&&(this.emit("targetcreated",s),s.browserContext().emit("targetcreated",s))});Ae(this,Kce,async s=>{s._initializedDeferred.resolve(uy.ABORTED),s._isClosedDeferred.resolve(),s._isTargetExposed()&&await s._initializedDeferred.valueOrThrow()===uy.SUCCESS&&(this.emit("targetdestroyed",s),s.browserContext().emit("targetdestroyed",s))});Ae(this,qce,({target:s})=>{this.emit("targetchanged",s),s.browserContext().emit("targetchanged",s)});Ae(this,Wce,s=>{this.emit("targetdiscovered",s)});Be(this,Gce,O),Be(this,mY,f),Be(this,Lce,p),Be(this,wd,s),Be(this,Oce,C||(()=>{})),Be(this,Uce,b||(()=>!0)),Be(this,Jce,j),Ke(this,k7,Bxt).call(this,N),Be(this,Am,new wve(s,I(this,xve),I(this,Uce),L)),Be(this,NN,new uY(I(this,wd),this));for(let k of c)I(this,RN).set(k,new uY(I(this,wd),this,k))}static async _create(s,c,f,p,C,b,N,L,O,j=!0,k=!0,R=!1){let J=new qqe(s,c,p,b,N,L,O,j,k,R);return f&&await s.send("Security.setIgnoreCertificateErrors",{ignore:!0}),await J._attach(C),J}async _attach(s){I(this,wd).on(bl.Disconnected,I(this,Hce)),s&&await I(this,NN).setDownloadBehavior(s),I(this,Am).on("targetAvailable",I(this,jce)),I(this,Am).on("targetGone",I(this,Kce)),I(this,Am).on("targetChanged",I(this,qce)),I(this,Am).on("targetDiscovered",I(this,Wce)),await I(this,Am).initialize()}_detach(){I(this,wd).off(bl.Disconnected,I(this,Hce)),I(this,Am).off("targetAvailable",I(this,jce)),I(this,Am).off("targetGone",I(this,Kce)),I(this,Am).off("targetChanged",I(this,qce)),I(this,Am).off("targetDiscovered",I(this,Wce))}process(){return I(this,Lce)??null}_targetManager(){return I(this,Am)}_getIsPageTargetCallback(){return I(this,CY)}async createBrowserContext(s={}){let{proxyServer:c,proxyBypassList:f,downloadBehavior:p}=s,{browserContextId:C}=await I(this,wd).send("Target.createBrowserContext",{proxyServer:c,proxyBypassList:f&&f.join(",")}),b=new uY(I(this,wd),this,C);return p&&await b.setDownloadBehavior(p),I(this,RN).set(C,b),b}browserContexts(){return[I(this,NN),...Array.from(I(this,RN).values())]}defaultBrowserContext(){return I(this,NN)}async _disposeContext(s){s&&(await I(this,wd).send("Target.disposeBrowserContext",{browserContextId:s}),I(this,RN).delete(s))}wsEndpoint(){return I(this,wd).url()}async newPage(s){return await I(this,NN).newPage(s)}async _createPageInContext(s,c){let f=this.targets().filter(O=>O.browserContext().id===s).length>0,p=c?.type==="window"?c.windowBounds:void 0,{targetId:C}=await I(this,wd).send("Target.createTarget",{url:"about:blank",browserContextId:s||void 0,left:p?.left,top:p?.top,width:p?.width,height:p?.height,windowState:p?.windowState,newWindow:f&&c?.type==="window"?!0:void 0,background:c?.background}),b=await this.waitForTarget(O=>O._targetId===C);if(!b)throw new Error(`Missing target for page (id = ${C})`);if(!(await b._initializedDeferred.valueOrThrow()===uy.SUCCESS))throw new Error(`Failed to create target for page (id = ${C})`);let L=await b.page();if(!L)throw new Error(`Failed to create a page for context (id = ${s})`);return L}async _createDevToolsPage(s){let c=await I(this,wd).send("Target.openDevTools",{targetId:s}),f=await this.waitForTarget(b=>b._targetId===c.targetId);if(!f)throw new Error(`Missing target for DevTools page (id = ${s})`);if(!(await f._initializedDeferred.valueOrThrow()===uy.SUCCESS))throw new Error(`Failed to create target for DevTools page (id = ${s})`);let C=await f.page();if(!C)throw new Error(`Failed to create a DevTools Page for target (id = ${s})`);return C}async _hasDevToolsTarget(s){return(await I(this,wd).send("Target.getDevToolsTarget",{targetId:s})).targetId}async installExtension(s){let{id:c}=await I(this,wd).send("Extensions.loadUnpacked",{path:s});return c}uninstallExtension(s){return I(this,wd).send("Extensions.uninstall",{id:s})}async screens(){let{screenInfos:s}=await I(this,wd).send("Emulation.getScreenInfos");return s}async addScreen(s){let{screenInfo:c}=await I(this,wd).send("Emulation.addScreen",s);return c}async removeScreen(s){return await I(this,wd).send("Emulation.removeScreen",{screenId:s})}async getWindowBounds(s){let{bounds:c}=await I(this,wd).send("Browser.getWindowBounds",{windowId:Number(s)});return c}async setWindowBounds(s,c){await I(this,wd).send("Browser.setWindowBounds",{windowId:Number(s),bounds:c})}targets(){return Array.from(I(this,Am).getAvailableTargets().values()).filter(s=>s._isTargetExposed()&&s._initializedDeferred.value()===uy.SUCCESS)}target(){let s=this.targets().find(c=>c.type()==="browser");if(!s)throw new Error("Browser target is not found");return s}async version(){return(await Ke(this,k7,Kqe).call(this)).product}async userAgent(){return(await Ke(this,k7,Kqe).call(this)).userAgent}async close(){await I(this,Oce).call(null),await this.disconnect()}disconnect(){return I(this,Am).dispose(),I(this,wd).dispose(),this._detach(),Promise.resolve()}get connected(){return!I(this,wd)._closed}get debugInfo(){return{pendingProtocolErrors:I(this,wd).getPendingProtocolErrors()}}isNetworkEnabled(){return I(this,Gce)}};mY=new WeakMap,Lce=new WeakMap,wd=new WeakMap,Oce=new WeakMap,Uce=new WeakMap,CY=new WeakMap,NN=new WeakMap,RN=new WeakMap,Gce=new WeakMap,Am=new WeakMap,Jce=new WeakMap,Hce=new WeakMap,k7=new WeakSet,Bxt=function(s){Be(this,CY,s||(c=>c.type()==="page"||c.type()==="background_page"||c.type()==="webview"||I(this,Jce)&&c.type()==="other"&&yxt(c.url())))},xve=new WeakMap,jce=new WeakMap,Kce=new WeakMap,qce=new WeakMap,Wce=new WeakMap,Kqe=function(){return I(this,wd).send("Browser.getVersion")};var IY=qqe;GA();M5();async function Qxt(a,r,s){let{acceptInsecureCerts:c=!1,networkEnabled:f=!0,defaultViewport:p=gq,downloadBehavior:C,targetFilter:b,_isPageTarget:N,slowMo:L=0,protocolTimeout:O,handleDevToolsAsPage:j,idGenerator:k=wk()}=s,R=new wN(r,a,L,O,!1,k),{browserContextIds:J}=await R.send("Target.getBrowserContexts");return await IY._create(R,J,c,p,C,void 0,()=>R.send("Browser.close").catch(Ss),b,N,void 0,f,j)}WQe();zQe();var Vii=Object.freeze({"Slow 3G":{download:5e4,upload:5e4,latency:2e3},"Fast 3G":{download:18e4,upload:84375,latency:562.5},"Slow 4G":{download:18e4,upload:84375,latency:562.5},"Fast 4G":{download:1012500,upload:168750,latency:165}});Ive();Vqe();moe();Sae();KQe();IQe();Aq();var Ebr=[{name:"Blackberry PlayBook",userAgent:"Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+",viewport:{width:600,height:1024,deviceScaleFactor:1,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Blackberry PlayBook landscape",userAgent:"Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+",viewport:{width:1024,height:600,deviceScaleFactor:1,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"BlackBerry Z30",userAgent:"Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+",viewport:{width:360,height:640,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"BlackBerry Z30 landscape",userAgent:"Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+",viewport:{width:640,height:360,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Galaxy Note 3",userAgent:"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",viewport:{width:360,height:640,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Galaxy Note 3 landscape",userAgent:"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",viewport:{width:640,height:360,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Galaxy Note II",userAgent:"Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",viewport:{width:360,height:640,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Galaxy Note II landscape",userAgent:"Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",viewport:{width:640,height:360,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Galaxy S III",userAgent:"Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",viewport:{width:360,height:640,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Galaxy S III landscape",userAgent:"Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",viewport:{width:640,height:360,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Galaxy S5",userAgent:"Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36",viewport:{width:360,height:640,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Galaxy S5 landscape",userAgent:"Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36",viewport:{width:640,height:360,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Galaxy S8",userAgent:"Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36",viewport:{width:360,height:740,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Galaxy S8 landscape",userAgent:"Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36",viewport:{width:740,height:360,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Galaxy S9+",userAgent:"Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36",viewport:{width:320,height:658,deviceScaleFactor:4.5,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Galaxy S9+ landscape",userAgent:"Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36",viewport:{width:658,height:320,deviceScaleFactor:4.5,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Galaxy Tab S4",userAgent:"Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Safari/537.36",viewport:{width:712,height:1138,deviceScaleFactor:2.25,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Galaxy Tab S4 landscape",userAgent:"Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Safari/537.36",viewport:{width:1138,height:712,deviceScaleFactor:2.25,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPad",userAgent:"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1",viewport:{width:768,height:1024,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPad landscape",userAgent:"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1",viewport:{width:1024,height:768,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPad (gen 6)",userAgent:"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:768,height:1024,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPad (gen 6) landscape",userAgent:"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:1024,height:768,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPad (gen 7)",userAgent:"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:810,height:1080,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPad (gen 7) landscape",userAgent:"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:1080,height:810,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPad Mini",userAgent:"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1",viewport:{width:768,height:1024,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPad Mini landscape",userAgent:"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1",viewport:{width:1024,height:768,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPad Pro",userAgent:"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1",viewport:{width:1024,height:1366,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPad Pro landscape",userAgent:"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1",viewport:{width:1366,height:1024,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPad Pro 11",userAgent:"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:834,height:1194,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPad Pro 11 landscape",userAgent:"Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:1194,height:834,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 4",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53",viewport:{width:320,height:480,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 4 landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53",viewport:{width:480,height:320,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 5",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1",viewport:{width:320,height:568,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 5 landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1",viewport:{width:568,height:320,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 6",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1",viewport:{width:375,height:667,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 6 landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1",viewport:{width:667,height:375,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 6 Plus",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1",viewport:{width:414,height:736,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 6 Plus landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1",viewport:{width:736,height:414,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 7",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1",viewport:{width:375,height:667,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 7 landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1",viewport:{width:667,height:375,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 7 Plus",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1",viewport:{width:414,height:736,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 7 Plus landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1",viewport:{width:736,height:414,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 8",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1",viewport:{width:375,height:667,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 8 landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1",viewport:{width:667,height:375,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 8 Plus",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1",viewport:{width:414,height:736,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 8 Plus landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1",viewport:{width:736,height:414,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone SE",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1",viewport:{width:320,height:568,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone SE landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1",viewport:{width:568,height:320,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone X",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1",viewport:{width:375,height:812,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone X landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1",viewport:{width:812,height:375,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone XR",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1",viewport:{width:414,height:896,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone XR landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1",viewport:{width:896,height:414,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 11",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Mobile/15E148 Safari/604.1",viewport:{width:414,height:828,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 11 landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Mobile/15E148 Safari/604.1",viewport:{width:828,height:414,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 11 Pro",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Mobile/15E148 Safari/604.1",viewport:{width:375,height:812,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 11 Pro landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Mobile/15E148 Safari/604.1",viewport:{width:812,height:375,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 11 Pro Max",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Mobile/15E148 Safari/604.1",viewport:{width:414,height:896,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 11 Pro Max landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Mobile/15E148 Safari/604.1",viewport:{width:896,height:414,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 12",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:390,height:844,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 12 landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:844,height:390,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 12 Pro",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:390,height:844,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 12 Pro landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:844,height:390,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 12 Pro Max",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:428,height:926,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 12 Pro Max landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:926,height:428,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 12 Mini",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:375,height:812,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 12 Mini landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:812,height:375,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 13",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:390,height:844,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 13 landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:844,height:390,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 13 Pro",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:390,height:844,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 13 Pro landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:844,height:390,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 13 Pro Max",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:428,height:926,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 13 Pro Max landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:926,height:428,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 13 Mini",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:375,height:812,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 13 Mini landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1",viewport:{width:812,height:375,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 14",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1",viewport:{width:390,height:663,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 14 landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1",viewport:{width:750,height:340,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 14 Plus",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1",viewport:{width:428,height:745,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 14 Plus landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1",viewport:{width:832,height:378,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 14 Pro",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1",viewport:{width:393,height:659,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 14 Pro landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1",viewport:{width:734,height:343,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 14 Pro Max",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1",viewport:{width:430,height:739,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 14 Pro Max landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1",viewport:{width:814,height:380,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 15",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1",viewport:{width:393,height:659,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 15 landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1",viewport:{width:734,height:343,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 15 Plus",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1",viewport:{width:430,height:739,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 15 Plus landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1",viewport:{width:814,height:380,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 15 Pro",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1",viewport:{width:393,height:659,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 15 Pro landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1",viewport:{width:734,height:343,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"iPhone 15 Pro Max",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1",viewport:{width:430,height:739,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"iPhone 15 Pro Max landscape",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1",viewport:{width:814,height:380,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"JioPhone 2",userAgent:"Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5",viewport:{width:240,height:320,deviceScaleFactor:1,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"JioPhone 2 landscape",userAgent:"Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5",viewport:{width:320,height:240,deviceScaleFactor:1,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Kindle Fire HDX",userAgent:"Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true",viewport:{width:800,height:1280,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Kindle Fire HDX landscape",userAgent:"Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true",viewport:{width:1280,height:800,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"LG Optimus L70",userAgent:"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/75.0.3765.0 Mobile Safari/537.36",viewport:{width:384,height:640,deviceScaleFactor:1.25,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"LG Optimus L70 landscape",userAgent:"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/75.0.3765.0 Mobile Safari/537.36",viewport:{width:640,height:384,deviceScaleFactor:1.25,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Microsoft Lumia 550",userAgent:"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263",viewport:{width:640,height:360,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Microsoft Lumia 950",userAgent:"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263",viewport:{width:360,height:640,deviceScaleFactor:4,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Microsoft Lumia 950 landscape",userAgent:"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263",viewport:{width:640,height:360,deviceScaleFactor:4,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Nexus 10",userAgent:"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Safari/537.36",viewport:{width:800,height:1280,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Nexus 10 landscape",userAgent:"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Safari/537.36",viewport:{width:1280,height:800,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Nexus 4",userAgent:"Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36",viewport:{width:384,height:640,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Nexus 4 landscape",userAgent:"Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36",viewport:{width:640,height:384,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Nexus 5",userAgent:"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36",viewport:{width:360,height:640,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Nexus 5 landscape",userAgent:"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36",viewport:{width:640,height:360,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Nexus 5X",userAgent:"Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36",viewport:{width:412,height:732,deviceScaleFactor:2.625,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Nexus 5X landscape",userAgent:"Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36",viewport:{width:732,height:412,deviceScaleFactor:2.625,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Nexus 6",userAgent:"Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36",viewport:{width:412,height:732,deviceScaleFactor:3.5,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Nexus 6 landscape",userAgent:"Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36",viewport:{width:732,height:412,deviceScaleFactor:3.5,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Nexus 6P",userAgent:"Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36",viewport:{width:412,height:732,deviceScaleFactor:3.5,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Nexus 6P landscape",userAgent:"Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36",viewport:{width:732,height:412,deviceScaleFactor:3.5,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Nexus 7",userAgent:"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Safari/537.36",viewport:{width:600,height:960,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Nexus 7 landscape",userAgent:"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Safari/537.36",viewport:{width:960,height:600,deviceScaleFactor:2,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Nokia Lumia 520",userAgent:"Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)",viewport:{width:320,height:533,deviceScaleFactor:1.5,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Nokia Lumia 520 landscape",userAgent:"Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)",viewport:{width:533,height:320,deviceScaleFactor:1.5,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Nokia N9",userAgent:"Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13",viewport:{width:480,height:854,deviceScaleFactor:1,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Nokia N9 landscape",userAgent:"Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13",viewport:{width:854,height:480,deviceScaleFactor:1,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Pixel 2",userAgent:"Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36",viewport:{width:411,height:731,deviceScaleFactor:2.625,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Pixel 2 landscape",userAgent:"Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36",viewport:{width:731,height:411,deviceScaleFactor:2.625,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Pixel 2 XL",userAgent:"Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36",viewport:{width:411,height:823,deviceScaleFactor:3.5,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Pixel 2 XL landscape",userAgent:"Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36",viewport:{width:823,height:411,deviceScaleFactor:3.5,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Pixel 3",userAgent:"Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.158 Mobile Safari/537.36",viewport:{width:393,height:786,deviceScaleFactor:2.75,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Pixel 3 landscape",userAgent:"Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.158 Mobile Safari/537.36",viewport:{width:786,height:393,deviceScaleFactor:2.75,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Pixel 4",userAgent:"Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36",viewport:{width:353,height:745,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Pixel 4 landscape",userAgent:"Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36",viewport:{width:745,height:353,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Pixel 4a (5G)",userAgent:"Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4812.0 Mobile Safari/537.36",viewport:{width:353,height:745,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Pixel 4a (5G) landscape",userAgent:"Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4812.0 Mobile Safari/537.36",viewport:{width:745,height:353,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Pixel 5",userAgent:"Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4812.0 Mobile Safari/537.36",viewport:{width:393,height:851,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Pixel 5 landscape",userAgent:"Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4812.0 Mobile Safari/537.36",viewport:{width:851,height:393,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}},{name:"Moto G4",userAgent:"Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4812.0 Mobile Safari/537.36",viewport:{width:360,height:640,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!1}},{name:"Moto G4 landscape",userAgent:"Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4812.0 Mobile Safari/537.36",viewport:{width:640,height:360,deviceScaleFactor:3,isMobile:!0,hasTouch:!0,isLandscape:!0}}],wxt={};for(let a of Ebr)wxt[a.name]=a;var Pni=Object.freeze(wxt);wl();Nf();qQe();EQe();_Qe();D5();CKe();SKe();xKe();kKe();wl();GA();M5();async function eNt(a,r,s){let{acceptInsecureCerts:c=!1,networkEnabled:f=!0,defaultViewport:p=gq}=s,{bidiConnection:C,cdpConnection:b,closeCallback:N}=await Fxr(a,r,s);return await(await Promise.resolve().then(()=>(ble(),wle))).BidiBrowser.create({connection:C,cdpConnection:b,closeCallback:N,process:void 0,defaultViewport:p,acceptInsecureCerts:c,networkEnabled:f,capabilities:s.capabilities})}async function Fxr(a,r,s){let c=await Promise.resolve().then(()=>(ble(),wle)),{slowMo:f=0,protocolTimeout:p,idGenerator:C=wk()}=s,b=new c.BidiConnection(r,a,C,f,p);try{let j=await b.send("session.status",{});if("type"in j&&j.type==="success")return{bidiConnection:b,closeCallback:async()=>{await b.send("browser.close",{}).catch(Ss)}}}catch(j){if(!(j instanceof Dh))throw j}b.unbind();let N=new wN(r,a,f,p,!0,C);if((await N.send("Browser.getVersion")).product.toLowerCase().includes("firefox"))throw new Uo("Firefox is not supported in BiDi over CDP mode.");let O=await c.connectBidiOverCdp(N);return{cdpConnection:N,bidiConnection:O,closeCallback:async()=>{await N.send("Browser.close").catch(Ss)}}}yk();Rf();LI();var trt=async()=>fae?(await Promise.resolve().then(()=>($ze(),cRt))).NodeWebSocketTransport:(await Promise.resolve().then(()=>(Vqe(),vxt))).BrowserWebSocketTransport;async function z7t(a){let{connectionTransport:r,endpointUrl:s}=await hUr(a);return a.protocol==="webDriverBiDi"?await eNt(r,s,a):await Qxt(r,s,a)}async function hUr(a){let{browserWSEndpoint:r,browserURL:s,channel:c,transport:f,headers:p={}}=a;if(Is(+!!r+ +!!s+ +!!f+ +!!c==1,"Exactly one of browserWSEndpoint, browserURL, transport or channel must be passed to puppeteer.connect"),f)return{connectionTransport:f,endpointUrl:""};if(r)return{connectionTransport:await(await trt()).create(r,p),endpointUrl:r};if(s){let C=await mUr(s);return{connectionTransport:await(await trt()).create(C),endpointUrl:C}}else if(a.channel&&fae){let{detectBrowserPlatform:C,resolveDefaultUserDataDir:b,Browser:N}=await Promise.resolve().then(()=>(k9(),Y7t)),L=C();if(!L)throw new Error("Could not detect required browser platform");let{convertPuppeteerChannelToBrowsersChannel:O}=await Promise.resolve().then(()=>(ert(),V7t)),{join:j}=await import("node:path"),k=b(N.CHROME,L,O(a.channel)),R=j(k,"DevToolsActivePort");try{let J=await Ym.value.fs.promises.readFile(R,"ascii"),[H,X]=J.split(` +`).map(ut=>ut.trim()).filter(ut=>!!ut);if(!H||!X)throw new Error(`Invalid DevToolsActivePort '${J}' found`);let ge=parseInt(H,10);if(isNaN(ge)||ge<=0||ge>65535)throw new Error(`Invalid port '${H}' found`);let Te=`ws://localhost:${ge}${X}`;return{connectionTransport:await(await trt()).create(Te,p),endpointUrl:Te}}catch(J){throw new Error(`Could not find DevToolsActivePort for ${a.channel} at ${R}`,{cause:J})}}throw new Error("Invalid connection options")}async function mUr(a){let r=new URL("/json/version",a);try{let s=await globalThis.fetch(r.toString(),{method:"GET"});if(!s.ok)throw new Error(`HTTP ${s.statusText}`);return(await s.json()).webSocketDebuggerUrl}catch(s){throw g_(s)&&(s.message=`Failed to fetch browser webSocket URL from ${r}: `+s.message),s}}IQe();var Vfe=class{constructor(r){Hr(this,"_isPuppeteerCore");Hr(this,"_changedBrowsers",!1);this._isPuppeteerCore=r.isPuppeteerCore,this.connect=this.connect.bind(this)}static registerCustomQueryHandler(r,s){return this.customQueryHandlers.register(r,s)}static unregisterCustomQueryHandler(r){return this.customQueryHandlers.unregister(r)}static customQueryHandlerNames(){return this.customQueryHandlers.names()}static clearCustomQueryHandlers(){return this.customQueryHandlers.clear()}connect(r){return z7t(r)}};Hr(Vfe,"customQueryHandlers",kae);mN();xae();ove();TKe();Gae();GA();KKe();FKe();var qX=Object.freeze({chrome:"146.0.7680.76","chrome-headless-shell":"146.0.7680.76",firefox:"stable_148.0.2"});Rf();qC();Bae();LI();C3();tg();M5();var rUt=require("node:fs/promises"),iUt=wc(require("node:os"),1),Gke=wc(require("node:path"),1);k9();GA();Rf();var zfe=require("node:fs"),Z7t=require("node:os"),rrt=require("node:path");k9();vw();wl();GA();M5();$ze();Nf();GA();Rf();tg();var WX,YX,VX,T9,Oke,X7t,Lke=class{constructor(r,s){Ae(this,Oke);Ae(this,WX);Ae(this,YX,new Jl);Ae(this,VX,!1);Ae(this,T9,[]);Hr(this,"onclose");Hr(this,"onmessage");Be(this,WX,r);let c=I(this,YX).use(new ya(s));c.on("data",p=>Ke(this,Oke,X7t).call(this,p)),c.on("close",()=>{this.onclose&&this.onclose.call(null)}),c.on("error",Ss),I(this,YX).use(new ya(r)).on("error",Ss)}send(r){Is(!I(this,VX),"`PipeTransport` is closed."),I(this,WX).write(r),I(this,WX).write("\0")}close(){Be(this,VX,!0),I(this,YX).dispose()}};WX=new WeakMap,YX=new WeakMap,VX=new WeakMap,T9=new WeakMap,Oke=new WeakSet,X7t=function(r){if(Is(!I(this,VX),"`PipeTransport` is closed."),I(this,T9).push(r),r.indexOf("\0")===-1)return;let s=Buffer.concat(I(this,T9)),c=0,f=s.indexOf("\0");for(;f!==-1;){let p=s.toString(void 0,c,f);setImmediate(()=>{this.onmessage&&this.onmessage.call(null,p)}),c=f+1,f=s.indexOf("\0",c)}c>=s.length?Be(this,T9,[]):Be(this,T9,[s.subarray(c)])};var b2,zX=class{constructor(r,s){Ae(this,b2);Hr(this,"puppeteer");this.puppeteer=r,Be(this,b2,s)}get browser(){return I(this,b2)}async launch(r={}){let{dumpio:s=!1,enableExtensions:c=!1,env:f=process.env,handleSIGINT:p=!0,handleSIGTERM:C=!0,handleSIGHUP:b=!0,acceptInsecureCerts:N=!1,networkEnabled:L=!0,defaultViewport:O=gq,downloadBehavior:j,slowMo:k=0,timeout:R=3e4,waitForInitialPage:J=!0,protocolTimeout:H,handleDevToolsAsPage:X,idGenerator:ge=wk()}=r,{protocol:Te}=r;if(I(this,b2)==="firefox"&&Te===void 0&&(Te="webDriverBiDi"),I(this,b2)==="firefox"&&Te==="cdp")throw new Error("Connecting to Firefox using CDP is no longer supported");let Ue=await this.computeLaunchArguments({...r,protocol:Te});if(!(0,zfe.existsSync)(Ue.executablePath))throw new Error(`Browser was not found at the configured executablePath (${Ue.executablePath})`);let be=Ue.args.includes("--remote-debugging-pipe"),ut=async()=>{await this.cleanUserDataDir(Ue.userDataDir,{isTemp:Ue.isTempUserDataDir})};if(I(this,b2)==="firefox"&&Te==="webDriverBiDi"&&be)throw new Error("Pipe connections are not supported with Firefox and WebDriver BiDi");let We=CX({executablePath:Ue.executablePath,args:Ue.args,handleSIGHUP:b,handleSIGTERM:C,handleSIGINT:p,dumpio:s,env:f,pipe:be,onExit:ut,signal:r.signal}),st,or,gt=!1,jt=async()=>{gt||(gt=!0,await this.closeBrowser(We,or))};try{I(this,b2)==="firefox"?st=await this.createBiDiBrowser(We,jt,{timeout:R,protocolTimeout:H,slowMo:k,defaultViewport:O,acceptInsecureCerts:N,networkEnabled:L,idGenerator:ge}):(be?or=await this.createCdpPipeConnection(We,{timeout:R,protocolTimeout:H,slowMo:k,idGenerator:ge}):or=await this.createCdpSocketConnection(We,{timeout:R,protocolTimeout:H,slowMo:k,idGenerator:ge}),Te==="webDriverBiDi"?st=await this.createBiDiOverCdpBrowser(We,or,jt,{defaultViewport:O,acceptInsecureCerts:N,networkEnabled:L}):st=await IY._create(or,[],N,O,j,We.nodeProcess,jt,r.targetFilter,void 0,void 0,L,X))}catch(Et){jt();let Nt=We.getRecentLogs().join(` +`);throw Nt.includes("Failed to create a ProcessSingleton for your profile directory")||process.platform==="win32"&&(0,zfe.existsSync)((0,rrt.join)(Ue.userDataDir,"lockfile"))?new Error(`The browser is already running for ${Ue.userDataDir}. Use a different \`userDataDir\` or stop the running browser first.`):Nt.includes("Missing X server")&&r.headless===!1?new Error("Missing X server to start the headful browser. Either set headless to true or use xvfb-run to run your Puppeteer script."):Et instanceof a9?new ay(Et.message):Et}if(Array.isArray(c)){if(I(this,b2)==="chrome"&&!be)throw new Error("To use `enableExtensions` with a list of paths in Chrome, you must be connected with `--remote-debugging-pipe` (`pipe: true`).");await Promise.all([c.map(Et=>st.installExtension(Et))])}return J&&await this.waitForPageTarget(st,R),st}async closeBrowser(r,s){if(s)try{await s.closeBrowser(),await r.hasClosed()}catch(c){Ss(c),await r.close()}else await ed(rq(cu(r.hasClosed()),C5(5e3).pipe(eg(()=>cu(r.close())))))}async waitForPageTarget(r,s){try{await r.waitForTarget(c=>c.type()==="page",{timeout:s})}catch(c){throw await r.close(),c}}async createCdpSocketConnection(r,s){let c=await r.waitForLineOutput(Dxe,s.timeout),f=await Ez.create(c);return new wN(c,f,s.slowMo,s.protocolTimeout,!1,s.idGenerator)}async createCdpPipeConnection(r,s){let{3:c,4:f}=r.nodeProcess.stdio,p=new Lke(c,f);return new wN("",p,s.slowMo,s.protocolTimeout,!1,s.idGenerator)}async createBiDiOverCdpBrowser(r,s,c,f){let p=process.env.PUPPETEER_WEBDRIVER_BIDI_ONLY==="true",C=await Promise.resolve().then(()=>(ble(),wle)),b=await C.connectBidiOverCdp(s);return await C.BidiBrowser.create({connection:b,cdpConnection:p?void 0:s,closeCallback:c,process:r.nodeProcess,defaultViewport:f.defaultViewport,acceptInsecureCerts:f.acceptInsecureCerts,networkEnabled:f.networkEnabled})}async createBiDiBrowser(r,s,c){let f=await r.waitForLineOutput(Sxe,c.timeout)+"/session",p=await Ez.create(f),C=await Promise.resolve().then(()=>(ble(),wle)),b=new C.BidiConnection(f,p,c.idGenerator,c.slowMo,c.protocolTimeout);return await C.BidiBrowser.create({connection:b,closeCallback:s,process:r.nodeProcess,defaultViewport:c.defaultViewport,acceptInsecureCerts:c.acceptInsecureCerts,networkEnabled:c.networkEnabled??!0})}getProfilePath(){return(0,rrt.join)(this.puppeteer.configuration.temporaryDirectory??(0,Z7t.tmpdir)(),`puppeteer_dev_${this.browser}_profile-`)}resolveExecutablePath(r,s=!0){let c=this.puppeteer.configuration.executablePath;if(c){if(s&&!(0,zfe.existsSync)(c))throw new Error(`Tried to find the browser at the configured path (${c}), but no executable was found.`);return c}function f(C,b){switch(C){case"chrome":return b==="shell"?gc.CHROMEHEADLESSSHELL:gc.CHROME;case"firefox":return gc.FIREFOX}return gc.CHROME}let p=f(this.browser,r);if(c=o9({cacheDir:this.puppeteer.defaultDownloadPath,browser:p,buildId:this.puppeteer.browserVersion}),s&&!(0,zfe.existsSync)(c)){let C=this.puppeteer.configuration?.[this.browser]?.version;if(C)throw new Error(`Tried to find the browser at the configured path (${c}) for version ${C}, but no executable was found.`);switch(this.browser){case"chrome":throw new Error(`Could not find Chrome (ver. ${this.puppeteer.browserVersion}). This can occur if either + 1. you did not perform an installation before running the script (e.g. \`npx puppeteer browsers install ${p}\`) or + 2. your cache path is incorrectly configured (which is: ${this.puppeteer.configuration.cacheDirectory}). +For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides/configuration.`);case"firefox":throw new Error(`Could not find Firefox (rev. ${this.puppeteer.browserVersion}). This can occur if either + 1. you did not perform an installation for Firefox before running the script (e.g. \`npx puppeteer browsers install firefox\`) or + 2. your cache path is incorrectly configured (which is: ${this.puppeteer.configuration.cacheDirectory}). +For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides/configuration.`)}}return c}};b2=new WeakMap;ert();var $7t=wc(require("node:fs"),1);var CUr={force:!0,recursive:!0,maxRetries:5};async function Uke(a){await $7t.default.promises.rm(a,CUr)}var Jke=class extends zX{constructor(r){super(r,"chrome")}launch(r={}){return this.puppeteer.configuration.logLevel==="warn"&&process.platform==="darwin"&&process.arch==="x64"&&iUt.default.cpus()[0]?.model.includes("Apple")&&console.warn(["\x1B[1m\x1B[43m\x1B[30m","Degraded performance warning:\x1B[0m\x1B[33m","Launching Chrome on Mac Silicon (arm64) from an x64 Node installation results in","Rosetta translating the Chrome binary, even if Chrome is already arm64. This would","result in huge performance issues. To resolve this, you must run Puppeteer with","a version of Node built for arm64."].join(` + `)),super.launch(r)}async computeLaunchArguments(r={}){let{ignoreDefaultArgs:s=!1,args:c=[],pipe:f=!1,debuggingPort:p,channel:C,executablePath:b}=r,N=[];s?Array.isArray(s)?N.push(...this.defaultArgs(r).filter(R=>!s.includes(R))):N.push(...c):N.push(...this.defaultArgs(r)),N.some(R=>R.startsWith("--remote-debugging-"))||(f?(Is(!p,"Browser should be launched with either pipe or debugging port - not both."),N.push("--remote-debugging-pipe")):N.push(`--remote-debugging-port=${p||0}`));let L=!1,O=N.findIndex(R=>R.startsWith("--user-data-dir"));O<0&&(L=!0,N.push(`--user-data-dir=${await(0,rUt.mkdtemp)(this.getProfilePath())}`),O=N.length-1);let j=N[O].split("=",2)[1];Is(typeof j=="string","`--user-data-dir` is malformed");let k=b;return k||(Is(C||!this.puppeteer._isPuppeteerCore,"An `executablePath` or `channel` must be specified for `puppeteer-core`"),k=C?this.executablePath(C):this.resolveExecutablePath(r.headless??!0)),{executablePath:k,args:N,isTempUserDataDir:L,userDataDir:j}}async cleanUserDataDir(r,s){if(s.isTemp)try{await Uke(r)}catch(c){throw Ss(c),c}}defaultArgs(r={}){let s=eUt("--disable-features",r.args);r.args&&s.length>0&&tUt(r.args,"--disable-features");let f=["Translate","AcceptCHFrame","MediaRouter","OptimizationHints","RenderDocument","PartitionAllocSchedulerLoopQuarantineTaskControlledPurge",...process.env.PUPPETEER_TEST_EXPERIMENTAL_CHROME_FEATURES==="true"?[]:["ProcessPerSiteUpToMainFrameThreshold","IsolateSandboxedIframes"],...s].filter(R=>R!==""),p=eUt("--enable-features",r.args);r.args&&p.length>0&&tUt(r.args,"--enable-features");let C=["PdfOopif",...p].filter(R=>R!==""),b=["--allow-pre-commit-input","--disable-background-networking","--disable-background-timer-throttling","--disable-backgrounding-occluded-windows","--disable-breakpad","--disable-client-side-phishing-detection","--disable-component-extensions-with-background-pages","--disable-crash-reporter","--disable-default-apps","--disable-dev-shm-usage","--disable-hang-monitor","--disable-infobars","--disable-ipc-flooding-protection","--disable-popup-blocking","--disable-prompt-on-repost","--disable-renderer-backgrounding","--disable-search-engine-choice-screen","--disable-sync","--enable-automation","--export-tagged-pdf","--force-color-profile=srgb","--generate-pdf-document-outline","--metrics-recording-only","--no-first-run","--password-store=basic","--use-mock-keychain",`--disable-features=${f.join(",")}`,`--enable-features=${C.join(",")}`].filter(R=>R!==""),{devtools:N=!1,headless:L=!N,args:O=[],userDataDir:j,enableExtensions:k=!1}=r;return j&&b.push(`--user-data-dir=${Gke.default.posix.isAbsolute(j)||Gke.default.win32.isAbsolute(j)?j:Gke.default.resolve(j)}`),N&&b.push("--auto-open-devtools-for-tabs"),L&&b.push(L==="shell"?"--headless":"--headless=new","--hide-scrollbars","--mute-audio"),b.push(k?"--enable-unsafe-extension-debugging":"--disable-extensions"),O.every(R=>R.startsWith("-"))&&b.push("about:blank"),b.push(...O),b}executablePath(r,s=!0){return r?mX({browser:gc.CHROME,channel:$tt(r)}):this.resolveExecutablePath(void 0,s)}};function eUt(a,r=[]){return r.filter(s=>s.startsWith(a.endsWith("=")?a:`${a}=`)).map(s=>s.split(new RegExp(`${a}=\\s*`))[1]?.trim()).filter(s=>s)}function tUt(a,r){let s=new RegExp(`^${r}=.*`),c=0;for(;c!s.includes(R))):N.push(...c):N.push(...this.defaultArgs(r)),N.some(R=>R.startsWith("--remote-debugging-"))||(p&&Is(b===null,"Browser should be launched with either pipe or debugging port - not both."),N.push(`--remote-debugging-port=${b||0}`));let L,O=!0,j=N.findIndex(R=>["-profile","--profile"].includes(R));if(j!==-1){if(L=N[j+1],!L)throw new Error("Missing value for profile command line argument");O=!1}else L=await(0,XX.mkdtemp)(this.getProfilePath()),N.push("--profile"),N.push(L);await yxe(gc.FIREFOX,{path:L,preferences:a.getPreferences(C)});let k;return this.puppeteer._isPuppeteerCore||f?(Is(f,"An `executablePath` must be specified for `puppeteer-core`"),k=f):k=this.executablePath(void 0),{isTempUserDataDir:O,userDataDir:L,args:N,executablePath:k}}async cleanUserDataDir(r,s){if(s.isTemp)try{await Uke(r)}catch(c){throw Ss(c),c}else try{let c=".puppeteer",f=["prefs.js","user.js"],p=await Promise.allSettled(f.map(async C=>{let b=irt.default.join(r,C+c);if(nUt.default.existsSync(b)){let N=irt.default.join(r,C);await(0,XX.unlink)(N),await(0,XX.rename)(b,N)}}));for(let C of p)if(C.status==="rejected")throw C.reason}catch(c){Ss(c)}}executablePath(r,s=!0){return this.resolveExecutablePath(void 0,s)}defaultArgs(r={}){let{devtools:s=!1,headless:c=!s,args:f=[],userDataDir:p=null}=r,C=[];switch(sUt.default.platform()){case"darwin":C.push("--foreground");break;case"win32":C.push("--wait-for-browser");break}return p&&(C.push("--profile"),C.push(p)),c&&C.push("--headless"),s&&C.push("--devtools"),f.every(b=>b.startsWith("-"))&&C.push("about:blank"),C.push(...f),C}};k9();var y8,Xfe,B8,ZX,$X=class extends Vfe{constructor(s){let{configuration:c,...f}=s;super(f);Ae(this,B8);Ae(this,y8);Ae(this,Xfe);Hr(this,"defaultBrowserRevision");Hr(this,"configuration",{});switch(c&&(this.configuration=c),this.configuration.defaultBrowser){case"firefox":this.defaultBrowserRevision=qX.firefox;break;default:this.configuration.defaultBrowser="chrome",this.defaultBrowserRevision=qX.chrome;break}this.connect=this.connect.bind(this),this.launch=this.launch.bind(this),this.executablePath=this.executablePath.bind(this),this.defaultArgs=this.defaultArgs.bind(this),this.trimCache=this.trimCache.bind(this)}connect(s){return super.connect(s)}launch(s={}){let{browser:c=this.defaultBrowser}=s;switch(Be(this,Xfe,c),c){case"chrome":this.defaultBrowserRevision=qX.chrome;break;case"firefox":this.defaultBrowserRevision=qX.firefox;break;default:throw new Error(`Unknown product: ${c}`)}return Be(this,y8,Ke(this,B8,ZX).call(this,c)),I(this,y8).launch(s)}executablePath(s){return s===void 0?Ke(this,B8,ZX).call(this,this.lastLaunchedBrowser).executablePath(void 0,!1):typeof s=="string"?Ke(this,B8,ZX).call(this,"chrome").executablePath(s,!1):Ke(this,B8,ZX).call(this,s.browser??this.lastLaunchedBrowser).resolveExecutablePath(s.headless,!1)}get browserVersion(){return this.configuration?.[this.lastLaunchedBrowser]?.version??this.defaultBrowserRevision}get defaultDownloadPath(){return this.configuration.cacheDirectory}get lastLaunchedBrowser(){return I(this,Xfe)??this.defaultBrowser}get defaultBrowser(){return this.configuration.defaultBrowser??"chrome"}get product(){return this.lastLaunchedBrowser}defaultArgs(s={}){return Ke(this,B8,ZX).call(this,s.browser??this.lastLaunchedBrowser).defaultArgs(s)}async trimCache(){let s=K0();if(!s)throw new Error("The current platform is not supported.");let c=this.configuration.cacheDirectory,f=await Ake({cacheDir:c}),p=[{product:"chrome",browser:gc.CHROME,currentBuildId:""},{product:"firefox",browser:gc.FIREFOX,currentBuildId:""}];await Promise.all(p.map(async N=>{let L=this.configuration?.[N.product]?.version??qX[N.product];N.currentBuildId=await fX(N.browser,s,L)}));let C=new Set(p.map(N=>`${N.browser}_${N.currentBuildId}`)),b=new Set(p.map(N=>N.browser));for(let N of f)b.has(N.browser)&&(C.has(`${N.browser}_${N.buildId}`)||await cke({browser:N.browser,platform:s,cacheDir:c,buildId:N.buildId}))}};y8=new WeakMap,Xfe=new WeakMap,B8=new WeakSet,ZX=function(s){if(I(this,y8)&&I(this,y8).browser===s)return I(this,y8);switch(s){case"chrome":return new Jke(this);case"firefox":return new Hke(this);default:throw new Error(`Unknown product: ${s}`)}};var Kke=require("node:child_process"),cUt=wc(require("node:fs"),1),AUt=wc(require("node:os"),1),uUt=require("node:path"),lUt=require("node:stream"),fUt=wc(KC(),1);vw();vB();GA();xh();tg();var IUr=function(a,r,s){for(var c=arguments.length>2,f=0;f=0;R--){var J={};for(var H in c)J[H]=H==="access"?{}:c[H];for(var H in c.access)J.access[H]=c.access[H];J.addInitializer=function(ge){if(k)throw new TypeError("Cannot add initializers after decoration has completed");p.push(C(ge||null))};var X=(0,s[R])(b==="accessor"?{get:O.get,set:O.set}:O[N],J);if(b==="accessor"){if(X===void 0)continue;if(X===null||typeof X!="object")throw new TypeError("Object expected");(j=C(X.get))&&(O.get=j),(j=C(X.set))&&(O.set=j),(j=C(X.init))&&f.unshift(j)}else(j=C(X))&&(b==="field"?f.unshift(j):O[N]=j)}L&&Object.defineProperty(L,c.name,O),k=!0},EUr=function(a,r,s){return typeof r=="symbol"&&(r=r.description?"[".concat(r.description,"]"):""),Object.defineProperty(a,"name",{configurable:!0,value:s?"".concat(s," ",r):r})},yUr=30,oUt=30,BUr=(0,fUt.default)("puppeteer:ffmpeg"),gUt=(()=>{var p,C,b,N,L,O,dUt,jke,R;let a=lUt.PassThrough,r=[],s,c,f;return R=class extends a{constructor(X,ge,Te,{ffmpegPath:Ue,speed:be,scale:ut,crop:We,format:st,fps:or,loop:gt,delay:jt,quality:Et,colors:Nt,path:Dt,overwrite:Tt}={}){super({allowHalfOpen:!1});Ae(this,O);Ae(this,p,IUr(this,r));Ae(this,C);Ae(this,b,new AbortController);Ae(this,N);Ae(this,L);Ue??(Ue="ffmpeg"),st??(st="webm"),or??(or=oUt),gt||(gt=-1),jt??(jt=-1),Et??(Et=yUr),Nt??(Nt=256),Tt??(Tt=!0),Be(this,L,or);let{error:qr}=(0,Kke.spawnSync)(Ue);if(qr)throw qr;let zr=[`crop='min(${ge},iw):min(${Te},ih):0:0'`,`pad=${ge}:${Te}:0:0`];be&&zr.push(`setpts=${1/be}*PTS`),We&&zr.push(`crop=${We.width}:${We.height}:${We.x}:${We.y}`),ut&&zr.push(`scale=iw*${ut}:-1:flags=lanczos`);let bt=Ke(this,O,dUt).call(this,st,or,gt,jt,Et,Nt),ji=bt.indexOf("-vf");ji!==-1&&zr.push(bt.splice(ji,2).at(-1)??""),Dt&&cUt.default.mkdirSync((0,uUt.dirname)(Dt),{recursive:Tt}),Be(this,C,(0,Kke.spawn)(Ue,[["-loglevel","error"],["-avioflags","direct"],["-fpsprobesize","0","-probesize","32","-analyzeduration","0","-fflags","nobuffer"],["-f","image2pipe","-vcodec","png","-i","pipe:0"],["-an"],["-threads","1"],["-framerate",`${or}`],["-b:v","0"],bt,["-vf",zr.join()],[Tt?"-y":"-n"],"pipe:1"].flat(),{stdio:["pipe","pipe","pipe"]})),I(this,C).stdout.pipe(this),I(this,C).stderr.on("data",gi=>{BUr(gi.toString("utf8"))}),Be(this,p,X);let{client:Yr}=I(this,p).mainFrame();Yr.once(bl.Disconnected,()=>{this.stop().catch(Ss)}),Be(this,N,dDt(Hl(Yr,"Page.screencastFrame").pipe(I5(gi=>{Yr.send("Page.screencastFrameAck",{sessionId:gi.sessionId})}),pQ(gi=>gi.metadata.timestamp!==void 0),eg(gi=>({buffer:Buffer.from(gi.data,"base64"),timestamp:gi.metadata.timestamp})),CDt(2,1),IDt(([{timestamp:gi,buffer:Gr},{timestamp:kn}])=>cu(Array(Math.round(or*Math.max(kn-gi,0))).fill(Gr))),eg(gi=>(I(this,O,jke).call(this,gi),[gi,performance.now()])),W1e(tq(I(this,b).signal,"abort"))),{defaultValue:[Buffer.from([]),performance.now()]}))}async stop(){if(I(this,b).signal.aborted)return;await I(this,p)._stopScreencast().catch(Ss),I(this,b).abort();let[X,ge]=await I(this,N);await Promise.all(Array(Math.max(1,Math.round(I(this,L)*(performance.now()-ge)/1e3))).fill(X).map(I(this,O,jke).bind(this))),I(this,C).stdin.end(),await new Promise(Te=>{I(this,C).once("close",Te)})}async[(s=[Nae()],f=[Nae()],bh)](){await this.stop()}},p=new WeakMap,C=new WeakMap,b=new WeakMap,N=new WeakMap,L=new WeakMap,O=new WeakSet,dUt=function(X,ge,Te,Ue,be,ut){let We=[["-vcodec","vp9"],["-crf",`${be}`],["-deadline","realtime","-cpu-used",`${Math.min(AUt.default.cpus().length/2,8)}`]];switch(X){case"webm":return[...We,["-f","webm"]].flat();case"gif":return ge=oUt===ge?20:"source_fps",Te===1/0&&(Te=0),Ue!==-1&&(Ue/=10),[["-vf",`fps=${ge},split[s0][s1];[s0]palettegen=stats_mode=diff:max_colors=${ut}[p];[s1][p]paletteuse=dither=bayer`],["-loop",`${Te}`],["-final_delay",`${Ue}`],["-f","gif"]].flat();case"mp4":return[...We,["-movflags","hybrid_fragmented"],["-f","mp4"]].flat()}},jke=function(){return c.value},(()=>{let X=typeof Symbol=="function"&&Symbol.metadata?Object.create(a[Symbol.metadata]??null):void 0;aUt(R,c={value:EUr(async function(ge){let Te=await new Promise(Ue=>{I(this,C).stdin.write(ge,Ue)});Te&&console.log(`ffmpeg failed to write: ${Te.message}.`)},"#writeFrame")},s,{kind:"method",name:"#writeFrame",static:!1,private:!0,access:{has:ge=>wh(O,ge),get:ge=>I(ge,O,jke)},metadata:X},null,r),aUt(R,null,f,{kind:"method",name:"stop",static:!1,private:!1,access:{has:ge=>"stop"in ge,get:ge=>ge.stop},metadata:X},null,r),X&&Object.defineProperty(R,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:X})})(),R})();var pUt=wc(require("node:fs"),1),_Ut=wc(require("node:path"),1);yk();Ym.value={fs:pUt.default,path:_Ut.default,ScreenRecorder:gUt};var vUr=new $X({isPuppeteerCore:!0}),{connect:r0i,defaultArgs:i0i,executablePath:n0i,launch:s0i}=vUr;var gJt=require("node:os"),dJt=require("node:path"),pJt=wc(fJt(),1);function dit(a){let r=process.env[a];if(r!==void 0)switch(r.toLowerCase()){case"":case"0":case"false":case"off":return!1;default:return!0}}function nHr(a){switch(a){case"chrome":case"firefox":return!0;default:return!1}}function sHr(a){if(a&&!nHr(a))throw new Error(`Unsupported browser ${a}`);switch(a){case"firefox":return"firefox";default:return"chrome"}}function aHr(a){switch(a){case"silent":return"silent";case"error":return"error";default:return"warn"}}function git(a,r,s={}){if(r.skipDownload)return{skipDownload:!0};let c={},f=a.replaceAll("-","_").toUpperCase();return c.version=process.env[`PUPPETEER_${f}_VERSION`]??r[a]?.version??s.version,c.downloadBaseUrl=process.env[`PUPPETEER_${f}_DOWNLOAD_BASE_URL`]??r[a]?.downloadBaseUrl??s.downloadBaseUrl,c.skipDownload=dit(`PUPPETEER_${f}_SKIP_DOWNLOAD`)??dit(`PUPPETEER_SKIP_${f}_DOWNLOAD`)??r[a]?.skipDownload??s.skipDownload,c}var _Jt=()=>{let a=(0,pJt.cosmiconfigSync)("puppeteer",{searchStrategy:"global"}).search(),r=a?{...a.config}:{};return r.logLevel=aHr(process.env.PUPPETEER_LOGLEVEL??r.logLevel),r.defaultBrowser=sHr(process.env.PUPPETEER_BROWSER??r.defaultBrowser),r.executablePath=process.env.PUPPETEER_EXECUTABLE_PATH??r.executablePath,r.executablePath&&(r.skipDownload=!0),r.skipDownload=dit("PUPPETEER_SKIP_DOWNLOAD")??r.skipDownload,r.chrome=git("chrome",r),r["chrome-headless-shell"]=git("chrome-headless-shell",r),r.firefox=git("firefox",r,{skipDownload:!0}),r.cacheDirectory=process.env.PUPPETEER_CACHE_DIR??r.cacheDirectory??(0,dJt.join)((0,gJt.homedir)(),".cache","puppeteer"),r.temporaryDirectory=process.env.PUPPETEER_TMP_DIR??r.temporaryDirectory,r.experiments??(r.experiments={}),r};var oHr=_Jt(),hJt=new $X({isPuppeteerCore:!1,configuration:oHr}),{connect:OIi,defaultArgs:UIi,executablePath:GIi,launch:JIi,trimCache:HIi}=hJt,mJt=hJt;var Mh=class extends Error{constructor(s,c){super(s);Hr(this,"status");this.status=c}};async function CJt(){try{return await mJt.launch({headless:!0,executablePath:process.env.PUPPETEER_EXECUTABLE_PATH||void 0,pipe:!0,timeout:6e4,args:["--no-sandbox","--disable-gpu","--disable-dev-shm-usage","--no-zygote","--no-extensions"]})}catch(a){throw console.log(a),new Mh("Failed to launch browser",500)}}var cHr=["Navigating frame was detached","Execution context was destroyed","Cannot find context with specified id","net::ERR_ABORTED"];function IJt(a){return a instanceof Error?a.message:String(a)}function AHr(a){let r=IJt(a);return cHr.some(s=>r.includes(s))}async function uHr(a){let s=(await a.pages())[0]??await a.newPage();return s.isClosed()?a.newPage():s}async function lHr(a,r){if(r.format==="pptx")await a.setViewport({width:3e3,height:3e3,deviceScaleFactor:1});else if(r.format==="pdf"||r.format==="png")await a.setViewport({width:1280,height:720,deviceScaleFactor:1});else throw new Mh("Invalid task specified",400);a.setDefaultTimeout(12e4),r.fastapiUrl&&await a.evaluateOnNewDocument(s=>{let c=window;c.env={...c.env||{},NEXT_PUBLIC_FAST_API:s}},r.fastapiUrl)}async function fHr(a,r){for(let c=1;c<=3;c+=1){let f=await uHr(a);await lHr(f,r);try{return await f.goto(r.url,{waitUntil:"networkidle0"}),f}catch(p){if(!AHr(p)||c===3)throw p;console.warn(`[openUrlAndGetStablePage] Transient navigation failure on attempt ${c}/3: ${IJt(p)}`),f.isClosed()||await f.close().catch(()=>{}),await new Promise(C=>setTimeout(C,350))}}throw new Mh("Failed to navigate export page",500)}async function EJt(a,r){let s=await fHr(a,r);try{await s.waitForFunction(()=>document.readyState==="complete")}catch{}try{await pHr(s)}catch{}try{await _Hr(s)}catch{}try{await hHr(s)}catch{}try{await gHr(s)}catch{}try{await dHr(s)}catch{}return s}async function gHr(a,r=2e3,s=1e4){console.log("[waitForDomIdle] Waiting for DOM to be idle"),await a.evaluate(async(c,f)=>{let p=Date.now(),C=Date.now(),b=new MutationObserver(()=>{C=Date.now()});b.observe(document.documentElement,{subtree:!0,childList:!0,attributes:!0,characterData:!0}),await new Promise(N=>{let L=()=>{let O=Date.now();if(O-C>=c){b.disconnect(),N();return}if(O-p>=f){b.disconnect(),N();return}setTimeout(L,50)};setTimeout(L,c)})},r,s),console.log("[waitForDomIdle] DOM idle")}async function dHr(a,r=15e3){console.log("[waitForAllContentLoaded] Waiting for all content to be loaded"),await a.waitForFunction(` + () => { + const allElements = document.querySelectorAll('*'); + let loadedElements = 0; + let totalElements = allElements.length; + + for (let el of allElements) { + const style = window.getComputedStyle(el); + const isVisible = style.display !== 'none' && + style.visibility !== 'hidden' && + style.opacity !== '0'; + + if (isVisible && el.offsetWidth > 0 && el.offsetHeight > 0) { + loadedElements++; + } + } + + return (loadedElements / totalElements) >= 0.99; + } + `,{timeout:r}),await new Promise(s=>setTimeout(s,2e3)),console.log("[waitForAllContentLoaded] All content loaded")}async function pHr(a,r=1e4){console.log("[waitForTailwindCdn] Waiting for Tailwind CDN to be ready"),await a.waitForFunction(()=>{if(!document.body)return!1;let s=document.createElement("div");s.className="hidden",document.body.appendChild(s);let c=window.getComputedStyle(s).display;return s.remove(),c==="none"},{timeout:r,polling:100}),console.log("[waitForTailwindCdn] Tailwind CDN ready")}async function _Hr(a,r=15e3){console.log("[waitForAllImagesLoaded] Waiting for all images to be loaded"),await a.evaluate(async s=>{let c=Date.now()+s;function f(b){let N=b.backgroundImage||"",L=[],O=/url\(("|'|)(.*?)\1\)/g,j;for(;(j=O.exec(N))!==null;){let k=(j[2]||"").trim();k&&L.push(k)}return L}function p(b){return new Promise(N=>{let L=new Image;L.onload=()=>N(),L.onerror=()=>N(),L.src=b})}async function C(b){let N=b.map(L=>typeof L.decode=="function"?L.decode().catch(()=>{}):L.complete&&L.naturalWidth>0?Promise.resolve():new Promise(O=>{let j=()=>O();L.addEventListener("load",j,{once:!0}),L.addEventListener("error",j,{once:!0})}));await Promise.all(N)}for(;;){let b=Array.from(document.images);await C(b);let N=Array.from(document.querySelectorAll("*")),L=new Set;for(let j of N){let k=getComputedStyle(j);for(let R of f(k))L.add(R)}if(await Promise.all(Array.from(L).map(j=>p(j))),await new Promise(j=>setTimeout(j,50)),Array.from(document.images).every(j=>j.complete)||Date.now()>c)return}},r),console.log("[waitForAllImagesLoaded] All images loaded")}async function hHr(a,r=1e4){console.log("[waitForFontsReady] Waiting for fonts to be ready"),await a.evaluate(async s=>{let c=document.fonts;c&&await Promise.race([c.ready,new Promise(f=>setTimeout(f,s))])},r),console.log("[waitForFontsReady] Fonts ready")}var SZ=wc(require("node:fs/promises"));var q0=[];for(let a=0;a<256;++a)q0.push((a+256).toString(16).slice(1));function yJt(a,r=0){return(q0[a[r+0]]+q0[a[r+1]]+q0[a[r+2]]+q0[a[r+3]]+"-"+q0[a[r+4]]+q0[a[r+5]]+"-"+q0[a[r+6]]+q0[a[r+7]]+"-"+q0[a[r+8]]+q0[a[r+9]]+"-"+q0[a[r+10]]+q0[a[r+11]]+q0[a[r+12]]+q0[a[r+13]]+q0[a[r+14]]+q0[a[r+15]]).toLowerCase()}var BJt=require("node:crypto"),p2e=new Uint8Array(256),d2e=p2e.length;function pit(){return d2e>p2e.length-16&&((0,BJt.randomFillSync)(p2e),d2e=0),p2e.slice(d2e,d2e+=16)}var QJt=require("node:crypto"),_it={randomUUID:QJt.randomUUID};function mHr(a,r,s){a=a||{};let c=a.random??a.rng?.()??pit();if(c.length<16)throw new Error("Random bytes length must be >= 16");if(c[6]=c[6]&15|64,c[8]=c[8]&63|128,r){if(s=s||0,s<0||s+16>r.length)throw new RangeError(`UUID byte range ${s}:${s+15} is out of buffer bounds`);for(let f=0;f<16;++f)r[s+f]=c[f];return r}return yJt(c)}function CHr(a,r,s){return _it.randomUUID&&!r&&!a?_it.randomUUID():mHr(a,r,s)}var jQ=CHr;var zit=wc(require("node:fs/promises"));async function hit(a){let r=jQ();return await a.evaluate((c,f)=>{try{c.setAttribute("data-pptx-element-identifier",f)}catch{}function p(Et){if(!Et||Et==="transparent"||Et==="rgba(0, 0, 0, 0)")return{hex:void 0,opacity:void 0};if(Et.startsWith("rgba(")||Et.startsWith("hsla(")){let bt=Et.match(/rgba?\(([^)]+)\)|hsla?\(([^)]+)\)/);if(bt){let Yr=(bt[1]||bt[2]).split(",").map(gi=>gi.trim());if(Yr.length>=4){let gi=parseFloat(Yr[3]),Gr=Et.replace(/rgba?\(|hsla?\(|\)/g,"").split(",").slice(0,3).join(","),kn=Et.startsWith("rgba")?`rgb(${Gr})`:`hsl(${Gr})`,wn=document.createElement("canvas").getContext("2d");if(wn){wn.fillStyle=kn;let Jn=wn.fillStyle;return{hex:Jn.startsWith("#")?Jn.substring(1):Jn,opacity:isNaN(gi)?void 0:gi}}}}}if(Et.startsWith("rgb(")||Et.startsWith("hsl(")){let ji=document.createElement("canvas").getContext("2d");if(ji){ji.fillStyle=Et;let Yr=ji.fillStyle;return{hex:Yr.startsWith("#")?Yr.substring(1):Yr,opacity:void 0}}}if(Et.startsWith("#"))return{hex:Et.substring(1),opacity:void 0};let Dt=document.createElement("canvas").getContext("2d");if(!Dt)return{hex:Et,opacity:void 0};Dt.fillStyle=Et;let Tt=Dt.fillStyle;return{hex:Tt.startsWith("#")?Tt.substring(1):Tt,opacity:void 0}}function C(Et){let Nt=Et.childNodes;for(let Dt=0;Dtkn==="transparent"||/rgba\s*\([^\)]*,\s*0\s*\)/i.test(kn)||/hsla\s*\([^\)]*,\s*0\s*\)/i.test(kn),Gr=bt&&(Tt||gi(Yr)||gi(ji));return Tt||Gr}function j(Et,Nt){try{if(Et.tagName.toLowerCase()!=="li")return;let Tt=(Nt.display||"").toLowerCase(),qr=(Nt.listStyleType||"").toLowerCase(),zr=Tt==="list-item"&&qr!=="none",bt;try{let Yr=window.getComputedStyle(Et,"::marker");if(Yr){let gi=(Yr.content||"").trim(),Gr=(Yr.listStyleType||"").toLowerCase();gi&&gi!=="none"&&gi!=="normal"&&gi!=='""'&&(zr=!0),Gr&&Gr!=="none"&&(zr=!0);let kn=Yr.color;kn&&(bt=p(kn).hex)}}catch{}if(!zr)return;let ji={};return bt&&(ji.color=bt),ji}catch{return}}function k(Et){let Nt=p(Et.borderColor),Dt=(Gr,kn)=>{let jn=parseFloat(Gr||"0"),wn=(kn||"").toLowerCase();return!isFinite(jn)||jn<=0||wn==="none"||wn==="hidden"?0:jn},Tt=Dt(Et.borderTopWidth,Et.borderTopStyle),qr=Dt(Et.borderRightWidth,Et.borderRightStyle),zr=Dt(Et.borderBottomWidth,Et.borderBottomStyle),bt=Dt(Et.borderLeftWidth,Et.borderLeftStyle),ji=[];Tt>0&&ji.push("top"),qr>0&&ji.push("right"),zr>0&&ji.push("bottom"),bt>0&&ji.push("left");let Yr=Math.max(Tt,qr,zr,bt);if(!isFinite(Yr)||Yr<=0)return;let gi={color:Nt.hex,width:Yr,opacity:Nt.opacity};if(ji.length>0&&ji.length<4&&(gi.sides=ji),!(!gi.color&&gi.width===void 0&&gi.opacity===void 0))return gi}function R(Et){let Nt=Et.boxShadow,Dt={};if(Nt&&Nt!=="none"){let Tt=[],qr="",zr=0;for(let Yr=0;Yr0){let oa=jn.join(" "),Kc=p(oa);Ps=!!(Kc.hex&&Kc.hex!=="000000"&&Kc.opacity!==0)}let po=kn.some(oa=>oa!==0),Zn=0;po&&(Zn+=kn.filter(oa=>oa!==0).length),Ps&&(Zn+=2),(po||Ps)&&Zn>ji&&(bt=gi,ji=Zn)}if(!bt&&Tt.length>0&&(bt=Tt[0]),bt){let Yr=bt.split(" "),gi=[],Gr=[],kn=!1,jn="",wn=!1;for(let Jn=0;Jn=2){let Jn=gi[0],Jr=gi[1],Ps=gi.length>=3?gi[2]:0,po=gi.length>=4?gi[3]:0;if(Gr.length>0){let Zn=Gr.join(" "),oa=p(Zn);oa.hex&&(Dt={offset:[Jn,Jr],color:oa.hex,opacity:oa.opacity,radius:Ps,spread:po,inset:kn,angle:Math.atan2(Jr,Jn)*(180/Math.PI)})}}}}if(Object.keys(Dt).length!==0)return Dt}function J(Et,Nt){let Dt=parseFloat(Et.fontSize),Tt=parseInt(Et.fontWeight),qr=p(Et.color),zr=Et.fontStyle;function bt(jn){let wn=(jn||"").split(",").map(Ps=>Ps.trim().replace(/['"]/g,"")),Jn=wn[0]||"",Jr=Jn.match(/^__([A-Za-z0-9]+(?:_[A-Za-z0-9]+)*)_[A-Za-z0-9]+$/);return Jr?Jr[1].split(/[_-]+/).filter(po=>po.length>0).map(po=>po.charAt(0).toUpperCase()+po.slice(1).toLowerCase()).join(" "):/^__/.test(Jn)?(wn.find(po=>!/^__/.test(po)&&!/(^|\s)(fallback)$/i.test(po)&&!/^(system-ui|ui-sans-serif|ui-serif|ui-monospace|ui-rounded|sans-serif|serif|monospace|cursive|fantasy|emoji|math|fangsong)$/i.test(po))||Jn).replace(/\s+Fallback$/i,""):Jn}function ji(jn,wn){try{let Vr=function(Pa){Zn.font=`${Qe} ${Fi} ${Kc} ${Pa}`},vt=function(Pa){return Vr(Pa),Zn.measureText(oa).width};var Jn=Vr,Jr=vt;let Ps=document.createElement("canvas");Ps.width=600,Ps.height=100;let po=Ps.getContext("2d");if(!po)return bt(wn.fontFamily||"");let Zn=po,oa=`mmmmmmmmmmlliWWWWW@#$%^&*()_+-=[]{}|;':",./<>? 1234567890`.repeat(3),Kc=wn.fontSize||"16px",Fi=wn.fontWeight||"400",Qe=wn.fontStyle||"normal",ai=vt("monospace"),Ci=vt("serif"),Zr=vt("sans-serif"),ei=(wn.fontFamily||"").split(",").map(Pa=>Pa.trim()).filter(Pa=>Pa.length>0),ms=Pa=>/^("|')?(system-ui|ui-sans-serif|ui-serif|ui-monospace|ui-rounded|sans-serif|serif|monospace|cursive|fantasy|emoji|math|fangsong)("|')?$/i.test(Pa);for(let Pa of ei){let qc=Pa.replace(/^\s*["']|["']\s*$/g,"");if(ms(qc))continue;let oc=vt(`"${qc}", monospace`),kl=vt(`"${qc}", serif`),oi=vt(`"${qc}", sans-serif`);if(oc!==ai||kl!==Ci||oi!==Zr)return bt(qc)}return ei.some(Pa=>/^['"]?serif['"]?$/i.test(Pa))?"serif":ei.some(Pa=>/^['"]?monospace['"]?$/i.test(Pa))?"monospace":(ei.find(Pa=>ms(Pa))||"serif").replace(/^["']|["']$/g,"")}catch{return bt(wn.fontFamily||"")}}let Yr=ji(Nt,Et);function gi(jn){let wn=(jn||"").trim();if(!wn)return"Noto Sans";let Jn=wn.toLowerCase();return Jn==="serif"?"Noto Serif":Jn==="monospace"?"Noto Sans Mono":Jn==="emoji"?"Noto Color Emoji":Jn==="sans-serif"||Jn==="system-ui"||Jn==="ui-sans-serif"||Jn==="ui-monospace"||Jn==="ui-serif"||Jn==="ui-rounded"||Jn==="cursive"||Jn==="fantasy"||Jn==="math"||Jn==="fangsong"?"Noto Sans":wn}let kn={name:gi(Yr),size:isNaN(Dt)?void 0:Dt,weight:isNaN(Tt)?void 0:Tt,color:qr.hex,italic:zr==="italic"};if(!(!kn.name&&kn.size===void 0&&kn.weight===void 0&&!kn.color&&!kn.italic))return kn}function H(Et,Nt){let Dt=Et.lineHeight;if(!Dt||Dt==="normal")return;let Tt=String(Dt).trim(),qr=parseFloat(Et.fontSize),zr;if(Tt.endsWith("px")){let bt=parseFloat(Tt);zr=isNaN(bt)?void 0:bt}else if(Tt.endsWith("%")){let bt=parseFloat(Tt);zr=isNaN(bt)?void 0:bt/100*qr}else if(Tt.endsWith("em")){let bt=parseFloat(Tt);zr=isNaN(bt)?void 0:bt*qr}else if(Tt.endsWith("rem")){let bt=parseFloat(Tt);try{let ji=window.getComputedStyle(document.documentElement).fontSize,Yr=parseFloat(ji);zr=isNaN(bt)||isNaN(Yr)?void 0:bt*Yr}catch{zr=isNaN(bt)?void 0:bt*qr}}else{let bt=parseFloat(Tt);isNaN(bt)||(zr=bt*qr)}return zr!==void 0&&isFinite(zr)?zr:void 0}function X(Et,Nt){let Dt=Et.letterSpacing;if(!Dt||Dt==="normal")return;let Tt=parseFloat(Dt);if(!isNaN(Tt))return Tt}function ge(Et){let Nt=Et.textDecorationLine||Et.textDecoration;if(!Nt)return;let Dt=String(Nt).toLowerCase();if(Dt.includes("line-through"))return"line-through";if(Dt.includes("underline"))return"underline";if(Dt.includes("overline"))return"overline"}function Te(Et){let Nt=(Et.textTransform||"").toLowerCase();if(Nt==="uppercase")return"uppercase";if(Nt==="lowercase")return"lowercase";if(Nt==="capitalize")return"capitalize"}function Ue(Et){let Nt=parseFloat(Et.marginTop),Dt=parseFloat(Et.marginBottom),Tt=parseFloat(Et.marginLeft),qr=parseFloat(Et.marginRight),zr={top:isNaN(Nt)?void 0:Nt,bottom:isNaN(Dt)?void 0:Dt,left:isNaN(Tt)?void 0:Tt,right:isNaN(qr)?void 0:qr};return zr.top===0&&zr.bottom===0&&zr.left===0&&zr.right===0?void 0:zr}function be(Et){let Nt=parseFloat(Et.paddingTop),Dt=parseFloat(Et.paddingBottom),Tt=parseFloat(Et.paddingLeft),qr=parseFloat(Et.paddingRight),zr={top:isNaN(Nt)?void 0:Nt,bottom:isNaN(Dt)?void 0:Dt,left:isNaN(Tt)?void 0:Tt,right:isNaN(qr)?void 0:qr};return zr.top===0&&zr.bottom===0&&zr.left===0&&zr.right===0?void 0:zr}function ut(Et,Nt){let Dt=Et.borderRadius,Tt;if(Dt&&Dt!=="0px"){let qr=Dt.split(" ").map(zr=>parseFloat(zr));if(qr.length===1?Tt=[qr[0],qr[0],qr[0],qr[0]]:qr.length===2?Tt=[qr[0],qr[1],qr[0],qr[1]]:qr.length===3?Tt=[qr[0],qr[1],qr[2],qr[1]]:qr.length===4&&(Tt=qr),Tt){let zr=Nt.getBoundingClientRect(),bt=Math.min(zr.width,zr.height)/2;Tt=Tt.map(ji=>Math.max(0,Math.min(ji,bt)))}}return Tt}function We(Et,Nt){if(Et.tagName.toLowerCase()==="img")return Nt&&Nt.length===4&&Nt.every(Dt=>Dt===50)?"circle":"rectangle"}function st(Et){let Nt=Et.filter;if(!Nt||Nt==="none")return;let Dt={},Tt=Nt.match(/[a-zA-Z]+\([^)]*\)/g);return Tt&&Tt.forEach(qr=>{let zr=qr.match(/([a-zA-Z]+)\(([^)]*)\)/);if(zr){let bt=zr[1],ji=parseFloat(zr[2]);if(!isNaN(ji))switch(bt){case"invert":Dt.invert=ji;break;case"brightness":Dt.brightness=ji;break;case"contrast":Dt.contrast=ji;break;case"saturate":Dt.saturate=ji;break;case"hue-rotate":Dt.hueRotate=ji;break;case"blur":Dt.blur=ji;break;case"grayscale":Dt.grayscale=ji;break;case"sepia":Dt.sepia=ji;break;case"opacity":Dt.opacity=ji;break}}}),Object.keys(Dt).length>0?Dt:void 0}function or(Et){let Nt=Et.transform;if(!Nt||Nt==="none")return;let Dt=Nt.match(/rotate(?:Z)?\(([^)]+)\)/);if(Dt){let bt=Dt[1].trim();if(bt.endsWith("deg")){let ji=parseFloat(bt.replace("deg",""));if(!isNaN(ji))return zr(ji)}else if(bt.endsWith("rad")){let ji=parseFloat(bt.replace("rad",""));if(!isNaN(ji))return zr(ji*180/Math.PI)}else if(bt.endsWith("turn")){let ji=parseFloat(bt.replace("turn",""));if(!isNaN(ji))return zr(ji*360)}else{let ji=parseFloat(bt);if(!isNaN(ji))return zr(ji)}}let Tt=Nt.match(/matrix\(([^)]+)\)/);if(Tt){let bt=Tt[1].split(",").map(ji=>parseFloat(ji.trim()));if(bt.length>=2&&!bt.some(ji=>isNaN(ji))){let ji=bt[0],Yr=bt[1],gi=Math.atan2(Yr,ji);return zr(gi*180/Math.PI)}}let qr=Nt.match(/matrix3d\(([^)]+)\)/);if(qr){let bt=qr[1].split(",").map(ji=>parseFloat(ji.trim()));if(bt.length===16&&!bt.some(ji=>isNaN(ji))){let ji=bt[0],Yr=bt[1],gi=Math.atan2(Yr,ji);return zr(gi*180/Math.PI)}}return;function zr(bt){let ji=bt%360;return ji<0&&(ji+=360),Math.round(ji)}}function gt(Et){let Nt=Et.textAlign,Dt=Et.direction||"ltr";Nt==="start"?Nt=Dt==="rtl"?"right":"left":Nt==="end"&&(Nt=Dt==="rtl"?"left":"right");let Tt=Et.display,qr=Et.flexDirection,zr=Et.alignItems,bt=Et.justifyContent,ji=Et.justifyItems,Yr=Et.placeItems,gi=Et.verticalAlign,Gr,kn=Jn=>{if(Jn){if(Jn==="center")return"center";if(Jn==="flex-end"||Jn==="end"||Jn==="right")return"right";if(Jn==="flex-start"||Jn==="start"||Jn==="left")return"left"}},jn=kn;Tt==="flex"||Tt==="inline-flex"?Gr=!!qr&&qr.startsWith("column")?jn(zr):kn(bt):Tt==="grid"||Tt==="inline-grid"?Gr=kn(ji)||(Yr==="center"?"center":void 0):Yr==="center"&&(Gr="center"),Gr&&(Nt=Gr);let wn;if(Yr==="center"?wn="middle":Tt==="flex"||Tt==="inline-flex"?qr&&qr.startsWith("column")?bt==="center"?wn="middle":bt==="flex-end"||bt==="end"?wn="bottom":(bt==="flex-start"||bt==="start")&&(wn="top"):zr==="center"?wn="middle":zr==="flex-end"||zr==="end"?wn="bottom":(zr==="flex-start"||zr==="start")&&(wn="top"):(Tt==="grid"||Tt==="inline-grid")&&(zr==="center"?wn="middle":zr==="end"?wn="bottom":zr==="start"&&(wn="top")),!wn&&gi){let Jn=gi.toLowerCase();Jn==="middle"?wn="middle":Jn==="bottom"||Jn==="sub"||Jn==="text-bottom"?wn="bottom":(Jn==="top"||Jn==="super"||Jn==="text-top")&&(wn="top")}return{textAlign:Nt,textVerticalAlign:wn}}function jt(Et,Nt){let Dt=Et.tagName.toLowerCase(),Tt=Array.from(Et.attributes).reduce((kl,oi)=>(oi.name.startsWith("data-")&&oi.name!=="data-pptx-element-identifier"&&(kl[oi.name]=oi.value),kl),{}),qr=window.getComputedStyle(Et),zr=b(Et),bt=R(qr),ji=N(qr),Yr=O(qr),gi=k(qr),Gr=J(qr,Et),kn=H(qr,Et),jn=X(qr,Et),wn=ge(qr),Jn=Te(qr),Jr=Gr||kn!==void 0||jn!==void 0||wn!==void 0||Jn!==void 0?{...Gr||{},lineHeight:kn,letterSpacing:jn,textDecoration:wn,textTransform:Jn}:void 0,Ps=Ue(qr),po=be(qr),Zn=C(Et)&&Et.textContent||void 0;Zn&&(Zn=Zn.replace(/^\n+|\n+$/g,"").trim().replace(/[ \t]+/g," ").replace(//gi,` +`),Zn.trim().length<=0&&(Zn=void 0));let oa=qr.zIndex,Kc=parseInt(oa),Fi=isNaN(Kc)?void 0:Kc,{textAlign:Qe,textVerticalAlign:Vr}=gt(qr),vt=qr.objectFit,ai=L(qr),Ci=Et.src||ai,Zr=ut(qr,Et),ei=We(Et,Zr),ms=qr.whiteSpace!=="nowrap",ga=st(qr),Za=parseFloat(qr.opacity),eA=isNaN(Za)?void 0:Za,Pa=qr.clipPath==="none"?void 0:qr.clipPath,qc=or(qr),oc=j(Et,qr);return{tagName:Dt,path:[],id:Et.id,className:Et.className&&typeof Et.className=="string"?Et.className:Et.className?Et.className.toString():void 0,innerText:Zn,passedAttributes:Tt,opacity:eA,background:ji,hasGradient:Yr,marker:oc,border:gi,shadow:bt,font:Jr,position:zr,margin:Ps,padding:po,zIndex:Fi,textAlign:Qe!=="left"?Qe:void 0,textVerticalAlign:Vr&&Vr!=="top"?Vr:void 0,borderRadius:Zr,rotation:qc,imageSrc:Ci,objectFit:vt,clip:!1,overlay:void 0,shape:ei,connectorType:void 0,textWrap:ms,shouldScreenshot:!1,identifier:Nt,filters:ga,clipPath:Pa}}return jt(c,f)},r)}var qit=wc(Hjt());async function jjt(a,r,s,c,f){if(!a)throw new Error("cropImage requires an input image");if(!(c>0)||!(f>0))throw new Error("cropImage requires positive width and height");let p=Buffer.isBuffer(a)?a:Buffer.from(a),C=await(0,qit.default)(p).metadata(),b=C.width||0,N=C.height||0;if(b<=0||N<=0)throw new Error("Invalid image dimensions");let L=Math.max(0,Math.floor(r)),O=Math.max(0,Math.floor(s)),j=Math.max(0,Math.floor(c)),k=Math.max(0,Math.floor(f));if(L>=b||O>=N)throw new Error("Crop origin is outside image bounds");let R=Math.max(1,Math.min(j,b-L)),J=Math.max(1,Math.min(k,N-O)),H=await(0,qit.default)(p).extract({left:L,top:O,width:R,height:J}).png({compressionLevel:9}).toBuffer();return Buffer.from(H)}function Kjt(a,r,s){let[c=0,f=0,p=0,C=0]=r||[];if(c<=0&&f<=0&&p<=0&&C<=0)return!1;let b=a.left,N=a.top,L=a.left+a.width,O=a.top+a.height,j=s.left,k=s.top,R=s.left+s.width,J=s.top+s.height,H=b+c,X=N+c,ge=L-f,Te=N+f,Ue=L-p,be=O-p,ut=b+C,We=O-C,st=j0,or=R>L-f&&k0,gt=R>L-p&&J>O-p&&p>0,jt=jO-C&&C>0,Et=st&&(j-H)*(j-H)+(k-X)*(k-X)>c*c,Nt=or&&(R-ge)*(R-ge)+(k-Te)*(k-Te)>f*f,Dt=gt&&(R-Ue)*(R-Ue)+(J-be)*(J-be)>p*p,Tt=jt&&(j-ut)*(j-ut)+(J-We)*(J-We)>C*C;return Et||Nt||Dt||Tt}function qjt(a){if(!a)return;let r=a.replace(/^[\s\u200B\u200C\u200D\uFEFF]+|[\s\u200B\u200C\u200D\uFEFF]+$/g,"");if(r&&(r=r.replace(/\s*/gi,` +`).replace(/\r\n?/g,` +`).replace(/\n[^\S\n]+/g,` +`),!!r.trim()))return r}function Yit(a,r){if(a.length>r.length)return!1;for(let s=0;s *"),H=[];for(let Te=0;TeArray.from(Tt.querySelectorAll("*")).map(qr=>qr.tagName.toLowerCase())),Nt=new Set(["strong","u","em","code","s","b","br"]),Dt=Et.every(Tt=>Nt.has(Tt));if(Et.length>0&&Dt){let Tt=await Ue.evaluate(qr=>qr.innerHTML||"");be.innerText=qjt(Tt),H.push(be);continue}}if(be.hasImmediateUnwrappedText=await UWr(Ue),be.hasImmediateUnwrappedText){let Et=await Ue.evaluate(Nt=>Nt.innerHTML||"");be.innerText=qjt(Et)}if(be.tagName==="svg"||be.tagName==="canvas"){be.shouldScreenshot=!0,be.includeChildrenInScreenshot=!0,H.push(be);continue}if(be.tagName==="table"&&(be.shouldScreenshot=!0,be.includeChildrenInScreenshot=!0,be.excludeTextInScreenshot=!0),(be.position.left<0||be.position.top<0||be.position.left+be.position.width>1280||be.position.top+be.position.height>720)&&(be.background?.color||be.border?.color)&&(be.shouldScreenshot=!0,be.includeChildrenInScreenshot=!0,be.excludeTextInScreenshot=!0),(be.clipPath&&be.background?.color||be.hasGradient)&&(be.shouldScreenshot=!0,be.excludeTextInScreenshot=!0),be.border&&be.border.sides&&(be.shouldScreenshot=!0,be.excludeTextInScreenshot=!0),be.borderRadius&&Array.isArray(be.borderRadius)&&be.borderRadius.length===4&&!be.imageSrc&&(be.background&&be.background.color||be.border&&be.border.color)){let[Et,Nt,Dt,Tt]=be.borderRadius;Et===Nt&&Nt===Dt&&Dt===Tt||(be.shouldScreenshot=!0,be.excludeTextInScreenshot=!0)}let ut=be.passedAttributes??{},We=Wit(ut["data-screenshot-include-children"]),st=Wit(ut["data-screenshot-exclude-text"]),or=Wit(ut["data-screenshot"]);if(We&&(be.shouldScreenshot=!0,be.includeChildrenInScreenshot=!0),st&&(be.excludeTextInScreenshot=!0),or&&(be.shouldScreenshot=!0),be.shouldScreenshot&&!be.excludeTextInScreenshot){H.push(be);continue}let jt=(await Vit({element:Ue,rootRect:r,depth:s+1,inheritedPath:Array.isArray(c)?[...c,Te]:[Te],inheritedFont:be.font,inheritedRectangle:be.position,inheritedBackground:be.background||p,inheritedBorderRadius:be.borderRadius||b,inheritedBorderRadiusRect:be.position&&{left:be.position.left??0,top:be.position.top??0,width:be.position.width??0,height:be.position.height??0}||N,inheritedOpacity:be.opacity||O,inheritedRotation:be.rotation||j,inheritedClipPath:be.clipPath||k,inheritedZIndex:be.zIndex??L,inheritedZPath:be.zIndex!==void 0?[...be.zPath||[],be.zIndex]:be.zPath||R})).elements;if(be.shouldScreenshot&&be.includeChildrenInScreenshot&&be.excludeTextInScreenshot&&(jt=jt.filter(Et=>Et.innerText&&Et.innerText.trim().length>0),jt.forEach(Et=>{Et.isExcludedTextChild=!0})),be.tagName==="ul"||be.tagName==="ol"){let Et=be.path||[],Nt=jt.filter(qr=>qr.tagName!=="li"||!qr.path?!1:OWr(Et,qr.path)),Dt=[],Tt=[];for(let qr of Nt){let zr=qr.path||[],ji=jt.filter(kn=>!kn.path||kn===qr?!1:Yit(zr,kn.path)).filter(kn=>kn.innerText&&kn.innerText.trim().length>0).sort((kn,jn)=>{let wn=kn.position?.top??Number.MAX_SAFE_INTEGER,Jn=jn.position?.top??Number.MAX_SAFE_INTEGER;return wn!==Jn?wn-Jn:(kn.path?.length??0)-(jn.path?.length??0)}),gi=!!(qr.innerText&&qr.innerText.trim().length>0)?qr:ji[0];if(!gi){Tt.push(zr);continue}let Gr={...gi,marker:gi.marker||qr.marker};Dt.push(Gr),Tt.push(zr)}if(Dt.length>0)jt=jt.filter(qr=>qr.path?!Tt.some(zr=>Yit(zr,qr.path)):!0),be.relatedElements=Dt;else{let qr=jt.filter(zr=>zr.tagName==="li"&&!!zr.marker);jt=jt.filter(zr=>!(zr.tagName==="li"&&zr.marker)),be.relatedElements=qr}}be.hasImmediateUnwrappedText&&(be.relatedElements=jt,jt=[]),H.push(be),H.push(...jt)}let X=p?.color;if(s===0){let Te=H.filter(Ue=>Ue.position&&Ue.position.left===0&&Ue.position.top===0&&Ue.position.width===r.width&&Ue.position.height===r.height);for(let Ue of Te)Ue.background&&Ue.background.color&&(X=Ue.background.color)}let ge=s===0?H.filter(Te=>{let Ue=Te.background&&Te.background.color,be=Te.border&&Te.border.color,ut=Te.shadow&&Te.shadow.color,We=Te.innerText&&Te.innerText.trim().length>0,st=Te.imageSrc,or=Te.tagName==="svg",gt=Te.tagName==="canvas",jt=Te.tagName==="table",Et=Te.relatedElements&&Te.relatedElements.length>0,Nt=Ue||be||ut||We,Dt=st||or||gt||jt||Te.hasGradient||Et;return Nt||Dt}):H;if(s===0){let Te=ge.sort((be,ut)=>{let We=be.zPath||[],st=ut.zPath||[],or=Math.max(We.length,st.length);for(let zr=0;zr(be.shadow&&be.shadow.color&&(!be.background||!be.background.color)&&X&&(be.background={color:X,opacity:void 0}),be)),{elements:Te,backgroundColor:X}}else return{elements:ge,backgroundColor:X}}async function UWr(a){return await a.evaluate(r=>{let s=Array.from(r.childNodes);for(let c of s)if(c.nodeType===Node.TEXT_NODE&&(c.textContent??"").trim().length>0)return!0;return!1})}async function Wjt(a,r){let s=J=>new Promise(H=>setTimeout(H,J)),c=`[data-pptx-element-identifier="${r.identifier}"]`,f=await a.$(c);if(!f){f=a;for(let J of r.path){if(!f)break;f=(await f.$$(":scope > *"))[J]||null}if(!f)throw new Error(`Element at path [${r.path.join(",")}] not found for screenshot`)}let p=!!(r.includeChildrenInScreenshot??!1),C=!!(r.excludeTextInScreenshot??!1),b=`__pptx_visible_${Date.now()}_${Math.random().toString(36).slice(2)}`,N=null,L="init",O=p?"1":"0",j=C?"1":"0",k=Number.parseInt(process.env.PPTX_SCREENSHOT_RENDER_WAIT_MS||"2500",10),R=100;console.log(`[Export] [screenshotElement] element=${r.identifier} tagName=${r.tagName} path=${JSON.stringify(r.path)} includeChildren=${O} excludeText=${j}`);try{let J=f.frame;if(!J&&f.executionContext){let Ue=f.executionContext(),be=Ue&&Ue.frame;typeof be=="function"?J=be.call(Ue):be&&(J=be)}let H=J?J.page?.()??J.page:null,X=H?await H.createCDPSession():null;if(X)try{await X.send("Emulation.setDefaultBackgroundColorOverride",{color:{r:0,g:0,b:0,a:0}})}catch{}let ge=async()=>{try{return await f.evaluate(be=>be.isConnected===!0?1:0)===1}catch{return!1}},Te=async()=>{if(!(r.tagName==="svg"||r.tagName==="canvas")||!H)return;let be=Date.now();for(;Date.now()-be{let or=st,gt=or.getBoundingClientRect(),jt=window.getComputedStyle(or),Et=or.tagName.toLowerCase(),Nt=!0;if(Et==="svg"){let Dt=or;Nt=!!Dt.querySelector("path,rect,circle,ellipse,line,polyline,polygon,text,tspan,use,image")||Dt.childElementCount>0}return{width:gt.width,height:gt.height,display:jt.display,visibility:jt.visibility,opacity:jt.opacity,hasRenderableContent:Nt}});if(ut.display!=="none"&&ut.visibility!=="hidden"&&Number.parseFloat(ut.opacity||"1")>0&&ut.width>4&&ut.height>4&&ut.hasRenderableContent){await H.evaluate(()=>new Promise(st=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>st())})}));return}await s(R)}console.warn(`[Export] [screenshotElement] render wait timeout for ${r.identifier} (${r.tagName})`)};for(let Ue=0;Ue<2;Ue++){if(L="isConnected",console.log("[Export] [screenshotElement] step: isConnected"),!await ge()){if(H&&Ue===0)try{await s(200);continue}catch{}throw new Error("Target node is detached from document before screenshot")}L="inject",console.log(`[Export] [screenshotElement] step: inject (marker, includeChildren=${O}, excludeText=${j})`);try{N=b,await f.evaluate((be,ut,We,st)=>{let or=be.ownerDocument||document,gt=String(We)==="1",jt=String(st)==="1";if(be.tagName.toLowerCase()==="svg"){let zr=be,bt=Array.from(zr.querySelectorAll("[id]")),ji=new Map;for(let Jn of bt){let Jr=Jn.getAttribute("id");if(!Jr)continue;let Ps=`${ut}__${Jr}`;ji.set(Jr,Ps)}bt.forEach(Jn=>{let Jr=Jn.getAttribute("id");if(!Jr)return;let Ps=ji.get(Jr);Ps&&Ps!==Jr&&Jn.setAttribute("id",Ps)});let Yr=["fill","stroke","filter","clip-path","mask","marker-start","marker-mid","marker-end","href","xlink:href"],gi=Jn=>Jn.replace(/url\(#([^\)]+)\)/g,(Jr,Ps)=>{let po=ji.get(Ps);return po?`url(#${po})`:Jr}),Gr=Array.from(zr.querySelectorAll("*"));for(let Jn of Gr){for(let Ps of Yr){let po=Jn.getAttribute(Ps);po&&po.includes("url(#")&&Jn.setAttribute(Ps,gi(po))}let Jr=Jn.getAttribute("style");Jr&&Jr.includes("url(#")&&Jn.setAttribute("style",gi(Jr))}let kn=Array.from(zr.querySelectorAll("style"));for(let Jn of kn)Jn.textContent&&Jn.textContent.includes("url(#")&&(Jn.textContent=gi(Jn.textContent));let jn=["fill","stroke","stop-color"],wn=[zr,...Array.from(zr.querySelectorAll("*"))];for(let Jn of wn){let Jr=window.getComputedStyle(Jn);for(let Ps of jn)if((Jn.getAttribute(Ps)||Jn.style?.getPropertyValue(Ps)||"").includes("var(")){let Zn=Jr.getPropertyValue(Ps)||Jr[Ps];Zn&&Zn!=="none"&&Jn.setAttribute(Ps,Zn)}}}or.body.setAttribute("data-pptx-scope",ut);let Nt=or.createElement("style");Nt.setAttribute("data-pptx-style",ut),Nt.textContent=` + html, body { background: transparent !important; } + /* Hide within the active slide scope except the target and its ancestors */ + [data-pptx-scope="${ut}"] *:not([data-pptx-visible="${ut}"]):not([data-pptx-ancestor="${ut}"]) { + opacity: 0 !important; + pointer-events: none !important; + } + /* Ensure marked nodes render fully */ + [data-pptx-visible="${ut}"], [data-pptx-ancestor="${ut}"] { + visibility: visible !important; + } + /* Ancestors remain visible for layout but do not paint backgrounds */ + [data-pptx-ancestor="${ut}"] { + background: none !important; + background-color: transparent !important; + background-image: none !important; + box-shadow: none !important; + border-color: transparent !important; + outline: none !important; + } + [data-pptx-ancestor="${ut}"]::before, + [data-pptx-ancestor="${ut}"]::after { + background: none !important; + background-color: transparent !important; + background-image: none !important; + box-shadow: none !important; + border-color: transparent !important; + outline: none !important; + } + /* When excluding text, force text to be transparent within the target scope */ + [data-pptx-exclude-text="${ut}"], + [data-pptx-exclude-text="${ut}"] *, + [data-pptx-exclude-text="${ut}"]::before, + [data-pptx-exclude-text="${ut}"]::after, + [data-pptx-exclude-text="${ut}"] *::before, + [data-pptx-exclude-text="${ut}"] *::after { + color: transparent !important; + -webkit-text-fill-color: transparent !important; + text-shadow: none !important; + } + [data-pptx-exclude-text="${ut}"] svg text, + [data-pptx-exclude-text="${ut}"] svg tspan, + [data-pptx-exclude-text="${ut}"] svg tref, + [data-pptx-exclude-text="${ut}"] svg textPath { + fill: transparent !important; + stroke: transparent !important; + } + [data-pptx-hidden="${ut}"] { + opacity: 0 !important; + visibility: hidden !important; + } + `,or.head.appendChild(Nt);let Dt=zr=>{zr.setAttribute("data-pptx-visible",ut)};Dt(be),gt&&be.querySelectorAll("*").forEach(zr=>Dt(zr)),jt&&be.setAttribute("data-pptx-exclude-text",ut);let Tt=be.parentElement,qr=be;for(;Tt;){Tt.setAttribute("data-pptx-ancestor",ut);let bt=Array.from(Tt.children);for(let ji of bt){if(ji===qr||ji.getAttribute("data-pptx-hidden")===ut)continue;let Yr=ji.style.getPropertyValue("opacity"),gi=ji.style.getPropertyPriority("opacity"),Gr=ji.style.getPropertyValue("visibility"),kn=ji.style.getPropertyPriority("visibility");Yr&&ji.setAttribute("data-pptx-prev-opacity",Yr),gi&&ji.setAttribute("data-pptx-prev-opacity-priority",gi),Gr&&ji.setAttribute("data-pptx-prev-visibility",Gr),kn&&ji.setAttribute("data-pptx-prev-visibility-priority",kn),ji.setAttribute("data-pptx-hidden",ut),ji.style.setProperty("opacity","0","important"),ji.style.setProperty("visibility","hidden","important")}qr=Tt,Tt=Tt.parentElement}},b,p?"1":"0",C?"1":"0"),console.log("[Export] [screenshotElement] step: inject done");break}catch(be){let ut=String(be?.message||be||"");if((/detached/i.test(ut)||/Node is detached/i.test(ut))&&H&&Ue===0)try{await s(200);continue}catch{}throw be}}await Te();try{L="screenshot",console.log("[Export] [screenshotElement] step: screenshot");let Ue=null;for(let be=0;be<2;be++)try{Ue=await f.screenshot({type:"png",omitBackground:!0}),console.log("[Export] [screenshotElement] step: screenshot done");break}catch(ut){if(be===0){let We=String(ut?.message||ut||"");if((/detached/i.test(We)||/Node is detached/i.test(We))&&H)try{await s(200);continue}catch{}}throw ut}if(!Ue)throw new Error("Failed to capture screenshot buffer");if(r.position&&typeof r.position.width=="number"&&typeof r.position.height=="number"){let be=typeof r.position.left=="number"?r.position.left:0,ut=typeof r.position.top=="number"?r.position.top:0,We=Math.max(0,Math.round(r.position.width)),st=Math.max(0,Math.round(r.position.height)),or=0,gt=0,jt=We,Et=st;be<0&&(or=Math.min(We-1,Math.max(0,Math.round(-be)))),ut<0&&(gt=Math.min(st-1,Math.max(0,Math.round(-ut))));let Nt=Math.max(0,Math.round(be+We-1280)),Dt=Math.max(0,Math.round(ut+st-720));jt=Math.max(1,jt-or-Nt),Et=Math.max(1,Et-gt-Dt),(or!==0||gt!==0||Nt>0||Dt>0)&&(Ue=await jjt(Ue,or,gt,jt,Et))}return new Uint8Array(Ue)}finally{if(L="cleanup",console.log("[Export] [screenshotElement] step: cleanup"),N!==null&&H)try{await H.evaluate(Ue=>{let be=document,ut=be.querySelector(`style[data-pptx-style="${Ue}"]`);ut&&ut.parentNode&&ut.parentNode.removeChild(ut),be.querySelectorAll(`[data-pptx-visible="${Ue}"]`).forEach(st=>{st.removeAttribute("data-pptx-visible")}),be.querySelectorAll(`[data-pptx-ancestor="${Ue}"]`).forEach(st=>{st.removeAttribute("data-pptx-ancestor")}),be.querySelectorAll(`[data-pptx-exclude-text="${Ue}"]`).forEach(st=>{st.removeAttribute("data-pptx-exclude-text")}),be.querySelectorAll(`[data-pptx-hidden="${Ue}"]`).forEach(st=>{let or=st,gt=or.getAttribute("data-pptx-prev-opacity"),jt=or.getAttribute("data-pptx-prev-opacity-priority")||void 0;gt!==null?or.style.setProperty("opacity",gt,jt):or.style.removeProperty("opacity");let Et=or.getAttribute("data-pptx-prev-visibility"),Nt=or.getAttribute("data-pptx-prev-visibility-priority")||void 0;Et!==null?or.style.setProperty("visibility",Et,Nt):or.style.removeProperty("visibility"),or.removeAttribute("data-pptx-prev-opacity"),or.removeAttribute("data-pptx-prev-opacity-priority"),or.removeAttribute("data-pptx-prev-visibility"),or.removeAttribute("data-pptx-prev-visibility-priority"),or.removeAttribute("data-pptx-hidden")});let We=be.querySelector(`[data-pptx-scope="${Ue}"]`);return We&&We.removeAttribute("data-pptx-scope"),!0},N),console.log("[Export] [screenshotElement] step: cleanup done")}catch(Ue){console.warn(`[Export] [screenshotElement] cleanup warning: ${Ue?.message||Ue} (element: ${r.identifier}, tagName: ${r.tagName}, path: ${JSON.stringify(r.path)})`)}if(X)try{await X.send("Emulation.setDefaultBackgroundColorOverride",{}),await X.detach()}catch(Ue){console.warn(`[Export] [screenshotElement] cleanup client warning: ${Ue?.message||Ue} (element: ${r.identifier}, tagName: ${r.tagName}, path: ${JSON.stringify(r.path)})`)}}}catch(J){throw console.log(`[Export] [screenshotElement] failed at step=${L} error=${J?.message||J}`),new Error(`[step: ${L}] ${J?.message||J}`)}}var Xit=wc(require("node:path"));async function Yjt(a){let r=await GWr(a),s=await JWr(r);return{slides:await r.$$(":scope > div > div > div > div > div"),speakerNotes:s}}async function GWr(a){let r=await a.$("#presentation-slides-wrapper");if(!r)throw new Mh("Presentation slides not found",500);return r}async function JWr(a){return await a.evaluate(r=>Array.from(r.querySelectorAll("[data-speaker-note]")).map(s=>s.getAttribute("data-speaker-note")||""))}async function Vjt(a){let r=[];for(let s of a){let c=await Vit({element:s});r.push(c)}if(process.env.NODE_ENV==="development"){let s=Xit.default.join(process.env.APP_DATA_DIRECTORY,"slides_attributes.json");zit.default.writeFile(s,JSON.stringify(r,null,2))}return r}async function zjt(a,r,s,c){let f=process.env.PPTX_STRICT_SCREENSHOT==="1";for(let[p,C]of r.entries()){for(let b of C.elements)if(b.shouldScreenshot)try{let N=await Wjt(a[p],b);b.imageSrc=Xit.default.join(c,`${b.identifier}.png`),await zit.default.writeFile(b.imageSrc,N)}catch(N){if(console.warn(`[postProcessSlidesAttributes] Skipped screenshot due to error: ${N?.message||N} (element: ${b.identifier}, tagName: ${b.tagName}, path: ${JSON.stringify(b.path)})`),f)throw N;b.skipExport=!0,b.shouldScreenshot=!1}C.speakerNote=s[p]}}var Zit,HWr=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),yZ=(Zit=String.fromCodePoint)!==null&&Zit!==void 0?Zit:(a=>{let r="";return a>65535&&(a-=65536,r+=String.fromCharCode(a>>>10&1023|55296),a=56320|a&1023),r+=String.fromCharCode(a),r});function $it(a){var r;return a>=55296&&a<=57343||a>1114111?65533:(r=HWr.get(a))!==null&&r!==void 0?r:a}function F2e(a){let r=typeof atob=="function"?atob(a):typeof Buffer.from=="function"?Buffer.from(a,"base64").toString("binary"):new Buffer(a,"base64").toString("binary"),s=r.length&-2,c=new Uint16Array(s/2);for(let f=0,p=0;f=__.ZERO&&a<=__.NINE}function jWr(a){return a>=__.UPPER_A&&a<=__.UPPER_F||a>=__.LOWER_A&&a<=__.LOWER_F}function KWr(a){return a>=__.UPPER_A&&a<=__.UPPER_Z||a>=__.LOWER_A&&a<=__.LOWER_Z||ent(a)}function qWr(a){return a===__.EQUALS||KWr(a)}var n0;(function(a){a[a.EntityStart=0]="EntityStart",a[a.NumericStart=1]="NumericStart",a[a.NumericDecimal=2]="NumericDecimal",a[a.NumericHex=3]="NumericHex",a[a.NamedEntity=4]="NamedEntity"})(n0||(n0={}));var Qy;(function(a){a[a.Legacy=0]="Legacy",a[a.Strict=1]="Strict",a[a.Attribute=2]="Attribute"})(Qy||(Qy={}));var BZ=class{constructor(r,s,c){this.decodeTree=r,this.emitCodePoint=s,this.errors=c,this.state=n0.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=Qy.Strict,this.runConsumed=0}startEntity(r){this.decodeMode=r,this.state=n0.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(r,s){switch(this.state){case n0.EntityStart:return r.charCodeAt(s)===__.NUM?(this.state=n0.NumericStart,this.consumed+=1,this.stateNumericStart(r,s+1)):(this.state=n0.NamedEntity,this.stateNamedEntity(r,s));case n0.NumericStart:return this.stateNumericStart(r,s);case n0.NumericDecimal:return this.stateNumericDecimal(r,s);case n0.NumericHex:return this.stateNumericHex(r,s);case n0.NamedEntity:return this.stateNamedEntity(r,s)}}stateNumericStart(r,s){return s>=r.length?-1:(r.charCodeAt(s)|Xjt)===__.LOWER_X?(this.state=n0.NumericHex,this.consumed+=1,this.stateNumericHex(r,s+1)):(this.state=n0.NumericDecimal,this.stateNumericDecimal(r,s))}stateNumericHex(r,s){for(;s>14;for(;s>7;if(this.runConsumed===0){let N=f&AE.JUMP_TABLE;if(r.charCodeAt(s)!==N)return this.result===0?0:this.emitNotTerminatedNamedEntity();s++,this.excess++,this.runConsumed++}for(;this.runConsumed=r.length)return-1;let N=this.runConsumed-1,L=c[this.treeIndex+1+(N>>1)],O=N%2===0?L&255:L>>8&255;if(r.charCodeAt(s)!==O)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();s++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(b>>1),f=c[this.treeIndex],p=(f&AE.VALUE_LENGTH)>>14}if(s>=r.length)break;let C=r.charCodeAt(s);if(C===__.SEMI&&p!==0&&(f&AE.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,p,this.consumed+this.excess);if(this.treeIndex=WWr(c,f,this.treeIndex+Math.max(1,p),C),this.treeIndex<0)return this.result===0||this.decodeMode===Qy.Attribute&&(p===0||qWr(C))?0:this.emitNotTerminatedNamedEntity();if(f=c[this.treeIndex],p=(f&AE.VALUE_LENGTH)>>14,p!==0){if(C===__.SEMI)return this.emitNamedEntityData(this.treeIndex,p,this.consumed+this.excess);this.decodeMode!==Qy.Strict&&(f&AE.FLAG13)===0&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}s++,this.excess++}return-1}emitNotTerminatedNamedEntity(){var r;let{result:s,decodeTree:c}=this,f=(c[s]&AE.VALUE_LENGTH)>>14;return this.emitNamedEntityData(s,f,this.consumed),(r=this.errors)===null||r===void 0||r.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(r,s,c){let{decodeTree:f}=this;return this.emitCodePoint(s===1?f[r]&~(AE.VALUE_LENGTH|AE.FLAG13):f[r+1],c),s===3&&this.emitCodePoint(f[r+2],c),c}end(){var r;switch(this.state){case n0.NamedEntity:return this.result!==0&&(this.decodeMode!==Qy.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case n0.NumericDecimal:return this.emitNumericEntity(0,2);case n0.NumericHex:return this.emitNumericEntity(0,3);case n0.NumericStart:return(r=this.errors)===null||r===void 0||r.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case n0.EntityStart:return 0}}};function Zjt(a){let r="",s=new BZ(a,c=>r+=yZ(c));return function(f,p){let C=0,b=0;for(;(b=f.indexOf("&",b))>=0;){r+=f.slice(C,b),s.startEntity(p);let L=s.write(f,b+1);if(L<0){C=b+s.end();break}C=b+L,b=L===0?C+1:C}let N=r+f.slice(C);return r="",N}}function WWr(a,r,s,c){let f=(r&AE.BRANCH_LENGTH)>>7,p=r&AE.JUMP_TABLE;if(f===0)return p!==0&&c===p?s:-1;if(p){let L=c-p;return L<0||L>=f?-1:a[s+L]-1}let C=f+1>>1,b=0,N=f-1;for(;b<=N;){let L=b+N>>>1,O=L>>1,k=a[s+O]>>(L&1)*8&255;if(kc)N=L-1;else return a[s+C+L]}return-1}var YWr=Zjt(Ige),VWr=Zjt(Ege);function yge(a,r=Qy.Legacy){return YWr(a,r)}function N2e(a){return VWr(a,Qy.Strict)}var _A;(function(a){a[a.Tab=9]="Tab",a[a.NewLine=10]="NewLine",a[a.FormFeed=12]="FormFeed",a[a.CarriageReturn=13]="CarriageReturn",a[a.Space=32]="Space",a[a.ExclamationMark=33]="ExclamationMark",a[a.Number=35]="Number",a[a.Amp=38]="Amp",a[a.SingleQuote=39]="SingleQuote",a[a.DoubleQuote=34]="DoubleQuote",a[a.Dash=45]="Dash",a[a.Slash=47]="Slash",a[a.Zero=48]="Zero",a[a.Nine=57]="Nine",a[a.Semi=59]="Semi",a[a.Lt=60]="Lt",a[a.Eq=61]="Eq",a[a.Gt=62]="Gt",a[a.Questionmark=63]="Questionmark",a[a.UpperA=65]="UpperA",a[a.LowerA=97]="LowerA",a[a.UpperF=70]="UpperF",a[a.LowerF=102]="LowerF",a[a.UpperZ=90]="UpperZ",a[a.LowerZ=122]="LowerZ",a[a.LowerX=120]="LowerX",a[a.OpeningSquareBracket=91]="OpeningSquareBracket"})(_A||(_A={}));var fa;(function(a){a[a.Text=1]="Text",a[a.BeforeTagName=2]="BeforeTagName",a[a.InTagName=3]="InTagName",a[a.InSelfClosingTag=4]="InSelfClosingTag",a[a.BeforeClosingTagName=5]="BeforeClosingTagName",a[a.InClosingTagName=6]="InClosingTagName",a[a.AfterClosingTagName=7]="AfterClosingTagName",a[a.BeforeAttributeName=8]="BeforeAttributeName",a[a.InAttributeName=9]="InAttributeName",a[a.AfterAttributeName=10]="AfterAttributeName",a[a.BeforeAttributeValue=11]="BeforeAttributeValue",a[a.InAttributeValueDq=12]="InAttributeValueDq",a[a.InAttributeValueSq=13]="InAttributeValueSq",a[a.InAttributeValueNq=14]="InAttributeValueNq",a[a.BeforeDeclaration=15]="BeforeDeclaration",a[a.InDeclaration=16]="InDeclaration",a[a.InProcessingInstruction=17]="InProcessingInstruction",a[a.BeforeComment=18]="BeforeComment",a[a.CDATASequence=19]="CDATASequence",a[a.InSpecialComment=20]="InSpecialComment",a[a.InCommentLike=21]="InCommentLike",a[a.BeforeSpecialS=22]="BeforeSpecialS",a[a.BeforeSpecialT=23]="BeforeSpecialT",a[a.SpecialStartSequence=24]="SpecialStartSequence",a[a.InSpecialTag=25]="InSpecialTag",a[a.InEntity=26]="InEntity"})(fa||(fa={}));function xR(a){return a===_A.Space||a===_A.NewLine||a===_A.Tab||a===_A.FormFeed||a===_A.CarriageReturn}function R2e(a){return a===_A.Slash||a===_A.Gt||xR(a)}function zWr(a){return a>=_A.LowerA&&a<=_A.LowerZ||a>=_A.UpperA&&a<=_A.UpperZ}var cb;(function(a){a[a.NoValue=0]="NoValue",a[a.Unquoted=1]="Unquoted",a[a.Single=2]="Single",a[a.Double=3]="Double"})(cb||(cb={}));var dm={Cdata:new Uint8Array([67,68,65,84,65,91]),CdataEnd:new Uint8Array([93,93,62]),CommentEnd:new Uint8Array([45,45,62]),ScriptEnd:new Uint8Array([60,47,115,99,114,105,112,116]),StyleEnd:new Uint8Array([60,47,115,116,121,108,101]),TitleEnd:new Uint8Array([60,47,116,105,116,108,101]),TextareaEnd:new Uint8Array([60,47,116,101,120,116,97,114,101,97]),XmpEnd:new Uint8Array([60,47,120,109,112])},QZ=class{constructor({xmlMode:r=!1,decodeEntities:s=!0},c){this.cbs=c,this.state=fa.Text,this.buffer="",this.sectionStart=0,this.index=0,this.entityStart=0,this.baseState=fa.Text,this.isSpecial=!1,this.running=!0,this.offset=0,this.currentSequence=void 0,this.sequenceIndex=0,this.xmlMode=r,this.decodeEntities=s,this.entityDecoder=new BZ(r?Ege:Ige,(f,p)=>this.emitCodePoint(f,p))}reset(){this.state=fa.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=fa.Text,this.currentSequence=void 0,this.running=!0,this.offset=0}write(r){this.offset+=this.buffer.length,this.buffer=r,this.parse()}end(){this.running&&this.finish()}pause(){this.running=!1}resume(){this.running=!0,this.indexthis.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=fa.BeforeTagName,this.sectionStart=this.index):this.decodeEntities&&r===_A.Amp&&this.startEntity()}stateSpecialStartSequence(r){let s=this.sequenceIndex===this.currentSequence.length;if(!(s?R2e(r):(r|32)===this.currentSequence[this.sequenceIndex]))this.isSpecial=!1;else if(!s){this.sequenceIndex++;return}this.sequenceIndex=0,this.state=fa.InTagName,this.stateInTagName(r)}stateInSpecialTag(r){if(this.sequenceIndex===this.currentSequence.length){if(r===_A.Gt||xR(r)){let s=this.index-this.currentSequence.length;if(this.sectionStart=0)this.state=this.baseState,s===0&&(this.index-=1);else{if(r=r||(this.state===fa.InCommentLike?this.currentSequence===dm.CdataEnd?this.cbs.oncdata(this.sectionStart,r,0):this.cbs.oncomment(this.sectionStart,r,0):this.state===fa.InTagName||this.state===fa.BeforeAttributeName||this.state===fa.BeforeAttributeValue||this.state===fa.AfterAttributeName||this.state===fa.InAttributeName||this.state===fa.InAttributeValueSq||this.state===fa.InAttributeValueDq||this.state===fa.InAttributeValueNq||this.state===fa.InClosingTagName||this.cbs.ontext(this.sectionStart,r))}emitCodePoint(r,s){this.baseState!==fa.Text&&this.baseState!==fa.InSpecialTag?(this.sectionStart0&&C.has(this.stack[0]);){let b=this.stack.shift();(c=(s=this.cbs).onclosetag)===null||c===void 0||c.call(s,b,!0)}this.isVoidElement(r)||(this.stack.unshift(r),this.htmlMode&&(rKt.has(r)?this.foreignContext.unshift(!0):iKt.has(r)&&this.foreignContext.unshift(!1))),(p=(f=this.cbs).onopentagname)===null||p===void 0||p.call(f,r),this.cbs.onopentag&&(this.attribs={})}endOpenTag(r){var s,c;this.startIndex=this.openTagStart,this.attribs&&((c=(s=this.cbs).onopentag)===null||c===void 0||c.call(s,this.tagname,this.attribs,r),this.attribs=null),this.cbs.onclosetag&&this.isVoidElement(this.tagname)&&this.cbs.onclosetag(this.tagname,!0),this.tagname=""}onopentagend(r){this.endIndex=r,this.endOpenTag(!1),this.startIndex=r+1}onclosetag(r,s){var c,f,p,C,b,N,L,O;this.endIndex=s;let j=this.getSlice(r,s);if(this.lowerCaseTagNames&&(j=j.toLowerCase()),this.htmlMode&&(rKt.has(j)||iKt.has(j))&&this.foreignContext.shift(),this.isVoidElement(j))this.htmlMode&&j==="br"&&((C=(p=this.cbs).onopentagname)===null||C===void 0||C.call(p,"br"),(N=(b=this.cbs).onopentag)===null||N===void 0||N.call(b,"br",{},!0),(O=(L=this.cbs).onclosetag)===null||O===void 0||O.call(L,"br",!1));else{let k=this.stack.indexOf(j);if(k!==-1)for(let R=0;R<=k;R++){let J=this.stack.shift();(f=(c=this.cbs).onclosetag)===null||f===void 0||f.call(c,J,R!==k)}else this.htmlMode&&j==="p"&&(this.emitOpenTag("p"),this.closeCurrentTag(!0))}this.startIndex=s+1}onselfclosingtag(r){this.endIndex=r,this.recognizeSelfClosing||this.foreignContext[0]?(this.closeCurrentTag(!1),this.startIndex=r+1):this.onopentagend(r)}closeCurrentTag(r){var s,c;let f=this.tagname;this.endOpenTag(r),this.stack[0]===f&&((c=(s=this.cbs).onclosetag)===null||c===void 0||c.call(s,f,!r),this.stack.shift())}onattribname(r,s){this.startIndex=r;let c=this.getSlice(r,s);this.attribname=this.lowerCaseAttributeNames?c.toLowerCase():c}onattribdata(r,s){this.attribvalue+=this.getSlice(r,s)}onattribentity(r){this.attribvalue+=yZ(r)}onattribend(r,s){var c,f;this.endIndex=s,(f=(c=this.cbs).onattribute)===null||f===void 0||f.call(c,this.attribname,this.attribvalue,r===cb.Double?'"':r===cb.Single?"'":r===cb.NoValue?void 0:null),this.attribs&&!Object.prototype.hasOwnProperty.call(this.attribs,this.attribname)&&(this.attribs[this.attribname]=this.attribvalue),this.attribvalue=""}getInstructionName(r){let s=r.search($Wr),c=s<0?r:r.substr(0,s);return this.lowerCaseTagNames&&(c=c.toLowerCase()),c}ondeclaration(r,s){this.endIndex=s;let c=this.getSlice(r,s);if(this.cbs.onprocessinginstruction){let f=this.getInstructionName(c);this.cbs.onprocessinginstruction(`!${f}`,`!${c}`)}this.startIndex=s+1}onprocessinginstruction(r,s){this.endIndex=s;let c=this.getSlice(r,s);if(this.cbs.onprocessinginstruction){let f=this.getInstructionName(c);this.cbs.onprocessinginstruction(`?${f}`,`?${c}`)}this.startIndex=s+1}oncomment(r,s,c){var f,p,C,b;this.endIndex=s,(p=(f=this.cbs).oncomment)===null||p===void 0||p.call(f,this.getSlice(r,s-c)),(b=(C=this.cbs).oncommentend)===null||b===void 0||b.call(C),this.startIndex=s+1}oncdata(r,s,c){var f,p,C,b,N,L,O,j,k,R;this.endIndex=s;let J=this.getSlice(r,s-c);!this.htmlMode||this.options.recognizeCDATA?((p=(f=this.cbs).oncdatastart)===null||p===void 0||p.call(f),(b=(C=this.cbs).ontext)===null||b===void 0||b.call(C,J),(L=(N=this.cbs).oncdataend)===null||L===void 0||L.call(N)):((j=(O=this.cbs).oncomment)===null||j===void 0||j.call(O,`[CDATA[${J}]]`),(R=(k=this.cbs).oncommentend)===null||R===void 0||R.call(k)),this.startIndex=s+1}onend(){var r,s;if(this.cbs.onclosetag){this.endIndex=this.startIndex;for(let c=0;c=this.buffers[0].length;)this.shiftBuffer();let c=this.buffers[0].slice(r-this.bufferOffset,s-this.bufferOffset);for(;s-this.bufferOffset>this.buffers[0].length;)this.shiftBuffer(),c+=this.buffers[0].slice(0,s-this.bufferOffset);return c}shiftBuffer(){this.bufferOffset+=this.buffers[0].length,this.writeIndex--,this.buffers.shift()}write(r){var s,c;if(this.ended){(c=(s=this.cbs).onerror)===null||c===void 0||c.call(s,new Error(".write() after done!"));return}this.buffers.push(r),this.tokenizer.running&&(this.tokenizer.write(r),this.writeIndex++)}end(r){var s,c;if(this.ended){(c=(s=this.cbs).onerror)===null||c===void 0||c.call(s,new Error(".end() after done!"));return}r&&this.write(r),this.ended=!0,this.tokenizer.end()}pause(){this.tokenizer.pause()}resume(){for(this.tokenizer.resume();this.tokenizer.running&&this.writeIndex\u403Emma\u0100;d\u05F7\u05F8\u4393;\u43DCreve;\u411E\u0180eiy\u0607\u060C\u0610dil;\u4122rc;\u411C;\u4413ot;\u4120r;\uC000\u{1D50A};\u62D9pf;\uC000\u{1D53E}eater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\u{1D4A2};\u626B\u0400Aacfiosu\u0685\u068B\u0696\u069B\u069E\u06AA\u06BE\u06CARDcy;\u442A\u0100ct\u0690\u0694ek;\u42C7;\u405Eirc;\u4124r;\u610ClbertSpace;\u610B\u01F0\u06AF\0\u06B2f;\u610DizontalLine;\u6500\u0100ct\u06C3\u06C5\xF2\u06A9rok;\u4126mp\u0144\u06D0\u06D8ownHum\xF0\u012Fqual;\u624F\u0700EJOacdfgmnostu\u06FA\u06FE\u0703\u0707\u070E\u071A\u071E\u0721\u0728\u0744\u0778\u078B\u078F\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803B\xCD\u40CD\u0100iy\u0713\u0718rc\u803B\xCE\u40CE;\u4418ot;\u4130r;\u6111rave\u803B\xCC\u40CC\u0180;ap\u0720\u072F\u073F\u0100cg\u0734\u0737r;\u412AinaryI;\u6148lie\xF3\u03DD\u01F4\u0749\0\u0762\u0100;e\u074D\u074E\u622C\u0100gr\u0753\u0758ral;\u622Bsection;\u62C2isible\u0100CT\u076C\u0772omma;\u6063imes;\u6062\u0180gpt\u077F\u0783\u0788on;\u412Ef;\uC000\u{1D540}a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\0\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\u{1D50D}pf;\uC000\u{1D541}\u01E3\u07C7\0\u07CCr;\uC000\u{1D4A5}rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\u{1D50E}pf;\uC000\u{1D542}cr;\uC000\u{1D4A6}\u0580JTaceflmost\u0825\u0829\u082C\u0850\u0863\u09B3\u09B8\u09C7\u09CD\u0A37\u0A47cy;\u4409\u803B<\u403C\u0280cmnpr\u0837\u083C\u0841\u0844\u084Dute;\u4139bda;\u439Bg;\u67EAlacetrf;\u6112r;\u619E\u0180aey\u0857\u085C\u0861ron;\u413Ddil;\u413B;\u441B\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087E\u08A9\u08B1\u08E0\u08E6\u08FC\u092F\u095B\u0390\u096A\u0100nr\u0883\u088FgleBracket;\u67E8row\u0180;BR\u0899\u089A\u089E\u6190ar;\u61E4ightArrow;\u61C6eiling;\u6308o\u01F5\u08B7\0\u08C3bleBracket;\u67E6n\u01D4\u08C8\0\u08D2eeVector;\u6961ector\u0100;B\u08DB\u08DC\u61C3ar;\u6959loor;\u630Aight\u0100AV\u08EF\u08F5rrow;\u6194ector;\u694E\u0100er\u0901\u0917e\u0180;AV\u0909\u090A\u0910\u62A3rrow;\u61A4ector;\u695Aiangle\u0180;BE\u0924\u0925\u0929\u62B2ar;\u69CFqual;\u62B4p\u0180DTV\u0937\u0942\u094CownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61BFar;\u6958ector\u0100;B\u0965\u0966\u61BCar;\u6952ight\xE1\u039Cs\u0300EFGLST\u097E\u098B\u0995\u099D\u09A2\u09ADqualGreater;\u62DAullEqual;\u6266reater;\u6276ess;\u6AA1lantEqual;\u6A7Dilde;\u6272r;\uC000\u{1D50F}\u0100;e\u09BD\u09BE\u62D8ftarrow;\u61DAidot;\u413F\u0180npw\u09D4\u0A16\u0A1Bg\u0200LRlr\u09DE\u09F7\u0A02\u0A10eft\u0100AR\u09E6\u09ECrrow;\u67F5ightArrow;\u67F7ightArrow;\u67F6eft\u0100ar\u03B3\u0A0Aight\xE1\u03BFight\xE1\u03CAf;\uC000\u{1D543}er\u0100LR\u0A22\u0A2CeftArrow;\u6199ightArrow;\u6198\u0180cht\u0A3E\u0A40\u0A42\xF2\u084C;\u61B0rok;\u4141;\u626A\u0400acefiosu\u0A5A\u0A5D\u0A60\u0A77\u0A7C\u0A85\u0A8B\u0A8Ep;\u6905y;\u441C\u0100dl\u0A65\u0A6FiumSpace;\u605Flintrf;\u6133r;\uC000\u{1D510}nusPlus;\u6213pf;\uC000\u{1D544}c\xF2\u0A76;\u439C\u0480Jacefostu\u0AA3\u0AA7\u0AAD\u0AC0\u0B14\u0B19\u0D91\u0D97\u0D9Ecy;\u440Acute;\u4143\u0180aey\u0AB4\u0AB9\u0ABEron;\u4147dil;\u4145;\u441D\u0180gsw\u0AC7\u0AF0\u0B0Eative\u0180MTV\u0AD3\u0ADF\u0AE8ediumSpace;\u600Bhi\u0100cn\u0AE6\u0AD8\xEB\u0AD9eryThi\xEE\u0AD9ted\u0100GL\u0AF8\u0B06reaterGreate\xF2\u0673essLes\xF3\u0A48Line;\u400Ar;\uC000\u{1D511}\u0200Bnpt\u0B22\u0B28\u0B37\u0B3Areak;\u6060BreakingSpace;\u40A0f;\u6115\u0680;CDEGHLNPRSTV\u0B55\u0B56\u0B6A\u0B7C\u0BA1\u0BEB\u0C04\u0C5E\u0C84\u0CA6\u0CD8\u0D61\u0D85\u6AEC\u0100ou\u0B5B\u0B64ngruent;\u6262pCap;\u626DoubleVerticalBar;\u6226\u0180lqx\u0B83\u0B8A\u0B9Bement;\u6209ual\u0100;T\u0B92\u0B93\u6260ilde;\uC000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0BB6\u0BB7\u0BBD\u0BC9\u0BD3\u0BD8\u0BE5\u626Fqual;\u6271ullEqual;\uC000\u2267\u0338reater;\uC000\u226B\u0338ess;\u6279lantEqual;\uC000\u2A7E\u0338ilde;\u6275ump\u0144\u0BF2\u0BFDownHump;\uC000\u224E\u0338qual;\uC000\u224F\u0338e\u0100fs\u0C0A\u0C27tTriangle\u0180;BE\u0C1A\u0C1B\u0C21\u62EAar;\uC000\u29CF\u0338qual;\u62ECs\u0300;EGLST\u0C35\u0C36\u0C3C\u0C44\u0C4B\u0C58\u626Equal;\u6270reater;\u6278ess;\uC000\u226A\u0338lantEqual;\uC000\u2A7D\u0338ilde;\u6274ested\u0100GL\u0C68\u0C79reaterGreater;\uC000\u2AA2\u0338essLess;\uC000\u2AA1\u0338recedes\u0180;ES\u0C92\u0C93\u0C9B\u6280qual;\uC000\u2AAF\u0338lantEqual;\u62E0\u0100ei\u0CAB\u0CB9verseElement;\u620CghtTriangle\u0180;BE\u0CCB\u0CCC\u0CD2\u62EBar;\uC000\u29D0\u0338qual;\u62ED\u0100qu\u0CDD\u0D0CuareSu\u0100bp\u0CE8\u0CF9set\u0100;E\u0CF0\u0CF3\uC000\u228F\u0338qual;\u62E2erset\u0100;E\u0D03\u0D06\uC000\u2290\u0338qual;\u62E3\u0180bcp\u0D13\u0D24\u0D4Eset\u0100;E\u0D1B\u0D1E\uC000\u2282\u20D2qual;\u6288ceeds\u0200;EST\u0D32\u0D33\u0D3B\u0D46\u6281qual;\uC000\u2AB0\u0338lantEqual;\u62E1ilde;\uC000\u227F\u0338erset\u0100;E\u0D58\u0D5B\uC000\u2283\u20D2qual;\u6289ilde\u0200;EFT\u0D6E\u0D6F\u0D75\u0D7F\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uC000\u{1D4A9}ilde\u803B\xD1\u40D1;\u439D\u0700Eacdfgmoprstuv\u0DBD\u0DC2\u0DC9\u0DD5\u0DDB\u0DE0\u0DE7\u0DFC\u0E02\u0E20\u0E22\u0E32\u0E3F\u0E44lig;\u4152cute\u803B\xD3\u40D3\u0100iy\u0DCE\u0DD3rc\u803B\xD4\u40D4;\u441Eblac;\u4150r;\uC000\u{1D512}rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\u{1D546}enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\u{1D4AA}ash\u803B\xD8\u40D8i\u016C\u0E37\u0E3Cde\u803B\xD5\u40D5es;\u6A37ml\u803B\xD6\u40D6er\u0100BP\u0E4B\u0E60\u0100ar\u0E50\u0E53r;\u603Eac\u0100ek\u0E5A\u0E5C;\u63DEet;\u63B4arenthesis;\u63DC\u0480acfhilors\u0E7F\u0E87\u0E8A\u0E8F\u0E92\u0E94\u0E9D\u0EB0\u0EFCrtialD;\u6202y;\u441Fr;\uC000\u{1D513}i;\u43A6;\u43A0usMinus;\u40B1\u0100ip\u0EA2\u0EADncareplan\xE5\u069Df;\u6119\u0200;eio\u0EB9\u0EBA\u0EE0\u0EE4\u6ABBcedes\u0200;EST\u0EC8\u0EC9\u0ECF\u0EDA\u627Aqual;\u6AAFlantEqual;\u627Cilde;\u627Eme;\u6033\u0100dp\u0EE9\u0EEEuct;\u620Fortion\u0100;a\u0225\u0EF9l;\u621D\u0100ci\u0F01\u0F06r;\uC000\u{1D4AB};\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B"\u4022r;\uC000\u{1D514}pf;\u611Acr;\uC000\u{1D4AC}\u0600BEacefhiorsu\u0F3E\u0F43\u0F47\u0F60\u0F73\u0FA7\u0FAA\u0FAD\u1096\u10A9\u10B4\u10BEarr;\u6910G\u803B\xAE\u40AE\u0180cnr\u0F4E\u0F53\u0F56ute;\u4154g;\u67EBr\u0100;t\u0F5C\u0F5D\u61A0l;\u6916\u0180aey\u0F67\u0F6C\u0F71ron;\u4158dil;\u4156;\u4420\u0100;v\u0F78\u0F79\u611Cerse\u0100EU\u0F82\u0F99\u0100lq\u0F87\u0F8Eement;\u620Builibrium;\u61CBpEquilibrium;\u696Fr\xBB\u0F79o;\u43A1ght\u0400ACDFTUVa\u0FC1\u0FEB\u0FF3\u1022\u1028\u105B\u1087\u03D8\u0100nr\u0FC6\u0FD2gleBracket;\u67E9row\u0180;BL\u0FDC\u0FDD\u0FE1\u6192ar;\u61E5eftArrow;\u61C4eiling;\u6309o\u01F5\u0FF9\0\u1005bleBracket;\u67E7n\u01D4\u100A\0\u1014eeVector;\u695Dector\u0100;B\u101D\u101E\u61C2ar;\u6955loor;\u630B\u0100er\u102D\u1043e\u0180;AV\u1035\u1036\u103C\u62A2rrow;\u61A6ector;\u695Biangle\u0180;BE\u1050\u1051\u1055\u62B3ar;\u69D0qual;\u62B5p\u0180DTV\u1063\u106E\u1078ownVector;\u694FeeVector;\u695Cector\u0100;B\u1082\u1083\u61BEar;\u6954ector\u0100;B\u1091\u1092\u61C0ar;\u6953\u0100pu\u109B\u109Ef;\u611DndImplies;\u6970ightarrow;\u61DB\u0100ch\u10B9\u10BCr;\u611B;\u61B1leDelayed;\u69F4\u0680HOacfhimoqstu\u10E4\u10F1\u10F7\u10FD\u1119\u111E\u1151\u1156\u1161\u1167\u11B5\u11BB\u11BF\u0100Cc\u10E9\u10EEHcy;\u4429y;\u4428FTcy;\u442Ccute;\u415A\u0280;aeiy\u1108\u1109\u110E\u1113\u1117\u6ABCron;\u4160dil;\u415Erc;\u415C;\u4421r;\uC000\u{1D516}ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\u{1D54A}\u0272\u116D\0\0\u1170t;\u621Aare\u0200;ISU\u117B\u117C\u1189\u11AF\u65A1ntersection;\u6293u\u0100bp\u118F\u119Eset\u0100;E\u1197\u1198\u628Fqual;\u6291erset\u0100;E\u11A8\u11A9\u6290qual;\u6292nion;\u6294cr;\uC000\u{1D4AE}ar;\u62C6\u0200bcmp\u11C8\u11DB\u1209\u120B\u0100;s\u11CD\u11CE\u62D0et\u0100;E\u11CD\u11D5qual;\u6286\u0100ch\u11E0\u1205eeds\u0200;EST\u11ED\u11EE\u11F4\u11FF\u627Bqual;\u6AB0lantEqual;\u627Dilde;\u627FTh\xE1\u0F8C;\u6211\u0180;es\u1212\u1213\u1223\u62D1rset\u0100;E\u121C\u121D\u6283qual;\u6287et\xBB\u1213\u0580HRSacfhiors\u123E\u1244\u1249\u1255\u125E\u1271\u1276\u129F\u12C2\u12C8\u12D1ORN\u803B\xDE\u40DEADE;\u6122\u0100Hc\u124E\u1252cy;\u440By;\u4426\u0100bu\u125A\u125C;\u4009;\u43A4\u0180aey\u1265\u126A\u126Fron;\u4164dil;\u4162;\u4422r;\uC000\u{1D517}\u0100ei\u127B\u1289\u01F2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128E\u1298kSpace;\uC000\u205F\u200ASpace;\u6009lde\u0200;EFT\u12AB\u12AC\u12B2\u12BC\u623Cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uC000\u{1D54B}ipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\u{1D4AF}rok;\u4166\u0AE1\u12F7\u130E\u131A\u1326\0\u132C\u1331\0\0\0\0\0\u1338\u133D\u1377\u1385\0\u13FF\u1404\u140A\u1410\u0100cr\u12FB\u1301ute\u803B\xDA\u40DAr\u0100;o\u1307\u1308\u619Fcir;\u6949r\u01E3\u1313\0\u1316y;\u440Eve;\u416C\u0100iy\u131E\u1323rc\u803B\xDB\u40DB;\u4423blac;\u4170r;\uC000\u{1D518}rave\u803B\xD9\u40D9acr;\u416A\u0100di\u1341\u1369er\u0100BP\u1348\u135D\u0100ar\u134D\u1350r;\u405Fac\u0100ek\u1357\u1359;\u63DFet;\u63B5arenthesis;\u63DDon\u0100;P\u1370\u1371\u62C3lus;\u628E\u0100gp\u137B\u137Fon;\u4172f;\uC000\u{1D54C}\u0400ADETadps\u1395\u13AE\u13B8\u13C4\u03E8\u13D2\u13D7\u13F3rrow\u0180;BD\u1150\u13A0\u13A4ar;\u6912ownArrow;\u61C5ownArrow;\u6195quilibrium;\u696Eee\u0100;A\u13CB\u13CC\u62A5rrow;\u61A5own\xE1\u03F3er\u0100LR\u13DE\u13E8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13F9\u13FA\u43D2on;\u43A5ing;\u416Ecr;\uC000\u{1D4B0}ilde;\u4168ml\u803B\xDC\u40DC\u0480Dbcdefosv\u1427\u142C\u1430\u1433\u143E\u1485\u148A\u1490\u1496ash;\u62ABar;\u6AEBy;\u4412ash\u0100;l\u143B\u143C\u62A9;\u6AE6\u0100er\u1443\u1445;\u62C1\u0180bty\u144C\u1450\u147Aar;\u6016\u0100;i\u144F\u1455cal\u0200BLST\u1461\u1465\u146A\u1474ar;\u6223ine;\u407Ceparator;\u6758ilde;\u6240ThinSpace;\u600Ar;\uC000\u{1D519}pf;\uC000\u{1D54D}cr;\uC000\u{1D4B1}dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\u{1D51A}pf;\uC000\u{1D54E}cr;\uC000\u{1D4B2}\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\u{1D51B};\u439Epf;\uC000\u{1D54F}cr;\uC000\u{1D4B3}\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\u{1D51C}pf;\uC000\u{1D550}cr;\uC000\u{1D4B4}ml;\u4178\u0400Hacdefos\u1535\u1539\u153F\u154B\u154F\u155D\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417D;\u4417ot;\u417B\u01F2\u1554\0\u155BoWidt\xE8\u0AD9a;\u4396r;\u6128pf;\u6124cr;\uC000\u{1D4B5}\u0BE1\u1583\u158A\u1590\0\u15B0\u15B6\u15BF\0\0\0\0\u15C6\u15DB\u15EB\u165F\u166D\0\u1695\u169B\u16B2\u16B9\0\u16BEcute\u803B\xE1\u40E1reve;\u4103\u0300;Ediuy\u159C\u159D\u15A1\u15A3\u15A8\u15AD\u623E;\uC000\u223E\u0333;\u623Frc\u803B\xE2\u40E2te\u80BB\xB4\u0306;\u4430lig\u803B\xE6\u40E6\u0100;r\xB2\u15BA;\uC000\u{1D51E}rave\u803B\xE0\u40E0\u0100ep\u15CA\u15D6\u0100fp\u15CF\u15D4sym;\u6135\xE8\u15D3ha;\u43B1\u0100ap\u15DFc\u0100cl\u15E4\u15E7r;\u4101g;\u6A3F\u0264\u15F0\0\0\u160A\u0280;adsv\u15FA\u15FB\u15FF\u1601\u1607\u6227nd;\u6A55;\u6A5Clope;\u6A58;\u6A5A\u0380;elmrsz\u1618\u1619\u161B\u161E\u163F\u164F\u1659\u6220;\u69A4e\xBB\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163A\u163C\u163E;\u69A8;\u69A9;\u69AA;\u69AB;\u69AC;\u69AD;\u69AE;\u69AFt\u0100;v\u1645\u1646\u621Fb\u0100;d\u164C\u164D\u62BE;\u699D\u0100pt\u1654\u1657h;\u6222\xBB\xB9arr;\u637C\u0100gp\u1663\u1667on;\u4105f;\uC000\u{1D552}\u0380;Eaeiop\u12C1\u167B\u167D\u1682\u1684\u1687\u168A;\u6A70cir;\u6A6F;\u624Ad;\u624Bs;\u4027rox\u0100;e\u12C1\u1692\xF1\u1683ing\u803B\xE5\u40E5\u0180cty\u16A1\u16A6\u16A8r;\uC000\u{1D4B6};\u402Amp\u0100;e\u12C1\u16AF\xF1\u0288ilde\u803B\xE3\u40E3ml\u803B\xE4\u40E4\u0100ci\u16C2\u16C8onin\xF4\u0272nt;\u6A11\u0800Nabcdefiklnoprsu\u16ED\u16F1\u1730\u173C\u1743\u1748\u1778\u177D\u17E0\u17E6\u1839\u1850\u170D\u193D\u1948\u1970ot;\u6AED\u0100cr\u16F6\u171Ek\u0200ceps\u1700\u1705\u170D\u1713ong;\u624Cpsilon;\u43F6rime;\u6035im\u0100;e\u171A\u171B\u623Dq;\u62CD\u0176\u1722\u1726ee;\u62BDed\u0100;g\u172C\u172D\u6305e\xBB\u172Drk\u0100;t\u135C\u1737brk;\u63B6\u0100oy\u1701\u1741;\u4431quo;\u601E\u0280cmprt\u1753\u175B\u1761\u1764\u1768aus\u0100;e\u010A\u0109ptyv;\u69B0s\xE9\u170Cno\xF5\u0113\u0180ahw\u176F\u1771\u1773;\u43B2;\u6136een;\u626Cr;\uC000\u{1D51F}g\u0380costuvw\u178D\u179D\u17B3\u17C1\u17D5\u17DB\u17DE\u0180aiu\u1794\u1796\u179A\xF0\u0760rc;\u65EFp\xBB\u1371\u0180dpt\u17A4\u17A8\u17ADot;\u6A00lus;\u6A01imes;\u6A02\u0271\u17B9\0\0\u17BEcup;\u6A06ar;\u6605riangle\u0100du\u17CD\u17D2own;\u65BDp;\u65B3plus;\u6A04e\xE5\u1444\xE5\u14ADarow;\u690D\u0180ako\u17ED\u1826\u1835\u0100cn\u17F2\u1823k\u0180lst\u17FA\u05AB\u1802ozenge;\u69EBriangle\u0200;dlr\u1812\u1813\u1818\u181D\u65B4own;\u65BEeft;\u65C2ight;\u65B8k;\u6423\u01B1\u182B\0\u1833\u01B2\u182F\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183E\u184D\u0100;q\u1843\u1846\uC000=\u20E5uiv;\uC000\u2261\u20E5t;\u6310\u0200ptwx\u1859\u185E\u1867\u186Cf;\uC000\u{1D553}\u0100;t\u13CB\u1863om\xBB\u13CCtie;\u62C8\u0600DHUVbdhmptuv\u1885\u1896\u18AA\u18BB\u18D7\u18DB\u18EC\u18FF\u1905\u190A\u1910\u1921\u0200LRlr\u188E\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18A1\u18A2\u18A4\u18A6\u18A8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18B3\u18B5\u18B7\u18B9;\u655D;\u655A;\u655C;\u6559\u0380;HLRhlr\u18CA\u18CB\u18CD\u18CF\u18D1\u18D3\u18D5\u6551;\u656C;\u6563;\u6560;\u656B;\u6562;\u655Fox;\u69C9\u0200LRlr\u18E4\u18E6\u18E8\u18EA;\u6555;\u6552;\u6510;\u650C\u0280;DUdu\u06BD\u18F7\u18F9\u18FB\u18FD;\u6565;\u6568;\u652C;\u6534inus;\u629Flus;\u629Eimes;\u62A0\u0200LRlr\u1919\u191B\u191D\u191F;\u655B;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193B\u6502;\u656A;\u6561;\u655E;\u653C;\u6524;\u651C\u0100ev\u0123\u1942bar\u803B\xA6\u40A6\u0200ceio\u1951\u1956\u195A\u1960r;\uC000\u{1D4B7}mi;\u604Fm\u0100;e\u171A\u171Cl\u0180;bh\u1968\u1969\u196B\u405C;\u69C5sub;\u67C8\u016C\u1974\u197El\u0100;e\u1979\u197A\u6022t\xBB\u197Ap\u0180;Ee\u012F\u1985\u1987;\u6AAE\u0100;q\u06DC\u06DB\u0CE1\u19A7\0\u19E8\u1A11\u1A15\u1A32\0\u1A37\u1A50\0\0\u1AB4\0\0\u1AC1\0\0\u1B21\u1B2E\u1B4D\u1B52\0\u1BFD\0\u1C0C\u0180cpr\u19AD\u19B2\u19DDute;\u4107\u0300;abcds\u19BF\u19C0\u19C4\u19CA\u19D5\u19D9\u6229nd;\u6A44rcup;\u6A49\u0100au\u19CF\u19D2p;\u6A4Bp;\u6A47ot;\u6A40;\uC000\u2229\uFE00\u0100eo\u19E2\u19E5t;\u6041\xEE\u0693\u0200aeiu\u19F0\u19FB\u1A01\u1A05\u01F0\u19F5\0\u19F8s;\u6A4Don;\u410Ddil\u803B\xE7\u40E7rc;\u4109ps\u0100;s\u1A0C\u1A0D\u6A4Cm;\u6A50ot;\u410B\u0180dmn\u1A1B\u1A20\u1A26il\u80BB\xB8\u01ADptyv;\u69B2t\u8100\xA2;e\u1A2D\u1A2E\u40A2r\xE4\u01B2r;\uC000\u{1D520}\u0180cei\u1A3D\u1A40\u1A4Dy;\u4447ck\u0100;m\u1A47\u1A48\u6713ark\xBB\u1A48;\u43C7r\u0380;Ecefms\u1A5F\u1A60\u1A62\u1A6B\u1AA4\u1AAA\u1AAE\u65CB;\u69C3\u0180;el\u1A69\u1A6A\u1A6D\u42C6q;\u6257e\u0261\u1A74\0\0\u1A88rrow\u0100lr\u1A7C\u1A81eft;\u61BAight;\u61BB\u0280RSacd\u1A92\u1A94\u1A96\u1A9A\u1A9F\xBB\u0F47;\u64C8st;\u629Birc;\u629Aash;\u629Dnint;\u6A10id;\u6AEFcir;\u69C2ubs\u0100;u\u1ABB\u1ABC\u6663it\xBB\u1ABC\u02EC\u1AC7\u1AD4\u1AFA\0\u1B0Aon\u0100;e\u1ACD\u1ACE\u403A\u0100;q\xC7\xC6\u026D\u1AD9\0\0\u1AE2a\u0100;t\u1ADE\u1ADF\u402C;\u4040\u0180;fl\u1AE8\u1AE9\u1AEB\u6201\xEE\u1160e\u0100mx\u1AF1\u1AF6ent\xBB\u1AE9e\xF3\u024D\u01E7\u1AFE\0\u1B07\u0100;d\u12BB\u1B02ot;\u6A6Dn\xF4\u0246\u0180fry\u1B10\u1B14\u1B17;\uC000\u{1D554}o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\u{1D4B8}\u0100bp\u1B3C\u1B44\u0100;e\u1B41\u1B42\u6ACF;\u6AD1\u0100;e\u1B49\u1B4A\u6AD0;\u6AD2dot;\u62EF\u0380delprvw\u1B60\u1B6C\u1B77\u1B82\u1BAC\u1BD4\u1BF9arr\u0100lr\u1B68\u1B6A;\u6938;\u6935\u0270\u1B72\0\0\u1B75r;\u62DEc;\u62DFarr\u0100;p\u1B7F\u1B80\u61B6;\u693D\u0300;bcdos\u1B8F\u1B90\u1B96\u1BA1\u1BA5\u1BA8\u622Arcap;\u6A48\u0100au\u1B9B\u1B9Ep;\u6A46p;\u6A4Aot;\u628Dr;\u6A45;\uC000\u222A\uFE00\u0200alrv\u1BB5\u1BBF\u1BDE\u1BE3rr\u0100;m\u1BBC\u1BBD\u61B7;\u693Cy\u0180evw\u1BC7\u1BD4\u1BD8q\u0270\u1BCE\0\0\u1BD2re\xE3\u1B73u\xE3\u1B75ee;\u62CEedge;\u62CFen\u803B\xA4\u40A4earrow\u0100lr\u1BEE\u1BF3eft\xBB\u1B80ight\xBB\u1BBDe\xE4\u1BDD\u0100ci\u1C01\u1C07onin\xF4\u01F7nt;\u6231lcty;\u632D\u0980AHabcdefhijlorstuwz\u1C38\u1C3B\u1C3F\u1C5D\u1C69\u1C75\u1C8A\u1C9E\u1CAC\u1CB7\u1CFB\u1CFF\u1D0D\u1D7B\u1D91\u1DAB\u1DBB\u1DC6\u1DCDr\xF2\u0381ar;\u6965\u0200glrs\u1C48\u1C4D\u1C52\u1C54ger;\u6020eth;\u6138\xF2\u1133h\u0100;v\u1C5A\u1C5B\u6010\xBB\u090A\u016B\u1C61\u1C67arow;\u690Fa\xE3\u0315\u0100ay\u1C6E\u1C73ron;\u410F;\u4434\u0180;ao\u0332\u1C7C\u1C84\u0100gr\u02BF\u1C81r;\u61CAtseq;\u6A77\u0180glm\u1C91\u1C94\u1C98\u803B\xB0\u40B0ta;\u43B4ptyv;\u69B1\u0100ir\u1CA3\u1CA8sht;\u697F;\uC000\u{1D521}ar\u0100lr\u1CB3\u1CB5\xBB\u08DC\xBB\u101E\u0280aegsv\u1CC2\u0378\u1CD6\u1CDC\u1CE0m\u0180;os\u0326\u1CCA\u1CD4nd\u0100;s\u0326\u1CD1uit;\u6666amma;\u43DDin;\u62F2\u0180;io\u1CE7\u1CE8\u1CF8\u40F7de\u8100\xF7;o\u1CE7\u1CF0ntimes;\u62C7n\xF8\u1CF7cy;\u4452c\u026F\u1D06\0\0\u1D0Arn;\u631Eop;\u630D\u0280lptuw\u1D18\u1D1D\u1D22\u1D49\u1D55lar;\u4024f;\uC000\u{1D555}\u0280;emps\u030B\u1D2D\u1D37\u1D3D\u1D42q\u0100;d\u0352\u1D33ot;\u6251inus;\u6238lus;\u6214quare;\u62A1blebarwedg\xE5\xFAn\u0180adh\u112E\u1D5D\u1D67ownarrow\xF3\u1C83arpoon\u0100lr\u1D72\u1D76ef\xF4\u1CB4igh\xF4\u1CB6\u0162\u1D7F\u1D85karo\xF7\u0F42\u026F\u1D8A\0\0\u1D8Ern;\u631Fop;\u630C\u0180cot\u1D98\u1DA3\u1DA6\u0100ry\u1D9D\u1DA1;\uC000\u{1D4B9};\u4455l;\u69F6rok;\u4111\u0100dr\u1DB0\u1DB4ot;\u62F1i\u0100;f\u1DBA\u1816\u65BF\u0100ah\u1DC0\u1DC3r\xF2\u0429a\xF2\u0FA6angle;\u69A6\u0100ci\u1DD2\u1DD5y;\u445Fgrarr;\u67FF\u0900Dacdefglmnopqrstux\u1E01\u1E09\u1E19\u1E38\u0578\u1E3C\u1E49\u1E61\u1E7E\u1EA5\u1EAF\u1EBD\u1EE1\u1F2A\u1F37\u1F44\u1F4E\u1F5A\u0100Do\u1E06\u1D34o\xF4\u1C89\u0100cs\u1E0E\u1E14ute\u803B\xE9\u40E9ter;\u6A6E\u0200aioy\u1E22\u1E27\u1E31\u1E36ron;\u411Br\u0100;c\u1E2D\u1E2E\u6256\u803B\xEA\u40EAlon;\u6255;\u444Dot;\u4117\u0100Dr\u1E41\u1E45ot;\u6252;\uC000\u{1D522}\u0180;rs\u1E50\u1E51\u1E57\u6A9Aave\u803B\xE8\u40E8\u0100;d\u1E5C\u1E5D\u6A96ot;\u6A98\u0200;ils\u1E6A\u1E6B\u1E72\u1E74\u6A99nters;\u63E7;\u6113\u0100;d\u1E79\u1E7A\u6A95ot;\u6A97\u0180aps\u1E85\u1E89\u1E97cr;\u4113ty\u0180;sv\u1E92\u1E93\u1E95\u6205et\xBB\u1E93p\u01001;\u1E9D\u1EA4\u0133\u1EA1\u1EA3;\u6004;\u6005\u6003\u0100gs\u1EAA\u1EAC;\u414Bp;\u6002\u0100gp\u1EB4\u1EB8on;\u4119f;\uC000\u{1D556}\u0180als\u1EC4\u1ECE\u1ED2r\u0100;s\u1ECA\u1ECB\u62D5l;\u69E3us;\u6A71i\u0180;lv\u1EDA\u1EDB\u1EDF\u43B5on\xBB\u1EDB;\u43F5\u0200csuv\u1EEA\u1EF3\u1F0B\u1F23\u0100io\u1EEF\u1E31rc\xBB\u1E2E\u0269\u1EF9\0\0\u1EFB\xED\u0548ant\u0100gl\u1F02\u1F06tr\xBB\u1E5Dess\xBB\u1E7A\u0180aei\u1F12\u1F16\u1F1Als;\u403Dst;\u625Fv\u0100;D\u0235\u1F20D;\u6A78parsl;\u69E5\u0100Da\u1F2F\u1F33ot;\u6253rr;\u6971\u0180cdi\u1F3E\u1F41\u1EF8r;\u612Fo\xF4\u0352\u0100ah\u1F49\u1F4B;\u43B7\u803B\xF0\u40F0\u0100mr\u1F53\u1F57l\u803B\xEB\u40EBo;\u60AC\u0180cip\u1F61\u1F64\u1F67l;\u4021s\xF4\u056E\u0100eo\u1F6C\u1F74ctatio\xEE\u0559nential\xE5\u0579\u09E1\u1F92\0\u1F9E\0\u1FA1\u1FA7\0\0\u1FC6\u1FCC\0\u1FD3\0\u1FE6\u1FEA\u2000\0\u2008\u205Allingdotse\xF1\u1E44y;\u4444male;\u6640\u0180ilr\u1FAD\u1FB3\u1FC1lig;\u8000\uFB03\u0269\u1FB9\0\0\u1FBDg;\u8000\uFB00ig;\u8000\uFB04;\uC000\u{1D523}lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\0\u1FF3f;\uC000\u{1D557}\u0100ak\u05BF\u1FF7\u0100;v\u1FFC\u1FFD\u62D4;\u6AD9artint;\u6A0D\u0100ao\u200C\u2055\u0100cs\u2011\u2052\u03B1\u201A\u2030\u2038\u2045\u2048\0\u2050\u03B2\u2022\u2025\u2027\u202A\u202C\0\u202E\u803B\xBD\u40BD;\u6153\u803B\xBC\u40BC;\u6155;\u6159;\u615B\u01B3\u2034\0\u2036;\u6154;\u6156\u02B4\u203E\u2041\0\0\u2043\u803B\xBE\u40BE;\u6157;\u615C5;\u6158\u01B6\u204C\0\u204E;\u615A;\u615D8;\u615El;\u6044wn;\u6322cr;\uC000\u{1D4BB}\u0880Eabcdefgijlnorstv\u2082\u2089\u209F\u20A5\u20B0\u20B4\u20F0\u20F5\u20FA\u20FF\u2103\u2112\u2138\u0317\u213E\u2152\u219E\u0100;l\u064D\u2087;\u6A8C\u0180cmp\u2090\u2095\u209Dute;\u41F5ma\u0100;d\u209C\u1CDA\u43B3;\u6A86reve;\u411F\u0100iy\u20AA\u20AErc;\u411D;\u4433ot;\u4121\u0200;lqs\u063E\u0642\u20BD\u20C9\u0180;qs\u063E\u064C\u20C4lan\xF4\u0665\u0200;cdl\u0665\u20D2\u20D5\u20E5c;\u6AA9ot\u0100;o\u20DC\u20DD\u6A80\u0100;l\u20E2\u20E3\u6A82;\u6A84\u0100;e\u20EA\u20ED\uC000\u22DB\uFE00s;\u6A94r;\uC000\u{1D524}\u0100;g\u0673\u061Bmel;\u6137cy;\u4453\u0200;Eaj\u065A\u210C\u210E\u2110;\u6A92;\u6AA5;\u6AA4\u0200Eaes\u211B\u211D\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6A8Arox\xBB\u2124\u0100;q\u212E\u212F\u6A88\u0100;q\u212E\u211Bim;\u62E7pf;\uC000\u{1D558}\u0100ci\u2143\u2146r;\u610Am\u0180;el\u066B\u214E\u2150;\u6A8E;\u6A90\u8300>;cdlqr\u05EE\u2160\u216A\u216E\u2173\u2179\u0100ci\u2165\u2167;\u6AA7r;\u6A7Aot;\u62D7Par;\u6995uest;\u6A7C\u0280adels\u2184\u216A\u2190\u0656\u219B\u01F0\u2189\0\u218Epro\xF8\u209Er;\u6978q\u0100lq\u063F\u2196les\xF3\u2088i\xED\u066B\u0100en\u21A3\u21ADrtneqq;\uC000\u2269\uFE00\xC5\u21AA\u0500Aabcefkosy\u21C4\u21C7\u21F1\u21F5\u21FA\u2218\u221D\u222F\u2268\u227Dr\xF2\u03A0\u0200ilmr\u21D0\u21D4\u21D7\u21DBrs\xF0\u1484f\xBB\u2024il\xF4\u06A9\u0100dr\u21E0\u21E4cy;\u444A\u0180;cw\u08F4\u21EB\u21EFir;\u6948;\u61ADar;\u610Firc;\u4125\u0180alr\u2201\u220E\u2213rts\u0100;u\u2209\u220A\u6665it\xBB\u220Alip;\u6026con;\u62B9r;\uC000\u{1D525}s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\u{1D559}bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\u{1D4BD}as\xE8\u21F4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xBB\u1C5B\u0AE1\u22A3\0\u22AA\0\u22B8\u22C5\u22CE\0\u22D5\u22F3\0\0\u22F8\u2322\u2367\u2362\u237F\0\u2386\u23AA\u23B4cute\u803B\xED\u40ED\u0180;iy\u0771\u22B0\u22B5rc\u803B\xEE\u40EE;\u4438\u0100cx\u22BC\u22BFy;\u4435cl\u803B\xA1\u40A1\u0100fr\u039F\u22C9;\uC000\u{1D526}rave\u803B\xEC\u40EC\u0200;ino\u073E\u22DD\u22E9\u22EE\u0100in\u22E2\u22E6nt;\u6A0Ct;\u622Dfin;\u69DCta;\u6129lig;\u4133\u0180aop\u22FE\u231A\u231D\u0180cgt\u2305\u2308\u2317r;\u412B\u0180elp\u071F\u230F\u2313in\xE5\u078Ear\xF4\u0720h;\u4131f;\u62B7ed;\u41B5\u0280;cfot\u04F4\u232C\u2331\u233D\u2341are;\u6105in\u0100;t\u2338\u2339\u621Eie;\u69DDdo\xF4\u2319\u0280;celp\u0757\u234C\u2350\u235B\u2361al;\u62BA\u0100gr\u2355\u2359er\xF3\u1563\xE3\u234Darhk;\u6A17rod;\u6A3C\u0200cgpt\u236F\u2372\u2376\u237By;\u4451on;\u412Ff;\uC000\u{1D55A}a;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\u{1D4BE}n\u0280;Edsv\u04F4\u239B\u239D\u23A1\u04F3;\u62F9ot;\u62F5\u0100;v\u23A6\u23A7\u62F4;\u62F3\u0100;i\u0777\u23AElde;\u4129\u01EB\u23B8\0\u23BCcy;\u4456l\u803B\xEF\u40EF\u0300cfmosu\u23CC\u23D7\u23DC\u23E1\u23E7\u23F5\u0100iy\u23D1\u23D5rc;\u4135;\u4439r;\uC000\u{1D527}ath;\u4237pf;\uC000\u{1D55B}\u01E3\u23EC\0\u23F1r;\uC000\u{1D4BF}rcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\u{1D528}reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\u{1D55C}cr;\uC000\u{1D4C0}\u0B80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248D\u2491\u250E\u253D\u255A\u2580\u264E\u265E\u2665\u2679\u267D\u269A\u26B2\u26D8\u275D\u2768\u278B\u27C0\u2801\u2812\u0180art\u2477\u247A\u247Cr\xF2\u09C6\xF2\u0395ail;\u691Barr;\u690E\u0100;g\u0994\u248B;\u6A8Bar;\u6962\u0963\u24A5\0\u24AA\0\u24B1\0\0\0\0\0\u24B5\u24BA\0\u24C6\u24C8\u24CD\0\u24F9ute;\u413Amptyv;\u69B4ra\xEE\u084Cbda;\u43BBg\u0180;dl\u088E\u24C1\u24C3;\u6991\xE5\u088E;\u6A85uo\u803B\xAB\u40ABr\u0400;bfhlpst\u0899\u24DE\u24E6\u24E9\u24EB\u24EE\u24F1\u24F5\u0100;f\u089D\u24E3s;\u691Fs;\u691D\xEB\u2252p;\u61ABl;\u6939im;\u6973l;\u61A2\u0180;ae\u24FF\u2500\u2504\u6AABil;\u6919\u0100;s\u2509\u250A\u6AAD;\uC000\u2AAD\uFE00\u0180abr\u2515\u2519\u251Drr;\u690Crk;\u6772\u0100ak\u2522\u252Cc\u0100ek\u2528\u252A;\u407B;\u405B\u0100es\u2531\u2533;\u698Bl\u0100du\u2539\u253B;\u698F;\u698D\u0200aeuy\u2546\u254B\u2556\u2558ron;\u413E\u0100di\u2550\u2554il;\u413C\xEC\u08B0\xE2\u2529;\u443B\u0200cqrs\u2563\u2566\u256D\u257Da;\u6936uo\u0100;r\u0E19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694Bh;\u61B2\u0280;fgqs\u258B\u258C\u0989\u25F3\u25FF\u6264t\u0280ahlrt\u2598\u25A4\u25B7\u25C2\u25E8rrow\u0100;t\u0899\u25A1a\xE9\u24F6arpoon\u0100du\u25AF\u25B4own\xBB\u045Ap\xBB\u0966eftarrows;\u61C7ight\u0180ahs\u25CD\u25D6\u25DErrow\u0100;s\u08F4\u08A7arpoon\xF3\u0F98quigarro\xF7\u21F0hreetimes;\u62CB\u0180;qs\u258B\u0993\u25FAlan\xF4\u09AC\u0280;cdgs\u09AC\u260A\u260D\u261D\u2628c;\u6AA8ot\u0100;o\u2614\u2615\u6A7F\u0100;r\u261A\u261B\u6A81;\u6A83\u0100;e\u2622\u2625\uC000\u22DA\uFE00s;\u6A93\u0280adegs\u2633\u2639\u263D\u2649\u264Bppro\xF8\u24C6ot;\u62D6q\u0100gq\u2643\u2645\xF4\u0989gt\xF2\u248C\xF4\u099Bi\xED\u09B2\u0180ilr\u2655\u08E1\u265Asht;\u697C;\uC000\u{1D529}\u0100;E\u099C\u2663;\u6A91\u0161\u2669\u2676r\u0100du\u25B2\u266E\u0100;l\u0965\u2673;\u696Alk;\u6584cy;\u4459\u0280;acht\u0A48\u2688\u268B\u2691\u2696r\xF2\u25C1orne\xF2\u1D08ard;\u696Bri;\u65FA\u0100io\u269F\u26A4dot;\u4140ust\u0100;a\u26AC\u26AD\u63B0che\xBB\u26AD\u0200Eaes\u26BB\u26BD\u26C9\u26D4;\u6268p\u0100;p\u26C3\u26C4\u6A89rox\xBB\u26C4\u0100;q\u26CE\u26CF\u6A87\u0100;q\u26CE\u26BBim;\u62E6\u0400abnoptwz\u26E9\u26F4\u26F7\u271A\u272F\u2741\u2747\u2750\u0100nr\u26EE\u26F1g;\u67ECr;\u61FDr\xEB\u08C1g\u0180lmr\u26FF\u270D\u2714eft\u0100ar\u09E6\u2707ight\xE1\u09F2apsto;\u67FCight\xE1\u09FDparrow\u0100lr\u2725\u2729ef\xF4\u24EDight;\u61AC\u0180afl\u2736\u2739\u273Dr;\u6985;\uC000\u{1D55D}us;\u6A2Dimes;\u6A34\u0161\u274B\u274Fst;\u6217\xE1\u134E\u0180;ef\u2757\u2758\u1800\u65CAnge\xBB\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277C\u2785\u2787r\xF2\u08A8orne\xF2\u1D8Car\u0100;d\u0F98\u2783;\u696D;\u600Eri;\u62BF\u0300achiqt\u2798\u279D\u0A40\u27A2\u27AE\u27BBquo;\u6039r;\uC000\u{1D4C1}m\u0180;eg\u09B2\u27AA\u27AC;\u6A8D;\u6A8F\u0100bu\u252A\u27B3o\u0100;r\u0E1F\u27B9;\u601Arok;\u4142\u8400<;cdhilqr\u082B\u27D2\u2639\u27DC\u27E0\u27E5\u27EA\u27F0\u0100ci\u27D7\u27D9;\u6AA6r;\u6A79re\xE5\u25F2mes;\u62C9arr;\u6976uest;\u6A7B\u0100Pi\u27F5\u27F9ar;\u6996\u0180;ef\u2800\u092D\u181B\u65C3r\u0100du\u2807\u280Dshar;\u694Ahar;\u6966\u0100en\u2817\u2821rtneqq;\uC000\u2268\uFE00\xC5\u281E\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288E\u2893\u28A0\u28A5\u28A8\u28DA\u28E2\u28E4\u0A83\u28F3\u2902Dot;\u623A\u0200clpr\u284E\u2852\u2863\u287Dr\u803B\xAF\u40AF\u0100et\u2857\u2859;\u6642\u0100;e\u285E\u285F\u6720se\xBB\u285F\u0100;s\u103B\u2868to\u0200;dlu\u103B\u2873\u2877\u287Bow\xEE\u048Cef\xF4\u090F\xF0\u13D1ker;\u65AE\u0100oy\u2887\u288Cmma;\u6A29;\u443Cash;\u6014asuredangle\xBB\u1626r;\uC000\u{1D52A}o;\u6127\u0180cdn\u28AF\u28B4\u28C9ro\u803B\xB5\u40B5\u0200;acd\u1464\u28BD\u28C0\u28C4s\xF4\u16A7ir;\u6AF0ot\u80BB\xB7\u01B5us\u0180;bd\u28D2\u1903\u28D3\u6212\u0100;u\u1D3C\u28D8;\u6A2A\u0163\u28DE\u28E1p;\u6ADB\xF2\u2212\xF0\u0A81\u0100dp\u28E9\u28EEels;\u62A7f;\uC000\u{1D55E}\u0100ct\u28F8\u28FDr;\uC000\u{1D4C2}pos\xBB\u159D\u0180;lm\u2909\u290A\u290D\u43BCtimap;\u62B8\u0C00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297E\u2989\u2998\u29DA\u29E9\u2A15\u2A1A\u2A58\u2A5D\u2A83\u2A95\u2AA4\u2AA8\u2B04\u2B07\u2B44\u2B7F\u2BAE\u2C34\u2C67\u2C7C\u2CE9\u0100gt\u2947\u294B;\uC000\u22D9\u0338\u0100;v\u2950\u0BCF\uC000\u226B\u20D2\u0180elt\u295A\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61CDightarrow;\u61CE;\uC000\u22D8\u0338\u0100;v\u297B\u0C47\uC000\u226A\u20D2ightarrow;\u61CF\u0100Dd\u298E\u2993ash;\u62AFash;\u62AE\u0280bcnpt\u29A3\u29A7\u29AC\u29B1\u29CCla\xBB\u02DEute;\u4144g;\uC000\u2220\u20D2\u0280;Eiop\u0D84\u29BC\u29C0\u29C5\u29C8;\uC000\u2A70\u0338d;\uC000\u224B\u0338s;\u4149ro\xF8\u0D84ur\u0100;a\u29D3\u29D4\u666El\u0100;s\u29D3\u0B38\u01F3\u29DF\0\u29E3p\u80BB\xA0\u0B37mp\u0100;e\u0BF9\u0C00\u0280aeouy\u29F4\u29FE\u2A03\u2A10\u2A13\u01F0\u29F9\0\u29FB;\u6A43on;\u4148dil;\u4146ng\u0100;d\u0D7E\u2A0Aot;\uC000\u2A6D\u0338p;\u6A42;\u443Dash;\u6013\u0380;Aadqsx\u0B92\u2A29\u2A2D\u2A3B\u2A41\u2A45\u2A50rr;\u61D7r\u0100hr\u2A33\u2A36k;\u6924\u0100;o\u13F2\u13F0ot;\uC000\u2250\u0338ui\xF6\u0B63\u0100ei\u2A4A\u2A4Ear;\u6928\xED\u0B98ist\u0100;s\u0BA0\u0B9Fr;\uC000\u{1D52B}\u0200Eest\u0BC5\u2A66\u2A79\u2A7C\u0180;qs\u0BBC\u2A6D\u0BE1\u0180;qs\u0BBC\u0BC5\u2A74lan\xF4\u0BE2i\xED\u0BEA\u0100;r\u0BB6\u2A81\xBB\u0BB7\u0180Aap\u2A8A\u2A8D\u2A91r\xF2\u2971rr;\u61AEar;\u6AF2\u0180;sv\u0F8D\u2A9C\u0F8C\u0100;d\u2AA1\u2AA2\u62FC;\u62FAcy;\u445A\u0380AEadest\u2AB7\u2ABA\u2ABE\u2AC2\u2AC5\u2AF6\u2AF9r\xF2\u2966;\uC000\u2266\u0338rr;\u619Ar;\u6025\u0200;fqs\u0C3B\u2ACE\u2AE3\u2AEFt\u0100ar\u2AD4\u2AD9rro\xF7\u2AC1ightarro\xF7\u2A90\u0180;qs\u0C3B\u2ABA\u2AEAlan\xF4\u0C55\u0100;s\u0C55\u2AF4\xBB\u0C36i\xED\u0C5D\u0100;r\u0C35\u2AFEi\u0100;e\u0C1A\u0C25i\xE4\u0D90\u0100pt\u2B0C\u2B11f;\uC000\u{1D55F}\u8180\xAC;in\u2B19\u2B1A\u2B36\u40ACn\u0200;Edv\u0B89\u2B24\u2B28\u2B2E;\uC000\u22F9\u0338ot;\uC000\u22F5\u0338\u01E1\u0B89\u2B33\u2B35;\u62F7;\u62F6i\u0100;v\u0CB8\u2B3C\u01E1\u0CB8\u2B41\u2B43;\u62FE;\u62FD\u0180aor\u2B4B\u2B63\u2B69r\u0200;ast\u0B7B\u2B55\u2B5A\u2B5Flle\xEC\u0B7Bl;\uC000\u2AFD\u20E5;\uC000\u2202\u0338lint;\u6A14\u0180;ce\u0C92\u2B70\u2B73u\xE5\u0CA5\u0100;c\u0C98\u2B78\u0100;e\u0C92\u2B7D\xF1\u0C98\u0200Aait\u2B88\u2B8B\u2B9D\u2BA7r\xF2\u2988rr\u0180;cw\u2B94\u2B95\u2B99\u619B;\uC000\u2933\u0338;\uC000\u219D\u0338ghtarrow\xBB\u2B95ri\u0100;e\u0CCB\u0CD6\u0380chimpqu\u2BBD\u2BCD\u2BD9\u2B04\u0B78\u2BE4\u2BEF\u0200;cer\u0D32\u2BC6\u0D37\u2BC9u\xE5\u0D45;\uC000\u{1D4C3}ort\u026D\u2B05\0\0\u2BD6ar\xE1\u2B56m\u0100;e\u0D6E\u2BDF\u0100;q\u0D74\u0D73su\u0100bp\u2BEB\u2BED\xE5\u0CF8\xE5\u0D0B\u0180bcp\u2BF6\u2C11\u2C19\u0200;Ees\u2BFF\u2C00\u0D22\u2C04\u6284;\uC000\u2AC5\u0338et\u0100;e\u0D1B\u2C0Bq\u0100;q\u0D23\u2C00c\u0100;e\u0D32\u2C17\xF1\u0D38\u0200;Ees\u2C22\u2C23\u0D5F\u2C27\u6285;\uC000\u2AC6\u0338et\u0100;e\u0D58\u2C2Eq\u0100;q\u0D60\u2C23\u0200gilr\u2C3D\u2C3F\u2C45\u2C47\xEC\u0BD7lde\u803B\xF1\u40F1\xE7\u0C43iangle\u0100lr\u2C52\u2C5Ceft\u0100;e\u0C1A\u2C5A\xF1\u0C26ight\u0100;e\u0CCB\u2C65\xF1\u0CD7\u0100;m\u2C6C\u2C6D\u43BD\u0180;es\u2C74\u2C75\u2C79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2C8F\u2C94\u2C99\u2C9E\u2CA3\u2CB0\u2CB6\u2CD3\u2CE3ash;\u62ADarr;\u6904p;\uC000\u224D\u20D2ash;\u62AC\u0100et\u2CA8\u2CAC;\uC000\u2265\u20D2;\uC000>\u20D2nfin;\u69DE\u0180Aet\u2CBD\u2CC1\u2CC5rr;\u6902;\uC000\u2264\u20D2\u0100;r\u2CCA\u2CCD\uC000<\u20D2ie;\uC000\u22B4\u20D2\u0100At\u2CD8\u2CDCrr;\u6903rie;\uC000\u22B5\u20D2im;\uC000\u223C\u20D2\u0180Aan\u2CF0\u2CF4\u2D02rr;\u61D6r\u0100hr\u2CFA\u2CFDk;\u6923\u0100;o\u13E7\u13E5ear;\u6927\u1253\u1A95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2D2D\0\u2D38\u2D48\u2D60\u2D65\u2D72\u2D84\u1B07\0\0\u2D8D\u2DAB\0\u2DC8\u2DCE\0\u2DDC\u2E19\u2E2B\u2E3E\u2E43\u0100cs\u2D31\u1A97ute\u803B\xF3\u40F3\u0100iy\u2D3C\u2D45r\u0100;c\u1A9E\u2D42\u803B\xF4\u40F4;\u443E\u0280abios\u1AA0\u2D52\u2D57\u01C8\u2D5Alac;\u4151v;\u6A38old;\u69BClig;\u4153\u0100cr\u2D69\u2D6Dir;\u69BF;\uC000\u{1D52C}\u036F\u2D79\0\0\u2D7C\0\u2D82n;\u42DBave\u803B\xF2\u40F2;\u69C1\u0100bm\u2D88\u0DF4ar;\u69B5\u0200acit\u2D95\u2D98\u2DA5\u2DA8r\xF2\u1A80\u0100ir\u2D9D\u2DA0r;\u69BEoss;\u69BBn\xE5\u0E52;\u69C0\u0180aei\u2DB1\u2DB5\u2DB9cr;\u414Dga;\u43C9\u0180cdn\u2DC0\u2DC5\u01CDron;\u43BF;\u69B6pf;\uC000\u{1D560}\u0180ael\u2DD4\u2DD7\u01D2r;\u69B7rp;\u69B9\u0380;adiosv\u2DEA\u2DEB\u2DEE\u2E08\u2E0D\u2E10\u2E16\u6228r\xF2\u1A86\u0200;efm\u2DF7\u2DF8\u2E02\u2E05\u6A5Dr\u0100;o\u2DFE\u2DFF\u6134f\xBB\u2DFF\u803B\xAA\u40AA\u803B\xBA\u40BAgof;\u62B6r;\u6A56lope;\u6A57;\u6A5B\u0180clo\u2E1F\u2E21\u2E27\xF2\u2E01ash\u803B\xF8\u40F8l;\u6298i\u016C\u2E2F\u2E34de\u803B\xF5\u40F5es\u0100;a\u01DB\u2E3As;\u6A36ml\u803B\xF6\u40F6bar;\u633D\u0AE1\u2E5E\0\u2E7D\0\u2E80\u2E9D\0\u2EA2\u2EB9\0\0\u2ECB\u0E9C\0\u2F13\0\0\u2F2B\u2FBC\0\u2FC8r\u0200;ast\u0403\u2E67\u2E72\u0E85\u8100\xB6;l\u2E6D\u2E6E\u40B6le\xEC\u0403\u0269\u2E78\0\0\u2E7Bm;\u6AF3;\u6AFDy;\u443Fr\u0280cimpt\u2E8B\u2E8F\u2E93\u1865\u2E97nt;\u4025od;\u402Eil;\u6030enk;\u6031r;\uC000\u{1D52D}\u0180imo\u2EA8\u2EB0\u2EB4\u0100;v\u2EAD\u2EAE\u43C6;\u43D5ma\xF4\u0A76ne;\u660E\u0180;tv\u2EBF\u2EC0\u2EC8\u43C0chfork\xBB\u1FFD;\u43D6\u0100au\u2ECF\u2EDFn\u0100ck\u2ED5\u2EDDk\u0100;h\u21F4\u2EDB;\u610E\xF6\u21F4s\u0480;abcdemst\u2EF3\u2EF4\u1908\u2EF9\u2EFD\u2F04\u2F06\u2F0A\u2F0E\u402Bcir;\u6A23ir;\u6A22\u0100ou\u1D40\u2F02;\u6A25;\u6A72n\u80BB\xB1\u0E9Dim;\u6A26wo;\u6A27\u0180ipu\u2F19\u2F20\u2F25ntint;\u6A15f;\uC000\u{1D561}nd\u803B\xA3\u40A3\u0500;Eaceinosu\u0EC8\u2F3F\u2F41\u2F44\u2F47\u2F81\u2F89\u2F92\u2F7E\u2FB6;\u6AB3p;\u6AB7u\xE5\u0ED9\u0100;c\u0ECE\u2F4C\u0300;acens\u0EC8\u2F59\u2F5F\u2F66\u2F68\u2F7Eppro\xF8\u2F43urlye\xF1\u0ED9\xF1\u0ECE\u0180aes\u2F6F\u2F76\u2F7Approx;\u6AB9qq;\u6AB5im;\u62E8i\xED\u0EDFme\u0100;s\u2F88\u0EAE\u6032\u0180Eas\u2F78\u2F90\u2F7A\xF0\u2F75\u0180dfp\u0EEC\u2F99\u2FAF\u0180als\u2FA0\u2FA5\u2FAAlar;\u632Eine;\u6312urf;\u6313\u0100;t\u0EFB\u2FB4\xEF\u0EFBrel;\u62B0\u0100ci\u2FC0\u2FC5r;\uC000\u{1D4C5};\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\u{1D52E}pf;\uC000\u{1D562}rime;\u6057cr;\uC000\u{1D4C6}\u0180aeo\u2FF8\u3009\u3013t\u0100ei\u2FFE\u3005rnion\xF3\u06B0nt;\u6A16st\u0100;e\u3010\u3011\u403F\xF1\u1F19\xF4\u0F14\u0A80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30E0\u310E\u312B\u3147\u3162\u3172\u318E\u3206\u3215\u3224\u3229\u3258\u326E\u3272\u3290\u32B0\u32B7\u0180art\u3047\u304A\u304Cr\xF2\u10B3\xF2\u03DDail;\u691Car\xF2\u1C65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307F\u308F\u3094\u30CC\u0100eu\u306D\u3071;\uC000\u223D\u0331te;\u4155i\xE3\u116Emptyv;\u69B3g\u0200;del\u0FD1\u3089\u308B\u308D;\u6992;\u69A5\xE5\u0FD1uo\u803B\xBB\u40BBr\u0580;abcfhlpstw\u0FDC\u30AC\u30AF\u30B7\u30B9\u30BC\u30BE\u30C0\u30C3\u30C7\u30CAp;\u6975\u0100;f\u0FE0\u30B4s;\u6920;\u6933s;\u691E\xEB\u225D\xF0\u272El;\u6945im;\u6974l;\u61A3;\u619D\u0100ai\u30D1\u30D5il;\u691Ao\u0100;n\u30DB\u30DC\u6236al\xF3\u0F1E\u0180abr\u30E7\u30EA\u30EEr\xF2\u17E5rk;\u6773\u0100ak\u30F3\u30FDc\u0100ek\u30F9\u30FB;\u407D;\u405D\u0100es\u3102\u3104;\u698Cl\u0100du\u310A\u310C;\u698E;\u6990\u0200aeuy\u3117\u311C\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xEC\u0FF2\xE2\u30FA;\u4440\u0200clqs\u3134\u3137\u313D\u3144a;\u6937dhar;\u6969uo\u0100;r\u020E\u020Dh;\u61B3\u0180acg\u314E\u315F\u0F44l\u0200;ips\u0F78\u3158\u315B\u109Cn\xE5\u10BBar\xF4\u0FA9t;\u65AD\u0180ilr\u3169\u1023\u316Esht;\u697D;\uC000\u{1D52F}\u0100ao\u3177\u3186r\u0100du\u317D\u317F\xBB\u047B\u0100;l\u1091\u3184;\u696C\u0100;v\u318B\u318C\u43C1;\u43F1\u0180gns\u3195\u31F9\u31FCht\u0300ahlrst\u31A4\u31B0\u31C2\u31D8\u31E4\u31EErrow\u0100;t\u0FDC\u31ADa\xE9\u30C8arpoon\u0100du\u31BB\u31BFow\xEE\u317Ep\xBB\u1092eft\u0100ah\u31CA\u31D0rrow\xF3\u0FEAarpoon\xF3\u0551ightarrows;\u61C9quigarro\xF7\u30CBhreetimes;\u62CCg;\u42DAingdotse\xF1\u1F32\u0180ahm\u320D\u3210\u3213r\xF2\u0FEAa\xF2\u0551;\u600Foust\u0100;a\u321E\u321F\u63B1che\xBB\u321Fmid;\u6AEE\u0200abpt\u3232\u323D\u3240\u3252\u0100nr\u3237\u323Ag;\u67EDr;\u61FEr\xEB\u1003\u0180afl\u3247\u324A\u324Er;\u6986;\uC000\u{1D563}us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\u{1D4C7}\u0100bu\u30FB\u328Ao\u0100;r\u0214\u0213\u0180hir\u3297\u329B\u32A0re\xE5\u31F8mes;\u62CAi\u0200;efl\u32AA\u1059\u1821\u32AB\u65B9tri;\u69CEluhar;\u6968;\u611E\u0D61\u32D5\u32DB\u32DF\u332C\u3338\u3371\0\u337A\u33A4\0\0\u33EC\u33F0\0\u3428\u3448\u345A\u34AD\u34B1\u34CA\u34F1\0\u3616\0\0\u3633cute;\u415Bqu\xEF\u27BA\u0500;Eaceinpsy\u11ED\u32F3\u32F5\u32FF\u3302\u330B\u330F\u331F\u3326\u3329;\u6AB4\u01F0\u32FA\0\u32FC;\u6AB8on;\u4161u\xE5\u11FE\u0100;d\u11F3\u3307il;\u415Frc;\u415D\u0180Eas\u3316\u3318\u331B;\u6AB6p;\u6ABAim;\u62E9olint;\u6A13i\xED\u1204;\u4441ot\u0180;be\u3334\u1D47\u3335\u62C5;\u6A66\u0380Aacmstx\u3346\u334A\u3357\u335B\u335E\u3363\u336Drr;\u61D8r\u0100hr\u3350\u3352\xEB\u2228\u0100;o\u0A36\u0A34t\u803B\xA7\u40A7i;\u403Bwar;\u6929m\u0100in\u3369\xF0nu\xF3\xF1t;\u6736r\u0100;o\u3376\u2055\uC000\u{1D530}\u0200acoy\u3382\u3386\u3391\u33A0rp;\u666F\u0100hy\u338B\u338Fcy;\u4449;\u4448rt\u026D\u3399\0\0\u339Ci\xE4\u1464ara\xEC\u2E6F\u803B\xAD\u40AD\u0100gm\u33A8\u33B4ma\u0180;fv\u33B1\u33B2\u33B2\u43C3;\u43C2\u0400;deglnpr\u12AB\u33C5\u33C9\u33CE\u33D6\u33DE\u33E1\u33E6ot;\u6A6A\u0100;q\u12B1\u12B0\u0100;E\u33D3\u33D4\u6A9E;\u6AA0\u0100;E\u33DB\u33DC\u6A9D;\u6A9Fe;\u6246lus;\u6A24arr;\u6972ar\xF2\u113D\u0200aeit\u33F8\u3408\u340F\u3417\u0100ls\u33FD\u3404lsetm\xE9\u336Ahp;\u6A33parsl;\u69E4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341C\u341D\u6AAA\u0100;s\u3422\u3423\u6AAC;\uC000\u2AAC\uFE00\u0180flp\u342E\u3433\u3442tcy;\u444C\u0100;b\u3438\u3439\u402F\u0100;a\u343E\u343F\u69C4r;\u633Ff;\uC000\u{1D564}a\u0100dr\u344D\u0402es\u0100;u\u3454\u3455\u6660it\xBB\u3455\u0180csu\u3460\u3479\u349F\u0100au\u3465\u346Fp\u0100;s\u1188\u346B;\uC000\u2293\uFE00p\u0100;s\u11B4\u3475;\uC000\u2294\uFE00u\u0100bp\u347F\u348F\u0180;es\u1197\u119C\u3486et\u0100;e\u1197\u348D\xF1\u119D\u0180;es\u11A8\u11AD\u3496et\u0100;e\u11A8\u349D\xF1\u11AE\u0180;af\u117B\u34A6\u05B0r\u0165\u34AB\u05B1\xBB\u117Car\xF2\u1148\u0200cemt\u34B9\u34BE\u34C2\u34C5r;\uC000\u{1D4C8}tm\xEE\xF1i\xEC\u3415ar\xE6\u11BE\u0100ar\u34CE\u34D5r\u0100;f\u34D4\u17BF\u6606\u0100an\u34DA\u34EDight\u0100ep\u34E3\u34EApsilo\xEE\u1EE0h\xE9\u2EAFs\xBB\u2852\u0280bcmnp\u34FB\u355E\u1209\u358B\u358E\u0480;Edemnprs\u350E\u350F\u3511\u3515\u351E\u3523\u352C\u3531\u3536\u6282;\u6AC5ot;\u6ABD\u0100;d\u11DA\u351Aot;\u6AC3ult;\u6AC1\u0100Ee\u3528\u352A;\u6ACB;\u628Alus;\u6ABFarr;\u6979\u0180eiu\u353D\u3552\u3555t\u0180;en\u350E\u3545\u354Bq\u0100;q\u11DA\u350Feq\u0100;q\u352B\u3528m;\u6AC7\u0100bp\u355A\u355C;\u6AD5;\u6AD3c\u0300;acens\u11ED\u356C\u3572\u3579\u357B\u3326ppro\xF8\u32FAurlye\xF1\u11FE\xF1\u11F3\u0180aes\u3582\u3588\u331Bppro\xF8\u331Aq\xF1\u3317g;\u666A\u0680123;Edehlmnps\u35A9\u35AC\u35AF\u121C\u35B2\u35B4\u35C0\u35C9\u35D5\u35DA\u35DF\u35E8\u35ED\u803B\xB9\u40B9\u803B\xB2\u40B2\u803B\xB3\u40B3;\u6AC6\u0100os\u35B9\u35BCt;\u6ABEub;\u6AD8\u0100;d\u1222\u35C5ot;\u6AC4s\u0100ou\u35CF\u35D2l;\u67C9b;\u6AD7arr;\u697Bult;\u6AC2\u0100Ee\u35E4\u35E6;\u6ACC;\u628Blus;\u6AC0\u0180eiu\u35F4\u3609\u360Ct\u0180;en\u121C\u35FC\u3602q\u0100;q\u1222\u35B2eq\u0100;q\u35E7\u35E4m;\u6AC8\u0100bp\u3611\u3613;\u6AD4;\u6AD6\u0180Aan\u361C\u3620\u362Drr;\u61D9r\u0100hr\u3626\u3628\xEB\u222E\u0100;o\u0A2B\u0A29war;\u692Alig\u803B\xDF\u40DF\u0BE1\u3651\u365D\u3660\u12CE\u3673\u3679\0\u367E\u36C2\0\0\0\0\0\u36DB\u3703\0\u3709\u376C\0\0\0\u3787\u0272\u3656\0\0\u365Bget;\u6316;\u43C4r\xEB\u0E5F\u0180aey\u3666\u366B\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uC000\u{1D531}\u0200eiko\u3686\u369D\u36B5\u36BC\u01F2\u368B\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369B\u43B8ym;\u43D1\u0100cn\u36A2\u36B2k\u0100as\u36A8\u36AEppro\xF8\u12C1im\xBB\u12ACs\xF0\u129E\u0100as\u36BA\u36AE\xF0\u12C1rn\u803B\xFE\u40FE\u01EC\u031F\u36C6\u22E7es\u8180\xD7;bd\u36CF\u36D0\u36D8\u40D7\u0100;a\u190F\u36D5r;\u6A31;\u6A30\u0180eps\u36E1\u36E3\u3700\xE1\u2A4D\u0200;bcf\u0486\u36EC\u36F0\u36F4ot;\u6336ir;\u6AF1\u0100;o\u36F9\u36FC\uC000\u{1D565}rk;\u6ADA\xE1\u3362rime;\u6034\u0180aip\u370F\u3712\u3764d\xE5\u1248\u0380adempst\u3721\u374D\u3740\u3751\u3757\u375C\u375Fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65B5own\xBB\u1DBBeft\u0100;e\u2800\u373E\xF1\u092E;\u625Cight\u0100;e\u32AA\u374B\xF1\u105Aot;\u65ECinus;\u6A3Alus;\u6A39b;\u69CDime;\u6A3Bezium;\u63E2\u0180cht\u3772\u377D\u3781\u0100ry\u3777\u377B;\uC000\u{1D4C9};\u4446cy;\u445Brok;\u4167\u0100io\u378B\u378Ex\xF4\u1777head\u0100lr\u3797\u37A0eftarro\xF7\u084Fightarrow\xBB\u0F5D\u0900AHabcdfghlmoprstuw\u37D0\u37D3\u37D7\u37E4\u37F0\u37FC\u380E\u381C\u3823\u3834\u3851\u385D\u386B\u38A9\u38CC\u38D2\u38EA\u38F6r\xF2\u03EDar;\u6963\u0100cr\u37DC\u37E2ute\u803B\xFA\u40FA\xF2\u1150r\u01E3\u37EA\0\u37EDy;\u445Eve;\u416D\u0100iy\u37F5\u37FArc\u803B\xFB\u40FB;\u4443\u0180abh\u3803\u3806\u380Br\xF2\u13ADlac;\u4171a\xF2\u13C3\u0100ir\u3813\u3818sht;\u697E;\uC000\u{1D532}rave\u803B\xF9\u40F9\u0161\u3827\u3831r\u0100lr\u382C\u382E\xBB\u0957\xBB\u1083lk;\u6580\u0100ct\u3839\u384D\u026F\u383F\0\0\u384Arn\u0100;e\u3845\u3846\u631Cr\xBB\u3846op;\u630Fri;\u65F8\u0100al\u3856\u385Acr;\u416B\u80BB\xA8\u0349\u0100gp\u3862\u3866on;\u4173f;\uC000\u{1D566}\u0300adhlsu\u114B\u3878\u387D\u1372\u3891\u38A0own\xE1\u13B3arpoon\u0100lr\u3888\u388Cef\xF4\u382Digh\xF4\u382Fi\u0180;hl\u3899\u389A\u389C\u43C5\xBB\u13FAon\xBB\u389Aparrows;\u61C8\u0180cit\u38B0\u38C4\u38C8\u026F\u38B6\0\0\u38C1rn\u0100;e\u38BC\u38BD\u631Dr\xBB\u38BDop;\u630Eng;\u416Fri;\u65F9cr;\uC000\u{1D4CA}\u0180dir\u38D9\u38DD\u38E2ot;\u62F0lde;\u4169i\u0100;f\u3730\u38E8\xBB\u1813\u0100am\u38EF\u38F2r\xF2\u38A8l\u803B\xFC\u40FCangle;\u69A7\u0780ABDacdeflnoprsz\u391C\u391F\u3929\u392D\u39B5\u39B8\u39BD\u39DF\u39E4\u39E8\u39F3\u39F9\u39FD\u3A01\u3A20r\xF2\u03F7ar\u0100;v\u3926\u3927\u6AE8;\u6AE9as\xE8\u03E1\u0100nr\u3932\u3937grt;\u699C\u0380eknprst\u34E3\u3946\u394B\u3952\u395D\u3964\u3996app\xE1\u2415othin\xE7\u1E96\u0180hir\u34EB\u2EC8\u3959op\xF4\u2FB5\u0100;h\u13B7\u3962\xEF\u318D\u0100iu\u3969\u396Dgm\xE1\u33B3\u0100bp\u3972\u3984setneq\u0100;q\u397D\u3980\uC000\u228A\uFE00;\uC000\u2ACB\uFE00setneq\u0100;q\u398F\u3992\uC000\u228B\uFE00;\uC000\u2ACC\uFE00\u0100hr\u399B\u399Fet\xE1\u369Ciangle\u0100lr\u39AA\u39AFeft\xBB\u0925ight\xBB\u1051y;\u4432ash\xBB\u1036\u0180elr\u39C4\u39D2\u39D7\u0180;be\u2DEA\u39CB\u39CFar;\u62BBq;\u625Alip;\u62EE\u0100bt\u39DC\u1468a\xF2\u1469r;\uC000\u{1D533}tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\u{1D567}ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\u{1D4CB}\u0100bp\u3A10\u3A18n\u0100Ee\u3980\u3A16\xBB\u397En\u0100Ee\u3992\u3A1E\xBB\u3990igzag;\u699A\u0380cefoprs\u3A36\u3A3B\u3A56\u3A5B\u3A54\u3A61\u3A6Airc;\u4175\u0100di\u3A40\u3A51\u0100bg\u3A45\u3A49ar;\u6A5Fe\u0100;q\u15FA\u3A4F;\u6259erp;\u6118r;\uC000\u{1D534}pf;\uC000\u{1D568}\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\u{1D4CC}\u0AE3\u178E\u3A87\0\u3A8B\0\u3A90\u3A9B\0\0\u3A9D\u3AA8\u3AAB\u3AAF\0\0\u3AC3\u3ACE\0\u3AD8\u17DC\u17DFtr\xE9\u17D1r;\uC000\u{1D535}\u0100Aa\u3A94\u3A97r\xF2\u03C3r\xF2\u09F6;\u43BE\u0100Aa\u3AA1\u3AA4r\xF2\u03B8r\xF2\u09EBa\xF0\u2713is;\u62FB\u0180dpt\u17A4\u3AB5\u3ABE\u0100fl\u3ABA\u17A9;\uC000\u{1D569}im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\u{1D4CD}\u0100pt\u17D6\u3ADCr\xE9\u17D4\u0400acefiosu\u3AF0\u3AFD\u3B08\u3B0C\u3B11\u3B15\u3B1B\u3B21c\u0100uy\u3AF6\u3AFBte\u803B\xFD\u40FD;\u444F\u0100iy\u3B02\u3B06rc;\u4177;\u444Bn\u803B\xA5\u40A5r;\uC000\u{1D536}cy;\u4457pf;\uC000\u{1D56A}cr;\uC000\u{1D4CE}\u0100cm\u3B26\u3B29y;\u444El\u803B\xFF\u40FF\u0500acdefhiosw\u3B42\u3B48\u3B54\u3B58\u3B64\u3B69\u3B6D\u3B74\u3B7A\u3B80cute;\u417A\u0100ay\u3B4D\u3B52ron;\u417E;\u4437ot;\u417C\u0100et\u3B5D\u3B61tr\xE6\u155Fa;\u43B6r;\uC000\u{1D537}cy;\u4436grarr;\u61DDpf;\uC000\u{1D56B}cr;\uC000\u{1D4CF}\u0100jn\u3B85\u3B87;\u600Dj;\u600C'.split("").map(a=>a.charCodeAt(0)));var aKt=new Uint16Array("\u0200aglq \x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map(a=>a.charCodeAt(0)));var tnt,AYr=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),rnt=(tnt=String.fromCodePoint)!==null&&tnt!==void 0?tnt:function(a){let r="";return a>65535&&(a-=65536,r+=String.fromCharCode(a>>>10&1023|55296),a=56320|a&1023),r+=String.fromCharCode(a),r};function int(a){var r;return a>=55296&&a<=57343||a>1114111?65533:(r=AYr.get(a))!==null&&r!==void 0?r:a}var a0;(function(a){a[a.NUM=35]="NUM",a[a.SEMI=59]="SEMI",a[a.EQUALS=61]="EQUALS",a[a.ZERO=48]="ZERO",a[a.NINE=57]="NINE",a[a.LOWER_A=97]="LOWER_A",a[a.LOWER_F=102]="LOWER_F",a[a.LOWER_X=120]="LOWER_X",a[a.LOWER_Z=122]="LOWER_Z",a[a.UPPER_A=65]="UPPER_A",a[a.UPPER_F=70]="UPPER_F",a[a.UPPER_Z=90]="UPPER_Z"})(a0||(a0={}));var uYr=32,R8;(function(a){a[a.VALUE_LENGTH=49152]="VALUE_LENGTH",a[a.BRANCH_LENGTH=16256]="BRANCH_LENGTH",a[a.JUMP_TABLE=127]="JUMP_TABLE"})(R8||(R8={}));function nnt(a){return a>=a0.ZERO&&a<=a0.NINE}function lYr(a){return a>=a0.UPPER_A&&a<=a0.UPPER_F||a>=a0.LOWER_A&&a<=a0.LOWER_F}function fYr(a){return a>=a0.UPPER_A&&a<=a0.UPPER_Z||a>=a0.LOWER_A&&a<=a0.LOWER_Z||nnt(a)}function gYr(a){return a===a0.EQUALS||fYr(a)}var s0;(function(a){a[a.EntityStart=0]="EntityStart",a[a.NumericStart=1]="NumericStart",a[a.NumericDecimal=2]="NumericDecimal",a[a.NumericHex=3]="NumericHex",a[a.NamedEntity=4]="NamedEntity"})(s0||(s0={}));var kR;(function(a){a[a.Legacy=0]="Legacy",a[a.Strict=1]="Strict",a[a.Attribute=2]="Attribute"})(kR||(kR={}));var P2e=class{constructor(r,s,c){this.decodeTree=r,this.emitCodePoint=s,this.errors=c,this.state=s0.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=kR.Strict}startEntity(r){this.decodeMode=r,this.state=s0.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(r,s){switch(this.state){case s0.EntityStart:return r.charCodeAt(s)===a0.NUM?(this.state=s0.NumericStart,this.consumed+=1,this.stateNumericStart(r,s+1)):(this.state=s0.NamedEntity,this.stateNamedEntity(r,s));case s0.NumericStart:return this.stateNumericStart(r,s);case s0.NumericDecimal:return this.stateNumericDecimal(r,s);case s0.NumericHex:return this.stateNumericHex(r,s);case s0.NamedEntity:return this.stateNamedEntity(r,s)}}stateNumericStart(r,s){return s>=r.length?-1:(r.charCodeAt(s)|uYr)===a0.LOWER_X?(this.state=s0.NumericHex,this.consumed+=1,this.stateNumericHex(r,s+1)):(this.state=s0.NumericDecimal,this.stateNumericDecimal(r,s))}addToNumericResult(r,s,c,f){if(s!==c){let p=c-s;this.result=this.result*Math.pow(f,p)+parseInt(r.substr(s,p),f),this.consumed+=p}}stateNumericHex(r,s){let c=s;for(;s>14;for(;s>14,p!==0){if(C===a0.SEMI)return this.emitNamedEntityData(this.treeIndex,p,this.consumed+this.excess);this.decodeMode!==kR.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1}emitNotTerminatedNamedEntity(){var r;let{result:s,decodeTree:c}=this,f=(c[s]&R8.VALUE_LENGTH)>>14;return this.emitNamedEntityData(s,f,this.consumed),(r=this.errors)===null||r===void 0||r.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(r,s,c){let{decodeTree:f}=this;return this.emitCodePoint(s===1?f[r]&~R8.VALUE_LENGTH:f[r+1],c),s===3&&this.emitCodePoint(f[r+2],c),c}end(){var r;switch(this.state){case s0.NamedEntity:return this.result!==0&&(this.decodeMode!==kR.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case s0.NumericDecimal:return this.emitNumericEntity(0,2);case s0.NumericHex:return this.emitNumericEntity(0,3);case s0.NumericStart:return(r=this.errors)===null||r===void 0||r.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case s0.EntityStart:return 0}}};function oKt(a){let r="",s=new P2e(a,c=>r+=rnt(c));return function(f,p){let C=0,b=0;for(;(b=f.indexOf("&",b))>=0;){r+=f.slice(C,b),s.startEntity(p);let L=s.write(f,b+1);if(L<0){C=b+s.end();break}C=b+L,b=L===0?C+1:C}let N=r+f.slice(C);return r="",N}}function dYr(a,r,s,c){let f=(r&R8.BRANCH_LENGTH)>>7,p=r&R8.JUMP_TABLE;if(f===0)return p!==0&&c===p?s:-1;if(p){let N=c-p;return N<0||N>=f?-1:a[s+N]-1}let C=s,b=C+f-1;for(;C<=b;){let N=C+b>>>1,L=a[N];if(Lc)b=N-1;else return a[N+f]}return-1}var Wyi=oKt(sKt),Yyi=oKt(aKt);function M2e(a){for(let r=1;ra.codePointAt(r):(a,r)=>(a.charCodeAt(r)&64512)===55296?(a.charCodeAt(r)-55296)*1024+a.charCodeAt(r+1)-56320+65536:a.charCodeAt(r);function snt(a,r){return function(c){let f,p=0,C="";for(;f=a.exec(c);)p!==f.index&&(C+=c.substring(p,f.index)),C+=r.get(f[0].charCodeAt(0)),p=f.index+1;return C+c.substring(p)}}var cKt=snt(/[&<>'"]/g,_Yr),ant=snt(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),ont=snt(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]]));var AKt;(function(a){a[a.XML=0]="XML",a[a.HTML=1]="HTML"})(AKt||(AKt={}));var uKt;(function(a){a[a.UTF8=0]="UTF8",a[a.ASCII=1]="ASCII",a[a.Extensive=2]="Extensive",a[a.Attribute=3]="Attribute",a[a.Text=4]="Text"})(uKt||(uKt={}));var CYr=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(a=>[a.toLowerCase(),a])),IYr=new Map(["definitionURL","attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(a=>[a.toLowerCase(),a]));var pKt;(function(a){a[a.DISCONNECTED=1]="DISCONNECTED",a[a.PRECEDING=2]="PRECEDING",a[a.FOLLOWING=4]="FOLLOWING",a[a.CONTAINS=8]="CONTAINS",a[a.CONTAINED_BY=16]="CONTAINED_BY"})(pKt||(pKt={}));var vYr=String.prototype.codePointAt==null?(a,r)=>(a.charCodeAt(r)&64512)===55296?(a.charCodeAt(r)-55296)*1024+a.charCodeAt(r+1)-56320+65536:a.charCodeAt(r):(a,r)=>a.codePointAt(r);var U2e;(function(a){a[a.XML=0]="XML",a[a.HTML=1]="HTML"})(U2e||(U2e={}));var hKt;(function(a){a[a.UTF8=0]="UTF8",a[a.ASCII=1]="ASCII",a[a.Extensive=2]="Extensive",a[a.Attribute=3]="Attribute",a[a.Text=4]="Text"})(hKt||(hKt={}));function CKt(a,r=U2e.XML){if((typeof r=="number"?r:r.level)===U2e.HTML){let c=typeof r=="object"?r.mode:void 0;return yge(a,c)}return N2e(a)}var Bge={name:"Inter",size:16,font_weight:400,italic:!1,color:"000000"};function kYr(a){return{name:a?.name??Bge.name,size:a?.size??Bge.size,font_weight:a?.font_weight??Bge.font_weight,italic:a?.italic??Bge.italic,color:a?.color??Bge.color,underline:a?.underline,strike:a?.strike}}function G2e(a){return a?CKt(a):""}function TYr(a){let r=a.replace(/\r\n?/g,` +`);return r=r.replace(/>\s*\n\s*<"),r=r.replace(/\n/g,"
"),r=r.replace(/ ?/gi," "),r.replace(/&(?!#\d+;|#x[0-9A-Fa-f]+;|[A-Za-z][A-Za-z0-9]+;)/g,"&")}function FYr(a,r){if(!r)return a;switch(r){case"uppercase":return a.toUpperCase();case"lowercase":return a.toLowerCase();case"capitalize":return a.replace(/\b\w/g,s=>s.toUpperCase());default:return a}}function NYr(a,r){let s=kYr(a),c=f=>r.some(p=>f.includes(p.toLowerCase()));return c(["strong","b"])&&(s.font_weight=700),c(["em","i"])&&(s.italic=!0),c(["u"])&&(s.underline=!0),c(["s","strike","del"])&&(s.strike=!0),c(["code"])&&(s.name="Courier New"),s}function EKt(a,r,s){if(!a)return[];let c=TYr(a),f=[],p=[],C=new j9({onopentag(b){let N=b.toLowerCase();if(N==="br"){f.push({text:` +`});return}p.push(N)},onclosetag(b){let N=b.toLowerCase();for(let L=p.length-1;L>=0;L--)if(p[L]===N){p.splice(L,1);break}},ontext(b){if(!b)return;let N=FYr(b,s);if(!N)return;let L=G2e(N);L&&f.push({text:L,font:NYr(r,p)})}},{decodeEntities:!0});return C.write(c),C.end(),f.filter(b=>b.text.length>0)}var RYr=new Set(["a","abbr","b","br","code","em","i","img","mark","small","span","strong","sub","sup","time","u","wbr"]);function PYr(a){return a?RYr.has(a.toLowerCase()):!1}function yKt(a){if(!a.relatedElements||a.relatedElements.length===0)return[];let r=a.path||[];return a.relatedElements.filter(s=>{let c=s.path||[];if(c.length!==r.length+1)return!1;for(let f=0;f(s.path[s.path.length-1]||0)-(c.path[c.path.length-1]||0))}function MYr(a){if(!a)return"";let r=0,s="",c=new j9({onopentag(f){if(f.toLowerCase()==="br"&&r===0){s+=` +`;return}r+=1},onclosetag(){r=Math.max(0,r-1)},ontext(f){r===0&&f&&(s+=f)}},{decodeEntities:!0});return c.write(a),c.end(),G2e(s).trim()}function LYr(a,r){if(!a.position)return null;let s=a.padding?.left??0,c=a.padding?.right??0,f=a.padding?.top??0,p=a.padding?.bottom??0,C=a.font?.size??16,b=a.font?.lineHeight??Math.round(C*1.2),N=a.position.left+s,L=Math.max(1,a.position.width-s-c),O=a.position.top+f;if(r.length>0){let k=r.filter(R=>R.position).sort((R,J)=>(R.position.top??0)-(J.position.top??0));if(k.length>0){let R=[];for(let X=0;X=0&&R.push(Ue)}let J=R.length>0?Math.round(R.reduce((X,ge)=>X+ge,0)/R.length):0,H=k[k.length-1].position;O=H.top+H.height+J}}let j=a.position.top+a.position.height-p-b;return O>j&&(O=Math.max(a.position.top+f,j)),{left:N,top:O,width:L,height:b}}function OYr(a,r){if(a.length>=r.length)return!1;for(let s=0;ss.path&&s.position);return r.length===0?[]:r.filter(s=>{let c=s.path;return!r.some(f=>f!==s&&OYr(c,f.path))})}function BKt(a){if(!a.hasImmediateUnwrappedText||!a.relatedElements||a.relatedElements.length===0||!a.innerText)return null;let r=yKt(a);if(r.length===0)return null;let s="PPTX_BR",c=a.innerText;c=c.replace(/(\r?\n)[^\S\r\n]+(?=<)/g,"$1").replace(/>\s+(?=<)/g,"><").replace(/\r?\n(?=\s*<)/g,""),c=c.replace(//gi,s);let f=[],p=[],C=[],b=H=>{let X=!!(H.border?.color&&(H.border?.width??0)>0),ge=!!H.background?.color,Te=!!H.imageSrc,Ue=!!(H.hasGradient||H.shape||H.shouldScreenshot);return ge||X||Te||Ue};for(let H=0;H]+>/g,""),be=b(X)||Ue.length===0,ut=`PPTX_RUN_${H}`;if(!be&&Ue){let st=c.indexOf(Ue);if(st!==-1){c=c.slice(0,st)+ut+c.slice(st+Ue.length),f.push(ut),p.push(X),C.push("run");continue}}let We=!1;if(Ue){let st=c.indexOf(Ue);st!==-1&&(c=c.slice(0,st)+ut+c.slice(st+Ue.length),We=!0)}if(!We){let st=(X.tagName||"span").toLowerCase();try{let or=new RegExp(`<${st}[^>]*>`,"i");or.test(c)&&(c=c.replace(or,ut),We=!0)}catch{}}We||(c=ut+c),f.push(ut),p.push(X),C.push("shape")}let N=c.replace(/<[^>]+>/g,"").replace(/^[\s\u200B\u200C\u200D\uFEFF]+|[\s\u200B\u200C\u200D\uFEFF]+$/g,""),L=[];if(f.length===0)L.push({text:N});else{let H=0;for(;HH&&L.push({text:N.slice(H,X)});let Te=f.indexOf(ge);Te!==-1&&L.push({child:p[Te],kind:C[Te]}),H=X+ge.length}}let O=[];for(let H of L)if(H.text&&H.text.includes(s)){let X=H.text.split(s);X.forEach((ge,Te)=>{ge&&O.push({text:ge}),Te{!H&&k.length===0||(j.push(k),k=[])};for(let H of O){if(H.hardBreak){J(!0);continue}if(H.child)if(H.kind==="run"){let X=G2e((H.child.innerText||"").replace(/<[^>]+>/g,"").replace(/^[\s\u200B\u200C\u200D\uFEFF]+|[\s\u200B\u200C\u200D\uFEFF]+$/g,""));if(X){let ge=Qge(H.child,X,a);ge&&k.push({text:ge,font:J2e(H.child)})}}else{let X=a.font?.size??H.child.font?.size??16,ge=a.font?.letterSpacing??0,Te=H.child.position?.width??0,be=((We,st,or)=>{let gt=[[1,"\u2003"],[.5,"\u2002"],[.3333333333333333,"\u2004"],[.25,"\u2005"],[.16666666666666666,"\u2006"],[.2,"\u2009"],[.08333333333333333,"\u200A"]],jt=Math.max(0,We),Et="";for(let[Nt,Dt]of gt){let Tt=Nt*st+or;if(Tt<=0)continue;let qr=Math.floor(jt/Tt);qr>0&&(Et+=Dt.repeat(qr),jt-=qr*Tt)}return Et||(Et=" "),Et})(Te,X,ge);k.push({text:be});let ut=lnt(H.child)||[];ut.length>0&&R.push(...ut)}else if(H.text&&H.text.length>0){let X=G2e(H.text),ge=Qge(a,X);ge&&k.push({text:ge})}}return(k.length>0||j.length===0)&&J(!0),{paragraphRuns:j,extraShapes:R}}function GYr(a){if(a.length<=1)return a[0]?[...a[0]]:[];let r=[];return a.forEach((s,c)=>{r.push(...s),c{let s=[];for(let f of r.elements){let p=lnt(f);p&&s.push(...p)}let c={shapes:s,note:r.speakerNote};return r.backgroundColor&&(c.background={color:r.backgroundColor,opacity:1}),c})}function lnt(a){if(a.skipExport)return[];if(!a.position)return[];if(a.relatedElements&&a.relatedElements.length>0)return JYr(a);if(a.imageSrc)return bKt(a);let s=a.background?.color||a.border?.color,c=a.borderRadius&&a.borderRadius.some(f=>f>0);return a.innerText?s&&c&&!a.isExcludedTextChild?IKt(a):Cnt(a):a.tagName==="hr"?KYr(a):IKt(a)}function vKt(a){if(a)switch(a.toLowerCase()){case"left":return 1;case"center":return 2;case"right":return 3;case"justify":return 4;default:return 1}}function fnt(a){if(a)switch(a.toLowerCase()){case"top":return 1;case"middle":return 3;case"bottom":return 4;default:return}}function gnt(a){return a.padding&&(a.padding.top||a.padding.bottom||a.padding.left||a.padding.right)?{top:Math.round(a.padding?.top??0),bottom:Math.round(a.padding?.bottom??0),left:Math.round(a.padding?.left??0),right:Math.round(a.padding?.right??0)}:void 0}function wZ(a){return{left:a.position?.left??0,top:a.position?.top??0,width:a.position?.width??0,height:a.position?.height??0}}function dnt(a){return a.background?.color?{color:a.background.color,opacity:Math.min(a.opacity??1,a.background.opacity??1)}:void 0}function pnt(a){return a.border?.color?{color:a.border.color,thickness:a.border.width??1,opacity:Math.min(a.opacity??1,a.border.opacity??1)}:void 0}function _nt(a){if(!a.shadow?.color)return;let r=a.shadow.offset?Math.sqrt(a.shadow.offset[0]**2+a.shadow.offset[1]**2):0;return{radius:a.shadow.radius??4,offset:r,color:a.shadow.color,opacity:Math.min(a.opacity??.5,a.shadow.opacity??.5),angle:a.shadow.angle??0}}function hnt(a,r){return a?.font?.textTransform??r?.font?.textTransform??void 0}function Qge(a,r,s){if(r==null)return r;let c=hnt(a,s);if(!c)return r;switch(c){case"uppercase":return r.toUpperCase();case"lowercase":return r.toLowerCase();case"capitalize":return r.replace(/\b\w/g,f=>f.toUpperCase());default:return r}}function J2e(a){if(!a.font)return;let r=a.font.textDecoration;return{name:a.font.name??"Inter",size:a.font.size??16,font_weight:a.font.weight??400,italic:a.font.italic??!1,color:a.font.color??"000000",underline:r==="underline"?!0:void 0,strike:r==="line-through"?!0:void 0}}function mnt(a){let r=J2e(a),s=hnt(a),c=a.innerText&&a.innerText.length>0?EKt(a.innerText,r,s):void 0,f=c&&c.length>0?c:void 0,p=f&&f.length>0?f.map(C=>C.text).join(""):Qge(a,a.innerText);return{alignment:vKt(a.textAlign),font:r,line_height:a.font?.lineHeight,letter_spacing:a.font?.letterSpacing,text:p,text_runs:f}}function wKt(a){let r;for(let s of a.borderRadius??[])s>0&&(r=Math.max(r??0,s));return r}function JYr(a){let r=[];a.imageSrc&&r.push(...bKt(a));let s=wZ(a),c=gnt(a),f=dnt(a),p=pnt(a),C=_nt(a),b=a.rotation,N=a.textWrap??!0,L=fnt(a.textVerticalAlign),O=wKt(a),j=a.background?.color||a.border?.color,k=!!(O&&j);k&&r.push({shape_type:"autoshape",type:5,position:s,margin:c,fill:f,stroke:p,shadow:C,rotation:b,border_radius:O});let R=yKt(a),J=a.hasImmediateUnwrappedText&&R.length>0&&R.every(H=>PYr(H.tagName));if(a.hasImmediateUnwrappedText&&J)r.push(...HYr(a,k,s,N,c,f,p,C,b,L));else if(a.hasImmediateUnwrappedText&&R.length>0){let H=a.relatedElements?UYr(a.relatedElements):[],X=H.length>0?H:R;for(let Ue of X){let be=lnt(Ue);be&&r.push(...be)}let ge=MYr(a.innerText??""),Te=Qge(a,ge);if(Te&&Te.trim().length>0){let Ue=LYr(a,R),be={...a,innerText:Te,position:Ue??a.position,textVerticalAlign:"top"};r.push(...Cnt(be,!0))}}else r.push(...jYr(a,k,s,N,c,f,p,C,b,L));return r}function HYr(a,r,s,c,f,p,C,b,N,L){let O={left:s.left,top:s.top,width:s.width+2,height:s.height},j=BKt(a),k=mnt(a),R=[],J=[];if(j){J=j.extraShapes;let X=j.paragraphRuns.length>0?j.paragraphRuns:[[]];for(let ge of X)R.push({...k,text:void 0,text_runs:ge.length>0?ge:void 0})}else R.push(k);return[{shape_type:"textbox",position:O,margin:f,fill:r?void 0:p,stroke:r?void 0:C,shadow:r?void 0:b,rotation:N,text_wrap:c,vertical_alignment:L,paragraphs:R},...J]}function jYr(a,r,s,c,f,p,C,b,N,L){let O=a.font?.size??a.relatedElements[0].font?.size??16,j={left:s.left-O,top:s.top,width:s.width+O,height:s.height},k,R=a.relatedElements.length,J=[];for(let ge=0;ge=0&&J.push(be)}J.length>0&&(k=Math.floor(J.reduce((ge,Te)=>ge+Te,0)/J.length));let H=[],X=[];for(let ge=0;ge0&&X.push(...be.extraShapes),ut=GYr(be.paragraphRuns);else if(Te.innerText){let st=J2e(Te),or=EKt(Te.innerText,st,hnt(Te,a));ut=or.length>0?or:void 0}let We=ut&&ut.length>0?ut.map(st=>st.text).join(""):Qge(Te,Te.innerText??"",a)??"";H.push({spacing:{top:0,bottom:Ue??0,left:0,right:0},alignment:vKt(Te.textAlign),font:J2e(Te),line_height:Te.font?.lineHeight,level:0,bullet:Te.marker?Te.marker.color?{type:"default",color:Te.marker.color}:{type:"default"}:void 0,letter_spacing:Te.font?.letterSpacing,text:We,text_runs:ut})}return[{shape_type:"textbox",position:j,margin:f,fill:r?void 0:p,stroke:r?void 0:C,shadow:r?void 0:b,rotation:N,text_wrap:c,vertical_alignment:L,paragraphs:H},...X]}function Cnt(a,r=!1){let s=!(r||a.isExcludedTextChild),c=wZ(a),f=gnt(a),p=s?dnt(a):void 0,C=s?pnt(a):void 0,b=s?_nt(a):void 0,N=mnt(a);return c.width+=2,[{shape_type:"textbox",margin:f,fill:p,stroke:C,shadow:b,position:c,rotation:a.rotation,text_wrap:a.textWrap??!0,vertical_alignment:fnt(a.textVerticalAlign),paragraphs:[N]}]}function IKt(a){let r=wZ(a),s=gnt(a),c=dnt(a),f=pnt(a),p=_nt(a),C={left:r.left,top:r.top,width:r.width+2,height:r.height},b=a.innerText?[mnt(a)]:void 0,N=a.borderRadius?5:1,L=wKt(a);if(L){let O=[];return O.push({shape_type:"autoshape",type:N,margin:s,fill:c,stroke:f,shadow:p,position:r,rotation:a.rotation,border_radius:L}),b&&O.push({shape_type:"textbox",position:C,margin:s,rotation:a.rotation,text_wrap:a.textWrap??!0,vertical_alignment:fnt(a.textVerticalAlign),paragraphs:b}),O}return[{shape_type:"autoshape",type:N,margin:s,fill:c,stroke:f,shadow:p,position:r,rotation:a.rotation,text_wrap:a.textWrap??!0,border_radius:L||void 0,paragraphs:b}]}function bKt(a){let r=(()=>{let p=a.position?.left??0,C=a.position?.top??0,b=Math.max(0,a.position?.width??0),N=Math.max(0,a.position?.height??0);return p<0&&(b=Math.max(1,b+p),p=0),C<0&&(N=Math.max(1,N+C),C=0),p+b>1280&&(b=Math.max(1,1280-p)),C+N>720&&(N=Math.max(1,720-C)),{left:p,top:C,width:b,height:N}})(),s=a.objectFit?a.objectFit:"contain",c={is_network:a.imageSrc?a.imageSrc.startsWith("http"):!1,path:a.imageSrc||""},f=[];return f.push({shape_type:"picture",position:r,margin:void 0,rotation:a.rotation,clip:a.clip??!0,invert:a.filters?.invert===1,opacity:a.shouldScreenshot?void 0:a.opacity,border_radius:a.shouldScreenshot?void 0:a.borderRadius,shape:a.shape?a.shape:"rectangle",object_fit:{fit:s},picture:c}),a.innerText&&a.shouldScreenshot&&a.excludeTextInScreenshot&&f.push(...Cnt(a,!0)),f}function KYr(a){let r=wZ(a);return[{shape_type:"connector",type:1,position:r,rotation:a.rotation,thickness:a.border?.width??.5,color:a.border?.color||a.background?.color||"000000",opacity:a.border?.opacity??1}]}function bZ(){let a=process.env.TEMP_DIRECTORY;if(!a)throw new Mh("TEMP_DIRECTORY must be set",500);return a}var W2e=wc(require("node:path"));var K2e=wc(require("node:path")),wge=wc(require("node:fs/promises"));var xKt=require("node:child_process");function DZ(a){return(a??"").trim().replace(/\s+/g,"-").replace(/[^a-zA-Z0-9-]/g,"")||"presentation"}var H2e=wc(require("node:fs/promises")),vge=wc(require("node:path")),Int=require("node:url");function qYr(){let a=process.env.APP_DATA_DIRECTORY;if(!a)throw new Mh("APP_DATA_DIRECTORY must be set",500);return a}async function DKt(){let a=qYr(),r=vge.default.join(a,"exports");return await H2e.default.mkdir(r,{recursive:!0}),r}async function SKt(a,r){let s=await DKt(),c=vge.default.join(s,a);return await H2e.default.writeFile(c,r),{filePath:c,url:(0,Int.pathToFileURL)(c).toString()}}async function j2e(a,r){let s=await DKt(),c=vge.default.join(s,r??vge.default.basename(a));return await H2e.default.copyFile(a,c),{filePath:c,url:(0,Int.pathToFileURL)(c).toString()}}async function q2e(a,r){let s=!1;r||(s=!0,r=K2e.default.join(bZ(),jQ()),await wge.default.mkdir(r,{recursive:!0}));try{let c=`${DZ(a.data.name??"presentation")}_${jQ()}`,f=K2e.default.join(r,`${c}.json`);await wge.default.writeFile(f,JSON.stringify(a));let p=process.env.BUILT_PYTHON_MODULE_PATH?.trim(),b=p&&p.length>0?{cmd:p,args:[f]}:{cmd:".venv/bin/python",args:["py/convert.py",f]},N=(0,xKt.spawn)(b.cmd,b.args,{cwd:process.cwd(),stdio:"inherit",env:{...process.env,FASTAPI_URL:process.env.FASTAPI_URL}});await new Promise((j,k)=>{N.once("error",k),N.once("close",R=>{if(R===0)return j();k(new Error(`convert.py exited with code ${R}`))})});let L=K2e.default.join(r,`${c}.pptx`);try{await wge.default.access(L)}catch{throw new Mh("Failed to create PPTX file",500)}let{url:O}=await j2e(L,`${c}.pptx`);return{url:O}}finally{s&&await wge.default.rm(r,{recursive:!0,force:!0})}}async function kKt(a,r){let{slides:s,speakerNotes:c}=await Yjt(a);console.log("[handler] Slides and speaker notes retrieved");let f=await Vjt(s);console.log("[handler] Slides attributes retrieved");let p=W2e.default.join(bZ(),jQ()),C=W2e.default.join(p,"screenshots");await SZ.default.mkdir(p,{recursive:!0}),await SZ.default.mkdir(C,{recursive:!0});try{await zjt(s,f,c,C),console.log("[handler] Screenshots processed");let b=QKt(f);console.log("[handler] Slides PPTX models retrieved");let N={name:r.title,slides:b};if(process.env.NODE_ENV==="development"){let L=W2e.default.join(process.env.APP_DATA_DIRECTORY,"pptx_model.json");SZ.default.writeFile(L,JSON.stringify(N,null,2))}return await q2e({type:"pptx-from-json",url:r.url,data:N},p)}finally{await SZ.default.rm(p,{recursive:!0,force:!0}),await SZ.default.rm(C,{recursive:!0,force:!0})}}async function TKt(a,r){let s=await a.pdf({width:"1280px",height:"720px",printBackground:!0,margin:{top:0,right:0,bottom:0,left:0}}),c=DZ(r.title??"presentation")+"_"+jQ()+".pdf",{url:f}=await SKt(c,s);return{url:f}}var bge=wc(require("node:path")),xZ=wc(require("node:fs/promises")),FKt=require("node:child_process");async function NKt(a,r){let s=await a.pdf({width:"1280px",height:"720px",printBackground:!0,margin:{top:0,right:0,bottom:0,left:0}}),c=DZ(r.title??"presentation")+"_"+jQ(),f=`${c}.pdf`,p=`${c}_images.zip`,C=bge.default.join(bZ(),jQ());await xZ.default.mkdir(C,{recursive:!0});try{let b=bge.default.join(C,f);await xZ.default.writeFile(b,s);let N=bge.default.join(C,`${c}.json`),L={type:"pdf-to-png-zip",pdf_path:b,output_dir:C};await xZ.default.writeFile(N,JSON.stringify(L));let O=process.env.BUILT_PYTHON_MODULE_PATH?.trim(),k=O&&O.length>0?{cmd:O,args:[N]}:{cmd:".venv/bin/python",args:["py/convert.py",N]},R=(0,FKt.spawn)(k.cmd,k.args,{cwd:process.cwd(),stdio:["ignore","pipe","inherit"]}),J="";R.stdout?.on("data",Te=>{J+=Te.toString()}),await new Promise((Te,Ue)=>{R.once("error",Ue),R.once("close",be=>{if(be===0)return Te();Ue(new Error(`convert.py exited with code ${be}`))})});let H=J.trim().split(/\r?\n/).pop(),X=H&&H.length>0?H:bge.default.join(C,p);try{await xZ.default.access(X)}catch{throw new Mh("Failed to create PNG zip",500)}let{url:ge}=await j2e(X);return{url:ge}}finally{await xZ.default.rm(C,{recursive:!0,force:!0})}}async function RKt(a){if(a.type==="export")return WYr(a);if(a.type==="pptx-from-json")return q2e(a);throw new Mh("Invalid task type",400)}async function WYr(a){let r=await CJt();try{let s=await EJt(r,a);if(a.format==="pptx"){let c=await kKt(s,a);return console.log("[handleExportTask] PPTX response",c),c}else if(a.format==="pdf"){let c=await TKt(s,a);return console.log("[handleExportTask] PDF response",c),c}else if(a.format==="png"){let c=await NKt(s,a);return console.log("[handleExportTask] PNG response",c),c}}finally{await r.close()}throw new Mh("Invalid export task format",400)}function YYr(a){let r=a.slice(2).find(s=>!s.startsWith("-"));if(!r)throw new Error("Task JSON path must be provided as the first argument");return r}function VYr(a){let r=ynt.default.parse(a);return ynt.default.join(r.dir,`${r.name}.response.json`)}async function zYr(a){let r=await Ent.default.readFile(a,"utf8"),s=JSON.parse(r),c=await RKt(s),f=VYr(a);return await Ent.default.writeFile(f,`${JSON.stringify(c)} +`,"utf8"),f}(async()=>{try{let a=YYr(process.argv),r=await zYr(a);console.log(r)}catch(a){a instanceof Mh&&(console.error(`[index] ${a.message}`),process.exit(a.status));let r=a instanceof Error?a.message:String(a);console.error(`[index] ${r}`),process.exit(1)}})();0&&(module.exports={handleTask}); +/*! Bundled license information: + +puppeteer-core/lib/esm/puppeteer/util/disposable.js: +puppeteer-core/lib/esm/puppeteer/api/ElementHandleSymbol.js: +puppeteer-core/lib/esm/puppeteer/util/Function.js: +puppeteer-core/lib/esm/puppeteer/common/HandleIterator.js: +puppeteer-core/lib/esm/puppeteer/common/QueryHandler.js: +puppeteer-core/lib/esm/puppeteer/common/CSSQueryHandler.js: +puppeteer-core/lib/esm/puppeteer/common/CustomQueryHandler.js: +puppeteer-core/lib/esm/puppeteer/common/PierceQueryHandler.js: +puppeteer-core/lib/esm/puppeteer/common/PQueryHandler.js: +puppeteer-core/lib/esm/puppeteer/common/PSelectorParser.js: +puppeteer-core/lib/esm/puppeteer/common/TextQueryHandler.js: +puppeteer-core/lib/esm/puppeteer/common/XPathQueryHandler.js: +puppeteer-core/lib/esm/puppeteer/common/GetQueryHandler.js: +puppeteer-core/lib/esm/puppeteer/util/decorators.js: +puppeteer-core/lib/esm/puppeteer/api/JSHandle.js: +puppeteer-core/lib/esm/puppeteer/api/ElementHandle.js: +puppeteer-core/lib/esm/puppeteer/api/Frame.js: +puppeteer-core/lib/esm/puppeteer/api/HTTPResponse.js: +puppeteer-core/lib/esm/puppeteer/api/Realm.js: +puppeteer-core/lib/esm/puppeteer/api/Target.js: +puppeteer-core/lib/esm/puppeteer/common/CallbackRegistry.js: +puppeteer-core/lib/esm/puppeteer/bidi/BidiOverCdp.js: +puppeteer-core/lib/esm/puppeteer/bidi/Deserializer.js: +puppeteer-core/lib/esm/puppeteer/bidi/JSHandle.js: +puppeteer-core/lib/esm/puppeteer/bidi/ElementHandle.js: +puppeteer-core/lib/esm/puppeteer/bidi/ExposedFunction.js: +puppeteer-core/lib/esm/puppeteer/bidi/Serializer.js: +puppeteer-core/lib/esm/puppeteer/bidi/util.js: +puppeteer-core/lib/esm/puppeteer/bidi/Frame.js: +puppeteer-core/lib/esm/puppeteer/bidi/Target.js: +@puppeteer/browsers/lib/esm/browser-data/types.js: +@puppeteer/browsers/lib/esm/httpUtil.js: +@puppeteer/browsers/lib/esm/browser-data/chrome.js: +@puppeteer/browsers/lib/esm/browser-data/chrome-headless-shell.js: +@puppeteer/browsers/lib/esm/browser-data/chromedriver.js: +@puppeteer/browsers/lib/esm/browser-data/chromium.js: +@puppeteer/browsers/lib/esm/browser-data/firefox.js: +@puppeteer/browsers/lib/esm/browser-data/browser-data.js: +@puppeteer/browsers/lib/esm/detectPlatform.js: +@puppeteer/browsers/lib/esm/Cache.js: +@puppeteer/browsers/lib/esm/debug.js: +@puppeteer/browsers/lib/esm/launch.js: +@puppeteer/browsers/lib/esm/fileUtil.js: +@puppeteer/browsers/lib/esm/CLI.js: +@puppeteer/browsers/lib/esm/main.js: +puppeteer-core/lib/esm/puppeteer/cdp/FrameManagerEvents.js: +puppeteer-core/lib/esm/puppeteer/cdp/cdp.js: +puppeteer-core/lib/esm/puppeteer/bidi/BrowserConnector.js: +puppeteer-core/lib/esm/puppeteer/common/BrowserConnector.js: +puppeteer-core/lib/esm/puppeteer/node/util/fs.js: +puppeteer-core/lib/esm/puppeteer/node/ChromeLauncher.js: +puppeteer-core/lib/esm/puppeteer/node/FirefoxLauncher.js: +puppeteer-core/lib/esm/puppeteer/node/ScreenRecorder.js: +puppeteer/lib/esm/puppeteer/getConfiguration.js: + (** + * @license + * Copyright 2023 Google Inc. + * SPDX-License-Identifier: Apache-2.0 + *) + +puppeteer-core/lib/esm/puppeteer/common/EventEmitter.js: +puppeteer-core/lib/esm/puppeteer/util/ErrorLike.js: +puppeteer-core/lib/esm/puppeteer/common/LazyArg.js: +puppeteer-core/lib/esm/puppeteer/common/WaitTask.js: +puppeteer-core/lib/esm/puppeteer/bidi/Page.js: +puppeteer-core/lib/esm/puppeteer/bidi/BrowserContext.js: +puppeteer-core/lib/esm/puppeteer/bidi/Browser.js: +puppeteer-core/lib/esm/puppeteer/bidi/bidi.js: +puppeteer-core/lib/esm/puppeteer/api/api.js: +puppeteer-core/lib/esm/puppeteer/common/NetworkManagerEvents.js: +puppeteer-core/lib/esm/puppeteer/cdp/DeviceRequestPrompt.js: +puppeteer-core/lib/esm/puppeteer/cdp/IsolatedWorlds.js: +puppeteer-core/lib/esm/puppeteer/cdp/FrameTree.js: +puppeteer-core/lib/esm/puppeteer/cdp/NetworkEventManager.js: +puppeteer-core/lib/esm/puppeteer/cdp/TargetManager.js: +puppeteer-core/lib/esm/puppeteer/common/common.js: +puppeteer-core/lib/esm/puppeteer/util/util.js: +puppeteer-core/lib/esm/puppeteer/node/node.js: + (** + * @license + * Copyright 2022 Google Inc. + * SPDX-License-Identifier: Apache-2.0 + *) + +puppeteer-core/lib/esm/puppeteer/environment.js: +puppeteer-core/lib/esm/puppeteer/util/assert.js: +puppeteer-core/lib/esm/puppeteer/common/Debug.js: +puppeteer-core/lib/esm/puppeteer/common/PDFOptions.js: +puppeteer-core/lib/esm/puppeteer/common/AriaQueryHandler.js: +puppeteer-core/lib/esm/puppeteer/common/ConsoleMessage.js: +puppeteer-core/lib/esm/puppeteer/common/FileChooser.js: +puppeteer-core/lib/esm/puppeteer/common/SecurityDetails.js: +puppeteer-core/lib/esm/puppeteer/node/LaunchOptions.js: +puppeteer-core/lib/esm/puppeteer/cdp/BrowserConnector.js: +puppeteer-core/lib/esm/puppeteer/common/TaskQueue.js: +puppeteer-core/lib/esm/puppeteer/revisions.js: +puppeteer-core/lib/esm/puppeteer/node/PuppeteerNode.js: + (** + * @license + * Copyright 2020 Google Inc. + * SPDX-License-Identifier: Apache-2.0 + *) + +puppeteer-core/lib/esm/puppeteer/util/encoding.js: +puppeteer-core/lib/esm/puppeteer/util/Deferred.js: +puppeteer-core/lib/esm/puppeteer/util/Mutex.js: +puppeteer-core/lib/esm/puppeteer/common/ScriptInjector.js: +puppeteer-core/lib/esm/puppeteer/util/incremental-id-generator.js: +puppeteer-core/lib/esm/puppeteer/bidi/core/Navigation.js: +puppeteer-core/lib/esm/puppeteer/bidi/core/Realm.js: +puppeteer-core/lib/esm/puppeteer/bidi/core/Request.js: +puppeteer-core/lib/esm/puppeteer/bidi/core/UserPrompt.js: +puppeteer-core/lib/esm/puppeteer/bidi/core/BrowsingContext.js: +puppeteer-core/lib/esm/puppeteer/bidi/core/UserContext.js: +puppeteer-core/lib/esm/puppeteer/bidi/WebWorker.js: +puppeteer-core/lib/esm/puppeteer/bidi/core/Browser.js: +puppeteer-core/lib/esm/puppeteer/bidi/core/Session.js: +puppeteer-core/lib/esm/puppeteer/cdp/Binding.js: +puppeteer-core/lib/esm/puppeteer/cdp/CdpPreloadScript.js: +puppeteer-core/lib/esm/puppeteer/cdp/BrowserContext.js: +puppeteer-core/lib/esm/puppeteer/cdp/TargetManageEvents.js: + (** + * @license + * Copyright 2024 Google Inc. + * SPDX-License-Identifier: Apache-2.0 + *) + +puppeteer-core/lib/esm/puppeteer/util/version.js: +puppeteer-core/lib/esm/puppeteer/api/DeviceRequestPrompt.js: +puppeteer-core/lib/esm/puppeteer/bidi/BluetoothEmulation.js: +puppeteer-core/lib/esm/puppeteer/bidi/DeviceRequestPrompt.js: + (** + * @license + * Copyright 2025 Google Inc. + * SPDX-License-Identifier: Apache-2.0 + *) + +puppeteer-core/lib/esm/puppeteer/common/Errors.js: +puppeteer-core/lib/esm/puppeteer/api/WebWorker.js: +puppeteer-core/lib/esm/puppeteer/cdp/Accessibility.js: +puppeteer-core/lib/esm/puppeteer/node/NodeWebSocketTransport.js: + (** + * @license + * Copyright 2018 Google Inc. + * SPDX-License-Identifier: Apache-2.0 + *) + +puppeteer-core/lib/esm/puppeteer/common/util.js: +puppeteer-core/lib/esm/puppeteer/api/BrowserContext.js: +puppeteer-core/lib/esm/puppeteer/api/Dialog.js: +puppeteer-core/lib/esm/puppeteer/api/Input.js: +puppeteer-core/lib/esm/puppeteer/api/Page.js: +puppeteer-core/lib/esm/puppeteer/cdp/Coverage.js: +puppeteer-core/lib/esm/puppeteer/bidi/Connection.js: +puppeteer-core/lib/esm/puppeteer/bidi/Dialog.js: +puppeteer-core/lib/esm/puppeteer/bidi/Input.js: +@puppeteer/browsers/lib/esm/install.js: +puppeteer-core/lib/esm/puppeteer/cdp/CdpSession.js: +puppeteer-core/lib/esm/puppeteer/cdp/Connection.js: +puppeteer-core/lib/esm/puppeteer/cdp/Dialog.js: +puppeteer-core/lib/esm/puppeteer/cdp/utils.js: +puppeteer-core/lib/esm/puppeteer/cdp/ExecutionContext.js: +puppeteer-core/lib/esm/puppeteer/cdp/Frame.js: +puppeteer-core/lib/esm/puppeteer/cdp/NetworkManager.js: +puppeteer-core/lib/esm/puppeteer/cdp/FrameManager.js: +puppeteer-core/lib/esm/puppeteer/common/USKeyboardLayout.js: +puppeteer-core/lib/esm/puppeteer/cdp/Input.js: +puppeteer-core/lib/esm/puppeteer/cdp/Page.js: +puppeteer-core/lib/esm/puppeteer/cdp/Browser.js: +puppeteer-core/lib/esm/puppeteer/common/Device.js: +puppeteer-core/lib/esm/puppeteer/common/Puppeteer.js: +puppeteer-core/lib/esm/puppeteer/index-browser.js: +puppeteer-core/lib/esm/puppeteer/node/BrowserLauncher.js: +puppeteer-core/lib/esm/puppeteer/index.js: +puppeteer-core/lib/esm/puppeteer/puppeteer-core.js: +puppeteer/lib/esm/puppeteer/puppeteer.js: + (** + * @license + * Copyright 2017 Google Inc. + * SPDX-License-Identifier: Apache-2.0 + *) + +puppeteer-core/lib/esm/puppeteer/common/TimeoutSettings.js: +puppeteer-core/lib/esm/puppeteer/cdp/JSHandle.js: +puppeteer-core/lib/esm/puppeteer/cdp/ElementHandle.js: +puppeteer-core/lib/esm/puppeteer/cdp/IsolatedWorld.js: +puppeteer-core/lib/esm/puppeteer/cdp/LifecycleWatcher.js: +puppeteer-core/lib/esm/puppeteer/cdp/Target.js: + (** + * @license + * Copyright 2019 Google Inc. + * SPDX-License-Identifier: Apache-2.0 + *) + +progress/lib/node-progress.js: + (*! + * node-progress + * Copyright(c) 2011 TJ Holowaychuk + * MIT Licensed + *) + +@puppeteer/browsers/lib/esm/DefaultProvider.js: +@puppeteer/browsers/lib/esm/provider.js: + (** + * @license + * Copyright 2026 Google Inc. + * SPDX-License-Identifier: Apache-2.0 + *) + +yargs-parser/build/lib/string-utils.js: +yargs-parser/build/lib/tokenize-arg-string.js: +yargs-parser/build/lib/yargs-parser-types.js: +yargs-parser/build/lib/yargs-parser.js: + (** + * @license + * Copyright (c) 2016, Contributors + * SPDX-License-Identifier: ISC + *) + +yargs-parser/build/lib/index.js: + (** + * @fileoverview Main entrypoint for libraries using yargs-parser in Node.js + * CJS and ESM environments. + * + * @license + * Copyright (c) 2016, Contributors + * SPDX-License-Identifier: ISC + *) + +typescript/lib/typescript.js: + (*! ***************************************************************************** + Copyright (c) Microsoft Corporation. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** *) + +cosmiconfig/dist/loaders.js: +cosmiconfig/dist/util.js: + (* istanbul ignore next -- @preserve *) + +cosmiconfig/dist/ExplorerBase.js: + (* istanbul ignore if -- @preserve *) + (* istanbul ignore next -- @preserve *) + +cosmiconfig/dist/Explorer.js: +cosmiconfig/dist/ExplorerSync.js: + (* istanbul ignore if -- @preserve *) + +puppeteer-core/lib/esm/puppeteer/cdp/PredefinedNetworkConditions.js: + (** + * @license + * Copyright 2021 Google Inc. + * SPDX-License-Identifier: Apache-2.0 + *) +*/ diff --git a/electron/resources/export/py/convert-linux-x64 b/electron/resources/export/py/convert-linux-x64 new file mode 100755 index 00000000..5b480659 Binary files /dev/null and b/electron/resources/export/py/convert-linux-x64 differ diff --git a/electron/servers/fastapi/alembic/versions/82abdbc476a7_add_theme_column_to_presentations.py b/electron/servers/fastapi/alembic/versions/82abdbc476a7_add_theme_column_to_presentations.py new file mode 100644 index 00000000..c7282a6e --- /dev/null +++ b/electron/servers/fastapi/alembic/versions/82abdbc476a7_add_theme_column_to_presentations.py @@ -0,0 +1,31 @@ +"""add theme column to presentations + +Revision ID: 82abdbc476a7 +Revises: f42ad4074449 +Create Date: 2026-03-24 12:42:46.220359 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import sqlmodel + + +# revision identifiers, used by Alembic. +revision: str = '82abdbc476a7' +down_revision: Union[str, None] = 'f42ad4074449' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/electron/servers/fastapi/alembic/versions/f42ad4074449_add_theme_column_to_presentations.py b/electron/servers/fastapi/alembic/versions/f42ad4074449_add_theme_column_to_presentations.py new file mode 100644 index 00000000..4cc8c46f --- /dev/null +++ b/electron/servers/fastapi/alembic/versions/f42ad4074449_add_theme_column_to_presentations.py @@ -0,0 +1,31 @@ +"""add theme column to presentations + +Revision ID: f42ad4074449 +Revises: 00b3c27a13bc +Create Date: 2026-03-24 12:42:32.369006 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import sqlmodel + + +# revision identifiers, used by Alembic. +revision: str = 'f42ad4074449' +down_revision: Union[str, None] = '00b3c27a13bc' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('presentations', sa.Column('theme', sa.JSON(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('presentations', 'theme') + # ### end Alembic commands ### diff --git a/electron/servers/fastapi/api/v1/ppt/endpoints/fonts.py b/electron/servers/fastapi/api/v1/ppt/endpoints/fonts.py index ecf7ca83..a2a821cd 100644 --- a/electron/servers/fastapi/api/v1/ppt/endpoints/fonts.py +++ b/electron/servers/fastapi/api/v1/ppt/endpoints/fonts.py @@ -39,6 +39,10 @@ class FontListResponse(BaseModel): message: Optional[str] = None +class UploadedFontsResponse(BaseModel): + fonts: List[dict] + + def get_fonts_directory() -> str: """Get the fonts directory path, create if it doesn't exist""" app_data_dir = get_app_data_directory_env() or "/tmp/presenton" @@ -244,6 +248,45 @@ async def list_fonts(): ) +@FONTS_ROUTER.get("/uploaded", response_model=UploadedFontsResponse) +async def get_uploaded_fonts(): + """ + Compatibility endpoint used by frontend theme flow. + Returns uploaded fonts as a compact list with id/name/url fields. + """ + try: + fonts_dir = get_fonts_directory() + fonts = [] + + if os.path.exists(fonts_dir): + for filename in os.listdir(fonts_dir): + file_path = os.path.join(fonts_dir, filename) + if not os.path.isfile(file_path): + continue + + file_ext = os.path.splitext(filename)[1].lower() + if file_ext not in SUPPORTED_FONT_EXTENSIONS: + continue + + font_name = extract_font_name_from_file(file_path) + fonts.append( + { + "id": filename, + "name": font_name, + "url": f"/app_data/fonts/{filename}", + } + ) + + return UploadedFontsResponse(fonts=fonts) + + except Exception as e: + print(f"Error getting uploaded fonts: {str(e)}") + raise HTTPException( + status_code=500, + detail=f"Error getting uploaded fonts: {str(e)}" + ) + + @FONTS_ROUTER.delete("/delete/{filename}") async def delete_font(filename: str): """ diff --git a/electron/servers/fastapi/api/v1/ppt/endpoints/pptx_slides.py b/electron/servers/fastapi/api/v1/ppt/endpoints/pptx_slides.py index c57004a3..fd81bfcd 100644 --- a/electron/servers/fastapi/api/v1/ppt/endpoints/pptx_slides.py +++ b/electron/servers/fastapi/api/v1/ppt/endpoints/pptx_slides.py @@ -26,7 +26,23 @@ def _get_soffice_binary() -> str: environment variable. Falling back to the bare ``"soffice"`` command keeps Docker / server deployments working unchanged. """ - return os.environ.get("SOFFICE_PATH") or "soffice" + configured = os.environ.get("SOFFICE_PATH") + if configured: + return configured + return "soffice.exe" if os.name == "nt" else "soffice" + + +def _windows_hidden_subprocess_kwargs() -> Dict[str, object]: + """Return subprocess kwargs that suppress Windows console windows.""" + if os.name != "nt": + return {} + + startupinfo = subprocess.STARTUPINFO() + startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW + return { + "creationflags": getattr(subprocess, "CREATE_NO_WINDOW", 0), + "startupinfo": startupinfo, + } PPTX_SLIDES_ROUTER = APIRouter(prefix="/pptx-slides", tags=["PPTX Slides"]) @@ -596,6 +612,7 @@ async def _convert_pptx_to_pdf(pptx_path: str, temp_dir: str) -> str: text=True, timeout=500, env=env, + **_windows_hidden_subprocess_kwargs(), ) print(f"LibreOffice PDF conversion output: {result.stdout}") diff --git a/electron/servers/fastapi/api/v1/ppt/endpoints/presentation.py b/electron/servers/fastapi/api/v1/ppt/endpoints/presentation.py index 27a01244..cb616c15 100644 --- a/electron/servers/fastapi/api/v1/ppt/endpoints/presentation.py +++ b/electron/servers/fastapi/api/v1/ppt/endpoints/presentation.py @@ -366,6 +366,7 @@ async def update_presentation( id: Annotated[uuid.UUID, Body()], n_slides: Annotated[Optional[int], Body()] = None, title: Annotated[Optional[str], Body()] = None, + theme: Annotated[Optional[dict], Body()] = None, slides: Annotated[Optional[List[SlideModel]], Body()] = None, sql_session: AsyncSession = Depends(get_async_session), ): @@ -378,10 +379,11 @@ async def update_presentation( presentation_update_dict["n_slides"] = n_slides if title: presentation_update_dict["title"] = title + if theme: + presentation_update_dict["theme"] = theme - if n_slides or title: + if presentation_update_dict: presentation.sqlmodel_update(presentation_update_dict) - if slides: # Just to make sure id is UUID for slide in slides: diff --git a/electron/servers/fastapi/api/v1/ppt/endpoints/theme.py b/electron/servers/fastapi/api/v1/ppt/endpoints/theme.py new file mode 100644 index 00000000..f597b82f --- /dev/null +++ b/electron/servers/fastapi/api/v1/ppt/endpoints/theme.py @@ -0,0 +1,181 @@ +import copy +import uuid +from typing import Any, List, Optional + +from fastapi import APIRouter, Depends, HTTPException +from pydantic import BaseModel, Field +from sqlalchemy.ext.asyncio import AsyncSession +from sqlmodel import select + +from models.sql.image_asset import ImageAsset +from models.sql.key_value import KeyValueSqlModel +from services.database import get_async_session + +THEMES_ROUTER = APIRouter(prefix="/themes", tags=["Themes"]) +THEMES_STORAGE_KEY = "presentation_custom_themes" + + +class ThemeRequest(BaseModel): + name: str + description: str + company_name: Optional[str] = None + logo: Optional[str] = None + logo_url: Optional[str] = None + data: dict[str, Any] = Field(default_factory=dict) + + +class ThemeUpdateRequest(BaseModel): + name: Optional[str] = None + description: Optional[str] = None + company_name: Optional[str] = None + logo: Optional[str] = None + logo_url: Optional[str] = None + data: Optional[dict[str, Any]] = None + + +class ThemeResponse(BaseModel): + id: str + name: str + description: str + user: str + logo: Optional[str] = None + logo_url: Optional[str] = None + company_name: Optional[str] = None + data: dict[str, Any] + + +def _normalize_theme(theme: dict[str, Any]) -> ThemeResponse: + return ThemeResponse( + id=str(theme["id"]), + name=theme["name"], + description=theme["description"], + user=theme.get("user", "local"), + logo=theme.get("logo"), + logo_url=theme.get("logo_url"), + company_name=theme.get("company_name"), + data=theme.get("data", {}), + ) + + +async def _get_themes_row(sql_session: AsyncSession) -> Optional[KeyValueSqlModel]: + return await sql_session.scalar( + select(KeyValueSqlModel).where(KeyValueSqlModel.key == THEMES_STORAGE_KEY) + ) + + +def _read_themes_from_row(row: Optional[KeyValueSqlModel]) -> list[dict[str, Any]]: + if not row: + return [] + value = row.value if isinstance(row.value, dict) else {} + themes = value.get("themes", []) + if not isinstance(themes, list): + return [] + return copy.deepcopy(themes) + + +async def _resolve_logo_url( + sql_session: AsyncSession, logo: Optional[str] +) -> Optional[str]: + if not logo: + return None + try: + logo_uuid = uuid.UUID(str(logo)) + except ValueError as exc: + raise HTTPException(status_code=400, detail="Invalid logo id") from exc + + image_asset = await sql_session.get(ImageAsset, logo_uuid) + if not image_asset: + raise HTTPException(status_code=404, detail="Logo not found") + return image_asset.path + + +@THEMES_ROUTER.get("/default", response_model=List[dict[str, Any]]) +async def get_default_themes(): + # Built-in themes are provided by Next.js constants in this project. + return [] + + +@THEMES_ROUTER.get("/all", response_model=List[ThemeResponse]) +async def get_themes(sql_session: AsyncSession = Depends(get_async_session)): + row = await _get_themes_row(sql_session) + themes = _read_themes_from_row(row) + return [_normalize_theme(theme) for theme in themes] + + +@THEMES_ROUTER.post("/create", response_model=ThemeResponse) +async def create_theme( + payload: ThemeRequest, sql_session: AsyncSession = Depends(get_async_session) +): + row = await _get_themes_row(sql_session) + themes = _read_themes_from_row(row) + logo_url = payload.logo_url or await _resolve_logo_url(sql_session, payload.logo) + + theme = { + "id": str(uuid.uuid4()), + "name": payload.name, + "description": payload.description, + "user": "local", + "logo": payload.logo, + "logo_url": logo_url, + "company_name": payload.company_name, + "data": payload.data, + } + themes.append(theme) + + if row: + row.value = {"themes": themes} + sql_session.add(row) + else: + sql_session.add(KeyValueSqlModel(key=THEMES_STORAGE_KEY, value={"themes": themes})) + + await sql_session.commit() + return _normalize_theme(theme) + + +@THEMES_ROUTER.patch("/update/{theme_id}", response_model=ThemeResponse) +async def update_theme( + theme_id: str, + payload: ThemeUpdateRequest, + sql_session: AsyncSession = Depends(get_async_session), +): + row = await _get_themes_row(sql_session) + if not row: + raise HTTPException(status_code=404, detail="Theme not found") + + themes = _read_themes_from_row(row) + theme = next((item for item in themes if item.get("id") == theme_id), None) + if not theme: + raise HTTPException(status_code=404, detail="Theme not found") + + if payload.name is not None: + theme["name"] = payload.name + if payload.description is not None: + theme["description"] = payload.description + if payload.company_name is not None: + theme["company_name"] = payload.company_name + if payload.data is not None: + theme["data"] = payload.data + if payload.logo is not None: + theme["logo"] = payload.logo + theme["logo_url"] = await _resolve_logo_url(sql_session, payload.logo) + elif payload.logo_url is not None: + theme["logo_url"] = payload.logo_url + + row.value = {"themes": themes} + sql_session.add(row) + await sql_session.commit() + return _normalize_theme(theme) + + +@THEMES_ROUTER.delete("/delete/{theme_id}", status_code=204) +async def delete_theme( + theme_id: str, sql_session: AsyncSession = Depends(get_async_session) +): + row = await _get_themes_row(sql_session) + if not row: + return + + themes = _read_themes_from_row(row) + row.value = {"themes": [theme for theme in themes if theme.get("id") != theme_id]} + sql_session.add(row) + await sql_session.commit() diff --git a/electron/servers/fastapi/api/v1/ppt/endpoints/theme_generate.py b/electron/servers/fastapi/api/v1/ppt/endpoints/theme_generate.py new file mode 100644 index 00000000..94590feb --- /dev/null +++ b/electron/servers/fastapi/api/v1/ppt/endpoints/theme_generate.py @@ -0,0 +1,75 @@ +from typing import Optional + +from fastapi import APIRouter +from pydantic import BaseModel + +from models.theme_data import ThemeData +from utils.theme_utils import ( + IS_DARK_BELOW, + generate_color_palette, + get_lightness_key_at_distance, +) + +THEME_ROUTER = APIRouter(prefix="/theme", tags=["V3 Theme"]) + + +class GenerateThemeRequestV3(BaseModel): + primary: Optional[str] = None + background: Optional[str] = None + accent_1: Optional[str] = None + accent_2: Optional[str] = None + text_1: Optional[str] = None + text_2: Optional[str] = None + + +@THEME_ROUTER.post("/generate", response_model=ThemeData) +async def generate_theme_v3(request: GenerateThemeRequestV3) -> ThemeData: + color_palette = generate_color_palette( + request.primary, + request.background, + request.accent_1, + request.accent_2, + request.text_1, + request.text_2, + ) + + is_dark_theme = color_palette.background_lightness < IS_DARK_BELOW + graph_colors = list(color_palette.primary_variations.values()) + + if not is_dark_theme: + graph_colors.reverse() + + theme_data = ThemeData( + primary=color_palette.primary, + background=color_palette.background, + card=color_palette.background_variations[ + get_lightness_key_at_distance( + color_palette.background_lightness, + min_distance=1, + max_distance=1, + prefer_dark=not is_dark_theme, + ) + ], + stroke=color_palette.background_variations[ + get_lightness_key_at_distance( + color_palette.background_lightness, + min_distance=2, + max_distance=2, + prefer_dark=not is_dark_theme, + ) + ], + background_text=color_palette.text_1, + primary_text=color_palette.text_2, + graph_0=graph_colors[0], + graph_1=graph_colors[1], + graph_2=graph_colors[2], + graph_3=graph_colors[3], + graph_4=graph_colors[4], + graph_5=graph_colors[5], + graph_6=graph_colors[6], + graph_7=graph_colors[7], + graph_8=graph_colors[8], + graph_9=graph_colors[9], + ) + return theme_data + diff --git a/electron/servers/fastapi/api/v1/ppt/router.py b/electron/servers/fastapi/api/v1/ppt/router.py index 6918add4..9439cea1 100644 --- a/electron/servers/fastapi/api/v1/ppt/router.py +++ b/electron/servers/fastapi/api/v1/ppt/router.py @@ -16,6 +16,8 @@ from api.v1.ppt.endpoints.outlines import OUTLINES_ROUTER from api.v1.ppt.endpoints.slide import SLIDE_ROUTER from api.v1.ppt.endpoints.codex_auth import CODEX_AUTH_ROUTER from api.v1.ppt.endpoints.pptx_slides import PPTX_FONTS_ROUTER +from api.v1.ppt.endpoints.theme import THEMES_ROUTER +from api.v1.ppt.endpoints.theme_generate import THEME_ROUTER API_V1_PPT_ROUTER = APIRouter(prefix="/api/v1/ppt") @@ -32,6 +34,8 @@ API_V1_PPT_ROUTER.include_router(HTML_EDIT_ROUTER) API_V1_PPT_ROUTER.include_router(LAYOUT_MANAGEMENT_ROUTER) API_V1_PPT_ROUTER.include_router(IMAGES_ROUTER) API_V1_PPT_ROUTER.include_router(ICONS_ROUTER) +API_V1_PPT_ROUTER.include_router(THEMES_ROUTER) +API_V1_PPT_ROUTER.include_router(THEME_ROUTER) API_V1_PPT_ROUTER.include_router(OLLAMA_ROUTER) API_V1_PPT_ROUTER.include_router(PDF_SLIDES_ROUTER) API_V1_PPT_ROUTER.include_router(OPENAI_ROUTER) diff --git a/electron/servers/fastapi/models/presentation_with_slides.py b/electron/servers/fastapi/models/presentation_with_slides.py index 3a4d83b4..f508f4a3 100644 --- a/electron/servers/fastapi/models/presentation_with_slides.py +++ b/electron/servers/fastapi/models/presentation_with_slides.py @@ -18,3 +18,4 @@ class PresentationWithSlides(BaseModel): tone: Optional[str] = None verbosity: Optional[str] = None slides: List[SlideModel] + theme: Optional[dict] = None diff --git a/electron/servers/fastapi/models/sql/presentation.py b/electron/servers/fastapi/models/sql/presentation.py index 050bf2f2..d2d57e6c 100644 --- a/electron/servers/fastapi/models/sql/presentation.py +++ b/electron/servers/fastapi/models/sql/presentation.py @@ -41,6 +41,7 @@ class PresentationModel(SQLModel, table=True): include_table_of_contents: bool = Field(sa_column=Column(Boolean), default=False) include_title_slide: bool = Field(sa_column=Column(Boolean), default=True) web_search: bool = Field(sa_column=Column(Boolean), default=False) + theme: Optional[dict] = Field(sa_column=Column(JSON), default=None) def get_new_presentation(self): return PresentationModel( diff --git a/electron/servers/fastapi/models/theme_data.py b/electron/servers/fastapi/models/theme_data.py new file mode 100644 index 00000000..1383b338 --- /dev/null +++ b/electron/servers/fastapi/models/theme_data.py @@ -0,0 +1,41 @@ +from pydantic import BaseModel +from typing import Dict + + +class ThemeData(BaseModel): + primary: str + background: str + card: str + stroke: str + background_text: str + primary_text: str + graph_0: str + graph_1: str + graph_2: str + graph_3: str + graph_4: str + graph_5: str + graph_6: str + graph_7: str + graph_8: str + graph_9: str + + +class GeneratedColorPalette(BaseModel): + primary: str + background: str + accent_1: str + accent_2: str + text_1: str + text_2: str + primary_variations: Dict[str, str] + background_variations: Dict[str, str] + accent_1_variations: Dict[str, str] + accent_2_variations: Dict[str, str] + primary_lightness: float + background_lightness: float + accent_1_lightness: float + accent_2_lightness: float + text_1_lightness: float + text_2_lightness: float + diff --git a/electron/servers/fastapi/placeholder b/electron/servers/fastapi/placeholder index aa73729d..4ff509e6 100644 Binary files a/electron/servers/fastapi/placeholder and b/electron/servers/fastapi/placeholder differ diff --git a/electron/servers/fastapi/server.spec b/electron/servers/fastapi/server.spec index 7fd17588..b4220572 100644 --- a/electron/servers/fastapi/server.spec +++ b/electron/servers/fastapi/server.spec @@ -72,7 +72,7 @@ exe = EXE( bootloader_ignore_signals=False, strip=False, upx=True, - console=True, + console=False, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, diff --git a/electron/servers/fastapi/utils/theme_utils.py b/electron/servers/fastapi/utils/theme_utils.py new file mode 100644 index 00000000..3838d7f7 --- /dev/null +++ b/electron/servers/fastapi/utils/theme_utils.py @@ -0,0 +1,357 @@ +from __future__ import annotations + +import math +import random +from dataclasses import dataclass +from typing import Dict, Optional + +from models.theme_data import GeneratedColorPalette + +IS_DARK_BELOW = 0.65 +BACKGROUND_RETRIES = 200 +TEXT_RETRIES = 200 + +LIGHTNESS_VALUES: Dict[str, float] = { + "50": 0.97, + "100": 0.93, + "200": 0.86, + "300": 0.78, + "400": 0.70, + "500": 0.62, + "600": 0.54, + "700": 0.46, + "800": 0.38, + "900": 0.30, +} + + +@dataclass(frozen=True) +class Oklch: + l: float # noqa: E741 + c: float + h: float + + +def _clamp(value: float, min_value: float = 0.0, max_value: float = 1.0) -> float: + return max(min_value, min(max_value, value)) + + +def _get_random_value(min_value: float, max_value: float) -> float: + return min_value + random.random() * (max_value - min_value) + + +def _get_random_value_at_min_max_distance( + base_value: float, + min_value: float, + max_value: float, + min_distance: Optional[float] = None, + max_distance: Optional[float] = None, +) -> float: + normalized_min_distance = max(0.0, min_distance or 0.0) + normalized_max_distance = max_distance if max_distance is not None else math.inf + min_dist = min(normalized_min_distance, normalized_max_distance) + max_dist = max(normalized_min_distance, normalized_max_distance) + + lower_start = max(min_value, base_value - max_dist) + lower_end = min(max_value, base_value - min_dist) + upper_start = max(min_value, base_value + min_dist) + upper_end = min(max_value, base_value + max_dist) + + lower_size = max(0.0, lower_end - lower_start) + upper_size = max(0.0, upper_end - upper_start) + total_size = lower_size + upper_size + + if total_size <= 0: + return _get_random_value(min_value, max_value) + + picker = random.random() * total_size + if picker < lower_size: + return _get_random_value(lower_start, lower_end) + + return _get_random_value(upper_start, upper_end) + + +def _srgb_to_linear(channel: float) -> float: + if channel <= 0.04045: + return channel / 12.92 + return ((channel + 0.055) / 1.055) ** 2.4 + + +def _linear_to_srgb(channel: float) -> float: + if channel <= 0.0031308: + return 12.92 * channel + return 1.055 * (channel ** (1 / 2.4)) - 0.055 + + +def _oklch_to_srgb(color: Oklch) -> tuple[float, float, float]: + hue_rad = math.radians(color.h % 360) + a = color.c * math.cos(hue_rad) + b = color.c * math.sin(hue_rad) + + l_ = (color.l + 0.3963377774 * a + 0.2158037573 * b) ** 3 + m_ = (color.l - 0.1055613458 * a - 0.0638541728 * b) ** 3 + s_ = (color.l - 0.0894841775 * a - 1.2914855480 * b) ** 3 + + r = 4.0767416621 * l_ - 3.3077115913 * m_ + 0.2309699292 * s_ + g = -1.2684380046 * l_ + 2.6097574011 * m_ - 0.3413193965 * s_ + b = -0.0041960863 * l_ - 0.7034186147 * m_ + 1.7076147010 * s_ + + return ( + _clamp(_linear_to_srgb(r)), + _clamp(_linear_to_srgb(g)), + _clamp(_linear_to_srgb(b)), + ) + + +def _srgb_to_oklch(r: float, g: float, b: float) -> Oklch: + r_lin = _srgb_to_linear(r) + g_lin = _srgb_to_linear(g) + b_lin = _srgb_to_linear(b) + + l_ = 0.4122214708 * r_lin + 0.5363325363 * g_lin + 0.0514459929 * b_lin + m_ = 0.2119034982 * r_lin + 0.6806995451 * g_lin + 0.1073969566 * b_lin + s_ = 0.0883024619 * r_lin + 0.2817188376 * g_lin + 0.6299787005 * b_lin + + l_cbrt = math.copysign(abs(l_) ** (1 / 3), l_) + m_cbrt = math.copysign(abs(m_) ** (1 / 3), m_) + s_cbrt = math.copysign(abs(s_) ** (1 / 3), s_) + + lightness = 0.2104542553 * l_cbrt + 0.7936177850 * m_cbrt - 0.0040720468 * s_cbrt + a = 1.9779984951 * l_cbrt - 2.4285922050 * m_cbrt + 0.4505937099 * s_cbrt + b = 0.0259040371 * l_cbrt + 0.7827717662 * m_cbrt - 0.8086757660 * s_cbrt + + chroma = math.hypot(a, b) + hue = math.degrees(math.atan2(b, a)) % 360 + + return Oklch(l=lightness, c=chroma, h=hue) + + +def _hex_to_oklch(hex_value: str) -> Oklch: + hex_value = hex_value.strip().lstrip("#") + if len(hex_value) != 6: + raise ValueError(f"Invalid hex color: {hex_value!r}") + r = int(hex_value[0:2], 16) / 255.0 + g = int(hex_value[2:4], 16) / 255.0 + b = int(hex_value[4:6], 16) / 255.0 + return _srgb_to_oklch(r, g, b) + + +def _format_hex(color: Oklch) -> str: + r, g, b = _oklch_to_srgb(color) + return "#{:02x}{:02x}{:02x}".format( + int(round(r * 255)), + int(round(g * 255)), + int(round(b * 255)), + ) + + +def _relative_luminance(color: Oklch) -> float: + r, g, b = _oklch_to_srgb(color) + r_lin = _srgb_to_linear(r) + g_lin = _srgb_to_linear(g) + b_lin = _srgb_to_linear(b) + return 0.2126 * r_lin + 0.7152 * g_lin + 0.0722 * b_lin + + +def _wcag_contrast(a: Oklch, b: Oklch) -> float: + l1 = _relative_luminance(a) + l2 = _relative_luminance(b) + lighter = max(l1, l2) + darker = min(l1, l2) + return (lighter + 0.05) / (darker + 0.05) + + +def _get_color_for_all_lightness_values(base_color: Oklch) -> Dict[str, str]: + colors: Dict[str, str] = {} + for name, value in LIGHTNESS_VALUES.items(): + color = Oklch(l=value, c=base_color.c, h=base_color.h) + colors[name] = _format_hex(color) + return colors + + +def _generate_primary_color() -> Oklch: + lightness = _get_random_value(0.0, 1.0) + chroma = _get_random_value(0.0, 0.4) + hue = _get_random_value(0.0, 360.0) + return Oklch(l=lightness, c=chroma, h=hue) + + +def _generate_background_color(base_color: Oklch) -> Oklch: + for _ in range(BACKGROUND_RETRIES): + lightness = _get_random_value(0.0, 1.0) + chroma = _get_random_value(0.0, 0.4) + hue = _get_random_value(0.0, 360.0) + color = Oklch(l=lightness, c=chroma, h=hue) + if _wcag_contrast(color, base_color) >= 6: + return color + + if base_color.l < IS_DARK_BELOW: + return Oklch(l=1.0, c=0.0, h=0.0) + return Oklch(l=0.0, c=0.0, h=0.0) + + +def _generate_accent_color(base_color: Oklch, n: int) -> Oklch: + lightness = _get_random_value_at_min_max_distance(base_color.l, 0.0, 1.0, 0.0, 0.1) + chroma = _get_random_value_at_min_max_distance(base_color.c, 0.0, 0.4, 0.0, 0.4) + hue = _get_random_value_at_min_max_distance( + base_color.h if base_color.h is not None else 0.0, + 0.0, + 360.0, + n * 90.0, + (n + 1) * 90.0, + ) + return Oklch(l=lightness, c=chroma, h=hue) + + +def _generate_text_color(base_color: Oklch, text_type: str) -> Oklch: + is_base_dark = base_color.l < IS_DARK_BELOW + + for _ in range(TEXT_RETRIES): + if text_type == "text_1": + lightness = ( + _get_random_value(0.8, 1.0) + if is_base_dark + else _get_random_value(0.0, 0.2) + ) + chroma = _get_random_value(0.0, 0.02) + elif text_type == "text_2": + lightness = ( + _get_random_value(0.8, 1.0) + if is_base_dark + else _get_random_value(0.0, 0.2) + ) + chroma = _get_random_value(0.0, 0.04) + else: + raise ValueError(f"Invalid text type: {text_type}") + + hue = _get_random_value(0.0, 360.0) + color = Oklch(l=lightness, c=chroma, h=hue) + + min_contrast = 6.0 + max_contrast = None + contrast = _wcag_contrast(color, base_color) + + if contrast >= min_contrast and ( + max_contrast is None or contrast <= max_contrast + ): + return color + + if base_color.l < IS_DARK_BELOW: + return Oklch(l=1.0 if text_type == "text_1" else 0.9, c=0.0, h=0.0) + return Oklch(l=0.0 if text_type == "text_1" else 0.1, c=0.0, h=0.0) + + +def get_lightness_key_at_distance( + value: float, + min_distance: Optional[int] = None, + max_distance: Optional[int] = None, + prefer_dark: Optional[bool] = None, +) -> str: + items = sorted(LIGHTNESS_VALUES.items(), key=lambda item: item[1]) + + nearest_index = 0 + nearest_distance = abs(items[0][1] - value) + for index, (_, lightness) in enumerate(items[1:], start=1): + distance = abs(lightness - value) + if distance < nearest_distance or ( + distance == nearest_distance and lightness < items[nearest_index][1] + ): + nearest_index = index + nearest_distance = distance + + normalized_min = max(0, min_distance or 0) + normalized_max = max_distance if max_distance is not None else normalized_min + if normalized_max < normalized_min: + normalized_min, normalized_max = normalized_max, normalized_min + + candidate_indices = [] + for distance in range(normalized_min, normalized_max + 1): + lower_index = nearest_index - distance + upper_index = nearest_index + distance + if 0 <= lower_index < len(items): + candidate_indices.append(lower_index) + if upper_index != lower_index and 0 <= upper_index < len(items): + candidate_indices.append(upper_index) + + if not candidate_indices: + return items[nearest_index][0] + + if prefer_dark is True: + darker_candidates = [idx for idx in candidate_indices if idx <= nearest_index] + if darker_candidates: + return items[min(darker_candidates)][0] + return items[min(candidate_indices)][0] + if prefer_dark is False: + lighter_candidates = [idx for idx in candidate_indices if idx >= nearest_index] + if lighter_candidates: + return items[max(lighter_candidates)][0] + return items[max(candidate_indices)][0] + + def distance_to_value(idx: int) -> float: + return abs(items[idx][1] - value) + + closest_index = min(candidate_indices, key=lambda idx: (distance_to_value(idx), idx)) + return items[closest_index][0] + + +def generate_color_palette( + provided_primary: Optional[str] = None, + provided_background: Optional[str] = None, + provided_accent_1: Optional[str] = None, + provided_accent_2: Optional[str] = None, + provided_text_1: Optional[str] = None, + provided_text_2: Optional[str] = None, +) -> GeneratedColorPalette: + primary = ( + _hex_to_oklch(provided_primary) if provided_primary else _generate_primary_color() + ) + background = ( + _hex_to_oklch(provided_background) + if provided_background + else _generate_background_color(primary) + ) + accent_1 = ( + _hex_to_oklch(provided_accent_1) + if provided_accent_1 + else _generate_accent_color(primary, 1) + ) + accent_2 = ( + _hex_to_oklch(provided_accent_2) + if provided_accent_2 + else _generate_accent_color(primary, 2) + ) + text_1 = ( + _hex_to_oklch(provided_text_1) + if provided_text_1 + else _generate_text_color(background, "text_1") + ) + text_2 = ( + _hex_to_oklch(provided_text_2) + if provided_text_2 + else _generate_text_color(primary, "text_2") + ) + + primary_variations = _get_color_for_all_lightness_values(primary) + background_variations = _get_color_for_all_lightness_values(background) + accent_1_variations = _get_color_for_all_lightness_values(accent_1) + accent_2_variations = _get_color_for_all_lightness_values(accent_2) + + return GeneratedColorPalette( + primary=_format_hex(primary), + background=_format_hex(background), + accent_1=_format_hex(accent_1), + accent_2=_format_hex(accent_2), + text_1=_format_hex(text_1), + text_2=_format_hex(text_2), + primary_variations=primary_variations, + background_variations=background_variations, + accent_1_variations=accent_1_variations, + accent_2_variations=accent_2_variations, + primary_lightness=primary.l, + background_lightness=background.l, + accent_1_lightness=accent_1.l, + accent_2_lightness=accent_2.l, + text_1_lightness=text_1.l, + text_2_lightness=text_2.l, + ) + diff --git a/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/Components/DashboardNav.tsx b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/Components/DashboardNav.tsx new file mode 100644 index 00000000..6185cd7f --- /dev/null +++ b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/Components/DashboardNav.tsx @@ -0,0 +1,64 @@ +"use client"; + +import { ChevronRight } from 'lucide-react'; +import Link from 'next/link'; +import React, { } from 'react' +import { defaultNavItems } from './DashboardSidebar'; +import { usePathname } from 'next/navigation'; + +const DashboardNav = () => { + const pathname = usePathname(); + const activeTab = pathname.split("?")[0].split("/").pop(); + const activeItem = defaultNavItems.find((i: any) => i.key === activeTab); + + + + + + return ( +
+
+

+ + {activeItem?.label ?? (activeTab && activeTab?.charAt(0).toUpperCase() + activeTab?.slice(1))} +

+
+ + + + {activeTab !== "playground" && activeTab !== "theme" && + + New presentation + New + + } + {activeTab === "theme" && + + New Themes + New + + + } +
+
+
+ ) +} + +export default DashboardNav diff --git a/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/Components/DashboardSidebar.tsx b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/Components/DashboardSidebar.tsx new file mode 100644 index 00000000..7974bc1f --- /dev/null +++ b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/Components/DashboardSidebar.tsx @@ -0,0 +1,128 @@ +"use client"; + +import React from "react"; +import { LayoutDashboard, Star, Brain, Settings, Palette } from "lucide-react"; +import { usePathname } from "next/navigation"; +import Link from "next/link"; +import { useRouter } from "next/navigation"; + + + +export const defaultNavItems = [ + { key: "dashboard" as const, label: "Dashboard", icon: LayoutDashboard }, + { key: "templates" as const, label: "Standard", icon: Star }, + { key: "designs" as const, label: "Smart", icon: Brain }, + + + +]; +export const BelongingNavItems = [ + { key: "settings" as const, label: "Settings", icon: Settings }, +] + +const DashboardSidebar = () => { + + + const pathname = usePathname(); + const activeTab = pathname.split("?")[0].split("/").pop(); + const router = useRouter(); + + + + + return ( + + ); +}; + +export default DashboardSidebar; + + diff --git a/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/components/DashboardPage.tsx b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/components/DashboardPage.tsx new file mode 100644 index 00000000..3026da00 --- /dev/null +++ b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/components/DashboardPage.tsx @@ -0,0 +1,111 @@ +"use client"; + +import React, { useState, useEffect } from "react"; + +import { DashboardApi } from "@/app/(presentation-generator)/services/api/dashboard"; +import { PresentationGrid } from "@/app/(presentation-generator)/(dashboard)/dashboard/components/PresentationGrid"; +import Link from "next/link"; +import { ChevronRight } from "lucide-react"; + + + +const DashboardPage: React.FC = () => { + const [presentations, setPresentations] = useState(null); + const [isLoading, setIsLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + const loadData = async () => { + await fetchPresentations(); + }; + loadData(); + }, []); + + const fetchPresentations = async () => { + try { + setIsLoading(true); + setError(null); + const data = await DashboardApi.getPresentations(); + data.sort( + (a: any, b: any) => + new Date(b.updated_at).getTime() - new Date(a.updated_at).getTime() + ); + setPresentations(data); + } catch (err) { + setError(null); + setPresentations([]); + } finally { + setIsLoading(false); + } + }; + + const removePresentation = (presentationId: string) => { + setPresentations((prev: any) => + prev ? prev.filter((p: any) => p.id !== presentationId) : [] + ); + }; + + return ( +
+
+
+

+ + Slide Presentations +

+
+ + + + + + New presentation + New + + + {/* { + + New Themes + New + + + } */} +
+
+
+ +
+
+ ); +}; + +export default DashboardPage; diff --git a/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/components/EmptyState.tsx b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/components/EmptyState.tsx new file mode 100644 index 00000000..322a30ed --- /dev/null +++ b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/components/EmptyState.tsx @@ -0,0 +1,22 @@ +import React from 'react'; + +export const EmptyState = () => { + return ( +
+
+ + + + + + +
+

+ You don't have any presentations yet. +

+

+ Start creating the first one. +

+
+ ); +}; \ No newline at end of file diff --git a/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/components/Header.tsx b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/components/Header.tsx new file mode 100644 index 00000000..7177698b --- /dev/null +++ b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/components/Header.tsx @@ -0,0 +1,31 @@ +"use client"; + +import Wrapper from "@/components/Wrapper"; +import React from "react"; +import Link from "next/link"; +import { usePathname } from "next/navigation"; +import { trackEvent, MixpanelEvent } from "@/utils/mixpanel"; +const Header = () => { + const pathname = usePathname(); + return ( +
+ +
+
+ {/* {(pathname !== "/upload" && pathname !== "/dashboard") && } */} + trackEvent(MixpanelEvent.Navigation, { from: pathname, to: "/dashboard" })}> + Presentation logo + +
+ +
+
+
+ ); +}; + +export default Header; diff --git a/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/components/PresentationCard.tsx b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/components/PresentationCard.tsx new file mode 100644 index 00000000..24e1d9d1 --- /dev/null +++ b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/components/PresentationCard.tsx @@ -0,0 +1,105 @@ +'use client' +import React from "react"; + +import { Card } from "@/components/ui/card"; +import { DashboardApi } from "@/app/(presentation-generator)/services/api/dashboard"; +import { EllipsisVertical, Star, Trash } from "lucide-react"; +import { + Popover, + PopoverTrigger, + PopoverContent, +} from "@/components/ui/popover"; +import { useRouter } from "next/navigation"; +import { toast } from "sonner"; + +import { useFontLoader } from "@/app/(presentation-generator)/hooks/useFontLoader"; +import SlideScale from "@/app/(presentation-generator)/components/PresentationRender"; +import MarkdownRenderer from "@/components/MarkDownRender"; + +export const PresentationCard = ({ + id, + title, + presentation, + onDeleted +}: { + id: string; + title: string; + presentation: any; + onDeleted?: (presentationId: string) => void; +}) => { + const router = useRouter(); + useFontLoader(presentation.fonts || []); + const handlePreview = (e: React.MouseEvent) => { + e.preventDefault(); + router.push(`/presentation?id=${id}&type=standard`); + }; + + const handleDelete = async (e: React.MouseEvent) => { + e.preventDefault(); + e.stopPropagation(); + + + const response = await DashboardApi.deletePresentation(id); + + if (response) { + toast.success("Presentation deleted", { + description: "The presentation has been deleted successfully", + }); + if (onDeleted) { + onDeleted(id); + } + } else { + toast.error("Error deleting presentation"); + } + }; + const firstSlide = presentation?.slides?.[0]; + return ( + +
+ {/*

+ + {presentation.type} +

*/} + + +
+ + +
+ +
+
+
+
+ +
+

+ {new Date(presentation?.created_at).toLocaleDateString()} +

+ +
+ + e.stopPropagation()}> + + + + + + +
+ +
+
+
+ ); +}; diff --git a/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/components/PresentationGrid.tsx b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/components/PresentationGrid.tsx new file mode 100644 index 00000000..0edad0fb --- /dev/null +++ b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/components/PresentationGrid.tsx @@ -0,0 +1,124 @@ +import React from "react"; +import { PresentationCard } from "./PresentationCard"; +import { PlusIcon } from "@radix-ui/react-icons"; +import { useRouter } from "next/navigation"; +import { PresentationResponse } from "@/app/(presentation-generator)/services/api/dashboard"; +import { ArrowRight } from "lucide-react"; + +interface PresentationGridProps { + presentations: PresentationResponse[]; + type: "slide" | "video"; + isLoading?: boolean; + error?: string | null; + onPresentationDeleted?: (presentationId: string) => void; +} + +export const PresentationGrid = ({ + presentations, + type, + isLoading = false, + error = null, + onPresentationDeleted, +}: PresentationGridProps) => { + const router = useRouter(); + const handleCreateNewPresentation = () => { + if (type === "slide") { + router.push("/upload"); + } else { + router.push("/editor"); + } + }; + + const ShimmerCard = () => ( +
+
+
+
+
+
+
+ ); + + const CreateNewCard = () => ( +
+ New Presentation +
+ + + + + + + + + + + + + +
+

Create New Presentation

+

Get Started

+
+
+
+ ); + + if (isLoading) { + return ( +
+
+
+
+
+
+
+
+
+
+ {[...Array(15)].map((_, i) => ( + + ))} +
+ ); + } + + if (error) { + return ( +
+ +
+
+

{error}

+ +
+
+
+ ); + } + + return ( +
+ + {presentations && + presentations.length > 0 && + presentations.map((presentation) => ( + + ))} +
+ ); +}; diff --git a/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/components/PresentationListItem.tsx b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/components/PresentationListItem.tsx new file mode 100644 index 00000000..54958ce0 --- /dev/null +++ b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/components/PresentationListItem.tsx @@ -0,0 +1,44 @@ +import React from 'react'; + +import { Card, CardContent } from "@/components/ui/card"; +import { Presentation } from '../types'; + +export const PresentationListItem: React.FC = ({ + title, + date, + thumbnail, + type +}) => { + return ( + + +
+ {title} +
+ +
+

{title}

+
+ {/* {formatDistanceToNow(new Date(date), { addSuffix: true })} */} +
+
+ +
+ {type === 'video' ? ( + + + + ) : ( + + + + )} +
+
+
+ ); +}; \ No newline at end of file diff --git a/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/loading.tsx b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/loading.tsx new file mode 100644 index 00000000..919a55ad --- /dev/null +++ b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/loading.tsx @@ -0,0 +1,28 @@ +import React from 'react' + +const loading = () => { + return ( +
+
+
+
+
+
+
+
+
+
+ {[...Array(15)].map((_, i) => ( +
+
+
+
+
+
+
+ ))} +
+ ) +} + +export default loading diff --git a/electron/servers/nextjs/app/(presentation-generator)/dashboard/page.tsx b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/page.tsx similarity index 100% rename from electron/servers/nextjs/app/(presentation-generator)/dashboard/page.tsx rename to electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/page.tsx diff --git a/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/types.ts b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/types.ts new file mode 100644 index 00000000..d4b1ce8f --- /dev/null +++ b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/dashboard/types.ts @@ -0,0 +1,16 @@ +export interface Presentation { + id: string; + title: string; + date: string; + thumbnail: string; + type: 'video' | 'slide'; +} + +export interface PresentationFilter { + type?: 'video' | 'slide'; + search?: string; + dateRange?: { + start: Date; + end: Date; + }; +} \ No newline at end of file diff --git a/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/layout.tsx b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/layout.tsx new file mode 100644 index 00000000..a1b9172e --- /dev/null +++ b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/layout.tsx @@ -0,0 +1,16 @@ +import React from 'react' +import DashboardSidebar from './Components/DashboardSidebar' + +const layout = ({ children }: { children: React.ReactNode }) => { + return ( +
+ +
+ + {children} +
+
+ ) +} + +export default layout \ No newline at end of file diff --git a/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/settings/ImageProvider.tsx b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/settings/ImageProvider.tsx new file mode 100644 index 00000000..31bc11ea --- /dev/null +++ b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/settings/ImageProvider.tsx @@ -0,0 +1,355 @@ +import ToolTip from '@/components/ToolTip' +import { Button } from '@/components/ui/button' +import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command' +import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' +import { Select, SelectItem, SelectContent, SelectTrigger, SelectValue } from '@/components/ui/select' +import { Switch } from '@/components/ui/switch' +import { cn } from '@/lib/utils' +import { LLMConfig } from '@/types/llm_config' +import { DALLE_3_QUALITY_OPTIONS, GPT_IMAGE_1_5_QUALITY_OPTIONS, IMAGE_PROVIDERS } from '@/utils/providerConstants' +import { Check, ChevronUp, Eye, EyeOff } from 'lucide-react' +import React, { useState } from 'react' + +const ImageProvider = ({ llmConfig, setLlmConfig }: { llmConfig: LLMConfig, setLlmConfig: (config: any) => void }) => { + const [openImageProviderSelect, setOpenImageProviderSelect] = useState(false); + const [showApiKey, setShowApiKey] = useState(false); + const isImageGenerationDisabled = llmConfig.DISABLE_IMAGE_GENERATION ?? false; + const handleChangeImageGenerationDisabled = (value: boolean) => { + setLlmConfig((prev: any) => ({ + ...prev, + DISABLE_IMAGE_GENERATION: value + })); + } + const input_field_changed = (value: string, field: string) => { + setLlmConfig((prev: any) => ({ + ...prev, + [field]: value + })); + setOpenImageProviderSelect(false); + } + + const getFieldValue = (field?: string) => { + if (!field) return ""; + return (llmConfig as Record)[field] || ""; + }; + + const updateFieldValue = (field: string | undefined, value: string) => { + if (!field) return; + setLlmConfig((prev: any) => ({ + ...prev, + [field]: value, + })); + }; + + const getTextProviderApiField = () => { + if (llmConfig.LLM === "openai") return "OPENAI_API_KEY"; + if (llmConfig.LLM === "google") return "GOOGLE_API_KEY"; + if (llmConfig.LLM === "anthropic") return "ANTHROPIC_API_KEY"; + return ""; + }; + + + + + + const renderQualitySelector = (llmConfig: LLMConfig, input_field_changed: (value: string, field: string) => void) => { + if (llmConfig.IMAGE_PROVIDER === "dall-e-3") { + return ( +
+ +
+ + +
+
+ ); + } + + if (llmConfig.IMAGE_PROVIDER === "gpt-image-1.5") { + return ( +
+ +
+ + +
+
+ ); + } + + return null; + }; + + + + + return ( +
+ {/* API Key Input */} +
+ +
+ handleChangeImageGenerationDisabled(!checked)} + /> +
+ +
+
+ + +
+
+ image-markup +
+

Image Generation Settings

+

+ Choosing where images come from +

+
+
+ +
+ + {!isImageGenerationDisabled && ( + <> + {/* Image Provider Selection */} +
+ +
+ + + + + + + + + No provider found. + + {Object.values(IMAGE_PROVIDERS).map( + (provider, index) => ( + { + input_field_changed(value, "IMAGE_PROVIDER"); + setOpenImageProviderSelect(false); + }} + > + +
+
+
+ + {provider.label} + +
+ + {provider.description} + +
+
+
+ ) + )} +
+
+
+
+
+
+
+ + + + {/* Dynamic API Key Input for Image Provider */} + {llmConfig.IMAGE_PROVIDER && + IMAGE_PROVIDERS[llmConfig.IMAGE_PROVIDER] && + (() => { + const provider = IMAGE_PROVIDERS[llmConfig.IMAGE_PROVIDER]; + + + + // Show ComfyUI configuration + if (provider.value === "comfyui") { + return ( +
+
+ +
+ { + input_field_changed( + e.target.value, + "COMFYUI_URL" + ); + }} + /> +
+ +
+ +
+ ); + } + + // Show API key input for other providers + return ( +
+ +
+ + updateFieldValue( + provider.apiKeyField, + e.target.value + ) + } + /> + +
+ +
+ ); + })()} + + + )} +
+ {!isImageGenerationDisabled &&
+ + {renderQualitySelector(llmConfig, input_field_changed)} + {llmConfig.IMAGE_PROVIDER === "comfyui" &&
+ +
+