@microtronics/studio-cli 1.2.0-alpha.4 → 1.2.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +163 -163
- package/dist/studio-cli.d.ts +5 -3
- package/out/api.js +163 -163
- package/out/studio-cli.d.ts +5 -3
- package/package.json +1 -1
package/out/api.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var bf=Object.create;var St=Object.defineProperty;var mf=Object.getOwnPropertyDescriptor;var jf=Object.getOwnPropertyNames;var hf=Object.getPrototypeOf,gf=Object.prototype.hasOwnProperty;var Vi=(x,A)=>()=>(A||x((A={exports:{}}).exports,A),A.exports),yf=(x,A)=>{for(var e in A)St(x,e,{get:A[e],enumerable:!0})},Wi=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of jf(A))!gf.call(x,t)&&t!==e&&St(x,t,{get:()=>A[t],enumerable:!(r=mf(A,t))||r.enumerable});return x};var Q0=(x,A,e)=>(e=x!=null?bf(hf(x)):{},Wi(A||!x||!x.__esModule?St(e,"default",{value:x,enumerable:!0}):e,x)),kf=x=>Wi(St({},"__esModule",{value:!0}),x);var to=Vi((g6,ro)=>{"use strict";var El=Object.create,it=Object.defineProperty,ll=Object.getOwnPropertyDescriptor,Qa=Object.getOwnPropertyNames,cl=Object.getPrototypeOf,Bl=Object.prototype.hasOwnProperty,Cl=(x,A,e)=>A in x?it(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,Za=(x,A)=>function(){return A||(0,x[Qa(x)[0]])((A={exports:{}}).exports,A),A.exports},dl=(x,A)=>{for(var e in A)it(x,e,{get:A[e],enumerable:!0})},xo=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of Qa(A))!Bl.call(x,t)&&t!==e&&it(x,t,{get:()=>A[t],enumerable:!(r=ll(A,t))||r.enumerable});return x},Ao=(x,A,e)=>(e=x!=null?El(cl(x)):{},xo(A||!x||!x.__esModule?it(e,"default",{value:x,enumerable:!0}):e,x)),Dl=x=>xo(it({},"__esModule",{value:!0}),x),Dx=(x,A,e)=>Cl(x,typeof A!="symbol"?A+"":A,e),ul=Za({"wasm/bin/pawncc.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s,n=t,F=!!globalThis.window,f=!!globalThis.WorkerGlobalScope,C=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",D=[],p="./this.program",j=(i,v)=>{throw v};typeof __filename<"u"?r=__filename:f&&(r=self.location.href);var _="",k,S;if(C){var T=require("fs");_=__dirname+"/",S=i=>{i=g(i)?new URL(i):i;var v=T.readFileSync(i);return v},k=async(i,v=!0)=>{i=g(i)?new URL(i):i;var c=T.readFileSync(i,v?void 0:"utf8");return c},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),D=process.argv.slice(2),j=(i,v)=>{throw process.exitCode=i,v}}else if(F||f){try{_=new URL(".",r).href}catch{}f&&(S=i=>{var v=new XMLHttpRequest;return v.open("GET",i,!1),v.responseType="arraybuffer",v.send(null),new Uint8Array(v.response)}),k=async i=>{if(g(i))return new Promise((c,u)=>{var m=new XMLHttpRequest;m.open("GET",i,!0),m.responseType="arraybuffer",m.onload=()=>{if(m.status==200||m.status==0&&m.response){c(m.response);return}u(m.status)},m.onerror=u,m.send(null)});var v=await fetch(i,{credentials:"same-origin"});if(v.ok)return v.arrayBuffer();throw new Error(v.status+" : "+v.url)}}var N=console.log.bind(console),L=console.error.bind(console),O,i0=!1,R,g=i=>i.startsWith("file://");class I{}class Y extends I{}function W(i){for(var v=0,c=i.length,u=new Uint8Array(c),m;v<c;++v)m=i.charCodeAt(v),u[v]=~m>>8&m;return u}var H,K,a0=!1,t0=!1;function Z(){var i=N0.buffer;ox=new Int8Array(i),K0=new Int16Array(i),AA=new Uint8Array(i),Pr=new Uint16Array(i),O0=new Int32Array(i),E0=new Uint32Array(i),qr=new Float32Array(i),Tr=new Float64Array(i),z0=new BigInt64Array(i),Nr=new BigUint64Array(i)}function s0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)er(n.preRun.shift());_A(Jx)}function U(){a0=!0,!n.noFSInit&&!o.initialized&&o.init(),ex.init(),Ne.__wasm_call_ctors(),o.ignorePermissions=!1}function v0(){}function f0(){y(),o.quit(),ex.shutdown(),t0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)Ar(n.postRun.shift());_A(wA)}function d0(i){n.onAbort?.(i),i=`Aborted(${i})`,L(i),i0=!0,i+=". Build with -sASSERTIONS for more info.";var v=new WebAssembly.RuntimeError(i);throw K?.(v),v}var q0;function I0(){return W(`\0asm\0\0\0\x897\`\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\`\0\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\0\`\x7F\x7F~~~\`\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`~\0\`\x7F~~~~\0\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F~\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\`\x7F~\0\`\x7F|\`\x7F~~\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F\x7F\x7F\`\x7F~\x7F\x7F\`\x07\x7F\x7F\x7F~\x7F\x7F\x7F~\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\`~\x7F\x7F\0\`\x7F\x7F~\0\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F~\x7F\x7F\x7F\`\x7F\x7F\x7F|\x7F\`\x7F\x7F|\x7F\`\x7F\x7F~\x7F\x7F\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F~\`\x7F\x7F\x7F\x7F\x7F\x7F~\`\v\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F~\`\x7F~\x7F\x7F\x7F\x7F\x7F\` \x7F~\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~~\x7F~\`\x7F~~\0\`~\x7F\0\`\x7F~\x7F\`\x7F||\`||\`|\x7F\`\x7F~~~\0\`|\x7F|\`~\x7F\x7F\`~~~~\x7F\`~~~\x7F\`\x7F|\0\`~~|\xD0env\binvoke_v\0env
|
|
2
2
|
invoke_vii\0\x07env invoke_ii\0env
|
|
3
3
|
invoke_iii\0env\binvoke_i\0\0env\vinvoke_iiii\0\benv\r__assert_fail\0 env\finvoke_viiii\0env\finvoke_iiiii\0\renv\rinvoke_viiiii\0env\finvoke_iijii\0env invoke_vi\0env\vinvoke_viii\0 env\vinvoke_iiid\0 env\rinvoke_iiiiii\0env__syscall_faccessat\0\benv__syscall_openat\0\benv__syscall_fcntl64\0env__syscall_ioctl\0wasi_snapshot_preview1\bfd_write\0\bwasi_snapshot_preview1\x07fd_read\0\bwasi_snapshot_preview1\bfd_close\0\0env__syscall_getcwd\0wasi_snapshot_preview1\x07fd_seek\0env__syscall_unlinkat\0env__syscall_rmdir\0\0env__syscall_renameat\0\bwasi_snapshot_preview1clock_time_get\0env__syscall_readlinkat\0\benvemscripten_resize_heap\0\0env_emscripten_throw_longjmp\0\xAA\xA8\x07!
|
|
4
4
|
|
|
@@ -1158,8 +1158,8 @@ S\0\0\xCD\0\0Q\0\0\xCD*\0\0\x97*\0\0>S\0\0A!\0\0\f\0\0\x90\0\0\xC6\0\0l\0\
|
|
|
1158
1158
|
\0\0\xC0\v\0\0\xC0\f\0\0\xC0\r\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\x1B\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\0\xB3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\x07\0\0\xC3\b\0\0\xC3 \0\0\xC3
|
|
1159
1159
|
\0\0\xC3\v\0\0\xC3\f\0\0\xC3\r\0\0\xD3\0\0\xC3\0\0\xC3\0\0\f\xBB\0\f\xC3\0\f\xC3\0\f\xC3\0\f\xDB\0A\xC0\xF9\v\xE1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0D\0\0\xFAC\0\0 D\0\0\0D\0\0\xFDC\0\0\xF6C\0\0\xEEC\0\0\xEFC\0\0D\0\0\xEBC\0\0\xE8C\0\0z\0\0\x87Y\0\0\xF3C\0\0\fD\0\0\xF7C\0\0\xF0C\0\0D\0\0\xBCC\0\0\xBDC\0\0MO\0\0\xFDN\0\0\xBCN\0\0\xBDN\0\0,D\0\0\xE3\0\0h&\0\0d-\0\0)\0\0\xA2,\0\0d\0\01\0\0>!\0\0G-\0\0_\0\0y\0\0K0\0\0\v!\0\0*\0\0\x84,\0\0\x81\0\0+\0\02\0\0g!\0\0\xF7)\0\0; \0\0-\0\0\xF01\0\0&\0\0\xAD(\0\0\xF1)\0\0\x97.\0\0\xE2\0\0\xB9-\0\0F-\0\0*\0\0
|
|
1160
1160
|
*\0\0\xDC\0\x004\0\0\xE7.\0\0*\0\x006*\0\0.*\0\0\x9D/\0\0\xB3-\0\0\x8A3\0\0\x87/\0\0'*\0\x009)\0\0!D\0\0\0O\0\0!D\0\0\xB63\0\0\xC63\0\0\x983\0\0\xA53\0\0\xD73\0\0\xAD3\0\0\xAD3\0\0\0\0\0\0/\0A\xA0\xFE\vy\0\0\0\\\\\0\0\xF4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\0\0\xA0\x97\0\0\xA0\x9C\0\0\0\0\0\0\0\0\0 \x9C\0\0 \x9D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xA0\x9D\0\0\0\0\0\0\0\0\0\x07\0\0\0\0 \0\0\0\0\0\0\0A\xA4\xFF\v\x9F\0A\xBC\xFF\v\v\x9D\0\0\0\x9C\0\0\0("\0A\xD4\xFF\v\0A\xE4\xFF\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xA8\x80\v \x98\xBF\0\0\0\0\0\0\0A\xBC\x80\v\xA0\0A\xD4\x80\v\x9D\0\0\0\xA1\0\0\x008"\0\0\0A\xEC\x80\v\0A\xFC\x80\v\xFF\xFF\xFF\xFF
|
|
1161
|
-
\0A\xC0\x81\v\v0\xC0\0\0\x80!\0\`(`)}function
|
|
1162
|
-
`));if(!i)return null;Lx=HA(i,!0)}return Lx.shift()},xx={ttys:[],init(){},shutdown(){},register(i,v){xx.ttys[i]={input:[],output:[],ops:v},o.registerDevice(i,xx.stream_ops)},stream_ops:{open(i){var v=xx.ttys[i.node.rdev];if(!v)throw new o.ErrnoError(43);i.tty=v,i.seekable=!1},close(i){i.tty.ops.fsync(i.tty)},fsync(i){i.tty.ops.fsync(i.tty)},read(i,v,B,u,m){if(!i.tty||!i.tty.ops.get_char)throw new o.ErrnoError(60);for(var w=0,I=0;I<u;I++){var K;try{K=i.tty.ops.get_char(i.tty)}catch{throw new o.ErrnoError(29)}if(K===void 0&&w===0)throw new o.ErrnoError(6);if(K==null)break;w++,v[B+I]=K}return w&&(i.node.atime=Date.now()),w},write(i,v,B,u,m){if(!i.tty||!i.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var w=0;w<u;w++)i.tty.ops.put_char(i.tty,v[B+w])}catch{throw new o.ErrnoError(29)}return u&&(i.node.mtime=i.node.ctime=Date.now()),w}},default_tty_ops:{get_char(i){return $r()},put_char(i,v){v===null||v===10?(N(lA(i.output)),i.output=[]):v!=0&&i.output.push(v)},fsync(i){i.output?.length>0&&(N(lA(i.output)),i.output=[])},ioctl_tcgets(i){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(i,v,B){return 0},ioctl_tiocgwinsz(i){return[24,80]}},default_tty1_ops:{put_char(i,v){v===null||v===10?(L(lA(i.output)),i.output=[]):v!=0&&i.output.push(v)},fsync(i){i.output?.length>0&&(L(lA(i.output)),i.output=[])}}},wA=i=>{d0()},t0={ops_table:null,mount(i){return t0.createNode(null,"/",16895,0)},createNode(i,v,B,u){if(o.isBlkdev(B)||o.isFIFO(B))throw new o.ErrnoError(63);t0.ops_table||(t0.ops_table={dir:{node:{getattr:t0.node_ops.getattr,setattr:t0.node_ops.setattr,lookup:t0.node_ops.lookup,mknod:t0.node_ops.mknod,rename:t0.node_ops.rename,unlink:t0.node_ops.unlink,rmdir:t0.node_ops.rmdir,readdir:t0.node_ops.readdir,symlink:t0.node_ops.symlink},stream:{llseek:t0.stream_ops.llseek}},file:{node:{getattr:t0.node_ops.getattr,setattr:t0.node_ops.setattr},stream:{llseek:t0.stream_ops.llseek,read:t0.stream_ops.read,write:t0.stream_ops.write,mmap:t0.stream_ops.mmap,msync:t0.stream_ops.msync}},link:{node:{getattr:t0.node_ops.getattr,setattr:t0.node_ops.setattr,readlink:t0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:t0.node_ops.getattr,setattr:t0.node_ops.setattr},stream:o.chrdev_stream_ops}});var m=o.createNode(i,v,B,u);return o.isDir(m.mode)?(m.node_ops=t0.ops_table.dir.node,m.stream_ops=t0.ops_table.dir.stream,m.contents={}):o.isFile(m.mode)?(m.node_ops=t0.ops_table.file.node,m.stream_ops=t0.ops_table.file.stream,m.usedBytes=0,m.contents=t0.emptyFileContents??(t0.emptyFileContents=new Uint8Array(0))):o.isLink(m.mode)?(m.node_ops=t0.ops_table.link.node,m.stream_ops=t0.ops_table.link.stream):o.isChrdev(m.mode)&&(m.node_ops=t0.ops_table.chrdev.node,m.stream_ops=t0.ops_table.chrdev.stream),m.atime=m.mtime=m.ctime=Date.now(),i&&(i.contents[v]=m,i.atime=i.mtime=i.ctime=m.atime),m},getFileDataAsTypedArray(i){return i.contents.subarray(0,i.usedBytes)},expandFileStorage(i,v){var B=i.contents.length;if(!(B>=v)){var u=1024*1024;v=Math.max(v,B*(B<u?2:1.125)>>>0),B&&(v=Math.max(v,256));var m=t0.getFileDataAsTypedArray(i);i.contents=new Uint8Array(v),i.contents.set(m)}},resizeFileStorage(i,v){if(i.usedBytes!=v){var B=i.contents;i.contents=new Uint8Array(v),i.contents.set(B.subarray(0,Math.min(v,i.usedBytes))),i.usedBytes=v}},node_ops:{getattr(i){var v={};return v.dev=o.isChrdev(i.mode)?i.id:1,v.ino=i.id,v.mode=i.mode,v.nlink=1,v.uid=0,v.gid=0,v.rdev=i.rdev,o.isDir(i.mode)?v.size=4096:o.isFile(i.mode)?v.size=i.usedBytes:o.isLink(i.mode)?v.size=i.link.length:v.size=0,v.atime=new Date(i.atime),v.mtime=new Date(i.mtime),v.ctime=new Date(i.ctime),v.blksize=4096,v.blocks=Math.ceil(v.size/v.blksize),v},setattr(i,v){for(let B of["mode","atime","mtime","ctime"])v[B]!=null&&(i[B]=v[B]);v.size!==void 0&&t0.resizeFileStorage(i,v.size)},lookup(i,v){throw t0.doesNotExistError||(t0.doesNotExistError=new o.ErrnoError(44),t0.doesNotExistError.stack="<generic error, no stack>"),t0.doesNotExistError},mknod(i,v,B,u){return t0.createNode(i,v,B,u)},rename(i,v,B){var u;try{u=o.lookupNode(v,B)}catch{}if(u){if(o.isDir(i.mode))for(var m in u.contents)throw new o.ErrnoError(55);o.hashRemoveNode(u)}delete i.parent.contents[i.name],v.contents[B]=i,i.name=B,v.ctime=v.mtime=i.parent.ctime=i.parent.mtime=Date.now()},unlink(i,v){delete i.contents[v],i.ctime=i.mtime=Date.now()},rmdir(i,v){var B=o.lookupNode(i,v);for(var u in B.contents)throw new o.ErrnoError(55);delete i.contents[v],i.ctime=i.mtime=Date.now()},readdir(i){return[".","..",...Object.keys(i.contents)]},symlink(i,v,B){var u=t0.createNode(i,v,41471,0);return u.link=B,u},readlink(i){if(!o.isLink(i.mode))throw new o.ErrnoError(28);return i.link}},stream_ops:{read(i,v,B,u,m){var w=i.node.contents;if(m>=i.node.usedBytes)return 0;var I=Math.min(i.node.usedBytes-m,u);return v.set(w.subarray(m,m+I),B),I},write(i,v,B,u,m,w){if(v.buffer===ix.buffer&&(w=!1),!u)return 0;var I=i.node;return I.mtime=I.ctime=Date.now(),w?(I.contents=v.subarray(B,B+u),I.usedBytes=u):I.usedBytes===0&&m===0?(I.contents=v.slice(B,B+u),I.usedBytes=u):(t0.expandFileStorage(I,m+u),I.contents.set(v.subarray(B,B+u),m),I.usedBytes=Math.max(I.usedBytes,m+u)),u},llseek(i,v,B){var u=v;if(B===1?u+=i.position:B===2&&o.isFile(i.node.mode)&&(u+=i.node.usedBytes),u<0)throw new o.ErrnoError(28);return u},mmap(i,v,B,u,m){if(!o.isFile(i.node.mode))throw new o.ErrnoError(43);var w,I,K=i.node.contents;if(!(m&2)&&K.buffer===ix.buffer)I=!1,w=K.byteOffset;else{if(I=!0,w=wA(v),!w)throw new o.ErrnoError(48);K&&((B>0||B+v<K.length)&&(K.subarray?K=K.subarray(B,B+v):K=Array.prototype.slice.call(K,B,B+v)),ix.set(K,w))}return{ptr:w,allocated:I}},msync(i,v,B,u,m){return t0.stream_ops.write(i,v,0,u,B,!1),0}}},SA=i=>{if(typeof i!="string")return i;var v={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},B=v[i];if(typeof B>"u")throw new Error(`Unknown file open mode: ${i}`);return B},Kx=i=>(typeof i=="string"&&(i=HA(i,!0)),i.subarray||(i=new Uint8Array(i)),i),tA=(i,v)=>{var B=0;return i&&(B|=365),v&&(B|=146),B},P0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},y0={mount(i){return y0.createNode(null,"/",i.opts.fs.lstat(i.opts.root).mode,0)},createNode(i,v,B,u){if(!o.isDir(B)&&!o.isFile(B)&&!o.isLink(B))throw new o.ErrnoError(P0.EINVAL);var m=o.createNode(i,v,B);return m.node_ops=y0.node_ops,m.stream_ops=y0.stream_ops,m},realPath(i){for(var v=[];i.parent!==i;)v.push(i.name),i=i.parent;return v.push(i.mount.opts.root),v.reverse(),l0.join(...v)},node_ops:{getattr(i){var v=y0.realPath(i),B;try{B=i.mount.opts.fs.lstat(v)}catch(u){throw u.code?new o.ErrnoError(P0[u.code]):u}return{dev:B.dev,ino:B.ino,mode:B.mode,nlink:B.nlink,uid:B.uid,gid:B.gid,rdev:B.rdev,size:B.size,atime:B.atime,mtime:B.mtime,ctime:B.ctime,blksize:B.blksize,blocks:B.blocks}},setattr(i,v){var B=y0.realPath(i);try{if(v.mode!==void 0&&(i.mount.opts.fs.chmod(B,v.mode),i.mode=v.mode),v.atime||v.mtime){var u=new Date(v.atime||v.mtime),m=new Date(v.mtime||v.atime);i.mount.opts.fs.utime(B,u,m)}v.size!==void 0&&i.mount.opts.fs.truncate(B,v.size)}catch(w){throw w.code?new o.ErrnoError(P0[w.code]):w}},lookup(i,v){try{var B=l0.join2(y0.realPath(i),v),u=i.mount.opts.fs.lstat(B).mode,m=y0.createNode(i,v,u);return m}catch(w){throw w.code?new o.ErrnoError(P0[w.code]):w}},mknod(i,v,B,u){var m=y0.createNode(i,v,B,u),w=y0.realPath(m);try{o.isDir(m.mode)?m.mount.opts.fs.mkdir(w,m.mode):m.mount.opts.fs.writeFile(w,"",{mode:m.mode})}catch(I){throw I.code?new o.ErrnoError(P0[I.code]):I}return m},rename(i,v,B){var u=y0.realPath(i),m=l0.join2(y0.realPath(v),B);try{i.mount.opts.fs.rename(u,m),i.name=B}catch(w){throw w.code?new o.ErrnoError(P0[w.code]):w}},unlink(i,v){var B=l0.join2(y0.realPath(i),v);try{i.mount.opts.fs.unlink(B)}catch(u){throw u.code?new o.ErrnoError(P0[u.code]):u}},rmdir(i,v){var B=l0.join2(y0.realPath(i),v);try{i.mount.opts.fs.rmdir(B)}catch(u){throw u.code?new o.ErrnoError(P0[u.code]):u}},readdir(i){var v=y0.realPath(i);try{return i.mount.opts.fs.readdir(v)}catch(B){throw B.code?new o.ErrnoError(P0[B.code]):B}},symlink(i,v,B){var u=l0.join2(y0.realPath(i),v);try{i.mount.opts.fs.symlink(B,u)}catch(m){throw m.code?new o.ErrnoError(P0[m.code]):m}},readlink(i){var v=y0.realPath(i);try{return i.mount.opts.fs.readlink(v)}catch(B){throw B.code?new o.ErrnoError(P0[B.code]):B}}},stream_ops:{open(i){var v=y0.realPath(i.node);try{i.nfd=i.node.mount.opts.fs.open(v,i.flags)}catch(B){throw B.code?new o.ErrnoError(P0[B.code]):B}},close(i){try{i.node.mount.opts.fs.close(i.nfd)}catch(v){throw v.code?new o.ErrnoError(P0[v.code]):v}},read(i,v,B,u,m){try{return i.node.mount.opts.fs.read(i.nfd,v,B,u,m)}catch(w){throw w.code?new o.ErrnoError(P0[w.code]):w}},write(i,v,B,u,m){try{return i.node.mount.opts.fs.write(i.nfd,v,B,u,m)}catch(w){throw w.code?new o.ErrnoError(P0[w.code]):w}},llseek(i,v,B){var u=v;if(B===1)u+=i.position;else if(B===2&&o.isFile(i.node.mode))try{var m=i.node.node_ops.getattr(i.node);u+=m.size}catch(w){throw new o.ErrnoError(P0[w.code])}if(u<0)throw new o.ErrnoError(P0.EINVAL);return u}}},cA=async i=>{var v=await k(i);return new Uint8Array(v)},ge=(...i)=>o.createDataFile(...i),Ex=i=>i,Fx=0,b0=null,ye=i=>{if(Fx--,n.monitorRunDependencies?.(Fx),Fx==0&&b0){var v=b0;b0=null,v()}},Sx=i=>{Fx++,n.monitorRunDependencies?.(Fx)},ae=[],BA=async(i,v)=>{typeof Browser<"u"&&Browser.init();for(var B of ae)if(B.canHandle(v))return B.handle(i,v);return i},$A=async(i,v,B,u,m,w,I,K)=>{var o0=v?fx.resolve(l0.join2(i,v)):i,_0=Ex(`cp ${o0}`);Sx(_0);try{var X0=B;typeof B=="string"&&(X0=await cA(B)),X0=await BA(X0,o0),K?.(),w||ge(i,v,X0,u,m,I)}finally{ye(_0)}},qr=(i,v,B,u,m,w,I,K,o0,_0)=>{$A(i,v,B,u,m,K,o0,_0).then(w).catch(I)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(i){dx(this,"name","ErrnoError"),this.errno=i}},FSStream:class{constructor(){dx(this,"shared",{})}get object(){return this.node}set object(i){this.node=i}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(i){this.shared.flags=i}get position(){return this.shared.position}set position(i){this.shared.position=i}},FSNode:class{constructor(i,v,B,u){dx(this,"node_ops",{}),dx(this,"stream_ops",{}),dx(this,"readMode",365),dx(this,"writeMode",146),dx(this,"mounted",null),i||(i=this),this.parent=i,this.mount=i.mount,this.id=o.nextInode++,this.name=v,this.mode=B,this.rdev=u,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(i){i?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(i){i?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(i,v={}){if(!i)throw new o.ErrnoError(44);v.follow_mount??(v.follow_mount=!0),l0.isAbs(i)||(i=o.cwd()+"/"+i);x:for(var B=0;B<40;B++){for(var u=i.split("/").filter(_0=>!!_0),m=o.root,w="/",I=0;I<u.length;I++){var K=I===u.length-1;if(K&&v.parent)break;if(u[I]!=="."){if(u[I]===".."){if(w=l0.dirname(w),o.isRoot(m)){i=w+"/"+u.slice(I+1).join("/"),B--;continue x}else m=m.parent;continue}w=l0.join2(w,u[I]);try{m=o.lookupNode(m,u[I])}catch(_0){if(_0?.errno===44&&K&&v.noent_okay)return{path:w};throw _0}if(o.isMountpoint(m)&&(!K||v.follow_mount)&&(m=m.mounted.root),o.isLink(m.mode)&&(!K||v.follow)){if(!m.node_ops.readlink)throw new o.ErrnoError(52);var o0=m.node_ops.readlink(m);l0.isAbs(o0)||(o0=l0.dirname(w)+"/"+o0),i=o0+"/"+u.slice(I+1).join("/");continue x}}}return{path:w,node:m}}throw new o.ErrnoError(32)},getPath(i){for(var v;;){if(o.isRoot(i)){var B=i.mount.mountpoint;return v?B[B.length-1]!=="/"?`${B}/${v}`:B+v:B}v=v?`${i.name}/${v}`:i.name,i=i.parent}},hashName(i,v){for(var B=0,u=0;u<v.length;u++)B=(B<<5)-B+v.charCodeAt(u)|0;return(i+B>>>0)%o.nameTable.length},hashAddNode(i){var v=o.hashName(i.parent.id,i.name);i.name_next=o.nameTable[v],o.nameTable[v]=i},hashRemoveNode(i){var v=o.hashName(i.parent.id,i.name);if(o.nameTable[v]===i)o.nameTable[v]=i.name_next;else for(var B=o.nameTable[v];B;){if(B.name_next===i){B.name_next=i.name_next;break}B=B.name_next}},lookupNode(i,v){var B=o.mayLookup(i);if(B)throw new o.ErrnoError(B);for(var u=o.hashName(i.id,v),m=o.nameTable[u];m;m=m.name_next){var w=m.name;if(m.parent.id===i.id&&w===v)return m}return o.lookup(i,v)},createNode(i,v,B,u){var m=new o.FSNode(i,v,B,u);return o.hashAddNode(m),m},destroyNode(i){o.hashRemoveNode(i)},isRoot(i){return i===i.parent},isMountpoint(i){return!!i.mounted},isFile(i){return(i&61440)===32768},isDir(i){return(i&61440)===16384},isLink(i){return(i&61440)===40960},isChrdev(i){return(i&61440)===8192},isBlkdev(i){return(i&61440)===24576},isFIFO(i){return(i&61440)===4096},isSocket(i){return(i&49152)===49152},flagsToPermissionString(i){var v=["r","w","rw"][i&3];return i&512&&(v+="w"),v},nodePermissions(i,v){return o.ignorePermissions?0:v.includes("r")&&!(i.mode&292)||v.includes("w")&&!(i.mode&146)||v.includes("x")&&!(i.mode&73)?2:0},mayLookup(i){if(!o.isDir(i.mode))return 54;var v=o.nodePermissions(i,"x");return v||(i.node_ops.lookup?0:2)},mayCreate(i,v){if(!o.isDir(i.mode))return 54;try{var B=o.lookupNode(i,v);return 20}catch{}return o.nodePermissions(i,"wx")},mayDelete(i,v,B){var u;try{u=o.lookupNode(i,v)}catch(w){return w.errno}var m=o.nodePermissions(i,"wx");if(m)return m;if(B){if(!o.isDir(u.mode))return 54;if(o.isRoot(u)||o.getPath(u)===o.cwd())return 10}else if(o.isDir(u.mode))return 31;return 0},mayOpen(i,v){if(!i)return 44;if(o.isLink(i.mode))return 32;var B=o.flagsToPermissionString(v);return o.isDir(i.mode)&&(B!=="r"||v&576)?31:o.nodePermissions(i,B)},checkOpExists(i,v){if(!i)throw new o.ErrnoError(v);return i},MAX_OPEN_FDS:4096,nextfd(){for(var i=0;i<=o.MAX_OPEN_FDS;i++)if(!o.streams[i])return i;throw new o.ErrnoError(33)},getStreamChecked(i){var v=o.getStream(i);if(!v)throw new o.ErrnoError(8);return v},getStream:i=>o.streams[i],createStream(i,v=-1){return i=Object.assign(new o.FSStream,i),v==-1&&(v=o.nextfd()),i.fd=v,o.streams[v]=i,i},closeStream(i){o.streams[i]=null},dupStream(i,v=-1){var B=o.createStream(i,v);return B.stream_ops?.dup?.(B),B},doSetAttr(i,v,B){var u=i?.stream_ops.setattr,m=u?i:v;u??(u=v.node_ops.setattr),o.checkOpExists(u,63);try{u(m,B)}catch(w){throw w instanceof RangeError?new o.ErrnoError(22):w}},chrdev_stream_ops:{open(i){var v=o.getDevice(i.node.rdev);i.stream_ops=v.stream_ops,i.stream_ops.open?.(i)},llseek(){throw new o.ErrnoError(70)}},major:i=>i>>8,minor:i=>i&255,makedev:(i,v)=>i<<8|v,registerDevice(i,v){o.devices[i]={stream_ops:v}},getDevice:i=>o.devices[i],getMounts(i){for(var v=[],B=[i];B.length;){var u=B.pop();v.push(u),B.push(...u.mounts)}return v},syncfs(i,v){typeof i=="function"&&(v=i,i=!1),o.syncFSRequests++,o.syncFSRequests>1&&L(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var B=o.getMounts(o.root.mount),u=0;function m(K){return o.syncFSRequests--,v(K)}function w(K){if(K)return w.errored?void 0:(w.errored=!0,m(K));++u>=B.length&&m(null)}for(var I of B)I.type.syncfs?I.type.syncfs(I,i,w):w(null)},mount(i,v,B){var u=B==="/",m=!B,w;if(u&&o.root)throw new o.ErrnoError(10);if(!u&&!m){var I=o.lookupPath(B,{follow_mount:!1});if(B=I.path,w=I.node,o.isMountpoint(w))throw new o.ErrnoError(10);if(!o.isDir(w.mode))throw new o.ErrnoError(54)}var K={type:i,opts:v,mountpoint:B,mounts:[]},o0=i.mount(K);return o0.mount=K,K.root=o0,u?o.root=o0:w&&(w.mounted=K,w.mount&&w.mount.mounts.push(K)),o0},unmount(i){var v=o.lookupPath(i,{follow_mount:!1});if(!o.isMountpoint(v.node))throw new o.ErrnoError(28);var B=v.node,u=B.mounted,m=o.getMounts(u);for(var[w,I]of Object.entries(o.nameTable))for(;I;){var K=I.name_next;m.includes(I.mount)&&o.destroyNode(I),I=K}B.mounted=null;var o0=B.mount.mounts.indexOf(u);B.mount.mounts.splice(o0,1)},lookup(i,v){return i.node_ops.lookup(i,v)},mknod(i,v,B){var u=o.lookupPath(i,{parent:!0}),m=u.node,w=l0.basename(i);if(!w)throw new o.ErrnoError(28);if(w==="."||w==="..")throw new o.ErrnoError(20);var I=o.mayCreate(m,w);if(I)throw new o.ErrnoError(I);if(!m.node_ops.mknod)throw new o.ErrnoError(63);return m.node_ops.mknod(m,w,v,B)},statfs(i){return o.statfsNode(o.lookupPath(i,{follow:!0}).node)},statfsStream(i){return o.statfsNode(i.node)},statfsNode(i){var v={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return i.node_ops.statfs&&Object.assign(v,i.node_ops.statfs(i.mount.opts.root)),v},create(i,v=438){return v&=4095,v|=32768,o.mknod(i,v,0)},mkdir(i,v=511){return v&=1023,v|=16384,o.mknod(i,v,0)},mkdirTree(i,v){var B=i.split("/"),u="";for(var m of B)if(m){(u||l0.isAbs(i))&&(u+="/"),u+=m;try{o.mkdir(u,v)}catch(w){if(w.errno!=20)throw w}}},mkdev(i,v,B){return typeof B>"u"&&(B=v,v=438),v|=8192,o.mknod(i,v,B)},symlink(i,v){if(!fx.resolve(i))throw new o.ErrnoError(44);var B=o.lookupPath(v,{parent:!0}),u=B.node;if(!u)throw new o.ErrnoError(44);var m=l0.basename(v),w=o.mayCreate(u,m);if(w)throw new o.ErrnoError(w);if(!u.node_ops.symlink)throw new o.ErrnoError(63);return u.node_ops.symlink(u,m,i)},rename(i,v){var B=l0.dirname(i),u=l0.dirname(v),m=l0.basename(i),w=l0.basename(v),I,K,o0;if(I=o.lookupPath(i,{parent:!0}),K=I.node,I=o.lookupPath(v,{parent:!0}),o0=I.node,!K||!o0)throw new o.ErrnoError(44);if(K.mount!==o0.mount)throw new o.ErrnoError(75);var _0=o.lookupNode(K,m),X0=fx.relative(i,u);if(X0.charAt(0)!==".")throw new o.ErrnoError(28);if(X0=fx.relative(v,B),X0.charAt(0)!==".")throw new o.ErrnoError(55);var L0;try{L0=o.lookupNode(o0,w)}catch{}if(_0!==L0){var T0=o.isDir(_0.mode),h0=o.mayDelete(K,m,T0);if(h0)throw new o.ErrnoError(h0);if(h0=L0?o.mayDelete(o0,w,T0):o.mayCreate(o0,w),h0)throw new o.ErrnoError(h0);if(!K.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(_0)||L0&&o.isMountpoint(L0))throw new o.ErrnoError(10);if(o0!==K&&(h0=o.nodePermissions(K,"w"),h0))throw new o.ErrnoError(h0);o.hashRemoveNode(_0);try{K.node_ops.rename(_0,o0,w),_0.parent=o0}catch(vx){throw vx}finally{o.hashAddNode(_0)}}},rmdir(i){var v=o.lookupPath(i,{parent:!0}),B=v.node,u=l0.basename(i),m=o.lookupNode(B,u),w=o.mayDelete(B,u,!0);if(w)throw new o.ErrnoError(w);if(!B.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(m))throw new o.ErrnoError(10);B.node_ops.rmdir(B,u),o.destroyNode(m)},readdir(i){var v=o.lookupPath(i,{follow:!0}),B=v.node,u=o.checkOpExists(B.node_ops.readdir,54);return u(B)},unlink(i){var v=o.lookupPath(i,{parent:!0}),B=v.node;if(!B)throw new o.ErrnoError(44);var u=l0.basename(i),m=o.lookupNode(B,u),w=o.mayDelete(B,u,!1);if(w)throw new o.ErrnoError(w);if(!B.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(m))throw new o.ErrnoError(10);B.node_ops.unlink(B,u),o.destroyNode(m)},readlink(i){var v=o.lookupPath(i),B=v.node;if(!B)throw new o.ErrnoError(44);if(!B.node_ops.readlink)throw new o.ErrnoError(28);return B.node_ops.readlink(B)},stat(i,v){var B=o.lookupPath(i,{follow:!v}),u=B.node,m=o.checkOpExists(u.node_ops.getattr,63);return m(u)},fstat(i){var v=o.getStreamChecked(i),B=v.node,u=v.stream_ops.getattr,m=u?v:B;return u??(u=B.node_ops.getattr),o.checkOpExists(u,63),u(m)},lstat(i){return o.stat(i,!0)},doChmod(i,v,B,u){o.doSetAttr(i,v,{mode:B&4095|v.mode&-4096,ctime:Date.now(),dontFollow:u})},chmod(i,v,B){var u;if(typeof i=="string"){var m=o.lookupPath(i,{follow:!B});u=m.node}else u=i;o.doChmod(null,u,v,B)},lchmod(i,v){o.chmod(i,v,!0)},fchmod(i,v){var B=o.getStreamChecked(i);o.doChmod(B,B.node,v,!1)},doChown(i,v,B){o.doSetAttr(i,v,{timestamp:Date.now(),dontFollow:B})},chown(i,v,B,u){var m;if(typeof i=="string"){var w=o.lookupPath(i,{follow:!u});m=w.node}else m=i;o.doChown(null,m,u)},lchown(i,v,B){o.chown(i,v,B,!0)},fchown(i,v,B){var u=o.getStreamChecked(i);o.doChown(u,u.node,!1)},doTruncate(i,v,B){if(o.isDir(v.mode))throw new o.ErrnoError(31);if(!o.isFile(v.mode))throw new o.ErrnoError(28);var u=o.nodePermissions(v,"w");if(u)throw new o.ErrnoError(u);o.doSetAttr(i,v,{size:B,timestamp:Date.now()})},truncate(i,v){if(v<0)throw new o.ErrnoError(28);var B;if(typeof i=="string"){var u=o.lookupPath(i,{follow:!0});B=u.node}else B=i;o.doTruncate(null,B,v)},ftruncate(i,v){var B=o.getStreamChecked(i);if(v<0||(B.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(B,B.node,v)},utime(i,v,B){var u=o.lookupPath(i,{follow:!0}),m=u.node,w=o.checkOpExists(m.node_ops.setattr,63);w(m,{atime:v,mtime:B})},open(i,v,B=438){if(i==="")throw new o.ErrnoError(44);v=SA(v),v&64?B=B&4095|32768:B=0;var u,m;if(typeof i=="object")u=i;else{m=i.endsWith("/");var w=o.lookupPath(i,{follow:!(v&131072),noent_okay:!0});u=w.node,i=w.path}var I=!1;if(v&64)if(u){if(v&128)throw new o.ErrnoError(20)}else{if(m)throw new o.ErrnoError(31);u=o.mknod(i,B|511,0),I=!0}if(!u)throw new o.ErrnoError(44);if(o.isChrdev(u.mode)&&(v&=-513),v&65536&&!o.isDir(u.mode))throw new o.ErrnoError(54);if(!I){var K=o.mayOpen(u,v);if(K)throw new o.ErrnoError(K)}v&512&&!I&&o.truncate(u,0),v&=-131713;var o0=o.createStream({node:u,path:o.getPath(u),flags:v,seekable:!0,position:0,stream_ops:u.stream_ops,ungotten:[],error:!1});return o0.stream_ops.open&&o0.stream_ops.open(o0),I&&o.chmod(u,B&511),o0},close(i){if(o.isClosed(i))throw new o.ErrnoError(8);i.getdents&&(i.getdents=null);try{i.stream_ops.close&&i.stream_ops.close(i)}catch(v){throw v}finally{o.closeStream(i.fd)}i.fd=null},isClosed(i){return i.fd===null},llseek(i,v,B){if(o.isClosed(i))throw new o.ErrnoError(8);if(!i.seekable||!i.stream_ops.llseek)throw new o.ErrnoError(70);if(B!=0&&B!=1&&B!=2)throw new o.ErrnoError(28);return i.position=i.stream_ops.llseek(i,v,B),i.ungotten=[],i.position},read(i,v,B,u,m){if(u<0||m<0)throw new o.ErrnoError(28);if(o.isClosed(i))throw new o.ErrnoError(8);if((i.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(i.node.mode))throw new o.ErrnoError(31);if(!i.stream_ops.read)throw new o.ErrnoError(28);var w=typeof m<"u";if(!w)m=i.position;else if(!i.seekable)throw new o.ErrnoError(70);var I=i.stream_ops.read(i,v,B,u,m);return w||(i.position+=I),I},write(i,v,B,u,m,w){if(u<0||m<0)throw new o.ErrnoError(28);if(o.isClosed(i))throw new o.ErrnoError(8);if((i.flags&2097155)===0)throw new o.ErrnoError(8);if(o.isDir(i.node.mode))throw new o.ErrnoError(31);if(!i.stream_ops.write)throw new o.ErrnoError(28);i.seekable&&i.flags&1024&&o.llseek(i,0,2);var I=typeof m<"u";if(!I)m=i.position;else if(!i.seekable)throw new o.ErrnoError(70);var K=i.stream_ops.write(i,v,B,u,m,w);return I||(i.position+=K),K},mmap(i,v,B,u,m){if((u&2)!==0&&(m&2)===0&&(i.flags&2097155)!==2)throw new o.ErrnoError(2);if((i.flags&2097155)===1)throw new o.ErrnoError(2);if(!i.stream_ops.mmap)throw new o.ErrnoError(43);if(!v)throw new o.ErrnoError(28);return i.stream_ops.mmap(i,v,B,u,m)},msync(i,v,B,u,m){return i.stream_ops.msync?i.stream_ops.msync(i,v,B,u,m):0},ioctl(i,v,B){if(!i.stream_ops.ioctl)throw new o.ErrnoError(59);return i.stream_ops.ioctl(i,v,B)},readFile(i,v={}){v.flags=v.flags||0,v.encoding=v.encoding||"binary",v.encoding!=="utf8"&&v.encoding!=="binary"&&d0(`Invalid encoding type "${v.encoding}"`);var B=o.open(i,v.flags),u=o.stat(i),m=u.size,w=new Uint8Array(m);return o.read(B,w,0,m,0),v.encoding==="utf8"&&(w=lA(w)),o.close(B),w},writeFile(i,v,B={}){B.flags=B.flags||577;var u=o.open(i,B.flags,B.mode);v=Kx(v),o.write(u,v,0,v.byteLength,void 0,B.canOwn),o.close(u)},cwd:()=>o.currentPath,chdir(i){var v=o.lookupPath(i,{follow:!0});if(v.node===null)throw new o.ErrnoError(44);if(!o.isDir(v.node.mode))throw new o.ErrnoError(54);var B=o.nodePermissions(v.node,"x");if(B)throw new o.ErrnoError(B);o.currentPath=v.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(u,m,w,I,K)=>I,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),xx.register(o.makedev(5,0),xx.default_tty_ops),xx.register(o.makedev(6,0),xx.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var i=new Uint8Array(1024),v=0,B=()=>(v===0&&(je(i),v=i.byteLength),i[--v]);o.createDevice("/dev","random",B),o.createDevice("/dev","urandom",B),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var i=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var v=o.createNode(i,"fd",16895,73);return v.stream_ops={llseek:t0.stream_ops.llseek},v.node_ops={lookup(B,u){var m=+u,w=o.getStreamChecked(m),I={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>w.path},id:m+1};return I.parent=I,I},readdir(){return Array.from(o.streams.entries()).filter(([B,u])=>u).map(([B,u])=>B.toString())}},v}},{},"/proc/self/fd")},createStandardStreams(i,v,B){i?o.createDevice("/dev","stdin",i):o.symlink("/dev/tty","/dev/stdin"),v?o.createDevice("/dev","stdout",null,v):o.symlink("/dev/tty","/dev/stdout"),B?o.createDevice("/dev","stderr",null,B):o.symlink("/dev/tty1","/dev/stderr");var u=o.open("/dev/stdin",0),m=o.open("/dev/stdout",1),w=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(t0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:t0,PROXYFS:y0}},init(i,v,B){o.initialized=!0,i??(i=n.stdin),v??(v=n.stdout),B??(B=n.stderr),o.createStandardStreams(i,v,B)},quit(){o.initialized=!1,b(0);for(var i of o.streams)i&&o.close(i)},findObject(i,v){var B=o.analyzePath(i,v);return B.exists?B.object:null},analyzePath(i,v){try{var B=o.lookupPath(i,{follow:!v});i=B.path}catch{}var u={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var B=o.lookupPath(i,{parent:!0});u.parentExists=!0,u.parentPath=B.path,u.parentObject=B.node,u.name=l0.basename(i),B=o.lookupPath(i,{follow:!v}),u.exists=!0,u.path=B.path,u.object=B.node,u.name=B.node.name,u.isRoot=B.path==="/"}catch(m){u.error=m.errno}return u},createPath(i,v,B,u){i=typeof i=="string"?i:o.getPath(i);for(var m=v.split("/").reverse();m.length;){var w=m.pop();if(w){var I=l0.join2(i,w);try{o.mkdir(I)}catch(K){if(K.errno!=20)throw K}i=I}}return I},createFile(i,v,B,u,m){var w=l0.join2(typeof i=="string"?i:o.getPath(i),v),I=tA(u,m);return o.create(w,I)},createDataFile(i,v,B,u,m,w){var I=v;i&&(i=typeof i=="string"?i:o.getPath(i),I=v?l0.join2(i,v):i);var K=tA(u,m),o0=o.create(I,K);if(B){B=Kx(B),o.chmod(o0,K|146);var _0=o.open(o0,577);o.write(_0,B,0,B.length,0,w),o.close(_0),o.chmod(o0,K)}},createDevice(i,v,B,u){var m,w=l0.join2(typeof i=="string"?i:o.getPath(i),v),I=tA(!!B,!!u);(m=o.createDevice).major??(m.major=64);var K=o.makedev(o.createDevice.major++,0);return o.registerDevice(K,{open(o0){o0.seekable=!1},close(o0){u?.buffer?.length&&u(10)},read(o0,_0,X0,L0,T0){for(var h0=0,vx=0;vx<L0;vx++){var gx;try{gx=B()}catch{throw new o.ErrnoError(29)}if(gx===void 0&&h0===0)throw new o.ErrnoError(6);if(gx==null)break;h0++,_0[X0+vx]=gx}return h0&&(o0.node.atime=Date.now()),h0},write(o0,_0,X0,L0,T0){for(var h0=0;h0<L0;h0++)try{u(_0[X0+h0])}catch{throw new o.ErrnoError(29)}return L0&&(o0.node.mtime=o0.node.ctime=Date.now()),h0}}),o.mkdev(w,I,K)},forceLoadFile(i){if(i.isDevice||i.isFolder||i.link||i.contents)return!0;if(globalThis.XMLHttpRequest)d0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{i.contents=S(i.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(i,v,B,u,m){class w{constructor(){dx(this,"lengthKnown",!1),dx(this,"chunks",[])}get(T0){if(!(T0>this.length-1||T0<0)){var h0=T0%this.chunkSize,vx=T0/this.chunkSize|0;return this.getter(vx)[h0]}}setDataGetter(T0){this.getter=T0}cacheLength(){var T0=new XMLHttpRequest;T0.open("HEAD",B,!1),T0.send(null),T0.status>=200&&T0.status<300||T0.status===304||d0("Couldn't load "+B+". Status: "+T0.status);var h0=Number(T0.getResponseHeader("Content-length")),vx,gx=(vx=T0.getResponseHeader("Accept-Ranges"))&&vx==="bytes",Ox=(vx=T0.getResponseHeader("Content-Encoding"))&&vx==="gzip",Jx=1024*1024;gx||(Jx=h0);var Vx=(nA,le)=>{nA>le&&d0("invalid range ("+nA+", "+le+") or no bytes requested!"),le>h0-1&&d0("only "+h0+" bytes available! programmer error!");var bx=new XMLHttpRequest;return bx.open("GET",B,!1),h0!==Jx&&bx.setRequestHeader("Range","bytes="+nA+"-"+le),bx.responseType="arraybuffer",bx.overrideMimeType&&bx.overrideMimeType("text/plain; charset=x-user-defined"),bx.send(null),bx.status>=200&&bx.status<300||bx.status===304||d0("Couldn't load "+B+". Status: "+bx.status),bx.response!==void 0?new Uint8Array(bx.response||[]):HA(bx.responseText||"",!0)},qe=this;qe.setDataGetter(nA=>{var le=nA*Jx,bx=(nA+1)*Jx-1;return bx=Math.min(bx,h0-1),typeof qe.chunks[nA]>"u"&&(qe.chunks[nA]=Vx(le,bx)),typeof qe.chunks[nA]>"u"&&d0("doXHR failed!"),qe.chunks[nA]}),(Ox||!h0)&&(Jx=h0=1,h0=this.getter(0).length,Jx=h0,N("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=h0,this._chunkSize=Jx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){f||d0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var I=new w,K={isDevice:!1,contents:I}}else var K={isDevice:!1,url:B};var o0=o.createFile(i,v,K,u,m);K.contents?o0.contents=K.contents:K.url&&(o0.contents=null,o0.url=K.url),Object.defineProperties(o0,{usedBytes:{get:function(){return this.contents.length}}});var _0={};for(let[L0,T0]of Object.entries(o0.stream_ops))_0[L0]=(...h0)=>(o.forceLoadFile(o0),T0(...h0));function X0(L0,T0,h0,vx,gx){var Ox=L0.node.contents;if(gx>=Ox.length)return 0;var Jx=Math.min(Ox.length-gx,vx);if(Ox.slice)for(var Vx=0;Vx<Jx;Vx++)T0[h0+Vx]=Ox[gx+Vx];else for(var Vx=0;Vx<Jx;Vx++)T0[h0+Vx]=Ox.get(gx+Vx);return Jx}return _0.read=(L0,T0,h0,vx,gx)=>(o.forceLoadFile(o0),X0(L0,T0,h0,vx,gx)),_0.mmap=(L0,T0,h0,vx,gx)=>{o.forceLoadFile(o0);var Ox=wA(T0);if(!Ox)throw new o.ErrnoError(48);return X0(L0,ix,Ox,T0,h0),{ptr:Ox,allocated:!0}},o0.stream_ops=_0,o0}},k0={currentUmask:18,calculateAt(i,v,B){if(l0.isAbs(v))return v;var u;if(i===-100)u=o.cwd();else{var m=k0.getStreamFromFD(i);u=m.path}if(v.length==0){if(!B)throw new o.ErrnoError(44);return u}return u+"/"+v},writeStat(i,v){f0[i>>2]=v.dev,f0[i+4>>2]=v.mode,f0[i+8>>2]=v.nlink,f0[i+12>>2]=v.uid,f0[i+16>>2]=v.gid,f0[i+20>>2]=v.rdev,H0[i+24>>3]=BigInt(v.size),O0[i+32>>2]=4096,O0[i+36>>2]=v.blocks;var B=v.atime.getTime(),u=v.mtime.getTime(),m=v.ctime.getTime();return H0[i+40>>3]=BigInt(Math.floor(B/1e3)),f0[i+48>>2]=B%1e3*1e3*1e3,H0[i+56>>3]=BigInt(Math.floor(u/1e3)),f0[i+64>>2]=u%1e3*1e3*1e3,H0[i+72>>3]=BigInt(Math.floor(m/1e3)),f0[i+80>>2]=m%1e3*1e3*1e3,H0[i+88>>3]=BigInt(v.ino),0},writeStatFs(i,v){f0[i+4>>2]=v.bsize,f0[i+60>>2]=v.bsize,H0[i+8>>3]=BigInt(v.blocks),H0[i+16>>3]=BigInt(v.bfree),H0[i+24>>3]=BigInt(v.bavail),H0[i+32>>3]=BigInt(v.files),H0[i+40>>3]=BigInt(v.ffree),f0[i+48>>2]=v.fsid,f0[i+64>>2]=v.flags,f0[i+56>>2]=v.namelen},doMsync(i,v,B,u,m){if(!o.isFile(v.node.mode))throw new o.ErrnoError(43);if(u&2)return 0;var w=AA.slice(i,i+B);o.msync(v,w,m,B,u)},getStreamFromFD(i){var v=o.getStreamChecked(i);return v},varargs:void 0,getStr(i){var v=rA(i);return v}};function ke(i,v,B,u){try{if(v=k0.getStr(v),v=k0.calculateAt(i,v),B&-8)return-28;var m=o.lookupPath(v,{follow:!0}),w=m.node;if(!w)return-44;var I="";return B&4&&(I+="r"),B&2&&(I+="w"),B&1&&(I+="x"),I&&o.nodePermissions(w,I)?-2:0}catch(K){if(typeof o>"u"||K.name!=="ErrnoError")throw K;return-K.errno}}var qA=()=>{var i=O0[+k0.varargs>>2];return k0.varargs+=4,i},CA=qA;function Pr(i,v,B){k0.varargs=B;try{var u=k0.getStreamFromFD(i);switch(v){case 0:{var m=qA();if(m<0)return-28;for(;o.streams[m];)m++;var w;return w=o.dupStream(u,m),w.fd}case 1:case 2:return 0;case 3:return u.flags;case 4:{var m=qA(),I=289792;return u.flags=u.flags&~I|m&I,0}case 12:{var m=CA(),K=0;return U0[m+K>>1]=2,0}case 13:case 14:return 0}return-28}catch(o0){if(typeof o>"u"||o0.name!=="ErrnoError")throw o0;return-o0.errno}}var oe=(i,v,B)=>he(i,AA,v,B);function Qe(i,v){try{if(v===0)return-28;var B=o.cwd(),u=UA(B)+1;return v<u?-68:(oe(B,i,v),u)}catch(m){if(typeof o>"u"||m.name!=="ErrnoError")throw m;return-m.errno}}function Ze(i,v,B){k0.varargs=B;try{var u=k0.getStreamFromFD(i);switch(v){case 21509:return u.tty?0:-59;case 21505:{if(!u.tty)return-59;if(u.tty.ops.ioctl_tcgets){var m=u.tty.ops.ioctl_tcgets(u),w=CA();O0[w>>2]=m.c_iflag||0,O0[w+4>>2]=m.c_oflag||0,O0[w+8>>2]=m.c_cflag||0,O0[w+12>>2]=m.c_lflag||0;for(var I=0;I<32;I++)ix[w+I+17]=m.c_cc[I]||0;return 0}return 0}case 21510:case 21511:case 21512:return u.tty?0:-59;case 21506:case 21507:case 21508:{if(!u.tty)return-59;if(u.tty.ops.ioctl_tcsets){for(var w=CA(),K=O0[w>>2],o0=O0[w+4>>2],_0=O0[w+8>>2],X0=O0[w+12>>2],L0=[],I=0;I<32;I++)L0.push(ix[w+I+17]);return u.tty.ops.ioctl_tcsets(u.tty,v,{c_iflag:K,c_oflag:o0,c_cflag:_0,c_lflag:X0,c_cc:L0})}return 0}case 21519:{if(!u.tty)return-59;var w=CA();return O0[w>>2]=0,0}case 21520:return u.tty?-28:-59;case 21537:case 21531:{var w=CA();return o.ioctl(u,v,w)}case 21523:{if(!u.tty)return-59;if(u.tty.ops.ioctl_tiocgwinsz){var T0=u.tty.ops.ioctl_tiocgwinsz(u.tty),w=CA();U0[w>>1]=T0[0],U0[w+2>>1]=T0[1]}return 0}case 21524:return u.tty?0:-59;case 21515:return u.tty?0:-59;default:return-28}}catch(h0){if(typeof o>"u"||h0.name!=="ErrnoError")throw h0;return-h0.errno}}function Tr(i,v,B,u){k0.varargs=u;try{v=k0.getStr(v),v=k0.calculateAt(i,v);var m=u?qA():0;return B&64&&(m&=~k0.currentUmask),o.open(v,B,m).fd}catch(w){if(typeof o>"u"||w.name!=="ErrnoError")throw w;return-w.errno}}function Nr(i,v,B,u){try{if(v=k0.getStr(v),v=k0.calculateAt(i,v),u<=0)return-28;var m=o.readlink(v),w=Math.min(u,UA(m)),I=ix[B+w];return oe(m,B,u+1),ix[B+w]=I,w}catch(K){if(typeof o>"u"||K.name!=="ErrnoError")throw K;return-K.errno}}function Ir(i,v,B,u){try{return v=k0.getStr(v),u=k0.getStr(u),v=k0.calculateAt(i,v),u=k0.calculateAt(B,u),o.rename(v,u),0}catch(m){if(typeof o>"u"||m.name!=="ErrnoError")throw m;return-m.errno}}function Fe(i){try{return i=k0.getStr(i),o.rmdir(i),0}catch(v){if(typeof o>"u"||v.name!=="ErrnoError")throw v;return-v.errno}}function xr(i,v,B){try{if(v=k0.getStr(v),v=k0.calculateAt(i,v),!B)o.unlink(v);else if(B===512)o.rmdir(v);else return-28;return 0}catch(u){if(typeof o>"u"||u.name!=="ErrnoError")throw u;return-u.errno}}var zA=()=>{throw new Y},ve=()=>performance.now(),Mr=()=>Date.now(),Ar=1,Lr=i=>i>=0&&i<=3,KA=9007199254740992,_e=-9007199254740992,er=i=>i<_e||i>KA?NaN:Number(i);function rr(i,v,B){if(v=er(v),!Lr(i))return 28;var u;if(i===0)u=Mr();else if(Ar)u=ve();else return 52;var m=Math.round(u*1e3*1e3);return H0[B>>3]=BigInt(m),0}var Rr=()=>2147483648,tr=(i,v)=>Math.ceil(i/v)*v,Or=i=>{var v=N0.buffer.byteLength,B=(i-v+65535)/65536|0;try{return N0.grow(B),Z(),1}catch{}},Gr=i=>{var v=AA.length;i>>>=0;var B=Rr();if(i>B)return!1;for(var u=1;u<=4;u*=2){var m=v*(1+.2/u);m=Math.min(m,i+100663296);var w=Math.min(B,tr(Math.max(i,m),65536)),I=Or(w);if(I)return!0}return!1};function fe(i){try{var v=k0.getStreamFromFD(i);return o.close(v),0}catch(B){if(typeof o>"u"||B.name!=="ErrnoError")throw B;return B.errno}}var Ur=(i,v,B,u)=>{for(var m=0,w=0;w<B;w++){var I=f0[v>>2],K=f0[v+4>>2];v+=8;var o0=o.read(i,ix,I,K,u);if(o0<0)return-1;if(m+=o0,o0<K)break;typeof u<"u"&&(u+=o0)}return m};function Hr(i,v,B,u){try{var m=k0.getStreamFromFD(i),w=Ur(m,v,B);return f0[u>>2]=w,0}catch(I){if(typeof o>"u"||I.name!=="ErrnoError")throw I;return I.errno}}function nr(i,v,B,u){v=er(v);try{if(isNaN(v))return 22;var m=k0.getStreamFromFD(i);return o.llseek(m,v,B),H0[u>>3]=BigInt(m.position),m.getdents&&v===0&&B===0&&(m.getdents=null),0}catch(w){if(typeof o>"u"||w.name!=="ErrnoError")throw w;return w.errno}}var sr=(i,v,B,u)=>{for(var m=0,w=0;w<B;w++){var I=f0[v>>2],K=f0[v+4>>2];v+=8;var o0=o.write(i,ix,I,K,u);if(o0<0)return-1;if(m+=o0,o0<K)break;typeof u<"u"&&(u+=o0)}return m};function JA(i,v,B,u){try{var m=k0.getStreamFromFD(i),w=sr(m,v,B);return f0[u>>2]=w,0}catch(I){if(typeof o>"u"||I.name!=="ErrnoError")throw I;return I.errno}}var ir=0,VA=()=>ie||ir>0,we=i=>{R=i,VA()||(n.onExit?.(i),s0=!0),j(i,new xA(i))},$x=(i,v)=>{R=i,VA()||v0(),we(i)},zr=i=>{if(i instanceof xA||i=="unwind")return R;j(1,i)},PA=i=>V(i),WA=i=>{var v=UA(i)+1,B=PA(v);return oe(i,B,v),B},Se=[],lx=i=>{var v=Se[i];return v||(Se[i]=v=S0.get(i)),v},Ee=(...i)=>o.createPath(...i),XA=(...i)=>o.unlink(...i),a=(...i)=>o.createLazyFile(...i),E=(...i)=>o.createDevice(...i);if(o.createPreloadedFile=qr,o.preloadFile=$A,o.staticInit(),n.noExitRuntime&&(ie=n.noExitRuntime),n.preloadPlugins&&(ae=n.preloadPlugins),n.print&&(N=n.print),n.printErr&&(L=n.printErr),n.wasmBinary&&(O=n.wasmBinary),n.arguments&&(D=n.arguments),n.thisProgram&&(p=n.thisProgram),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n.callMain=Dt,n.addRunDependency=Sx,n.removeRunDependency=ye,n.FS_preloadFile=$A,n.FS_unlink=XA,n.FS_createPath=Ee,n.FS_createDevice=E,n.FS=o,n.FS_createDataFile=ge,n.FS_createLazyFile=a,n.PROXYFS=y0;var d,b,y,$,G,V,a0,D0,z0,N0,S0;function m0(i){d=n._main=i.__main_argc_argv,b=i.fflush,y=i.__funcs_on_exit,$=i.setThrew,G=i._emscripten_stack_restore,V=i._emscripten_stack_alloc,a0=i.emscripten_stack_get_current,D0=N0=i.memory,z0=S0=i.__indirect_function_table}var Ax={__assert_fail:_A,__syscall_faccessat:ke,__syscall_fcntl64:Pr,__syscall_getcwd:Qe,__syscall_ioctl:Ze,__syscall_openat:Tr,__syscall_readlinkat:Nr,__syscall_renameat:Ir,__syscall_rmdir:Fe,__syscall_unlinkat:xr,_emscripten_throw_longjmp:zA,clock_time_get:rr,emscripten_resize_heap:Gr,fd_close:fe,fd_read:Hr,fd_seek:nr,fd_write:JA,invoke_i:YA,invoke_ii:Ix,invoke_iii:Mx,invoke_iiid:kn,invoke_iiii:Rx,invoke_iiiii:ax,invoke_iiiiii:_n,invoke_iijii:gn,invoke_v:px,invoke_vi:yn,invoke_vii:qx,invoke_viii:dt,invoke_viiii:dA,invoke_viiiii:Ct};function px(i){var v=g0();try{lx(i)()}catch(B){if(nx(v),!(B instanceof M))throw B;$(1,0)}}function qx(i,v,B){var u=g0();try{lx(i)(v,B)}catch(m){if(nx(u),!(m instanceof M))throw m;$(1,0)}}function Ix(i,v){var B=g0();try{return lx(i)(v)}catch(u){if(nx(B),!(u instanceof M))throw u;$(1,0)}}function Mx(i,v,B){var u=g0();try{return lx(i)(v,B)}catch(m){if(nx(u),!(m instanceof M))throw m;$(1,0)}}function YA(i){var v=g0();try{return lx(i)()}catch(B){if(nx(v),!(B instanceof M))throw B;$(1,0)}}function Rx(i,v,B,u){var m=g0();try{return lx(i)(v,B,u)}catch(w){if(nx(m),!(w instanceof M))throw w;$(1,0)}}function dA(i,v,B,u,m){var w=g0();try{lx(i)(v,B,u,m)}catch(I){if(nx(w),!(I instanceof M))throw I;$(1,0)}}function ax(i,v,B,u,m){var w=g0();try{return lx(i)(v,B,u,m)}catch(I){if(nx(w),!(I instanceof M))throw I;$(1,0)}}function Ct(i,v,B,u,m,w){var I=g0();try{lx(i)(v,B,u,m,w)}catch(K){if(nx(I),!(K instanceof M))throw K;$(1,0)}}function gn(i,v,B,u,m){var w=g0();try{return lx(i)(v,B,u,m)}catch(I){if(nx(w),!(I instanceof M))throw I;$(1,0)}}function yn(i,v){var B=g0();try{lx(i)(v)}catch(u){if(nx(B),!(u instanceof M))throw u;$(1,0)}}function dt(i,v,B,u){var m=g0();try{lx(i)(v,B,u)}catch(w){if(nx(m),!(w instanceof M))throw w;$(1,0)}}function kn(i,v,B,u){var m=g0();try{return lx(i)(v,B,u)}catch(w){if(nx(m),!(w instanceof M))throw w;$(1,0)}}function _n(i,v,B,u,m,w){var I=g0();try{return lx(i)(v,B,u,m,w)}catch(K){if(nx(I),!(K instanceof M))throw K;$(1,0)}}function Dt(i=[]){var v=d;i.unshift(p);var B=i.length,u=PA((B+1)*4),m=u;for(var w of i)f0[m>>2]=WA(w),m+=4;f0[m>>2]=0;try{var I=v(B,u);return $x(I,!0),I}catch(K){return zr(K)}}function Kr(i=D){if(Fx>0){b0=Kr;return}if(n0(),Fx>0){b0=Kr;return}function v(){if(n.calledRun=!0,!s0){U(),H?.(n),n.onRuntimeInitialized?.();var B=n.noInitialRun||!0;B||Dt(i),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),v()},1)):v()}var $e;return $e=await Z0(),Kr(),i0?s=n:s=new Promise((i,v)=>{H=i,z=v}),s}})();typeof A=="object"&&typeof x=="object"?(x.exports=e,x.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),qE=ga({"wasm/bin/pawndbg.js"(A,x){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s,n=t,F=!!globalThis.window,f=!!globalThis.WorkerGlobalScope,c=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",D=[],p="./this.program",j=(a,E)=>{throw E};typeof __filename<"u"?r=__filename:f&&(r=self.location.href);var _="",k,S;if(c){var P=require("fs");_=__dirname+"/",S=a=>{a=g(a)?new URL(a):a;var E=P.readFileSync(a);return E},k=async(a,E=!0)=>{a=g(a)?new URL(a):a;var d=P.readFileSync(a,E?void 0:"utf8");return d},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),D=process.argv.slice(2),j=(a,E)=>{throw process.exitCode=a,E}}else if(F||f){try{_=new URL(".",r).href}catch{}f&&(S=a=>{var E=new XMLHttpRequest;return E.open("GET",a,!1),E.responseType="arraybuffer",E.send(null),new Uint8Array(E.response)}),k=async a=>{if(g(a))return new Promise((d,b)=>{var y=new XMLHttpRequest;y.open("GET",a,!0),y.responseType="arraybuffer",y.onload=()=>{if(y.status==200||y.status==0&&y.response){d(y.response);return}b(y.status)},y.onerror=b,y.send(null)});var E=await fetch(a,{credentials:"same-origin"});if(E.ok)return E.arrayBuffer();throw new Error(E.status+" : "+E.url)}}var N=console.log.bind(console),L=console.error.bind(console),O,s0=!1,R,g=a=>a.startsWith("file://");class M{}class Y extends M{}function W(a){for(var E=0,d=a.length,b=new Uint8Array(d),y;E<d;++E)y=a.charCodeAt(E),b[E]=~y>>8&y;return b}var H,z,i0=!1,r0=!1;function Z(){var a=PA.buffer;ix=new Int8Array(a),U0=new Int16Array(a),AA=new Uint8Array(a),_r=new Uint16Array(a),O0=new Int32Array(a),f0=new Uint32Array(a),yr=new Float32Array(a),kr=new Float64Array(a),H0=new BigInt64Array(a),wr=new BigUint64Array(a)}function n0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)Ye(n.preRun.shift());yA(zx)}function U(){i0=!0,!n.noFSInit&&!o.initialized&&o.init(),xx.init(),XA.__wasm_call_ctors(),o.ignorePermissions=!1}function F0(){}function v0(){sr(),o.quit(),xx.shutdown(),r0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)Xe(n.postRun.shift());yA(kA)}function d0(a){n.onAbort?.(a),a=`Aborted(${a})`,L(a),s0=!0,a+=". Build with -sASSERTIONS for more info.";var E=new WebAssembly.RuntimeError(a);throw z?.(E),E}var q0;function M0(){return W(`\0asm\0\0\0\xB4\`\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\x7F~~~~\0\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\0\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\0\`\0\0\`\0\x7F\`\x7F~~\x7F\0\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F~\x7F\x7F\x7F\`\x7F\x7F|\0\`\x7F~\0\`\x7F|\`\x7F~~~\0\`\x7F~\`|\x7F|\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F~\0\`~~~~\x7F\`~~~\x7F\`\x7F|\0\xFD env\r__assert_fail\0 env__syscall_openat\0env__syscall_fcntl64\0env__syscall_ioctl\0wasi_snapshot_preview1\bfd_write\0wasi_snapshot_preview1\x07fd_read\0wasi_snapshot_preview1\bfd_close\0\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\0VU
|
|
1161
|
+
\0A\xC0\x81\v\v0\xC0\0\0\x80!\0\`(`)}function vx(i){return i}async function zx(i){return i}async function yA(i,v){try{var c=await zx(i),u=await WebAssembly.instantiate(c,v);return u}catch(m){L(`failed to asynchronously prepare wasm: ${m}`),d0(m)}}async function kA(i,v,c){return yA(v,c)}function ax(){var i={env:rx,wasi_snapshot_preview1:rx};return i}async function Ax(){function i(w,M){return Ne=w.exports,m0(Ne),Z(),Ne}function v(w){return i(w.instance)}var c=ax();if(n.instantiateWasm)return new Promise((w,M)=>{n.instantiateWasm(c,(z,F0)=>{w(i(z,F0))})});q0??(q0=I0());var u=await kA(O,q0,c),m=v(u);return m}class xA{constructor(v){Dx(this,"name","ExitStatus"),this.message=`Program terminated with exit(${v})`,this.status=v}}var K0,O0,z0,ox,qr,Tr,Pr,E0,Nr,AA,_A=i=>{for(;i.length>0;)i.shift()(n)},wA=[],Ar=i=>wA.push(i),Jx=[],er=i=>Jx.push(i),ve=!1,ix=i=>G(i),g0=()=>o0(),eA=globalThis.TextDecoder&&new TextDecoder,px=(i,v,c,u)=>{var m=v+c;if(u)return m;for(;i[v]&&!(v>=m);)++v;return v},BA=(i,v=0,c,u)=>{var m=px(i,v,c,u);if(m-v>16&&i.buffer&&eA)return eA.decode(i.subarray(v,m));for(var w="";v<m;){var M=i[v++];if(!(M&128)){w+=String.fromCharCode(M);continue}var z=i[v++]&63;if((M&224)==192){w+=String.fromCharCode((M&31)<<6|z);continue}var F0=i[v++]&63;if((M&240)==224?M=(M&15)<<12|z<<6|F0:M=(M&7)<<18|z<<12|F0<<6|i[v++]&63,M<65536)w+=String.fromCharCode(M);else{var _0=M-65536;w+=String.fromCharCode(55296|_0>>10,56320|_0&1023)}}return w},rA=(i,v,c)=>i?BA(AA,i,v,c):"",SA=(i,v,c,u)=>d0(`Assertion failed: ${rA(i)}, at: `+[v?rA(v):"unknown filename",c,u?rA(u):"unknown function"]),l0={isAbs:i=>i.charAt(0)==="/",splitPath:i=>{var v=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return v.exec(i).slice(1)},normalizeArray:(i,v)=>{for(var c=0,u=i.length-1;u>=0;u--){var m=i[u];m==="."?i.splice(u,1):m===".."?(i.splice(u,1),c++):c&&(i.splice(u,1),c--)}if(v)for(;c;c--)i.unshift("..");return i},normalize:i=>{var v=l0.isAbs(i),c=i.slice(-1)==="/";return i=l0.normalizeArray(i.split("/").filter(u=>!!u),!v).join("/"),!i&&!v&&(i="."),i&&c&&(i+="/"),(v?"/":"")+i},dirname:i=>{var v=l0.splitPath(i),c=v[0],u=v[1];return!c&&!u?".":(u&&(u=u.slice(0,-1)),c+u)},basename:i=>i&&i.match(/([^\/]+|\/)\/*$/)[1],join:(...i)=>l0.normalize(i.join("/")),join2:(i,v)=>l0.normalize(i+"/"+v)},Mr=()=>{if(C){var i=require("crypto");return v=>i.randomFillSync(v)}return v=>(crypto.getRandomValues(v),0)},ke=i=>(ke=Mr())(i),lx={resolve:(...i)=>{for(var v="",c=!1,u=i.length-1;u>=-1&&!c;u--){var m=u>=0?i[u]:o.cwd();if(typeof m!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!m)return"";v=m+"/"+v,c=l0.isAbs(m)}return v=l0.normalizeArray(v.split("/").filter(w=>!!w),!c).join("/"),(c?"/":"")+v||"."},relative:(i,v)=>{i=lx.resolve(i).slice(1),v=lx.resolve(v).slice(1);function c(_0){for(var X0=0;X0<_0.length&&_0[X0]==="";X0++);for(var L0=_0.length-1;L0>=0&&_0[L0]==="";L0--);return X0>L0?[]:_0.slice(X0,L0-X0+1)}for(var u=c(i.split("/")),m=c(v.split("/")),w=Math.min(u.length,m.length),M=w,z=0;z<w;z++)if(u[z]!==m[z]){M=z;break}for(var F0=[],z=M;z<u.length;z++)F0.push("..");return F0=F0.concat(m.slice(M)),F0.join("/")}},Ox=[],JA=i=>{for(var v=0,c=0;c<i.length;++c){var u=i.charCodeAt(c);u<=127?v++:u<=2047?v+=2:u>=55296&&u<=57343?(v+=4,++c):v+=3}return v},_e=(i,v,c,u)=>{if(!(u>0))return 0;for(var m=c,w=c+u-1,M=0;M<i.length;++M){var z=i.codePointAt(M);if(z<=127){if(c>=w)break;v[c++]=z}else if(z<=2047){if(c+1>=w)break;v[c++]=192|z>>6,v[c++]=128|z&63}else if(z<=65535){if(c+2>=w)break;v[c++]=224|z>>12,v[c++]=128|z>>6&63,v[c++]=128|z&63}else{if(c+3>=w)break;v[c++]=240|z>>18,v[c++]=128|z>>12&63,v[c++]=128|z>>6&63,v[c++]=128|z&63,M++}}return v[c]=0,c-m},VA=(i,v,c)=>{var u=c>0?c:JA(i)+1,m=new Array(u),w=_e(i,m,0,m.length);return v&&(m.length=w),m},Ir=()=>{if(!Ox.length){var i=null;if(C){var v=256,c=Buffer.alloc(v),u=0,m=process.stdin.fd;try{u=T.readSync(m,c,0,v)}catch(w){if(w.toString().includes("EOF"))u=0;else throw w}u>0&&(i=c.slice(0,u).toString("utf-8"))}else globalThis.window?.prompt&&(i=window.prompt("Input: "),i!==null&&(i+=`
|
|
1162
|
+
`));if(!i)return null;Ox=VA(i,!0)}return Ox.shift()},ex={ttys:[],init(){},shutdown(){},register(i,v){ex.ttys[i]={input:[],output:[],ops:v},o.registerDevice(i,ex.stream_ops)},stream_ops:{open(i){var v=ex.ttys[i.node.rdev];if(!v)throw new o.ErrnoError(43);i.tty=v,i.seekable=!1},close(i){i.tty.ops.fsync(i.tty)},fsync(i){i.tty.ops.fsync(i.tty)},read(i,v,c,u,m){if(!i.tty||!i.tty.ops.get_char)throw new o.ErrnoError(60);for(var w=0,M=0;M<u;M++){var z;try{z=i.tty.ops.get_char(i.tty)}catch{throw new o.ErrnoError(29)}if(z===void 0&&w===0)throw new o.ErrnoError(6);if(z==null)break;w++,v[c+M]=z}return w&&(i.node.atime=Date.now()),w},write(i,v,c,u,m){if(!i.tty||!i.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var w=0;w<u;w++)i.tty.ops.put_char(i.tty,v[c+w])}catch{throw new o.ErrnoError(29)}return u&&(i.node.mtime=i.node.ctime=Date.now()),w}},default_tty_ops:{get_char(i){return Ir()},put_char(i,v){v===null||v===10?(N(BA(i.output)),i.output=[]):v!=0&&i.output.push(v)},fsync(i){i.output?.length>0&&(N(BA(i.output)),i.output=[])},ioctl_tcgets(i){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(i,v,c){return 0},ioctl_tiocgwinsz(i){return[24,80]}},default_tty1_ops:{put_char(i,v){v===null||v===10?(L(BA(i.output)),i.output=[]):v!=0&&i.output.push(v)},fsync(i){i.output?.length>0&&(L(BA(i.output)),i.output=[])}}},$A=i=>{d0()},n0={ops_table:null,mount(i){return n0.createNode(null,"/",16895,0)},createNode(i,v,c,u){if(o.isBlkdev(c)||o.isFIFO(c))throw new o.ErrnoError(63);n0.ops_table||(n0.ops_table={dir:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr,lookup:n0.node_ops.lookup,mknod:n0.node_ops.mknod,rename:n0.node_ops.rename,unlink:n0.node_ops.unlink,rmdir:n0.node_ops.rmdir,readdir:n0.node_ops.readdir,symlink:n0.node_ops.symlink},stream:{llseek:n0.stream_ops.llseek}},file:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr},stream:{llseek:n0.stream_ops.llseek,read:n0.stream_ops.read,write:n0.stream_ops.write,mmap:n0.stream_ops.mmap,msync:n0.stream_ops.msync}},link:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr,readlink:n0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr},stream:o.chrdev_stream_ops}});var m=o.createNode(i,v,c,u);return o.isDir(m.mode)?(m.node_ops=n0.ops_table.dir.node,m.stream_ops=n0.ops_table.dir.stream,m.contents={}):o.isFile(m.mode)?(m.node_ops=n0.ops_table.file.node,m.stream_ops=n0.ops_table.file.stream,m.usedBytes=0,m.contents=n0.emptyFileContents??(n0.emptyFileContents=new Uint8Array(0))):o.isLink(m.mode)?(m.node_ops=n0.ops_table.link.node,m.stream_ops=n0.ops_table.link.stream):o.isChrdev(m.mode)&&(m.node_ops=n0.ops_table.chrdev.node,m.stream_ops=n0.ops_table.chrdev.stream),m.atime=m.mtime=m.ctime=Date.now(),i&&(i.contents[v]=m,i.atime=i.mtime=i.ctime=m.atime),m},getFileDataAsTypedArray(i){return i.contents.subarray(0,i.usedBytes)},expandFileStorage(i,v){var c=i.contents.length;if(!(c>=v)){var u=1024*1024;v=Math.max(v,c*(c<u?2:1.125)>>>0),c&&(v=Math.max(v,256));var m=n0.getFileDataAsTypedArray(i);i.contents=new Uint8Array(v),i.contents.set(m)}},resizeFileStorage(i,v){if(i.usedBytes!=v){var c=i.contents;i.contents=new Uint8Array(v),i.contents.set(c.subarray(0,Math.min(v,i.usedBytes))),i.usedBytes=v}},node_ops:{getattr(i){var v={};return v.dev=o.isChrdev(i.mode)?i.id:1,v.ino=i.id,v.mode=i.mode,v.nlink=1,v.uid=0,v.gid=0,v.rdev=i.rdev,o.isDir(i.mode)?v.size=4096:o.isFile(i.mode)?v.size=i.usedBytes:o.isLink(i.mode)?v.size=i.link.length:v.size=0,v.atime=new Date(i.atime),v.mtime=new Date(i.mtime),v.ctime=new Date(i.ctime),v.blksize=4096,v.blocks=Math.ceil(v.size/v.blksize),v},setattr(i,v){for(let c of["mode","atime","mtime","ctime"])v[c]!=null&&(i[c]=v[c]);v.size!==void 0&&n0.resizeFileStorage(i,v.size)},lookup(i,v){throw n0.doesNotExistError||(n0.doesNotExistError=new o.ErrnoError(44),n0.doesNotExistError.stack="<generic error, no stack>"),n0.doesNotExistError},mknod(i,v,c,u){return n0.createNode(i,v,c,u)},rename(i,v,c){var u;try{u=o.lookupNode(v,c)}catch{}if(u){if(o.isDir(i.mode))for(var m in u.contents)throw new o.ErrnoError(55);o.hashRemoveNode(u)}delete i.parent.contents[i.name],v.contents[c]=i,i.name=c,v.ctime=v.mtime=i.parent.ctime=i.parent.mtime=Date.now()},unlink(i,v){delete i.contents[v],i.ctime=i.mtime=Date.now()},rmdir(i,v){var c=o.lookupNode(i,v);for(var u in c.contents)throw new o.ErrnoError(55);delete i.contents[v],i.ctime=i.mtime=Date.now()},readdir(i){return[".","..",...Object.keys(i.contents)]},symlink(i,v,c){var u=n0.createNode(i,v,41471,0);return u.link=c,u},readlink(i){if(!o.isLink(i.mode))throw new o.ErrnoError(28);return i.link}},stream_ops:{read(i,v,c,u,m){var w=i.node.contents;if(m>=i.node.usedBytes)return 0;var M=Math.min(i.node.usedBytes-m,u);return v.set(w.subarray(m,m+M),c),M},write(i,v,c,u,m,w){if(v.buffer===ox.buffer&&(w=!1),!u)return 0;var M=i.node;return M.mtime=M.ctime=Date.now(),w?(M.contents=v.subarray(c,c+u),M.usedBytes=u):M.usedBytes===0&&m===0?(M.contents=v.slice(c,c+u),M.usedBytes=u):(n0.expandFileStorage(M,m+u),M.contents.set(v.subarray(c,c+u),m),M.usedBytes=Math.max(M.usedBytes,m+u)),u},llseek(i,v,c){var u=v;if(c===1?u+=i.position:c===2&&o.isFile(i.node.mode)&&(u+=i.node.usedBytes),u<0)throw new o.ErrnoError(28);return u},mmap(i,v,c,u,m){if(!o.isFile(i.node.mode))throw new o.ErrnoError(43);var w,M,z=i.node.contents;if(!(m&2)&&z.buffer===ox.buffer)M=!1,w=z.byteOffset;else{if(M=!0,w=$A(v),!w)throw new o.ErrnoError(48);z&&((c>0||c+v<z.length)&&(z.subarray?z=z.subarray(c,c+v):z=Array.prototype.slice.call(z,c,c+v)),ox.set(z,w))}return{ptr:w,allocated:M}},msync(i,v,c,u,m){return n0.stream_ops.write(i,v,0,u,c,!1),0}}},qA=i=>{if(typeof i!="string")return i;var v={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},c=v[i];if(typeof c>"u")throw new Error(`Unknown file open mode: ${i}`);return c},Vx=i=>(typeof i=="string"&&(i=VA(i,!0)),i.subarray||(i=new Uint8Array(i)),i),tA=(i,v)=>{var c=0;return i&&(c|=365),v&&(c|=146),c},T0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},y0={mount(i){return y0.createNode(null,"/",i.opts.fs.lstat(i.opts.root).mode,0)},createNode(i,v,c,u){if(!o.isDir(c)&&!o.isFile(c)&&!o.isLink(c))throw new o.ErrnoError(T0.EINVAL);var m=o.createNode(i,v,c);return m.node_ops=y0.node_ops,m.stream_ops=y0.stream_ops,m},realPath(i){for(var v=[];i.parent!==i;)v.push(i.name),i=i.parent;return v.push(i.mount.opts.root),v.reverse(),l0.join(...v)},node_ops:{getattr(i){var v=y0.realPath(i),c;try{c=i.mount.opts.fs.lstat(v)}catch(u){throw u.code?new o.ErrnoError(T0[u.code]):u}return{dev:c.dev,ino:c.ino,mode:c.mode,nlink:c.nlink,uid:c.uid,gid:c.gid,rdev:c.rdev,size:c.size,atime:c.atime,mtime:c.mtime,ctime:c.ctime,blksize:c.blksize,blocks:c.blocks}},setattr(i,v){var c=y0.realPath(i);try{if(v.mode!==void 0&&(i.mount.opts.fs.chmod(c,v.mode),i.mode=v.mode),v.atime||v.mtime){var u=new Date(v.atime||v.mtime),m=new Date(v.mtime||v.atime);i.mount.opts.fs.utime(c,u,m)}v.size!==void 0&&i.mount.opts.fs.truncate(c,v.size)}catch(w){throw w.code?new o.ErrnoError(T0[w.code]):w}},lookup(i,v){try{var c=l0.join2(y0.realPath(i),v),u=i.mount.opts.fs.lstat(c).mode,m=y0.createNode(i,v,u);return m}catch(w){throw w.code?new o.ErrnoError(T0[w.code]):w}},mknod(i,v,c,u){var m=y0.createNode(i,v,c,u),w=y0.realPath(m);try{o.isDir(m.mode)?m.mount.opts.fs.mkdir(w,m.mode):m.mount.opts.fs.writeFile(w,"",{mode:m.mode})}catch(M){throw M.code?new o.ErrnoError(T0[M.code]):M}return m},rename(i,v,c){var u=y0.realPath(i),m=l0.join2(y0.realPath(v),c);try{i.mount.opts.fs.rename(u,m),i.name=c}catch(w){throw w.code?new o.ErrnoError(T0[w.code]):w}},unlink(i,v){var c=l0.join2(y0.realPath(i),v);try{i.mount.opts.fs.unlink(c)}catch(u){throw u.code?new o.ErrnoError(T0[u.code]):u}},rmdir(i,v){var c=l0.join2(y0.realPath(i),v);try{i.mount.opts.fs.rmdir(c)}catch(u){throw u.code?new o.ErrnoError(T0[u.code]):u}},readdir(i){var v=y0.realPath(i);try{return i.mount.opts.fs.readdir(v)}catch(c){throw c.code?new o.ErrnoError(T0[c.code]):c}},symlink(i,v,c){var u=l0.join2(y0.realPath(i),v);try{i.mount.opts.fs.symlink(c,u)}catch(m){throw m.code?new o.ErrnoError(T0[m.code]):m}},readlink(i){var v=y0.realPath(i);try{return i.mount.opts.fs.readlink(v)}catch(c){throw c.code?new o.ErrnoError(T0[c.code]):c}}},stream_ops:{open(i){var v=y0.realPath(i.node);try{i.nfd=i.node.mount.opts.fs.open(v,i.flags)}catch(c){throw c.code?new o.ErrnoError(T0[c.code]):c}},close(i){try{i.node.mount.opts.fs.close(i.nfd)}catch(v){throw v.code?new o.ErrnoError(T0[v.code]):v}},read(i,v,c,u,m){try{return i.node.mount.opts.fs.read(i.nfd,v,c,u,m)}catch(w){throw w.code?new o.ErrnoError(T0[w.code]):w}},write(i,v,c,u,m){try{return i.node.mount.opts.fs.write(i.nfd,v,c,u,m)}catch(w){throw w.code?new o.ErrnoError(T0[w.code]):w}},llseek(i,v,c){var u=v;if(c===1)u+=i.position;else if(c===2&&o.isFile(i.node.mode))try{var m=i.node.node_ops.getattr(i.node);u+=m.size}catch(w){throw new o.ErrnoError(T0[w.code])}if(u<0)throw new o.ErrnoError(T0.EINVAL);return u}}},CA=async i=>{var v=await k(i);return new Uint8Array(v)},we=(...i)=>o.createDataFile(...i),cx=i=>i,fx=0,b0=null,Se=i=>{if(fx--,n.monitorRunDependencies?.(fx),fx==0&&b0){var v=b0;b0=null,v()}},$x=i=>{fx++,n.monitorRunDependencies?.(fx)},fe=[],dA=async(i,v)=>{typeof Browser<"u"&&Browser.init();for(var c of fe)if(c.canHandle(v))return c.handle(i,v);return i},TA=async(i,v,c,u,m,w,M,z)=>{var F0=v?lx.resolve(l0.join2(i,v)):i,_0=cx(`cp ${F0}`);$x(_0);try{var X0=c;typeof c=="string"&&(X0=await CA(c)),X0=await dA(X0,F0),z?.(),w||we(i,v,X0,u,m,M)}finally{Se(_0)}},Lr=(i,v,c,u,m,w,M,z,F0,_0)=>{TA(i,v,c,u,m,z,F0,_0).then(w).catch(M)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(i){Dx(this,"name","ErrnoError"),this.errno=i}},FSStream:class{constructor(){Dx(this,"shared",{})}get object(){return this.node}set object(i){this.node=i}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(i){this.shared.flags=i}get position(){return this.shared.position}set position(i){this.shared.position=i}},FSNode:class{constructor(i,v,c,u){Dx(this,"node_ops",{}),Dx(this,"stream_ops",{}),Dx(this,"readMode",365),Dx(this,"writeMode",146),Dx(this,"mounted",null),i||(i=this),this.parent=i,this.mount=i.mount,this.id=o.nextInode++,this.name=v,this.mode=c,this.rdev=u,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(i){i?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(i){i?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(i,v={}){if(!i)throw new o.ErrnoError(44);v.follow_mount??(v.follow_mount=!0),l0.isAbs(i)||(i=o.cwd()+"/"+i);x:for(var c=0;c<40;c++){for(var u=i.split("/").filter(_0=>!!_0),m=o.root,w="/",M=0;M<u.length;M++){var z=M===u.length-1;if(z&&v.parent)break;if(u[M]!=="."){if(u[M]===".."){if(w=l0.dirname(w),o.isRoot(m)){i=w+"/"+u.slice(M+1).join("/"),c--;continue x}else m=m.parent;continue}w=l0.join2(w,u[M]);try{m=o.lookupNode(m,u[M])}catch(_0){if(_0?.errno===44&&z&&v.noent_okay)return{path:w};throw _0}if(o.isMountpoint(m)&&(!z||v.follow_mount)&&(m=m.mounted.root),o.isLink(m.mode)&&(!z||v.follow)){if(!m.node_ops.readlink)throw new o.ErrnoError(52);var F0=m.node_ops.readlink(m);l0.isAbs(F0)||(F0=l0.dirname(w)+"/"+F0),i=F0+"/"+u.slice(M+1).join("/");continue x}}}return{path:w,node:m}}throw new o.ErrnoError(32)},getPath(i){for(var v;;){if(o.isRoot(i)){var c=i.mount.mountpoint;return v?c[c.length-1]!=="/"?`${c}/${v}`:c+v:c}v=v?`${i.name}/${v}`:i.name,i=i.parent}},hashName(i,v){for(var c=0,u=0;u<v.length;u++)c=(c<<5)-c+v.charCodeAt(u)|0;return(i+c>>>0)%o.nameTable.length},hashAddNode(i){var v=o.hashName(i.parent.id,i.name);i.name_next=o.nameTable[v],o.nameTable[v]=i},hashRemoveNode(i){var v=o.hashName(i.parent.id,i.name);if(o.nameTable[v]===i)o.nameTable[v]=i.name_next;else for(var c=o.nameTable[v];c;){if(c.name_next===i){c.name_next=i.name_next;break}c=c.name_next}},lookupNode(i,v){var c=o.mayLookup(i);if(c)throw new o.ErrnoError(c);for(var u=o.hashName(i.id,v),m=o.nameTable[u];m;m=m.name_next){var w=m.name;if(m.parent.id===i.id&&w===v)return m}return o.lookup(i,v)},createNode(i,v,c,u){var m=new o.FSNode(i,v,c,u);return o.hashAddNode(m),m},destroyNode(i){o.hashRemoveNode(i)},isRoot(i){return i===i.parent},isMountpoint(i){return!!i.mounted},isFile(i){return(i&61440)===32768},isDir(i){return(i&61440)===16384},isLink(i){return(i&61440)===40960},isChrdev(i){return(i&61440)===8192},isBlkdev(i){return(i&61440)===24576},isFIFO(i){return(i&61440)===4096},isSocket(i){return(i&49152)===49152},flagsToPermissionString(i){var v=["r","w","rw"][i&3];return i&512&&(v+="w"),v},nodePermissions(i,v){return o.ignorePermissions?0:v.includes("r")&&!(i.mode&292)||v.includes("w")&&!(i.mode&146)||v.includes("x")&&!(i.mode&73)?2:0},mayLookup(i){if(!o.isDir(i.mode))return 54;var v=o.nodePermissions(i,"x");return v||(i.node_ops.lookup?0:2)},mayCreate(i,v){if(!o.isDir(i.mode))return 54;try{var c=o.lookupNode(i,v);return 20}catch{}return o.nodePermissions(i,"wx")},mayDelete(i,v,c){var u;try{u=o.lookupNode(i,v)}catch(w){return w.errno}var m=o.nodePermissions(i,"wx");if(m)return m;if(c){if(!o.isDir(u.mode))return 54;if(o.isRoot(u)||o.getPath(u)===o.cwd())return 10}else if(o.isDir(u.mode))return 31;return 0},mayOpen(i,v){if(!i)return 44;if(o.isLink(i.mode))return 32;var c=o.flagsToPermissionString(v);return o.isDir(i.mode)&&(c!=="r"||v&576)?31:o.nodePermissions(i,c)},checkOpExists(i,v){if(!i)throw new o.ErrnoError(v);return i},MAX_OPEN_FDS:4096,nextfd(){for(var i=0;i<=o.MAX_OPEN_FDS;i++)if(!o.streams[i])return i;throw new o.ErrnoError(33)},getStreamChecked(i){var v=o.getStream(i);if(!v)throw new o.ErrnoError(8);return v},getStream:i=>o.streams[i],createStream(i,v=-1){return i=Object.assign(new o.FSStream,i),v==-1&&(v=o.nextfd()),i.fd=v,o.streams[v]=i,i},closeStream(i){o.streams[i]=null},dupStream(i,v=-1){var c=o.createStream(i,v);return c.stream_ops?.dup?.(c),c},doSetAttr(i,v,c){var u=i?.stream_ops.setattr,m=u?i:v;u??(u=v.node_ops.setattr),o.checkOpExists(u,63);try{u(m,c)}catch(w){throw w instanceof RangeError?new o.ErrnoError(22):w}},chrdev_stream_ops:{open(i){var v=o.getDevice(i.node.rdev);i.stream_ops=v.stream_ops,i.stream_ops.open?.(i)},llseek(){throw new o.ErrnoError(70)}},major:i=>i>>8,minor:i=>i&255,makedev:(i,v)=>i<<8|v,registerDevice(i,v){o.devices[i]={stream_ops:v}},getDevice:i=>o.devices[i],getMounts(i){for(var v=[],c=[i];c.length;){var u=c.pop();v.push(u),c.push(...u.mounts)}return v},syncfs(i,v){typeof i=="function"&&(v=i,i=!1),o.syncFSRequests++,o.syncFSRequests>1&&L(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var c=o.getMounts(o.root.mount),u=0;function m(z){return o.syncFSRequests--,v(z)}function w(z){if(z)return w.errored?void 0:(w.errored=!0,m(z));++u>=c.length&&m(null)}for(var M of c)M.type.syncfs?M.type.syncfs(M,i,w):w(null)},mount(i,v,c){var u=c==="/",m=!c,w;if(u&&o.root)throw new o.ErrnoError(10);if(!u&&!m){var M=o.lookupPath(c,{follow_mount:!1});if(c=M.path,w=M.node,o.isMountpoint(w))throw new o.ErrnoError(10);if(!o.isDir(w.mode))throw new o.ErrnoError(54)}var z={type:i,opts:v,mountpoint:c,mounts:[]},F0=i.mount(z);return F0.mount=z,z.root=F0,u?o.root=F0:w&&(w.mounted=z,w.mount&&w.mount.mounts.push(z)),F0},unmount(i){var v=o.lookupPath(i,{follow_mount:!1});if(!o.isMountpoint(v.node))throw new o.ErrnoError(28);var c=v.node,u=c.mounted,m=o.getMounts(u);for(var[w,M]of Object.entries(o.nameTable))for(;M;){var z=M.name_next;m.includes(M.mount)&&o.destroyNode(M),M=z}c.mounted=null;var F0=c.mount.mounts.indexOf(u);c.mount.mounts.splice(F0,1)},lookup(i,v){return i.node_ops.lookup(i,v)},mknod(i,v,c){var u=o.lookupPath(i,{parent:!0}),m=u.node,w=l0.basename(i);if(!w)throw new o.ErrnoError(28);if(w==="."||w==="..")throw new o.ErrnoError(20);var M=o.mayCreate(m,w);if(M)throw new o.ErrnoError(M);if(!m.node_ops.mknod)throw new o.ErrnoError(63);return m.node_ops.mknod(m,w,v,c)},statfs(i){return o.statfsNode(o.lookupPath(i,{follow:!0}).node)},statfsStream(i){return o.statfsNode(i.node)},statfsNode(i){var v={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return i.node_ops.statfs&&Object.assign(v,i.node_ops.statfs(i.mount.opts.root)),v},create(i,v=438){return v&=4095,v|=32768,o.mknod(i,v,0)},mkdir(i,v=511){return v&=1023,v|=16384,o.mknod(i,v,0)},mkdirTree(i,v){var c=i.split("/"),u="";for(var m of c)if(m){(u||l0.isAbs(i))&&(u+="/"),u+=m;try{o.mkdir(u,v)}catch(w){if(w.errno!=20)throw w}}},mkdev(i,v,c){return typeof c>"u"&&(c=v,v=438),v|=8192,o.mknod(i,v,c)},symlink(i,v){if(!lx.resolve(i))throw new o.ErrnoError(44);var c=o.lookupPath(v,{parent:!0}),u=c.node;if(!u)throw new o.ErrnoError(44);var m=l0.basename(v),w=o.mayCreate(u,m);if(w)throw new o.ErrnoError(w);if(!u.node_ops.symlink)throw new o.ErrnoError(63);return u.node_ops.symlink(u,m,i)},rename(i,v){var c=l0.dirname(i),u=l0.dirname(v),m=l0.basename(i),w=l0.basename(v),M,z,F0;if(M=o.lookupPath(i,{parent:!0}),z=M.node,M=o.lookupPath(v,{parent:!0}),F0=M.node,!z||!F0)throw new o.ErrnoError(44);if(z.mount!==F0.mount)throw new o.ErrnoError(75);var _0=o.lookupNode(z,m),X0=lx.relative(i,u);if(X0.charAt(0)!==".")throw new o.ErrnoError(28);if(X0=lx.relative(v,c),X0.charAt(0)!==".")throw new o.ErrnoError(55);var L0;try{L0=o.lookupNode(F0,w)}catch{}if(_0!==L0){var P0=o.isDir(_0.mode),h0=o.mayDelete(z,m,P0);if(h0)throw new o.ErrnoError(h0);if(h0=L0?o.mayDelete(F0,w,P0):o.mayCreate(F0,w),h0)throw new o.ErrnoError(h0);if(!z.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(_0)||L0&&o.isMountpoint(L0))throw new o.ErrnoError(10);if(F0!==z&&(h0=o.nodePermissions(z,"w"),h0))throw new o.ErrnoError(h0);o.hashRemoveNode(_0);try{z.node_ops.rename(_0,F0,w),_0.parent=F0}catch(Ex){throw Ex}finally{o.hashAddNode(_0)}}},rmdir(i){var v=o.lookupPath(i,{parent:!0}),c=v.node,u=l0.basename(i),m=o.lookupNode(c,u),w=o.mayDelete(c,u,!0);if(w)throw new o.ErrnoError(w);if(!c.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(m))throw new o.ErrnoError(10);c.node_ops.rmdir(c,u),o.destroyNode(m)},readdir(i){var v=o.lookupPath(i,{follow:!0}),c=v.node,u=o.checkOpExists(c.node_ops.readdir,54);return u(c)},unlink(i){var v=o.lookupPath(i,{parent:!0}),c=v.node;if(!c)throw new o.ErrnoError(44);var u=l0.basename(i),m=o.lookupNode(c,u),w=o.mayDelete(c,u,!1);if(w)throw new o.ErrnoError(w);if(!c.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(m))throw new o.ErrnoError(10);c.node_ops.unlink(c,u),o.destroyNode(m)},readlink(i){var v=o.lookupPath(i),c=v.node;if(!c)throw new o.ErrnoError(44);if(!c.node_ops.readlink)throw new o.ErrnoError(28);return c.node_ops.readlink(c)},stat(i,v){var c=o.lookupPath(i,{follow:!v}),u=c.node,m=o.checkOpExists(u.node_ops.getattr,63);return m(u)},fstat(i){var v=o.getStreamChecked(i),c=v.node,u=v.stream_ops.getattr,m=u?v:c;return u??(u=c.node_ops.getattr),o.checkOpExists(u,63),u(m)},lstat(i){return o.stat(i,!0)},doChmod(i,v,c,u){o.doSetAttr(i,v,{mode:c&4095|v.mode&-4096,ctime:Date.now(),dontFollow:u})},chmod(i,v,c){var u;if(typeof i=="string"){var m=o.lookupPath(i,{follow:!c});u=m.node}else u=i;o.doChmod(null,u,v,c)},lchmod(i,v){o.chmod(i,v,!0)},fchmod(i,v){var c=o.getStreamChecked(i);o.doChmod(c,c.node,v,!1)},doChown(i,v,c){o.doSetAttr(i,v,{timestamp:Date.now(),dontFollow:c})},chown(i,v,c,u){var m;if(typeof i=="string"){var w=o.lookupPath(i,{follow:!u});m=w.node}else m=i;o.doChown(null,m,u)},lchown(i,v,c){o.chown(i,v,c,!0)},fchown(i,v,c){var u=o.getStreamChecked(i);o.doChown(u,u.node,!1)},doTruncate(i,v,c){if(o.isDir(v.mode))throw new o.ErrnoError(31);if(!o.isFile(v.mode))throw new o.ErrnoError(28);var u=o.nodePermissions(v,"w");if(u)throw new o.ErrnoError(u);o.doSetAttr(i,v,{size:c,timestamp:Date.now()})},truncate(i,v){if(v<0)throw new o.ErrnoError(28);var c;if(typeof i=="string"){var u=o.lookupPath(i,{follow:!0});c=u.node}else c=i;o.doTruncate(null,c,v)},ftruncate(i,v){var c=o.getStreamChecked(i);if(v<0||(c.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(c,c.node,v)},utime(i,v,c){var u=o.lookupPath(i,{follow:!0}),m=u.node,w=o.checkOpExists(m.node_ops.setattr,63);w(m,{atime:v,mtime:c})},open(i,v,c=438){if(i==="")throw new o.ErrnoError(44);v=qA(v),v&64?c=c&4095|32768:c=0;var u,m;if(typeof i=="object")u=i;else{m=i.endsWith("/");var w=o.lookupPath(i,{follow:!(v&131072),noent_okay:!0});u=w.node,i=w.path}var M=!1;if(v&64)if(u){if(v&128)throw new o.ErrnoError(20)}else{if(m)throw new o.ErrnoError(31);u=o.mknod(i,c|511,0),M=!0}if(!u)throw new o.ErrnoError(44);if(o.isChrdev(u.mode)&&(v&=-513),v&65536&&!o.isDir(u.mode))throw new o.ErrnoError(54);if(!M){var z=o.mayOpen(u,v);if(z)throw new o.ErrnoError(z)}v&512&&!M&&o.truncate(u,0),v&=-131713;var F0=o.createStream({node:u,path:o.getPath(u),flags:v,seekable:!0,position:0,stream_ops:u.stream_ops,ungotten:[],error:!1});return F0.stream_ops.open&&F0.stream_ops.open(F0),M&&o.chmod(u,c&511),F0},close(i){if(o.isClosed(i))throw new o.ErrnoError(8);i.getdents&&(i.getdents=null);try{i.stream_ops.close&&i.stream_ops.close(i)}catch(v){throw v}finally{o.closeStream(i.fd)}i.fd=null},isClosed(i){return i.fd===null},llseek(i,v,c){if(o.isClosed(i))throw new o.ErrnoError(8);if(!i.seekable||!i.stream_ops.llseek)throw new o.ErrnoError(70);if(c!=0&&c!=1&&c!=2)throw new o.ErrnoError(28);return i.position=i.stream_ops.llseek(i,v,c),i.ungotten=[],i.position},read(i,v,c,u,m){if(u<0||m<0)throw new o.ErrnoError(28);if(o.isClosed(i))throw new o.ErrnoError(8);if((i.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(i.node.mode))throw new o.ErrnoError(31);if(!i.stream_ops.read)throw new o.ErrnoError(28);var w=typeof m<"u";if(!w)m=i.position;else if(!i.seekable)throw new o.ErrnoError(70);var M=i.stream_ops.read(i,v,c,u,m);return w||(i.position+=M),M},write(i,v,c,u,m,w){if(u<0||m<0)throw new o.ErrnoError(28);if(o.isClosed(i))throw new o.ErrnoError(8);if((i.flags&2097155)===0)throw new o.ErrnoError(8);if(o.isDir(i.node.mode))throw new o.ErrnoError(31);if(!i.stream_ops.write)throw new o.ErrnoError(28);i.seekable&&i.flags&1024&&o.llseek(i,0,2);var M=typeof m<"u";if(!M)m=i.position;else if(!i.seekable)throw new o.ErrnoError(70);var z=i.stream_ops.write(i,v,c,u,m,w);return M||(i.position+=z),z},mmap(i,v,c,u,m){if((u&2)!==0&&(m&2)===0&&(i.flags&2097155)!==2)throw new o.ErrnoError(2);if((i.flags&2097155)===1)throw new o.ErrnoError(2);if(!i.stream_ops.mmap)throw new o.ErrnoError(43);if(!v)throw new o.ErrnoError(28);return i.stream_ops.mmap(i,v,c,u,m)},msync(i,v,c,u,m){return i.stream_ops.msync?i.stream_ops.msync(i,v,c,u,m):0},ioctl(i,v,c){if(!i.stream_ops.ioctl)throw new o.ErrnoError(59);return i.stream_ops.ioctl(i,v,c)},readFile(i,v={}){v.flags=v.flags||0,v.encoding=v.encoding||"binary",v.encoding!=="utf8"&&v.encoding!=="binary"&&d0(`Invalid encoding type "${v.encoding}"`);var c=o.open(i,v.flags),u=o.stat(i),m=u.size,w=new Uint8Array(m);return o.read(c,w,0,m,0),v.encoding==="utf8"&&(w=BA(w)),o.close(c),w},writeFile(i,v,c={}){c.flags=c.flags||577;var u=o.open(i,c.flags,c.mode);v=Vx(v),o.write(u,v,0,v.byteLength,void 0,c.canOwn),o.close(u)},cwd:()=>o.currentPath,chdir(i){var v=o.lookupPath(i,{follow:!0});if(v.node===null)throw new o.ErrnoError(44);if(!o.isDir(v.node.mode))throw new o.ErrnoError(54);var c=o.nodePermissions(v.node,"x");if(c)throw new o.ErrnoError(c);o.currentPath=v.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(u,m,w,M,z)=>M,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),ex.register(o.makedev(5,0),ex.default_tty_ops),ex.register(o.makedev(6,0),ex.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var i=new Uint8Array(1024),v=0,c=()=>(v===0&&(ke(i),v=i.byteLength),i[--v]);o.createDevice("/dev","random",c),o.createDevice("/dev","urandom",c),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var i=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var v=o.createNode(i,"fd",16895,73);return v.stream_ops={llseek:n0.stream_ops.llseek},v.node_ops={lookup(c,u){var m=+u,w=o.getStreamChecked(m),M={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>w.path},id:m+1};return M.parent=M,M},readdir(){return Array.from(o.streams.entries()).filter(([c,u])=>u).map(([c,u])=>c.toString())}},v}},{},"/proc/self/fd")},createStandardStreams(i,v,c){i?o.createDevice("/dev","stdin",i):o.symlink("/dev/tty","/dev/stdin"),v?o.createDevice("/dev","stdout",null,v):o.symlink("/dev/tty","/dev/stdout"),c?o.createDevice("/dev","stderr",null,c):o.symlink("/dev/tty1","/dev/stderr");var u=o.open("/dev/stdin",0),m=o.open("/dev/stdout",1),w=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(n0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:n0,PROXYFS:y0}},init(i,v,c){o.initialized=!0,i??(i=n.stdin),v??(v=n.stdout),c??(c=n.stderr),o.createStandardStreams(i,v,c)},quit(){o.initialized=!1,b(0);for(var i of o.streams)i&&o.close(i)},findObject(i,v){var c=o.analyzePath(i,v);return c.exists?c.object:null},analyzePath(i,v){try{var c=o.lookupPath(i,{follow:!v});i=c.path}catch{}var u={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var c=o.lookupPath(i,{parent:!0});u.parentExists=!0,u.parentPath=c.path,u.parentObject=c.node,u.name=l0.basename(i),c=o.lookupPath(i,{follow:!v}),u.exists=!0,u.path=c.path,u.object=c.node,u.name=c.node.name,u.isRoot=c.path==="/"}catch(m){u.error=m.errno}return u},createPath(i,v,c,u){i=typeof i=="string"?i:o.getPath(i);for(var m=v.split("/").reverse();m.length;){var w=m.pop();if(w){var M=l0.join2(i,w);try{o.mkdir(M)}catch(z){if(z.errno!=20)throw z}i=M}}return M},createFile(i,v,c,u,m){var w=l0.join2(typeof i=="string"?i:o.getPath(i),v),M=tA(u,m);return o.create(w,M)},createDataFile(i,v,c,u,m,w){var M=v;i&&(i=typeof i=="string"?i:o.getPath(i),M=v?l0.join2(i,v):i);var z=tA(u,m),F0=o.create(M,z);if(c){c=Vx(c),o.chmod(F0,z|146);var _0=o.open(F0,577);o.write(_0,c,0,c.length,0,w),o.close(_0),o.chmod(F0,z)}},createDevice(i,v,c,u){var m,w=l0.join2(typeof i=="string"?i:o.getPath(i),v),M=tA(!!c,!!u);(m=o.createDevice).major??(m.major=64);var z=o.makedev(o.createDevice.major++,0);return o.registerDevice(z,{open(F0){F0.seekable=!1},close(F0){u?.buffer?.length&&u(10)},read(F0,_0,X0,L0,P0){for(var h0=0,Ex=0;Ex<L0;Ex++){var kx;try{kx=c()}catch{throw new o.ErrnoError(29)}if(kx===void 0&&h0===0)throw new o.ErrnoError(6);if(kx==null)break;h0++,_0[X0+Ex]=kx}return h0&&(F0.node.atime=Date.now()),h0},write(F0,_0,X0,L0,P0){for(var h0=0;h0<L0;h0++)try{u(_0[X0+h0])}catch{throw new o.ErrnoError(29)}return L0&&(F0.node.mtime=F0.node.ctime=Date.now()),h0}}),o.mkdev(w,M,z)},forceLoadFile(i){if(i.isDevice||i.isFolder||i.link||i.contents)return!0;if(globalThis.XMLHttpRequest)d0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{i.contents=S(i.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(i,v,c,u,m){class w{constructor(){Dx(this,"lengthKnown",!1),Dx(this,"chunks",[])}get(P0){if(!(P0>this.length-1||P0<0)){var h0=P0%this.chunkSize,Ex=P0/this.chunkSize|0;return this.getter(Ex)[h0]}}setDataGetter(P0){this.getter=P0}cacheLength(){var P0=new XMLHttpRequest;P0.open("HEAD",c,!1),P0.send(null),P0.status>=200&&P0.status<300||P0.status===304||d0("Couldn't load "+c+". Status: "+P0.status);var h0=Number(P0.getResponseHeader("Content-length")),Ex,kx=(Ex=P0.getResponseHeader("Accept-Ranges"))&&Ex==="bytes",Ux=(Ex=P0.getResponseHeader("Content-Encoding"))&&Ex==="gzip",Wx=1024*1024;kx||(Wx=h0);var Xx=(nA,de)=>{nA>de&&d0("invalid range ("+nA+", "+de+") or no bytes requested!"),de>h0-1&&d0("only "+h0+" bytes available! programmer error!");var mx=new XMLHttpRequest;return mx.open("GET",c,!1),h0!==Wx&&mx.setRequestHeader("Range","bytes="+nA+"-"+de),mx.responseType="arraybuffer",mx.overrideMimeType&&mx.overrideMimeType("text/plain; charset=x-user-defined"),mx.send(null),mx.status>=200&&mx.status<300||mx.status===304||d0("Couldn't load "+c+". Status: "+mx.status),mx.response!==void 0?new Uint8Array(mx.response||[]):VA(mx.responseText||"",!0)},Me=this;Me.setDataGetter(nA=>{var de=nA*Wx,mx=(nA+1)*Wx-1;return mx=Math.min(mx,h0-1),typeof Me.chunks[nA]>"u"&&(Me.chunks[nA]=Xx(de,mx)),typeof Me.chunks[nA]>"u"&&d0("doXHR failed!"),Me.chunks[nA]}),(Ux||!h0)&&(Wx=h0=1,h0=this.getter(0).length,Wx=h0,N("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=h0,this._chunkSize=Wx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){f||d0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var M=new w,z={isDevice:!1,contents:M}}else var z={isDevice:!1,url:c};var F0=o.createFile(i,v,z,u,m);z.contents?F0.contents=z.contents:z.url&&(F0.contents=null,F0.url=z.url),Object.defineProperties(F0,{usedBytes:{get:function(){return this.contents.length}}});var _0={};for(let[L0,P0]of Object.entries(F0.stream_ops))_0[L0]=(...h0)=>(o.forceLoadFile(F0),P0(...h0));function X0(L0,P0,h0,Ex,kx){var Ux=L0.node.contents;if(kx>=Ux.length)return 0;var Wx=Math.min(Ux.length-kx,Ex);if(Ux.slice)for(var Xx=0;Xx<Wx;Xx++)P0[h0+Xx]=Ux[kx+Xx];else for(var Xx=0;Xx<Wx;Xx++)P0[h0+Xx]=Ux.get(kx+Xx);return Wx}return _0.read=(L0,P0,h0,Ex,kx)=>(o.forceLoadFile(F0),X0(L0,P0,h0,Ex,kx)),_0.mmap=(L0,P0,h0,Ex,kx)=>{o.forceLoadFile(F0);var Ux=$A(P0);if(!Ux)throw new o.ErrnoError(48);return X0(L0,ox,Ux,P0,h0),{ptr:Ux,allocated:!0}},F0.stream_ops=_0,F0}},k0={currentUmask:18,calculateAt(i,v,c){if(l0.isAbs(v))return v;var u;if(i===-100)u=o.cwd();else{var m=k0.getStreamFromFD(i);u=m.path}if(v.length==0){if(!c)throw new o.ErrnoError(44);return u}return u+"/"+v},writeStat(i,v){E0[i>>2]=v.dev,E0[i+4>>2]=v.mode,E0[i+8>>2]=v.nlink,E0[i+12>>2]=v.uid,E0[i+16>>2]=v.gid,E0[i+20>>2]=v.rdev,z0[i+24>>3]=BigInt(v.size),O0[i+32>>2]=4096,O0[i+36>>2]=v.blocks;var c=v.atime.getTime(),u=v.mtime.getTime(),m=v.ctime.getTime();return z0[i+40>>3]=BigInt(Math.floor(c/1e3)),E0[i+48>>2]=c%1e3*1e3*1e3,z0[i+56>>3]=BigInt(Math.floor(u/1e3)),E0[i+64>>2]=u%1e3*1e3*1e3,z0[i+72>>3]=BigInt(Math.floor(m/1e3)),E0[i+80>>2]=m%1e3*1e3*1e3,z0[i+88>>3]=BigInt(v.ino),0},writeStatFs(i,v){E0[i+4>>2]=v.bsize,E0[i+60>>2]=v.bsize,z0[i+8>>3]=BigInt(v.blocks),z0[i+16>>3]=BigInt(v.bfree),z0[i+24>>3]=BigInt(v.bavail),z0[i+32>>3]=BigInt(v.files),z0[i+40>>3]=BigInt(v.ffree),E0[i+48>>2]=v.fsid,E0[i+64>>2]=v.flags,E0[i+56>>2]=v.namelen},doMsync(i,v,c,u,m){if(!o.isFile(v.node.mode))throw new o.ErrnoError(43);if(u&2)return 0;var w=AA.slice(i,i+c);o.msync(v,w,m,c,u)},getStreamFromFD(i){var v=o.getStreamChecked(i);return v},varargs:void 0,getStr(i){var v=rA(i);return v}};function $e(i,v,c,u){try{if(v=k0.getStr(v),v=k0.calculateAt(i,v),c&-8)return-28;var m=o.lookupPath(v,{follow:!0}),w=m.node;if(!w)return-44;var M="";return c&4&&(M+="r"),c&2&&(M+="w"),c&1&&(M+="x"),M&&o.nodePermissions(w,M)?-2:0}catch(z){if(typeof o>"u"||z.name!=="ErrnoError")throw z;return-z.errno}}var PA=()=>{var i=O0[+k0.varargs>>2];return k0.varargs+=4,i},DA=PA;function Rr(i,v,c){k0.varargs=c;try{var u=k0.getStreamFromFD(i);switch(v){case 0:{var m=PA();if(m<0)return-28;for(;o.streams[m];)m++;var w;return w=o.dupStream(u,m),w.fd}case 1:case 2:return 0;case 3:return u.flags;case 4:{var m=PA(),M=289792;return u.flags=u.flags&~M|m&M,0}case 12:{var m=DA(),z=0;return K0[m+z>>1]=2,0}case 13:case 14:return 0}return-28}catch(F0){if(typeof o>"u"||F0.name!=="ErrnoError")throw F0;return-F0.errno}}var Ee=(i,v,c)=>_e(i,AA,v,c);function rr(i,v){try{if(v===0)return-28;var c=o.cwd(),u=JA(c)+1;return v<u?-68:(Ee(c,i,v),u)}catch(m){if(typeof o>"u"||m.name!=="ErrnoError")throw m;return-m.errno}}function tr(i,v,c){k0.varargs=c;try{var u=k0.getStreamFromFD(i);switch(v){case 21509:return u.tty?0:-59;case 21505:{if(!u.tty)return-59;if(u.tty.ops.ioctl_tcgets){var m=u.tty.ops.ioctl_tcgets(u),w=DA();O0[w>>2]=m.c_iflag||0,O0[w+4>>2]=m.c_oflag||0,O0[w+8>>2]=m.c_cflag||0,O0[w+12>>2]=m.c_lflag||0;for(var M=0;M<32;M++)ox[w+M+17]=m.c_cc[M]||0;return 0}return 0}case 21510:case 21511:case 21512:return u.tty?0:-59;case 21506:case 21507:case 21508:{if(!u.tty)return-59;if(u.tty.ops.ioctl_tcsets){for(var w=DA(),z=O0[w>>2],F0=O0[w+4>>2],_0=O0[w+8>>2],X0=O0[w+12>>2],L0=[],M=0;M<32;M++)L0.push(ox[w+M+17]);return u.tty.ops.ioctl_tcsets(u.tty,v,{c_iflag:z,c_oflag:F0,c_cflag:_0,c_lflag:X0,c_cc:L0})}return 0}case 21519:{if(!u.tty)return-59;var w=DA();return O0[w>>2]=0,0}case 21520:return u.tty?-28:-59;case 21537:case 21531:{var w=DA();return o.ioctl(u,v,w)}case 21523:{if(!u.tty)return-59;if(u.tty.ops.ioctl_tiocgwinsz){var P0=u.tty.ops.ioctl_tiocgwinsz(u.tty),w=DA();K0[w>>1]=P0[0],K0[w+2>>1]=P0[1]}return 0}case 21524:return u.tty?0:-59;case 21515:return u.tty?0:-59;default:return-28}}catch(h0){if(typeof o>"u"||h0.name!=="ErrnoError")throw h0;return-h0.errno}}function Or(i,v,c,u){k0.varargs=u;try{v=k0.getStr(v),v=k0.calculateAt(i,v);var m=u?PA():0;return c&64&&(m&=~k0.currentUmask),o.open(v,c,m).fd}catch(w){if(typeof o>"u"||w.name!=="ErrnoError")throw w;return-w.errno}}function Gr(i,v,c,u){try{if(v=k0.getStr(v),v=k0.calculateAt(i,v),u<=0)return-28;var m=o.readlink(v),w=Math.min(u,JA(m)),M=ox[c+w];return Ee(m,c,u+1),ox[c+w]=M,w}catch(z){if(typeof o>"u"||z.name!=="ErrnoError")throw z;return-z.errno}}function Ur(i,v,c,u){try{return v=k0.getStr(v),u=k0.getStr(u),v=k0.calculateAt(i,v),u=k0.calculateAt(c,u),o.rename(v,u),0}catch(m){if(typeof o>"u"||m.name!=="ErrnoError")throw m;return-m.errno}}function le(i){try{return i=k0.getStr(i),o.rmdir(i),0}catch(v){if(typeof o>"u"||v.name!=="ErrnoError")throw v;return-v.errno}}function nr(i,v,c){try{if(v=k0.getStr(v),v=k0.calculateAt(i,v),!c)o.unlink(v);else if(c===512)o.rmdir(v);else return-28;return 0}catch(u){if(typeof o>"u"||u.name!=="ErrnoError")throw u;return-u.errno}}var WA=()=>{throw new Y},ce=()=>performance.now(),Hr=()=>Date.now(),sr=1,Kr=i=>i>=0&&i<=3,XA=9007199254740992,qe=-9007199254740992,ir=i=>i<qe||i>XA?NaN:Number(i);function ar(i,v,c){if(v=ir(v),!Kr(i))return 28;var u;if(i===0)u=Hr();else if(sr)u=ce();else return 52;var m=Math.round(u*1e3*1e3);return z0[c>>3]=BigInt(m),0}var zr=()=>2147483648,or=(i,v)=>Math.ceil(i/v)*v,Jr=i=>{var v=N0.buffer.byteLength,c=(i-v+65535)/65536|0;try{return N0.grow(c),Z(),1}catch{}},Vr=i=>{var v=AA.length;i>>>=0;var c=zr();if(i>c)return!1;for(var u=1;u<=4;u*=2){var m=v*(1+.2/u);m=Math.min(m,i+100663296);var w=Math.min(c,or(Math.max(i,m),65536)),M=Jr(w);if(M)return!0}return!1};function Be(i){try{var v=k0.getStreamFromFD(i);return o.close(v),0}catch(c){if(typeof o>"u"||c.name!=="ErrnoError")throw c;return c.errno}}var Wr=(i,v,c,u)=>{for(var m=0,w=0;w<c;w++){var M=E0[v>>2],z=E0[v+4>>2];v+=8;var F0=o.read(i,ox,M,z,u);if(F0<0)return-1;if(m+=F0,F0<z)break;typeof u<"u"&&(u+=F0)}return m};function Xr(i,v,c,u){try{var m=k0.getStreamFromFD(i),w=Wr(m,v,c);return E0[u>>2]=w,0}catch(M){if(typeof o>"u"||M.name!=="ErrnoError")throw M;return M.errno}}function Fr(i,v,c,u){v=ir(v);try{if(isNaN(v))return 22;var m=k0.getStreamFromFD(i);return o.llseek(m,v,c),z0[u>>3]=BigInt(m.position),m.getdents&&v===0&&c===0&&(m.getdents=null),0}catch(w){if(typeof o>"u"||w.name!=="ErrnoError")throw w;return w.errno}}var vr=(i,v,c,u)=>{for(var m=0,w=0;w<c;w++){var M=E0[v>>2],z=E0[v+4>>2];v+=8;var F0=o.write(i,ox,M,z,u);if(F0<0)return-1;if(m+=F0,F0<z)break;typeof u<"u"&&(u+=F0)}return m};function YA(i,v,c,u){try{var m=k0.getStreamFromFD(i),w=vr(m,v,c);return E0[u>>2]=w,0}catch(M){if(typeof o>"u"||M.name!=="ErrnoError")throw M;return M.errno}}var fr=0,QA=()=>ve||fr>0,Te=i=>{R=i,QA()||(n.onExit?.(i),i0=!0),j(i,new xA(i))},qx=(i,v)=>{R=i,QA()||f0(),Te(i)},Yr=i=>{if(i instanceof xA||i=="unwind")return R;j(1,i)},NA=i=>V(i),ZA=i=>{var v=JA(i)+1,c=NA(v);return Ee(i,c,v),c},Pe=[],Bx=i=>{var v=Pe[i];return v||(Pe[i]=v=S0.get(i)),v},Ce=(...i)=>o.createPath(...i),xe=(...i)=>o.unlink(...i),a=(...i)=>o.createLazyFile(...i),E=(...i)=>o.createDevice(...i);if(o.createPreloadedFile=Lr,o.preloadFile=TA,o.staticInit(),n.noExitRuntime&&(ve=n.noExitRuntime),n.preloadPlugins&&(fe=n.preloadPlugins),n.print&&(N=n.print),n.printErr&&(L=n.printErr),n.wasmBinary&&(O=n.wasmBinary),n.arguments&&(D=n.arguments),n.thisProgram&&(p=n.thisProgram),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n.callMain=_t,n.addRunDependency=$x,n.removeRunDependency=Se,n.FS_preloadFile=TA,n.FS_unlink=xe,n.FS_createPath=Ce,n.FS_createDevice=E,n.FS=o,n.FS_createDataFile=we,n.FS_createLazyFile=a,n.PROXYFS=y0;var d,b,y,$,G,V,o0,D0,J0,N0,S0;function m0(i){d=n._main=i.__main_argc_argv,b=i.fflush,y=i.__funcs_on_exit,$=i.setThrew,G=i._emscripten_stack_restore,V=i._emscripten_stack_alloc,o0=i.emscripten_stack_get_current,D0=N0=i.memory,J0=S0=i.__indirect_function_table}var rx={__assert_fail:SA,__syscall_faccessat:$e,__syscall_fcntl64:Rr,__syscall_getcwd:rr,__syscall_ioctl:tr,__syscall_openat:Or,__syscall_readlinkat:Gr,__syscall_renameat:Ur,__syscall_rmdir:le,__syscall_unlinkat:nr,_emscripten_throw_longjmp:WA,clock_time_get:ar,emscripten_resize_heap:Vr,fd_close:Be,fd_read:Xr,fd_seek:Fr,fd_write:YA,invoke_i:Ae,invoke_ii:Ix,invoke_iii:Lx,invoke_iiid:Mn,invoke_iiii:Gx,invoke_iiiii:Fx,invoke_iiiiii:In,invoke_iijii:Pn,invoke_v:bx,invoke_vi:Nn,invoke_vii:Tx,invoke_viii:kt,invoke_viiii:uA,invoke_viiiii:yt};function bx(i){var v=g0();try{Bx(i)()}catch(c){if(ix(v),!(c instanceof I))throw c;$(1,0)}}function Tx(i,v,c){var u=g0();try{Bx(i)(v,c)}catch(m){if(ix(u),!(m instanceof I))throw m;$(1,0)}}function Ix(i,v){var c=g0();try{return Bx(i)(v)}catch(u){if(ix(c),!(u instanceof I))throw u;$(1,0)}}function Lx(i,v,c){var u=g0();try{return Bx(i)(v,c)}catch(m){if(ix(u),!(m instanceof I))throw m;$(1,0)}}function Ae(i){var v=g0();try{return Bx(i)()}catch(c){if(ix(v),!(c instanceof I))throw c;$(1,0)}}function Gx(i,v,c,u){var m=g0();try{return Bx(i)(v,c,u)}catch(w){if(ix(m),!(w instanceof I))throw w;$(1,0)}}function uA(i,v,c,u,m){var w=g0();try{Bx(i)(v,c,u,m)}catch(M){if(ix(w),!(M instanceof I))throw M;$(1,0)}}function Fx(i,v,c,u,m){var w=g0();try{return Bx(i)(v,c,u,m)}catch(M){if(ix(w),!(M instanceof I))throw M;$(1,0)}}function yt(i,v,c,u,m,w){var M=g0();try{Bx(i)(v,c,u,m,w)}catch(z){if(ix(M),!(z instanceof I))throw z;$(1,0)}}function Pn(i,v,c,u,m){var w=g0();try{return Bx(i)(v,c,u,m)}catch(M){if(ix(w),!(M instanceof I))throw M;$(1,0)}}function Nn(i,v){var c=g0();try{Bx(i)(v)}catch(u){if(ix(c),!(u instanceof I))throw u;$(1,0)}}function kt(i,v,c,u){var m=g0();try{Bx(i)(v,c,u)}catch(w){if(ix(m),!(w instanceof I))throw w;$(1,0)}}function Mn(i,v,c,u){var m=g0();try{return Bx(i)(v,c,u)}catch(w){if(ix(m),!(w instanceof I))throw w;$(1,0)}}function In(i,v,c,u,m,w){var M=g0();try{return Bx(i)(v,c,u,m,w)}catch(z){if(ix(M),!(z instanceof I))throw z;$(1,0)}}function _t(i=[]){var v=d;i.unshift(p);var c=i.length,u=NA((c+1)*4),m=u;for(var w of i)E0[m>>2]=ZA(w),m+=4;E0[m>>2]=0;try{var M=v(c,u);return qx(M,!0),M}catch(z){return Yr(z)}}function Qr(i=D){if(fx>0){b0=Qr;return}if(s0(),fx>0){b0=Qr;return}function v(){if(n.calledRun=!0,!i0){U(),H?.(n),n.onRuntimeInitialized?.();var c=n.noInitialRun||!0;c||_t(i),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),v()},1)):v()}var Ne;return Ne=await Ax(),Qr(),a0?s=n:s=new Promise((i,v)=>{H=i,K=v}),s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),pl=Za({"wasm/bin/pawndbg.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s,n=t,F=!!globalThis.window,f=!!globalThis.WorkerGlobalScope,C=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",D=[],p="./this.program",j=(a,E)=>{throw E};typeof __filename<"u"?r=__filename:f&&(r=self.location.href);var _="",k,S;if(C){var T=require("fs");_=__dirname+"/",S=a=>{a=g(a)?new URL(a):a;var E=T.readFileSync(a);return E},k=async(a,E=!0)=>{a=g(a)?new URL(a):a;var d=T.readFileSync(a,E?void 0:"utf8");return d},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),D=process.argv.slice(2),j=(a,E)=>{throw process.exitCode=a,E}}else if(F||f){try{_=new URL(".",r).href}catch{}f&&(S=a=>{var E=new XMLHttpRequest;return E.open("GET",a,!1),E.responseType="arraybuffer",E.send(null),new Uint8Array(E.response)}),k=async a=>{if(g(a))return new Promise((d,b)=>{var y=new XMLHttpRequest;y.open("GET",a,!0),y.responseType="arraybuffer",y.onload=()=>{if(y.status==200||y.status==0&&y.response){d(y.response);return}b(y.status)},y.onerror=b,y.send(null)});var E=await fetch(a,{credentials:"same-origin"});if(E.ok)return E.arrayBuffer();throw new Error(E.status+" : "+E.url)}}var N=console.log.bind(console),L=console.error.bind(console),O,i0=!1,R,g=a=>a.startsWith("file://");class I{}class Y extends I{}function W(a){for(var E=0,d=a.length,b=new Uint8Array(d),y;E<d;++E)y=a.charCodeAt(E),b[E]=~y>>8&y;return b}var H,K,a0=!1,t0=!1;function Z(){var a=NA.buffer;ox=new Int8Array(a),K0=new Int16Array(a),AA=new Uint8Array(a),Pr=new Uint16Array(a),O0=new Int32Array(a),E0=new Uint32Array(a),qr=new Float32Array(a),Tr=new Float64Array(a),z0=new BigInt64Array(a),Nr=new BigUint64Array(a)}function s0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)er(n.preRun.shift());_A(Jx)}function U(){a0=!0,!n.noFSInit&&!o.initialized&&o.init(),ex.init(),xe.__wasm_call_ctors(),o.ignorePermissions=!1}function v0(){}function f0(){vr(),o.quit(),ex.shutdown(),t0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)Ar(n.postRun.shift());_A(wA)}function d0(a){n.onAbort?.(a),a=`Aborted(${a})`,L(a),i0=!0,a+=". Build with -sASSERTIONS for more info.";var E=new WebAssembly.RuntimeError(a);throw K?.(E),E}var q0;function I0(){return W(`\0asm\0\0\0\xB4\`\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\x7F~~~~\0\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\0\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\0\`\0\0\`\0\x7F\`\x7F~~\x7F\0\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F~\x7F\x7F\x7F\`\x7F\x7F|\0\`\x7F~\0\`\x7F|\`\x7F~~~\0\`\x7F~\`|\x7F|\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F~\0\`~~~~\x7F\`~~~\x7F\`\x7F|\0\xFD env\r__assert_fail\0 env__syscall_openat\0env__syscall_fcntl64\0env__syscall_ioctl\0wasi_snapshot_preview1\bfd_write\0wasi_snapshot_preview1\x07fd_read\0wasi_snapshot_preview1\bfd_close\0\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\0VU
|
|
1163
1163
|
|
|
1164
1164
|
\0\x07\v\v\0\b\0\0 \x07\0 \0\b\0\0\f\0\0\r\0\0\x07\0\f\x1B\x07\x07\f\0\v
|
|
1165
1165
|
p\r\r\x07\x82\x80\x80\b\x7FA\x80\xAC\v\x07\xBD memory\0__wasm_call_ctors\0 __main_argc_argv\0
|
|
@@ -1523,147 +1523,8 @@ Usage: pawndbg -f <mapfile> [options]
|
|
|
1523
1523
|
\v\f\r\x1B !"#\xFF\xFF\xFF\xFF\xFF\xFF
|
|
1524
1524
|
\v\f\r\x1B !"#\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x07\0A\xC0\x1B\v\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\0\0A\xE4\x1B\v\x07\0A\xFC\x1B\v
|
|
1525
1525
|
\0\0\0\0\0\0\xEC\0A\x94\v\0A\xA4\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xE8\v \xD8\r\0\0\0\0\0\0\0A\xFC\v\b\0A\x94\v\0\0\0 \0\0\0\xF8\0\0\0\0A\xAC\v\0A\xBC\v\xFF\xFF\xFF\xFF
|
|
1526
|
-
\0A\x80\v\vp\0\0D\0\0\0`)}function
|
|
1527
|
-
`));if(!a)return null;Lx=HA(a,!0)}return Lx.shift()},xx={ttys:[],init(){},shutdown(){},register(a,E){xx.ttys[a]={input:[],output:[],ops:E},o.registerDevice(a,xx.stream_ops)},stream_ops:{open(a){var E=xx.ttys[a.node.rdev];if(!E)throw new o.ErrnoError(43);a.tty=E,a.seekable=!1},close(a){a.tty.ops.fsync(a.tty)},fsync(a){a.tty.ops.fsync(a.tty)},read(a,E,d,b,y){if(!a.tty||!a.tty.ops.get_char)throw new o.ErrnoError(60);for(var $=0,G=0;G<b;G++){var V;try{V=a.tty.ops.get_char(a.tty)}catch{throw new o.ErrnoError(29)}if(V===void 0&&$===0)throw new o.ErrnoError(6);if(V==null)break;$++,E[d+G]=V}return $&&(a.node.atime=Date.now()),$},write(a,E,d,b,y){if(!a.tty||!a.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var $=0;$<b;$++)a.tty.ops.put_char(a.tty,E[d+$])}catch{throw new o.ErrnoError(29)}return b&&(a.node.mtime=a.node.ctime=Date.now()),$}},default_tty_ops:{get_char(a){return $r()},put_char(a,E){E===null||E===10?(N(eA(a.output)),a.output=[]):E!=0&&a.output.push(E)},fsync(a){a.output?.length>0&&(N(eA(a.output)),a.output=[])},ioctl_tcgets(a){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(a,E,d){return 0},ioctl_tiocgwinsz(a){return[24,80]}},default_tty1_ops:{put_char(a,E){E===null||E===10?(L(eA(a.output)),a.output=[]):E!=0&&a.output.push(E)},fsync(a){a.output?.length>0&&(L(eA(a.output)),a.output=[])}}},wA=a=>{d0()},t0={ops_table:null,mount(a){return t0.createNode(null,"/",16895,0)},createNode(a,E,d,b){if(o.isBlkdev(d)||o.isFIFO(d))throw new o.ErrnoError(63);t0.ops_table||(t0.ops_table={dir:{node:{getattr:t0.node_ops.getattr,setattr:t0.node_ops.setattr,lookup:t0.node_ops.lookup,mknod:t0.node_ops.mknod,rename:t0.node_ops.rename,unlink:t0.node_ops.unlink,rmdir:t0.node_ops.rmdir,readdir:t0.node_ops.readdir,symlink:t0.node_ops.symlink},stream:{llseek:t0.stream_ops.llseek}},file:{node:{getattr:t0.node_ops.getattr,setattr:t0.node_ops.setattr},stream:{llseek:t0.stream_ops.llseek,read:t0.stream_ops.read,write:t0.stream_ops.write,mmap:t0.stream_ops.mmap,msync:t0.stream_ops.msync}},link:{node:{getattr:t0.node_ops.getattr,setattr:t0.node_ops.setattr,readlink:t0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:t0.node_ops.getattr,setattr:t0.node_ops.setattr},stream:o.chrdev_stream_ops}});var y=o.createNode(a,E,d,b);return o.isDir(y.mode)?(y.node_ops=t0.ops_table.dir.node,y.stream_ops=t0.ops_table.dir.stream,y.contents={}):o.isFile(y.mode)?(y.node_ops=t0.ops_table.file.node,y.stream_ops=t0.ops_table.file.stream,y.usedBytes=0,y.contents=t0.emptyFileContents??(t0.emptyFileContents=new Uint8Array(0))):o.isLink(y.mode)?(y.node_ops=t0.ops_table.link.node,y.stream_ops=t0.ops_table.link.stream):o.isChrdev(y.mode)&&(y.node_ops=t0.ops_table.chrdev.node,y.stream_ops=t0.ops_table.chrdev.stream),y.atime=y.mtime=y.ctime=Date.now(),a&&(a.contents[E]=y,a.atime=a.mtime=a.ctime=y.atime),y},getFileDataAsTypedArray(a){return a.contents.subarray(0,a.usedBytes)},expandFileStorage(a,E){var d=a.contents.length;if(!(d>=E)){var b=1024*1024;E=Math.max(E,d*(d<b?2:1.125)>>>0),d&&(E=Math.max(E,256));var y=t0.getFileDataAsTypedArray(a);a.contents=new Uint8Array(E),a.contents.set(y)}},resizeFileStorage(a,E){if(a.usedBytes!=E){var d=a.contents;a.contents=new Uint8Array(E),a.contents.set(d.subarray(0,Math.min(E,a.usedBytes))),a.usedBytes=E}},node_ops:{getattr(a){var E={};return E.dev=o.isChrdev(a.mode)?a.id:1,E.ino=a.id,E.mode=a.mode,E.nlink=1,E.uid=0,E.gid=0,E.rdev=a.rdev,o.isDir(a.mode)?E.size=4096:o.isFile(a.mode)?E.size=a.usedBytes:o.isLink(a.mode)?E.size=a.link.length:E.size=0,E.atime=new Date(a.atime),E.mtime=new Date(a.mtime),E.ctime=new Date(a.ctime),E.blksize=4096,E.blocks=Math.ceil(E.size/E.blksize),E},setattr(a,E){for(let d of["mode","atime","mtime","ctime"])E[d]!=null&&(a[d]=E[d]);E.size!==void 0&&t0.resizeFileStorage(a,E.size)},lookup(a,E){throw t0.doesNotExistError||(t0.doesNotExistError=new o.ErrnoError(44),t0.doesNotExistError.stack="<generic error, no stack>"),t0.doesNotExistError},mknod(a,E,d,b){return t0.createNode(a,E,d,b)},rename(a,E,d){var b;try{b=o.lookupNode(E,d)}catch{}if(b){if(o.isDir(a.mode))for(var y in b.contents)throw new o.ErrnoError(55);o.hashRemoveNode(b)}delete a.parent.contents[a.name],E.contents[d]=a,a.name=d,E.ctime=E.mtime=a.parent.ctime=a.parent.mtime=Date.now()},unlink(a,E){delete a.contents[E],a.ctime=a.mtime=Date.now()},rmdir(a,E){var d=o.lookupNode(a,E);for(var b in d.contents)throw new o.ErrnoError(55);delete a.contents[E],a.ctime=a.mtime=Date.now()},readdir(a){return[".","..",...Object.keys(a.contents)]},symlink(a,E,d){var b=t0.createNode(a,E,41471,0);return b.link=d,b},readlink(a){if(!o.isLink(a.mode))throw new o.ErrnoError(28);return a.link}},stream_ops:{read(a,E,d,b,y){var $=a.node.contents;if(y>=a.node.usedBytes)return 0;var G=Math.min(a.node.usedBytes-y,b);return E.set($.subarray(y,y+G),d),G},write(a,E,d,b,y,$){if(E.buffer===ix.buffer&&($=!1),!b)return 0;var G=a.node;return G.mtime=G.ctime=Date.now(),$?(G.contents=E.subarray(d,d+b),G.usedBytes=b):G.usedBytes===0&&y===0?(G.contents=E.slice(d,d+b),G.usedBytes=b):(t0.expandFileStorage(G,y+b),G.contents.set(E.subarray(d,d+b),y),G.usedBytes=Math.max(G.usedBytes,y+b)),b},llseek(a,E,d){var b=E;if(d===1?b+=a.position:d===2&&o.isFile(a.node.mode)&&(b+=a.node.usedBytes),b<0)throw new o.ErrnoError(28);return b},mmap(a,E,d,b,y){if(!o.isFile(a.node.mode))throw new o.ErrnoError(43);var $,G,V=a.node.contents;if(!(y&2)&&V.buffer===ix.buffer)G=!1,$=V.byteOffset;else{if(G=!0,$=wA(E),!$)throw new o.ErrnoError(48);V&&((d>0||d+E<V.length)&&(V.subarray?V=V.subarray(d,d+E):V=Array.prototype.slice.call(V,d,d+E)),ix.set(V,$))}return{ptr:$,allocated:G}},msync(a,E,d,b,y){return t0.stream_ops.write(a,E,0,b,d,!1),0}}},SA=a=>{if(typeof a!="string")return a;var E={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},d=E[a];if(typeof d>"u")throw new Error(`Unknown file open mode: ${a}`);return d},Kx=a=>(typeof a=="string"&&(a=HA(a,!0)),a.subarray||(a=new Uint8Array(a)),a),tA=(a,E)=>{var d=0;return a&&(d|=365),E&&(d|=146),d},P0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},y0={mount(a){return y0.createNode(null,"/",a.opts.fs.lstat(a.opts.root).mode,0)},createNode(a,E,d,b){if(!o.isDir(d)&&!o.isFile(d)&&!o.isLink(d))throw new o.ErrnoError(P0.EINVAL);var y=o.createNode(a,E,d);return y.node_ops=y0.node_ops,y.stream_ops=y0.stream_ops,y},realPath(a){for(var E=[];a.parent!==a;)E.push(a.name),a=a.parent;return E.push(a.mount.opts.root),E.reverse(),l0.join(...E)},node_ops:{getattr(a){var E=y0.realPath(a),d;try{d=a.mount.opts.fs.lstat(E)}catch(b){throw b.code?new o.ErrnoError(P0[b.code]):b}return{dev:d.dev,ino:d.ino,mode:d.mode,nlink:d.nlink,uid:d.uid,gid:d.gid,rdev:d.rdev,size:d.size,atime:d.atime,mtime:d.mtime,ctime:d.ctime,blksize:d.blksize,blocks:d.blocks}},setattr(a,E){var d=y0.realPath(a);try{if(E.mode!==void 0&&(a.mount.opts.fs.chmod(d,E.mode),a.mode=E.mode),E.atime||E.mtime){var b=new Date(E.atime||E.mtime),y=new Date(E.mtime||E.atime);a.mount.opts.fs.utime(d,b,y)}E.size!==void 0&&a.mount.opts.fs.truncate(d,E.size)}catch($){throw $.code?new o.ErrnoError(P0[$.code]):$}},lookup(a,E){try{var d=l0.join2(y0.realPath(a),E),b=a.mount.opts.fs.lstat(d).mode,y=y0.createNode(a,E,b);return y}catch($){throw $.code?new o.ErrnoError(P0[$.code]):$}},mknod(a,E,d,b){var y=y0.createNode(a,E,d,b),$=y0.realPath(y);try{o.isDir(y.mode)?y.mount.opts.fs.mkdir($,y.mode):y.mount.opts.fs.writeFile($,"",{mode:y.mode})}catch(G){throw G.code?new o.ErrnoError(P0[G.code]):G}return y},rename(a,E,d){var b=y0.realPath(a),y=l0.join2(y0.realPath(E),d);try{a.mount.opts.fs.rename(b,y),a.name=d}catch($){throw $.code?new o.ErrnoError(P0[$.code]):$}},unlink(a,E){var d=l0.join2(y0.realPath(a),E);try{a.mount.opts.fs.unlink(d)}catch(b){throw b.code?new o.ErrnoError(P0[b.code]):b}},rmdir(a,E){var d=l0.join2(y0.realPath(a),E);try{a.mount.opts.fs.rmdir(d)}catch(b){throw b.code?new o.ErrnoError(P0[b.code]):b}},readdir(a){var E=y0.realPath(a);try{return a.mount.opts.fs.readdir(E)}catch(d){throw d.code?new o.ErrnoError(P0[d.code]):d}},symlink(a,E,d){var b=l0.join2(y0.realPath(a),E);try{a.mount.opts.fs.symlink(d,b)}catch(y){throw y.code?new o.ErrnoError(P0[y.code]):y}},readlink(a){var E=y0.realPath(a);try{return a.mount.opts.fs.readlink(E)}catch(d){throw d.code?new o.ErrnoError(P0[d.code]):d}}},stream_ops:{open(a){var E=y0.realPath(a.node);try{a.nfd=a.node.mount.opts.fs.open(E,a.flags)}catch(d){throw d.code?new o.ErrnoError(P0[d.code]):d}},close(a){try{a.node.mount.opts.fs.close(a.nfd)}catch(E){throw E.code?new o.ErrnoError(P0[E.code]):E}},read(a,E,d,b,y){try{return a.node.mount.opts.fs.read(a.nfd,E,d,b,y)}catch($){throw $.code?new o.ErrnoError(P0[$.code]):$}},write(a,E,d,b,y){try{return a.node.mount.opts.fs.write(a.nfd,E,d,b,y)}catch($){throw $.code?new o.ErrnoError(P0[$.code]):$}},llseek(a,E,d){var b=E;if(d===1)b+=a.position;else if(d===2&&o.isFile(a.node.mode))try{var y=a.node.node_ops.getattr(a.node);b+=y.size}catch($){throw new o.ErrnoError(P0[$.code])}if(b<0)throw new o.ErrnoError(P0.EINVAL);return b}}},cA=async a=>{var E=await k(a);return new Uint8Array(E)},ge=(...a)=>o.createDataFile(...a),Ex=a=>a,Fx=0,b0=null,ye=a=>{if(Fx--,n.monitorRunDependencies?.(Fx),Fx==0&&b0){var E=b0;b0=null,E()}},Sx=a=>{Fx++,n.monitorRunDependencies?.(Fx)},ae=[],BA=async(a,E)=>{typeof Browser<"u"&&Browser.init();for(var d of ae)if(d.canHandle(E))return d.handle(a,E);return a},$A=async(a,E,d,b,y,$,G,V)=>{var a0=E?fx.resolve(l0.join2(a,E)):a,D0=Ex(`cp ${a0}`);Sx(D0);try{var z0=d;typeof d=="string"&&(z0=await cA(d)),z0=await BA(z0,a0),V?.(),$||ge(a,E,z0,b,y,G)}finally{ye(D0)}},qr=(a,E,d,b,y,$,G,V,a0,D0)=>{$A(a,E,d,b,y,V,a0,D0).then($).catch(G)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(a){dx(this,"name","ErrnoError"),this.errno=a}},FSStream:class{constructor(){dx(this,"shared",{})}get object(){return this.node}set object(a){this.node=a}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(a){this.shared.flags=a}get position(){return this.shared.position}set position(a){this.shared.position=a}},FSNode:class{constructor(a,E,d,b){dx(this,"node_ops",{}),dx(this,"stream_ops",{}),dx(this,"readMode",365),dx(this,"writeMode",146),dx(this,"mounted",null),a||(a=this),this.parent=a,this.mount=a.mount,this.id=o.nextInode++,this.name=E,this.mode=d,this.rdev=b,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(a){a?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(a){a?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(a,E={}){if(!a)throw new o.ErrnoError(44);E.follow_mount??(E.follow_mount=!0),l0.isAbs(a)||(a=o.cwd()+"/"+a);x:for(var d=0;d<40;d++){for(var b=a.split("/").filter(D0=>!!D0),y=o.root,$="/",G=0;G<b.length;G++){var V=G===b.length-1;if(V&&E.parent)break;if(b[G]!=="."){if(b[G]===".."){if($=l0.dirname($),o.isRoot(y)){a=$+"/"+b.slice(G+1).join("/"),d--;continue x}else y=y.parent;continue}$=l0.join2($,b[G]);try{y=o.lookupNode(y,b[G])}catch(D0){if(D0?.errno===44&&V&&E.noent_okay)return{path:$};throw D0}if(o.isMountpoint(y)&&(!V||E.follow_mount)&&(y=y.mounted.root),o.isLink(y.mode)&&(!V||E.follow)){if(!y.node_ops.readlink)throw new o.ErrnoError(52);var a0=y.node_ops.readlink(y);l0.isAbs(a0)||(a0=l0.dirname($)+"/"+a0),a=a0+"/"+b.slice(G+1).join("/");continue x}}}return{path:$,node:y}}throw new o.ErrnoError(32)},getPath(a){for(var E;;){if(o.isRoot(a)){var d=a.mount.mountpoint;return E?d[d.length-1]!=="/"?`${d}/${E}`:d+E:d}E=E?`${a.name}/${E}`:a.name,a=a.parent}},hashName(a,E){for(var d=0,b=0;b<E.length;b++)d=(d<<5)-d+E.charCodeAt(b)|0;return(a+d>>>0)%o.nameTable.length},hashAddNode(a){var E=o.hashName(a.parent.id,a.name);a.name_next=o.nameTable[E],o.nameTable[E]=a},hashRemoveNode(a){var E=o.hashName(a.parent.id,a.name);if(o.nameTable[E]===a)o.nameTable[E]=a.name_next;else for(var d=o.nameTable[E];d;){if(d.name_next===a){d.name_next=a.name_next;break}d=d.name_next}},lookupNode(a,E){var d=o.mayLookup(a);if(d)throw new o.ErrnoError(d);for(var b=o.hashName(a.id,E),y=o.nameTable[b];y;y=y.name_next){var $=y.name;if(y.parent.id===a.id&&$===E)return y}return o.lookup(a,E)},createNode(a,E,d,b){var y=new o.FSNode(a,E,d,b);return o.hashAddNode(y),y},destroyNode(a){o.hashRemoveNode(a)},isRoot(a){return a===a.parent},isMountpoint(a){return!!a.mounted},isFile(a){return(a&61440)===32768},isDir(a){return(a&61440)===16384},isLink(a){return(a&61440)===40960},isChrdev(a){return(a&61440)===8192},isBlkdev(a){return(a&61440)===24576},isFIFO(a){return(a&61440)===4096},isSocket(a){return(a&49152)===49152},flagsToPermissionString(a){var E=["r","w","rw"][a&3];return a&512&&(E+="w"),E},nodePermissions(a,E){return o.ignorePermissions?0:E.includes("r")&&!(a.mode&292)||E.includes("w")&&!(a.mode&146)||E.includes("x")&&!(a.mode&73)?2:0},mayLookup(a){if(!o.isDir(a.mode))return 54;var E=o.nodePermissions(a,"x");return E||(a.node_ops.lookup?0:2)},mayCreate(a,E){if(!o.isDir(a.mode))return 54;try{var d=o.lookupNode(a,E);return 20}catch{}return o.nodePermissions(a,"wx")},mayDelete(a,E,d){var b;try{b=o.lookupNode(a,E)}catch($){return $.errno}var y=o.nodePermissions(a,"wx");if(y)return y;if(d){if(!o.isDir(b.mode))return 54;if(o.isRoot(b)||o.getPath(b)===o.cwd())return 10}else if(o.isDir(b.mode))return 31;return 0},mayOpen(a,E){if(!a)return 44;if(o.isLink(a.mode))return 32;var d=o.flagsToPermissionString(E);return o.isDir(a.mode)&&(d!=="r"||E&576)?31:o.nodePermissions(a,d)},checkOpExists(a,E){if(!a)throw new o.ErrnoError(E);return a},MAX_OPEN_FDS:4096,nextfd(){for(var a=0;a<=o.MAX_OPEN_FDS;a++)if(!o.streams[a])return a;throw new o.ErrnoError(33)},getStreamChecked(a){var E=o.getStream(a);if(!E)throw new o.ErrnoError(8);return E},getStream:a=>o.streams[a],createStream(a,E=-1){return a=Object.assign(new o.FSStream,a),E==-1&&(E=o.nextfd()),a.fd=E,o.streams[E]=a,a},closeStream(a){o.streams[a]=null},dupStream(a,E=-1){var d=o.createStream(a,E);return d.stream_ops?.dup?.(d),d},doSetAttr(a,E,d){var b=a?.stream_ops.setattr,y=b?a:E;b??(b=E.node_ops.setattr),o.checkOpExists(b,63);try{b(y,d)}catch($){throw $ instanceof RangeError?new o.ErrnoError(22):$}},chrdev_stream_ops:{open(a){var E=o.getDevice(a.node.rdev);a.stream_ops=E.stream_ops,a.stream_ops.open?.(a)},llseek(){throw new o.ErrnoError(70)}},major:a=>a>>8,minor:a=>a&255,makedev:(a,E)=>a<<8|E,registerDevice(a,E){o.devices[a]={stream_ops:E}},getDevice:a=>o.devices[a],getMounts(a){for(var E=[],d=[a];d.length;){var b=d.pop();E.push(b),d.push(...b.mounts)}return E},syncfs(a,E){typeof a=="function"&&(E=a,a=!1),o.syncFSRequests++,o.syncFSRequests>1&&L(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var d=o.getMounts(o.root.mount),b=0;function y(V){return o.syncFSRequests--,E(V)}function $(V){if(V)return $.errored?void 0:($.errored=!0,y(V));++b>=d.length&&y(null)}for(var G of d)G.type.syncfs?G.type.syncfs(G,a,$):$(null)},mount(a,E,d){var b=d==="/",y=!d,$;if(b&&o.root)throw new o.ErrnoError(10);if(!b&&!y){var G=o.lookupPath(d,{follow_mount:!1});if(d=G.path,$=G.node,o.isMountpoint($))throw new o.ErrnoError(10);if(!o.isDir($.mode))throw new o.ErrnoError(54)}var V={type:a,opts:E,mountpoint:d,mounts:[]},a0=a.mount(V);return a0.mount=V,V.root=a0,b?o.root=a0:$&&($.mounted=V,$.mount&&$.mount.mounts.push(V)),a0},unmount(a){var E=o.lookupPath(a,{follow_mount:!1});if(!o.isMountpoint(E.node))throw new o.ErrnoError(28);var d=E.node,b=d.mounted,y=o.getMounts(b);for(var[$,G]of Object.entries(o.nameTable))for(;G;){var V=G.name_next;y.includes(G.mount)&&o.destroyNode(G),G=V}d.mounted=null;var a0=d.mount.mounts.indexOf(b);d.mount.mounts.splice(a0,1)},lookup(a,E){return a.node_ops.lookup(a,E)},mknod(a,E,d){var b=o.lookupPath(a,{parent:!0}),y=b.node,$=l0.basename(a);if(!$)throw new o.ErrnoError(28);if($==="."||$==="..")throw new o.ErrnoError(20);var G=o.mayCreate(y,$);if(G)throw new o.ErrnoError(G);if(!y.node_ops.mknod)throw new o.ErrnoError(63);return y.node_ops.mknod(y,$,E,d)},statfs(a){return o.statfsNode(o.lookupPath(a,{follow:!0}).node)},statfsStream(a){return o.statfsNode(a.node)},statfsNode(a){var E={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return a.node_ops.statfs&&Object.assign(E,a.node_ops.statfs(a.mount.opts.root)),E},create(a,E=438){return E&=4095,E|=32768,o.mknod(a,E,0)},mkdir(a,E=511){return E&=1023,E|=16384,o.mknod(a,E,0)},mkdirTree(a,E){var d=a.split("/"),b="";for(var y of d)if(y){(b||l0.isAbs(a))&&(b+="/"),b+=y;try{o.mkdir(b,E)}catch($){if($.errno!=20)throw $}}},mkdev(a,E,d){return typeof d>"u"&&(d=E,E=438),E|=8192,o.mknod(a,E,d)},symlink(a,E){if(!fx.resolve(a))throw new o.ErrnoError(44);var d=o.lookupPath(E,{parent:!0}),b=d.node;if(!b)throw new o.ErrnoError(44);var y=l0.basename(E),$=o.mayCreate(b,y);if($)throw new o.ErrnoError($);if(!b.node_ops.symlink)throw new o.ErrnoError(63);return b.node_ops.symlink(b,y,a)},rename(a,E){var d=l0.dirname(a),b=l0.dirname(E),y=l0.basename(a),$=l0.basename(E),G,V,a0;if(G=o.lookupPath(a,{parent:!0}),V=G.node,G=o.lookupPath(E,{parent:!0}),a0=G.node,!V||!a0)throw new o.ErrnoError(44);if(V.mount!==a0.mount)throw new o.ErrnoError(75);var D0=o.lookupNode(V,y),z0=fx.relative(a,b);if(z0.charAt(0)!==".")throw new o.ErrnoError(28);if(z0=fx.relative(E,d),z0.charAt(0)!==".")throw new o.ErrnoError(55);var N0;try{N0=o.lookupNode(a0,$)}catch{}if(D0!==N0){var S0=o.isDir(D0.mode),m0=o.mayDelete(V,y,S0);if(m0)throw new o.ErrnoError(m0);if(m0=N0?o.mayDelete(a0,$,S0):o.mayCreate(a0,$),m0)throw new o.ErrnoError(m0);if(!V.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(D0)||N0&&o.isMountpoint(N0))throw new o.ErrnoError(10);if(a0!==V&&(m0=o.nodePermissions(V,"w"),m0))throw new o.ErrnoError(m0);o.hashRemoveNode(D0);try{V.node_ops.rename(D0,a0,$),D0.parent=a0}catch(Ax){throw Ax}finally{o.hashAddNode(D0)}}},rmdir(a){var E=o.lookupPath(a,{parent:!0}),d=E.node,b=l0.basename(a),y=o.lookupNode(d,b),$=o.mayDelete(d,b,!0);if($)throw new o.ErrnoError($);if(!d.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(y))throw new o.ErrnoError(10);d.node_ops.rmdir(d,b),o.destroyNode(y)},readdir(a){var E=o.lookupPath(a,{follow:!0}),d=E.node,b=o.checkOpExists(d.node_ops.readdir,54);return b(d)},unlink(a){var E=o.lookupPath(a,{parent:!0}),d=E.node;if(!d)throw new o.ErrnoError(44);var b=l0.basename(a),y=o.lookupNode(d,b),$=o.mayDelete(d,b,!1);if($)throw new o.ErrnoError($);if(!d.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(y))throw new o.ErrnoError(10);d.node_ops.unlink(d,b),o.destroyNode(y)},readlink(a){var E=o.lookupPath(a),d=E.node;if(!d)throw new o.ErrnoError(44);if(!d.node_ops.readlink)throw new o.ErrnoError(28);return d.node_ops.readlink(d)},stat(a,E){var d=o.lookupPath(a,{follow:!E}),b=d.node,y=o.checkOpExists(b.node_ops.getattr,63);return y(b)},fstat(a){var E=o.getStreamChecked(a),d=E.node,b=E.stream_ops.getattr,y=b?E:d;return b??(b=d.node_ops.getattr),o.checkOpExists(b,63),b(y)},lstat(a){return o.stat(a,!0)},doChmod(a,E,d,b){o.doSetAttr(a,E,{mode:d&4095|E.mode&-4096,ctime:Date.now(),dontFollow:b})},chmod(a,E,d){var b;if(typeof a=="string"){var y=o.lookupPath(a,{follow:!d});b=y.node}else b=a;o.doChmod(null,b,E,d)},lchmod(a,E){o.chmod(a,E,!0)},fchmod(a,E){var d=o.getStreamChecked(a);o.doChmod(d,d.node,E,!1)},doChown(a,E,d){o.doSetAttr(a,E,{timestamp:Date.now(),dontFollow:d})},chown(a,E,d,b){var y;if(typeof a=="string"){var $=o.lookupPath(a,{follow:!b});y=$.node}else y=a;o.doChown(null,y,b)},lchown(a,E,d){o.chown(a,E,d,!0)},fchown(a,E,d){var b=o.getStreamChecked(a);o.doChown(b,b.node,!1)},doTruncate(a,E,d){if(o.isDir(E.mode))throw new o.ErrnoError(31);if(!o.isFile(E.mode))throw new o.ErrnoError(28);var b=o.nodePermissions(E,"w");if(b)throw new o.ErrnoError(b);o.doSetAttr(a,E,{size:d,timestamp:Date.now()})},truncate(a,E){if(E<0)throw new o.ErrnoError(28);var d;if(typeof a=="string"){var b=o.lookupPath(a,{follow:!0});d=b.node}else d=a;o.doTruncate(null,d,E)},ftruncate(a,E){var d=o.getStreamChecked(a);if(E<0||(d.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(d,d.node,E)},utime(a,E,d){var b=o.lookupPath(a,{follow:!0}),y=b.node,$=o.checkOpExists(y.node_ops.setattr,63);$(y,{atime:E,mtime:d})},open(a,E,d=438){if(a==="")throw new o.ErrnoError(44);E=SA(E),E&64?d=d&4095|32768:d=0;var b,y;if(typeof a=="object")b=a;else{y=a.endsWith("/");var $=o.lookupPath(a,{follow:!(E&131072),noent_okay:!0});b=$.node,a=$.path}var G=!1;if(E&64)if(b){if(E&128)throw new o.ErrnoError(20)}else{if(y)throw new o.ErrnoError(31);b=o.mknod(a,d|511,0),G=!0}if(!b)throw new o.ErrnoError(44);if(o.isChrdev(b.mode)&&(E&=-513),E&65536&&!o.isDir(b.mode))throw new o.ErrnoError(54);if(!G){var V=o.mayOpen(b,E);if(V)throw new o.ErrnoError(V)}E&512&&!G&&o.truncate(b,0),E&=-131713;var a0=o.createStream({node:b,path:o.getPath(b),flags:E,seekable:!0,position:0,stream_ops:b.stream_ops,ungotten:[],error:!1});return a0.stream_ops.open&&a0.stream_ops.open(a0),G&&o.chmod(b,d&511),a0},close(a){if(o.isClosed(a))throw new o.ErrnoError(8);a.getdents&&(a.getdents=null);try{a.stream_ops.close&&a.stream_ops.close(a)}catch(E){throw E}finally{o.closeStream(a.fd)}a.fd=null},isClosed(a){return a.fd===null},llseek(a,E,d){if(o.isClosed(a))throw new o.ErrnoError(8);if(!a.seekable||!a.stream_ops.llseek)throw new o.ErrnoError(70);if(d!=0&&d!=1&&d!=2)throw new o.ErrnoError(28);return a.position=a.stream_ops.llseek(a,E,d),a.ungotten=[],a.position},read(a,E,d,b,y){if(b<0||y<0)throw new o.ErrnoError(28);if(o.isClosed(a))throw new o.ErrnoError(8);if((a.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(a.node.mode))throw new o.ErrnoError(31);if(!a.stream_ops.read)throw new o.ErrnoError(28);var $=typeof y<"u";if(!$)y=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var G=a.stream_ops.read(a,E,d,b,y);return $||(a.position+=G),G},write(a,E,d,b,y,$){if(b<0||y<0)throw new o.ErrnoError(28);if(o.isClosed(a))throw new o.ErrnoError(8);if((a.flags&2097155)===0)throw new o.ErrnoError(8);if(o.isDir(a.node.mode))throw new o.ErrnoError(31);if(!a.stream_ops.write)throw new o.ErrnoError(28);a.seekable&&a.flags&1024&&o.llseek(a,0,2);var G=typeof y<"u";if(!G)y=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var V=a.stream_ops.write(a,E,d,b,y,$);return G||(a.position+=V),V},mmap(a,E,d,b,y){if((b&2)!==0&&(y&2)===0&&(a.flags&2097155)!==2)throw new o.ErrnoError(2);if((a.flags&2097155)===1)throw new o.ErrnoError(2);if(!a.stream_ops.mmap)throw new o.ErrnoError(43);if(!E)throw new o.ErrnoError(28);return a.stream_ops.mmap(a,E,d,b,y)},msync(a,E,d,b,y){return a.stream_ops.msync?a.stream_ops.msync(a,E,d,b,y):0},ioctl(a,E,d){if(!a.stream_ops.ioctl)throw new o.ErrnoError(59);return a.stream_ops.ioctl(a,E,d)},readFile(a,E={}){E.flags=E.flags||0,E.encoding=E.encoding||"binary",E.encoding!=="utf8"&&E.encoding!=="binary"&&d0(`Invalid encoding type "${E.encoding}"`);var d=o.open(a,E.flags),b=o.stat(a),y=b.size,$=new Uint8Array(y);return o.read(d,$,0,y,0),E.encoding==="utf8"&&($=eA($)),o.close(d),$},writeFile(a,E,d={}){d.flags=d.flags||577;var b=o.open(a,d.flags,d.mode);E=Kx(E),o.write(b,E,0,E.byteLength,void 0,d.canOwn),o.close(b)},cwd:()=>o.currentPath,chdir(a){var E=o.lookupPath(a,{follow:!0});if(E.node===null)throw new o.ErrnoError(44);if(!o.isDir(E.node.mode))throw new o.ErrnoError(54);var d=o.nodePermissions(E.node,"x");if(d)throw new o.ErrnoError(d);o.currentPath=E.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(b,y,$,G,V)=>G,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),xx.register(o.makedev(5,0),xx.default_tty_ops),xx.register(o.makedev(6,0),xx.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var a=new Uint8Array(1024),E=0,d=()=>(E===0&&(je(a),E=a.byteLength),a[--E]);o.createDevice("/dev","random",d),o.createDevice("/dev","urandom",d),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var a=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var E=o.createNode(a,"fd",16895,73);return E.stream_ops={llseek:t0.stream_ops.llseek},E.node_ops={lookup(d,b){var y=+b,$=o.getStreamChecked(y),G={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>$.path},id:y+1};return G.parent=G,G},readdir(){return Array.from(o.streams.entries()).filter(([d,b])=>b).map(([d,b])=>d.toString())}},E}},{},"/proc/self/fd")},createStandardStreams(a,E,d){a?o.createDevice("/dev","stdin",a):o.symlink("/dev/tty","/dev/stdin"),E?o.createDevice("/dev","stdout",null,E):o.symlink("/dev/tty","/dev/stdout"),d?o.createDevice("/dev","stderr",null,d):o.symlink("/dev/tty1","/dev/stderr");var b=o.open("/dev/stdin",0),y=o.open("/dev/stdout",1),$=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(t0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:t0,PROXYFS:y0}},init(a,E,d){o.initialized=!0,a??(a=n.stdin),E??(E=n.stdout),d??(d=n.stderr),o.createStandardStreams(a,E,d)},quit(){o.initialized=!1,JA(0);for(var a of o.streams)a&&o.close(a)},findObject(a,E){var d=o.analyzePath(a,E);return d.exists?d.object:null},analyzePath(a,E){try{var d=o.lookupPath(a,{follow:!E});a=d.path}catch{}var b={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var d=o.lookupPath(a,{parent:!0});b.parentExists=!0,b.parentPath=d.path,b.parentObject=d.node,b.name=l0.basename(a),d=o.lookupPath(a,{follow:!E}),b.exists=!0,b.path=d.path,b.object=d.node,b.name=d.node.name,b.isRoot=d.path==="/"}catch(y){b.error=y.errno}return b},createPath(a,E,d,b){a=typeof a=="string"?a:o.getPath(a);for(var y=E.split("/").reverse();y.length;){var $=y.pop();if($){var G=l0.join2(a,$);try{o.mkdir(G)}catch(V){if(V.errno!=20)throw V}a=G}}return G},createFile(a,E,d,b,y){var $=l0.join2(typeof a=="string"?a:o.getPath(a),E),G=tA(b,y);return o.create($,G)},createDataFile(a,E,d,b,y,$){var G=E;a&&(a=typeof a=="string"?a:o.getPath(a),G=E?l0.join2(a,E):a);var V=tA(b,y),a0=o.create(G,V);if(d){d=Kx(d),o.chmod(a0,V|146);var D0=o.open(a0,577);o.write(D0,d,0,d.length,0,$),o.close(D0),o.chmod(a0,V)}},createDevice(a,E,d,b){var y,$=l0.join2(typeof a=="string"?a:o.getPath(a),E),G=tA(!!d,!!b);(y=o.createDevice).major??(y.major=64);var V=o.makedev(o.createDevice.major++,0);return o.registerDevice(V,{open(a0){a0.seekable=!1},close(a0){b?.buffer?.length&&b(10)},read(a0,D0,z0,N0,S0){for(var m0=0,Ax=0;Ax<N0;Ax++){var px;try{px=d()}catch{throw new o.ErrnoError(29)}if(px===void 0&&m0===0)throw new o.ErrnoError(6);if(px==null)break;m0++,D0[z0+Ax]=px}return m0&&(a0.node.atime=Date.now()),m0},write(a0,D0,z0,N0,S0){for(var m0=0;m0<N0;m0++)try{b(D0[z0+m0])}catch{throw new o.ErrnoError(29)}return N0&&(a0.node.mtime=a0.node.ctime=Date.now()),m0}}),o.mkdev($,G,V)},forceLoadFile(a){if(a.isDevice||a.isFolder||a.link||a.contents)return!0;if(globalThis.XMLHttpRequest)d0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{a.contents=S(a.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(a,E,d,b,y){class ${constructor(){dx(this,"lengthKnown",!1),dx(this,"chunks",[])}get(S0){if(!(S0>this.length-1||S0<0)){var m0=S0%this.chunkSize,Ax=S0/this.chunkSize|0;return this.getter(Ax)[m0]}}setDataGetter(S0){this.getter=S0}cacheLength(){var S0=new XMLHttpRequest;S0.open("HEAD",d,!1),S0.send(null),S0.status>=200&&S0.status<300||S0.status===304||d0("Couldn't load "+d+". Status: "+S0.status);var m0=Number(S0.getResponseHeader("Content-length")),Ax,px=(Ax=S0.getResponseHeader("Accept-Ranges"))&&Ax==="bytes",qx=(Ax=S0.getResponseHeader("Content-Encoding"))&&Ax==="gzip",Ix=1024*1024;px||(Ix=m0);var Mx=(Rx,dA)=>{Rx>dA&&d0("invalid range ("+Rx+", "+dA+") or no bytes requested!"),dA>m0-1&&d0("only "+m0+" bytes available! programmer error!");var ax=new XMLHttpRequest;return ax.open("GET",d,!1),m0!==Ix&&ax.setRequestHeader("Range","bytes="+Rx+"-"+dA),ax.responseType="arraybuffer",ax.overrideMimeType&&ax.overrideMimeType("text/plain; charset=x-user-defined"),ax.send(null),ax.status>=200&&ax.status<300||ax.status===304||d0("Couldn't load "+d+". Status: "+ax.status),ax.response!==void 0?new Uint8Array(ax.response||[]):HA(ax.responseText||"",!0)},YA=this;YA.setDataGetter(Rx=>{var dA=Rx*Ix,ax=(Rx+1)*Ix-1;return ax=Math.min(ax,m0-1),typeof YA.chunks[Rx]>"u"&&(YA.chunks[Rx]=Mx(dA,ax)),typeof YA.chunks[Rx]>"u"&&d0("doXHR failed!"),YA.chunks[Rx]}),(qx||!m0)&&(Ix=m0=1,m0=this.getter(0).length,Ix=m0,N("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=m0,this._chunkSize=Ix,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){f||d0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var G=new $,V={isDevice:!1,contents:G}}else var V={isDevice:!1,url:d};var a0=o.createFile(a,E,V,b,y);V.contents?a0.contents=V.contents:V.url&&(a0.contents=null,a0.url=V.url),Object.defineProperties(a0,{usedBytes:{get:function(){return this.contents.length}}});var D0={};for(let[N0,S0]of Object.entries(a0.stream_ops))D0[N0]=(...m0)=>(o.forceLoadFile(a0),S0(...m0));function z0(N0,S0,m0,Ax,px){var qx=N0.node.contents;if(px>=qx.length)return 0;var Ix=Math.min(qx.length-px,Ax);if(qx.slice)for(var Mx=0;Mx<Ix;Mx++)S0[m0+Mx]=qx[px+Mx];else for(var Mx=0;Mx<Ix;Mx++)S0[m0+Mx]=qx.get(px+Mx);return Ix}return D0.read=(N0,S0,m0,Ax,px)=>(o.forceLoadFile(a0),z0(N0,S0,m0,Ax,px)),D0.mmap=(N0,S0,m0,Ax,px)=>{o.forceLoadFile(a0);var qx=wA(S0);if(!qx)throw new o.ErrnoError(48);return z0(N0,ix,qx,S0,m0),{ptr:qx,allocated:!0}},a0.stream_ops=D0,a0}},k0={currentUmask:18,calculateAt(a,E,d){if(l0.isAbs(E))return E;var b;if(a===-100)b=o.cwd();else{var y=k0.getStreamFromFD(a);b=y.path}if(E.length==0){if(!d)throw new o.ErrnoError(44);return b}return b+"/"+E},writeStat(a,E){f0[a>>2]=E.dev,f0[a+4>>2]=E.mode,f0[a+8>>2]=E.nlink,f0[a+12>>2]=E.uid,f0[a+16>>2]=E.gid,f0[a+20>>2]=E.rdev,H0[a+24>>3]=BigInt(E.size),O0[a+32>>2]=4096,O0[a+36>>2]=E.blocks;var d=E.atime.getTime(),b=E.mtime.getTime(),y=E.ctime.getTime();return H0[a+40>>3]=BigInt(Math.floor(d/1e3)),f0[a+48>>2]=d%1e3*1e3*1e3,H0[a+56>>3]=BigInt(Math.floor(b/1e3)),f0[a+64>>2]=b%1e3*1e3*1e3,H0[a+72>>3]=BigInt(Math.floor(y/1e3)),f0[a+80>>2]=y%1e3*1e3*1e3,H0[a+88>>3]=BigInt(E.ino),0},writeStatFs(a,E){f0[a+4>>2]=E.bsize,f0[a+60>>2]=E.bsize,H0[a+8>>3]=BigInt(E.blocks),H0[a+16>>3]=BigInt(E.bfree),H0[a+24>>3]=BigInt(E.bavail),H0[a+32>>3]=BigInt(E.files),H0[a+40>>3]=BigInt(E.ffree),f0[a+48>>2]=E.fsid,f0[a+64>>2]=E.flags,f0[a+56>>2]=E.namelen},doMsync(a,E,d,b,y){if(!o.isFile(E.node.mode))throw new o.ErrnoError(43);if(b&2)return 0;var $=AA.slice(a,a+d);o.msync(E,$,y,d,b)},getStreamFromFD(a){var E=o.getStreamChecked(a);return E},varargs:void 0,getStr(a){var E=ux(a);return E}};function ke(a,E,d){k0.varargs=d;try{var b=k0.getStreamFromFD(a);switch(E){case 0:{var y=rA();if(y<0)return-28;for(;o.streams[y];)y++;var $;return $=o.dupStream(b,y),$.fd}case 1:case 2:return 0;case 3:return b.flags;case 4:{var y=rA(),G=289792;return b.flags=b.flags&~G|y&G,0}case 12:{var y=_A(),V=0;return U0[y+V>>1]=2,0}case 13:case 14:return 0}return-28}catch(a0){if(typeof o>"u"||a0.name!=="ErrnoError")throw a0;return-a0.errno}}function qA(a,E,d){k0.varargs=d;try{var b=k0.getStreamFromFD(a);switch(E){case 21509:return b.tty?0:-59;case 21505:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcgets){var y=b.tty.ops.ioctl_tcgets(b),$=_A();O0[$>>2]=y.c_iflag||0,O0[$+4>>2]=y.c_oflag||0,O0[$+8>>2]=y.c_cflag||0,O0[$+12>>2]=y.c_lflag||0;for(var G=0;G<32;G++)ix[$+G+17]=y.c_cc[G]||0;return 0}return 0}case 21510:case 21511:case 21512:return b.tty?0:-59;case 21506:case 21507:case 21508:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcsets){for(var $=_A(),V=O0[$>>2],a0=O0[$+4>>2],D0=O0[$+8>>2],z0=O0[$+12>>2],N0=[],G=0;G<32;G++)N0.push(ix[$+G+17]);return b.tty.ops.ioctl_tcsets(b.tty,E,{c_iflag:V,c_oflag:a0,c_cflag:D0,c_lflag:z0,c_cc:N0})}return 0}case 21519:{if(!b.tty)return-59;var $=_A();return O0[$>>2]=0,0}case 21520:return b.tty?-28:-59;case 21537:case 21531:{var $=_A();return o.ioctl(b,E,$)}case 21523:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tiocgwinsz){var S0=b.tty.ops.ioctl_tiocgwinsz(b.tty),$=_A();U0[$>>1]=S0[0],U0[$+2>>1]=S0[1]}return 0}case 21524:return b.tty?0:-59;case 21515:return b.tty?0:-59;default:return-28}}catch(m0){if(typeof o>"u"||m0.name!=="ErrnoError")throw m0;return-m0.errno}}function CA(a,E,d,b){k0.varargs=b;try{E=k0.getStr(E),E=k0.calculateAt(a,E);var y=b?rA():0;return d&64&&(y&=~k0.currentUmask),o.open(E,d,y).fd}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return-$.errno}}var Pr=()=>2147483648,oe=(a,E)=>Math.ceil(a/E)*E,Qe=a=>{var E=PA.buffer.byteLength,d=(a-E+65535)/65536|0;try{return PA.grow(d),Z(),1}catch{}},Ze=a=>{var E=AA.length;a>>>=0;var d=Pr();if(a>d)return!1;for(var b=1;b<=4;b*=2){var y=E*(1+.2/b);y=Math.min(y,a+100663296);var $=Math.min(d,oe(Math.max(a,y),65536)),G=Qe($);if(G)return!0}return!1};function Tr(a){try{var E=k0.getStreamFromFD(a);return o.close(E),0}catch(d){if(typeof o>"u"||d.name!=="ErrnoError")throw d;return d.errno}}var Nr=(a,E,d,b)=>{for(var y=0,$=0;$<d;$++){var G=f0[E>>2],V=f0[E+4>>2];E+=8;var a0=o.read(a,ix,G,V,b);if(a0<0)return-1;if(y+=a0,a0<V)break;typeof b<"u"&&(b+=a0)}return y};function Ir(a,E,d,b){try{var y=k0.getStreamFromFD(a),$=Nr(y,E,d);return f0[b>>2]=$,0}catch(G){if(typeof o>"u"||G.name!=="ErrnoError")throw G;return G.errno}}var Fe=9007199254740992,xr=-9007199254740992,zA=a=>a<xr||a>Fe?NaN:Number(a);function ve(a,E,d,b){E=zA(E);try{if(isNaN(E))return 22;var y=k0.getStreamFromFD(a);return o.llseek(y,E,d),H0[b>>3]=BigInt(y.position),y.getdents&&E===0&&d===0&&(y.getdents=null),0}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return $.errno}}var Mr=(a,E,d,b)=>{for(var y=0,$=0;$<d;$++){var G=f0[E>>2],V=f0[E+4>>2];E+=8;var a0=o.write(a,ix,G,V,b);if(a0<0)return-1;if(y+=a0,a0<V)break;typeof b<"u"&&(b+=a0)}return y};function Ar(a,E,d,b){try{var y=k0.getStreamFromFD(a),$=Mr(y,E,d);return f0[b>>2]=$,0}catch(G){if(typeof o>"u"||G.name!=="ErrnoError")throw G;return G.errno}}var Lr=0,KA=()=>ie||Lr>0,_e=a=>{R=a,KA()||(n.onExit?.(a),s0=!0),j(a,new xA(a))},er=(a,E)=>{R=a,KA()||v0(),_e(a)},rr=a=>{if(a instanceof xA||a=="unwind")return R;j(1,a)},Rr=(a,E,d)=>he(a,AA,E,d),tr=a=>VA(a),Or=a=>{var E=UA(a)+1,d=tr(E);return Rr(a,d,E),d},Gr=(...a)=>o.createPath(...a),fe=(...a)=>o.unlink(...a),Ur=(...a)=>o.createLazyFile(...a),Hr=(...a)=>o.createDevice(...a);if(o.createPreloadedFile=qr,o.preloadFile=$A,o.staticInit(),n.noExitRuntime&&(ie=n.noExitRuntime),n.preloadPlugins&&(ae=n.preloadPlugins),n.print&&(N=n.print),n.printErr&&(L=n.printErr),n.wasmBinary&&(O=n.wasmBinary),n.arguments&&(D=n.arguments),n.thisProgram&&(p=n.thisProgram),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n.callMain=lx,n.addRunDependency=Sx,n.removeRunDependency=ye,n.FS_preloadFile=$A,n.FS_unlink=fe,n.FS_createPath=Gr,n.FS_createDevice=Hr,n.FS=o,n.FS_createDataFile=ge,n.FS_createLazyFile=Ur,n.PROXYFS=y0;var nr,sr,JA,ir,VA,we,$x,zr,PA;function WA(a){nr=n._main=a.__main_argc_argv,sr=a.__funcs_on_exit,JA=a.fflush,ir=a._emscripten_stack_restore,VA=a._emscripten_stack_alloc,we=a.emscripten_stack_get_current,$x=PA=a.memory,zr=a.__indirect_function_table}var Se={__assert_fail:lA,__syscall_fcntl64:ke,__syscall_ioctl:qA,__syscall_openat:CA,emscripten_resize_heap:Ze,fd_close:Tr,fd_read:Ir,fd_seek:ve,fd_write:Ar};function lx(a=[]){var E=nr;a.unshift(p);var d=a.length,b=tr((d+1)*4),y=b;for(var $ of a)f0[y>>2]=Or($),y+=4;f0[y>>2]=0;try{var G=E(d,b);return er(G,!0),G}catch(V){return rr(V)}}function Ee(a=D){if(Fx>0){b0=Ee;return}if(n0(),Fx>0){b0=Ee;return}function E(){if(n.calledRun=!0,!s0){U(),H?.(n),n.onRuntimeInitialized?.();var d=n.noInitialRun||!0;d||lx(a),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),E()},1)):E()}var XA;return XA=await Z0(),Ee(),i0?s=n:s=new Promise((a,E)=>{H=a,z=E}),s}})();typeof A=="object"&&typeof x=="object"?(x.exports=e,x.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),_a={};wE(_a,{createPawnCC:()=>NE,createPawnDbg:()=>IE});wa.exports=SE(_a);var PE=ka($E(),1),TE=ka(qE(),1),NE=PE.default,IE=TE.default});var xu={};Mv(xu,{APM:()=>p0,DDE:()=>vA,DDE_Core:()=>R0,DFILES:()=>tt,DLO:()=>rt,DefaultFiles:()=>e0,Dependencies:()=>Q0,DevError:()=>hx,DevExitCode:()=>jn,DevSession:()=>Ve,DeviceProfiles:()=>yt,Diagnostics:()=>Jr,ENV:()=>ts,Globals:()=>Bx,Helper:()=>j0,HttpMethod:()=>oi,Library:()=>Ne,Log:()=>re,Manifest:()=>J,MyDatanetClient:()=>hn,Package:()=>jx,Registry:()=>ex,build:()=>XD,buildDevelopmentInstallInfo:()=>G8,dev:()=>R8,generateDevApmId:()=>Fi,install:()=>WD,pack:()=>ZD,publish:()=>QD});module.exports=Lv(xu);var Dx=require("vscode-uri");var ur=require("vscode-uri");var Rv=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function bt(A,x=0){let e=~~x^-1;for(let r=0;r<A.length;r++)e=e>>>8^Rv[(e^A[r])&255];return(e^-1)>>>0}var ru=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),tu=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);var j0;(_=>{function A(k,S){let[P,N]=S,{line:L,col:O}=k.linePos(P);return{line:Number(L)-1,startCharacter:O-1,endCharacter:O+(N-P)}}_.yamlRangeToLineInformation=A;let x=new TextEncoder;function e(k){return bt(x.encode(k)).toString(16)}_.generateHashForLibraryName=e;function r(k){return bt(x.encode(k)).toString(16)}_.generateHashForFilePath=r;function t(k){return bt(k).toString(16).toUpperCase().padStart(8,"0")}_.generateCRC32ForFileContent=t;function s(k){try{let S=null;return k?.type==="Buffer"?S=Uint8Array.from(k.data):S=k,new TextDecoder("utf8").decode(S)}catch{return""}}_.convertBlobToString=s;function n(k=""){return k.replace(/\r\n|\n\r|\r/g,`
|
|
1528
|
-
`)}_.normalizeLF=n;function F(k){try{let S=s(k);return n(S).split(`
|
|
1529
|
-
`)}catch{return[]}}_.convertBlobToStringArray=F,_.isNumeric=k=>!Array.isArray(k)&&k-parseFloat(k)+1>=0;function c(k){let S="",P=k.byteLength;for(let N=0;N<P;N++)S+=String.fromCharCode(k[N]);return btoa(S)}_.bufferToBase64=c;function D(k,S){let P=`${k}`.match(/\{\d*(index)(\+\d*)?}/g);if(P){let N=k;return P.forEach(L=>{let O=L.replace(/\+0$/,""),s0=O.match(/index/)?.[0];if(s0){let R=O.slice(1,-1).split(s0)[1],g=parseInt(R)||0;N=N.replace(L,`${S+g}`)}}),N}else return k}_.patchValueWithArrayInfo=D;let p={};function j(k,S,P){let N=p[k];N&&clearTimeout(N.timer),p[k]={timer:setTimeout(()=>{delete p[k],P()},S),handler:P}}_.defer=j})(j0||={});var Wa=require("image-dimensions"),Xa=require("file-type-checker");var cu=require("cross-fetch/polyfill"),Si=cx(require("openapi-fetch"));var ce=require("vscode-uri");var Tx="dist/",mi="dde/",In="dlo/",Mn=".studio/",ji="dfiles/",e0;(f=>{f.fileNames={projectSettings:"studio.json",mainAmx:"main.amx",mainAmxReport:"main.xml",ddeXml:"dde.xml",ddeOpenApi:"main.yaml",historyJson:"history.json",mainDDE:"main.dde",autoInc:"auto.inc",defaultInc:"default.inc",autoUplinkInc:"app-uplink.inc",autoDdeInc:"X-dde.inc",mainDdeInc:"main-dde.inc",autoLocalDataInc:"auto-local-data.inc",legacyAutoInc:"legacy-auto.inc",legacyAutoDdeInc:"legacy-auto-dde.inc",legacyAutoUplinkInc:"legacy-auto-uplink.inc",reportTemplate:"mdn_report_template.json",dloCfg:"dlo.cfg",devMirror:"mirror.json",devDeviceLog:"device.jsonl"};let x=`${Mn}auto/`,e=`${Mn}dev/`,r=`${x}dlo/`,t=`${x}dde/`;f.filePaths={studio:{initFile:`${x}.init`,auto:{path:x,dlo:{path:r,autoInc:`${r}${f.fileNames.autoInc}`,defaultInc:`${r}${f.fileNames.defaultInc}`,autoUplinkInc:`${r}${f.fileNames.autoUplinkInc}`,autoLocalDataInc:`${r}${f.fileNames.autoLocalDataInc}`,autoDdeInc:`${r}${f.fileNames.autoDdeInc}`,mainDdeInc:`${r}${f.fileNames.mainDdeInc}`,legacyAutoInc:`${r}${f.fileNames.legacyAutoInc}`,legacyAutoDdeInc:`${r}${f.fileNames.legacyAutoDdeInc}`,legacyAutoUplinkInc:`${r}${f.fileNames.legacyAutoUplinkInc}`,cfg:`${r}${f.fileNames.dloCfg}`},dde:{path:t,historyJson:`${t}${f.fileNames.historyJson}`}},libdeps:`${Mn}libdeps/`,dev:{path:e,mirror:`${e}${f.fileNames.devMirror}`,deviceLog:`${e}${f.fileNames.devDeviceLog}`}},dist:{path:Tx,dloPath:`${Tx}dlo/`,mainAmxPath:`${Tx}dlo/${f.fileNames.mainAmx}`,mainAmxReportPath:`${Tx}dlo/${f.fileNames.mainAmxReport}`,ddeXmlPath:`${Tx}dde/${f.fileNames.ddeXml}`,ddeApiPath:`${Tx}api/`,ddeApi:`${Tx}api/${f.fileNames.ddeOpenApi}`,historyJson:`${Tx}dde/${f.fileNames.historyJson}`,povPath:`${Tx}pov`,povDetailsPath:`${Tx}pov/details`,dfilesPath:`${Tx}dfiles`,dfilesProperties:`${Tx}dfiles/properties.json`,bloPath:`${Tx}blo`,reportTemplate:`${Tx}/${f.fileNames.reportTemplate}`,definesTs:`${Tx}defines.ts`,definesAppTs:`${Tx}defines.app.ts`},dlo:{path:In,mainDLO:`${In}main.dlo`,mainINI:`${In}main.ini`},dde:{path:mi,mainDDE:`${mi}main.dde`},dfiles:{path:ji,mainDFILES:`${ji}/main.dfiles`},appIni:"app.ini",defaultsIni:"defaults.ini"},f.readme=c=>`# ${c} README
|
|
1530
|
-
|
|
1531
|
-
This is the README for your project "${c}". Write a brief description what this project is about.`,f.changelog=`# Changelog
|
|
1532
|
-
|
|
1533
|
-
All notable changes to this project will be documented in this file.
|
|
1534
|
-
|
|
1535
|
-
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).`})(e0||={});var yi=cx(require("ini"));var Ov=j0.convertBlobToString,Gv=e0.filePaths.dlo.path,Bx;(t=>{let A;(f=>(f.lucky="lucky",f.wynni="wynni",f.production="production"))(A=t.ENV||={});async function x(s,n,F){let f=await J.read(s,n),c=await Q0.getAll(f),D={},p={},j={};for(let L in c){let O=Q0.dependencyToPath(s,L),s0=Q0.dependencyIdToName(L),R=ce.Utils.joinPath(O,Gv,`${s0}.ini`);await Fr(n,R,D,p,j,s0);let g=ce.Utils.joinPath(O,e0.filePaths.defaultsIni);await Fr(n,g,D,p,j,s0)}if(J.isLibrary(f)){let L=ce.Utils.joinPath(s,e0.filePaths.dlo.path,`${f.name}.ini`);F&&await n.stat(L)&&F.warn(`dlo/${f.name}.ini is deprecated. Please migrate your defines to defaults.ini in the project root.`),await Fr(n,L,D,p,j,f.name)}let _=f.dlo?.iniFile||e0.filePaths.dlo.mainINI,k=ce.Utils.joinPath(s,_);F&&await n.stat(k)&&F.warn(`${_} is deprecated. Please migrate your defines to app.ini in the project root.`);let S=Kv(_);if(await Fr(n,k,D,p,j,S),J.isLibrary(f)){let L=ce.Utils.joinPath(s,e0.filePaths.defaultsIni);await Fr(n,L,D,p,j,"defaults")}let P=Uv(f,D,p,j),N=ce.Utils.joinPath(s,e0.filePaths.appIni);return await Fr(n,N,D,p,j,"app"),{flat:D,sections:p,definesWithSource:j,defaultsOnly:P}}t.read=x;async function e(s,n,F,f){let c=Object.entries(F.flat),D=[];for(let[_,k]of c){let S=F.definesWithSource[_];if(S?.comment){let N=hi(S.comment);for(let L of N.split(`
|
|
1536
|
-
`))D.push(` ${L}`)}let P=gi(k)?"number":"string";D.push(` ${_}: ${P};`)}let p=["// Auto-generated by @microtronics/studio-cli \u2014 DO NOT EDIT","declare global {"," interface StudioDefines {",...D," }"," var STUDIO_DEFINES: StudioDefines;","}","","globalThis.STUDIO_DEFINES ??= {} as StudioDefines;",""];for(let[_,k]of c){let S=F.definesWithSource[_];if(S?.comment&&p.push(hi(S.comment)),gi(k))p.push(`globalThis.STUDIO_DEFINES['${_}'] = ${Number(k)};`);else{let P=k.replace(/\\/g,"\\\\").replace(/'/g,"\\'");p.push(`globalThis.STUDIO_DEFINES['${_}'] = '${P}';`)}}p.push(""),p.push("export {};"),p.push("");let j=ce.Utils.joinPath(s,f??e0.filePaths.dist.definesTs);await n.writeFile(j,p.join(`
|
|
1537
|
-
`))}t.exportDefinesTs=e;function r(s,n){let F=[];return{result:s.replace(/\{\{([^}]+)\}\}/g,(c,D)=>{let p=D.trim();return Object.hasOwn(n,p)?n[p]:(F.push(p),c)}),unresolvedKeys:F}}t.replaceDefineTemplates=r})(Bx||={});function Uv(A,x,e,r){if(J.isLibrary(A))return{flat:{...x},sections:structuredClone(e),definesWithSource:{...r}}}function Hv(A){if(A==="")return{kind:"empty"};if(A.startsWith("#")||A.startsWith(";"))return{kind:"comment",text:A.replace(/^[#;]\s?/,"")};if(A.startsWith("[")&&A.endsWith("]"))return{kind:"section",name:A.slice(1,-1)};let x=A.indexOf("=");return x>0?{kind:"keyValue",key:A.slice(0,x).trim()}:{kind:"other"}}function zv(A){let x={},e=A.split(/\r?\n/),r=[],t=null;for(let s of e){let n=Hv(s.trim());if(n.kind==="empty"||n.kind==="other"){r=[];continue}if(n.kind==="comment"){r.push(n.text);continue}if(n.kind==="section"){t=n.name;continue}let F=t?`${t}_${n.key}`:n.key;r.length>0&&(x[F]=r.join(`
|
|
1538
|
-
`)),r=[]}return x}function hi(A){let x=A.split(`
|
|
1539
|
-
`);return x.length===1?`/** ${x[0]} */`:`/**
|
|
1540
|
-
${x.map(r=>` * ${r}`).join(`
|
|
1541
|
-
`)}
|
|
1542
|
-
*/`}function gi(A){return A!==""&&!isNaN(Number(A))}function Kv(A){return(A.split("/").pop()||A).replace(/\.ini$/i,"")}function ki(A,x,e){let r=x?`${e}: ${x}`:void 0;return A&&r?`${A}
|
|
1543
|
-
${r}`:r||A}function _i(A,x,e,r,t,s,n){let F=t?`${t}_${r}`:r,f={value:A,sourceUri:x,sourceLine:Vv(e,r,t)};return s[F]&&(f.comment=`${n}: ${s[F]}`),f}function Jv(A,x,e,r,t,s,n,F,f){r[A]||(r[A]={});for(let[c,D]of Object.entries(x)){let p=`${A}_${c}`,j=F[p],_=`${D}`;e[p]=_,r[A][c]=_;let k=_i(_,s,n,c,A,F,f);k.comment=ki(t[p]?.comment,j,f),t[p]=k}}async function Fr(A,x,e,r,t,s){if(!await A.stat(x))return;let n=await A.readFile(x),F=Ov(n),f=yi.parse(F),c=x.toString(),D=F.split(/\r?\n/),p=zv(F);for(let[j,_]of Object.entries(f))if(typeof _=="object"&&_!==null)Jv(j,_,e,r,t,c,D,p,s);else{let k=p[j],S=`${_}`;e[j]=S;let P=_i(S,c,D,j,null,p,s);P.comment=ki(t[j]?.comment,k,s),t[j]=P}}function Vv(A,x,e){let r=e===null,t=e?`[${e}]`:null,s=new RegExp(`^\\s*${Wv(x)}\\s*=`);for(let n=0;n<A.length;n++){let F=A[n].trim();if(t&&F===t){r=!0;continue}if(r&&F.startsWith("[")&&F.endsWith("]")&&e!==null){r=!1;continue}if(r&&s.test(A[n]))return n}return 0}function Wv(A){return A.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var jt=cx(require("semver/preload")),{GET:Ln,POST:mt,PUT:wi}=(0,Si.default)();function iA(A){if(A)return{authorization:`Bearer ${A}`}}var ex;(_=>{_.getAPIUrl=k=>{let S="https://api.registry.microtronics.com";return k===Bx.ENV.lucky?S="https://api.registry.lucky.ci.microtronics.com":k===Bx.ENV.wynni&&(S="https://api.registry.wynni.ci.microtronics.com"),{baseUrl:S+"/v1"}};async function x(k,S,P,N){let{data:L,error:O}=await Ln("/publisher/{publisherId}/libraries/{libraryId}",{...(0,_.getAPIUrl)(N),headers:{...iA(k)},params:{path:{publisherId:S,libraryId:P}}});if(O)throw new Error(O.reason);return L}_.getLibraryProfile=x;async function e(k,S,P=!1){let N=await fetch(S,{headers:{...iA(k),...j(!0)}});if(N.status===200)return P?await N.json():await N.arrayBuffer();throw new Error("Failed to fetch the library content")}_.fetchCustomContent=e;async function r(k,S,P){try{let{data:N,error:L}=await Ln("/publisher/{publisherId}",{...(0,_.getAPIUrl)(P),headers:{...iA(k)},params:{path:{publisherId:S}}});return L?(console.error(L),null):N}catch(N){return console.error(N),null}}_.getPublisher=r;async function t(k,S,P,N){try{let{data:L,error:O}=await mt("/packages/{publisherId}/applications",{...(0,_.getAPIUrl)(N),headers:{...iA(k),...j(!0)},params:{path:{publisherId:S}},body:{...P}});if(O)throw new Error(O.reason);return L.id}catch{return null}}_.createNewApplication=t;async function s(k,S,P,N){let{data:L,error:O}=await Ln("/publisher/{publisherId}/applications/{applicationId}",{...(0,_.getAPIUrl)(N),headers:{...iA(k),...j(!0)},params:{path:{publisherId:S,applicationId:P}}});if(O)throw new Error(O.reason);return L}_.getExistingApplication=s;async function n(k,S,P,N,L){try{let{error:O}=await wi("/packages/{publisherId}/applications/{applicationId}",{...(0,_.getAPIUrl)(L),headers:{...iA(k),...j(!0)},params:{path:{publisherId:S,applicationId:P}},body:{...N}});if(O)throw new Error(O.reason);return}catch{return null}}_.updateExistingApplication=n;async function F(k,S,P,N,L,O){let s0=!!jt.default.valid(N);try{let{error:R}=await wi("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,_.getAPIUrl)(O),headers:{...iA(k),...j(s0)},params:{path:{publisherId:S,applicationId:P,applicationVersion:N}},body:{...L}});if(R)throw new Error(R.reason);return}catch{return null}}_.updateExistingApplicationVersion=F;async function f(k,S,P,N,L,O){let s0=!!jt.default.valid(N),{data:R,error:g}=await mt("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,_.getAPIUrl)(O),headers:{...iA(k),...j(s0)},params:{path:{publisherId:S,applicationId:P,applicationVersion:N}},body:{},bodySerializer(){return L}});if(g)throw new Error(g.reason||g.err||g);return R}_.publishApplicationVersion=f;let c={"README.md":"text/markdown","CHANGELOG.md":"text/markdown","library.tar.gz":"application/gzip","studio.json":"application/json"};async function D(k,S,P,N,L,O){try{let{error:s0}=await mt("/packages/{publisherId}/libraries/{libraryId}/versions/{libraryVersion}",{...(0,_.getAPIUrl)(O),headers:{...iA(k),...j(!0)},params:{path:{publisherId:S,libraryId:P,libraryVersion:N}},body:{...L},bodySerializer(R){let g=new FormData;for(let[M,Y]of Object.entries(R))Y!==void 0&&g.append(M,new Blob([Y],{type:c[M]}),M);return g}});if(s0)throw new Error(s0.reason)}catch(s0){throw console.error(s0),s0}}_.publishLibraryVersion=D;async function p(k,S,P,N,L,O,s0){let R=!!jt.default.valid(N),{error:g}=await mt("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}/files/{applicationFileName}",{...(0,_.getAPIUrl)(s0),headers:{...iA(k),...j(R),"Content-Type":"application/octet-stream"},params:{path:{publisherId:S,applicationId:P,applicationVersion:N,applicationFileName:L}},body:{},bodySerializer(){return O}});if(g)throw new Error(g.reason)}_.updateApplicationFile=p;function j(k=!1){return k?{"X-Semver":"true"}:{}}_.injectSemverHeader=j})(ex||={});var Ya=cx(require("semver/preload"));var Ae=require("vscode-uri");var Ie=require("vscode-uri");var Cx=require("vscode-uri");var Aa=cx(require("ajv")),ea=cx(require("ajv-formats"));var $i={$schema:"http://json-schema.org/draft-07/schema#",title:"Dynamic DDE Schema",description:"Describe your data structure for Microtronics IoT devices",type:"object",additionalProperties:!1,properties:{dde:{type:"string",default:"1.0.0",readOnly:!0,description:"Version of the DDE schema. Do not modify this value.",markdownDescription:`Version of the DDE schema.
|
|
1544
|
-
|
|
1545
|
-
\u26A0\uFE0F **Do not modify this value.**`},cloudProject:{type:"boolean",description:"Indicates whether this is a cloud project.",markdownDescription:"Indicates whether this is a cloud project.\n\nWhen set to `false`, certain containers and top-level custom containers are restricted."},constants:{type:"object",description:"Declare constants that can be used across the YAML file.",markdownDescription:"Declare constants that can be referenced and used across the YAML file."},state:{$ref:"#/$defs/stateContainer"},result:{$ref:"#/$defs/resultContainer"},volatile:{$ref:"#/$defs/volatileContainer"},timeseries:{type:"object",description:"Define time-series data channels for recording measurements.",markdownDescription:"Define time-series data channels for recording measurements.\n\n**Limits:** Maximum 9 fields.\n\n**Naming rules:**\n- Must start with a letter or `_`\n- May contain letters, digits, and `_`\n- Names like `field0`, `ch0`, etc. are **not allowed**\n- Reserved names (`_id`, `id`, `_stamp`, `stamp`, `tag`, `_uid`, `customer_id`, `site_id`, `_rec_flags__`, `applog`) are **not allowed**",additionalProperties:!1,maxProperties:9,errorMessage:{maxProperties:"The timeseries container supports a maximum of 9 fields."},properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a timeseries field."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a timeseries field."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a timeseries field."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a timeseries field."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a timeseries field."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a timeseries field."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a timeseries field."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a timeseries field."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a timeseries field."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a timeseries field."}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{$ref:"#/$defs/timeseriesFields"}}},aloha:{type:"object",description:"Special container to transport live data during put-into-operation procedures.",markdownDescription:`Special container to transport **live data** during put-into-operation procedures.
|
|
1546
|
-
|
|
1547
|
-
Used for real-time data exchange between device and server during commissioning.`,$ref:"#/$defs/alohaContainer"},setting:{$ref:"#/$defs/settingContainer"},command:{$ref:"#/$defs/commandContainer"},storage:{$ref:"#/$defs/serverStorageContainer"},relations:{$ref:"#/$defs/serverRelationsContainer"}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)(?!(dde|cloudProject|constants|state|result|volatile|timeseries|aloha|setting|command|storage|relations))[a-zA-Z_][0-9a-zA-Z_]*$":{type:"object",description:"Custom configuration container. Field names must start with a letter or underscore and may contain letters, digits, and underscores.",$ref:"#/$defs/configurationFields"}},allOf:[{if:{properties:{cloudProject:{const:!1}}},then:{type:"object",additionalProperties:!1,errorMessage:{additionalProperties:"Non-cloud projects only allow standard containers (state, result, volatile, timeseries, aloha, setting, command, storage, relations). Set 'cloudProject' to true to use custom top-level containers."},properties:{dde:{type:"string",default:"1.0.0",readOnly:!0,description:"Version of the DDE schema. Do not modify this value."},cloudProject:{type:"boolean"},constants:{type:"object",description:"Declare constants that can be used across the YAML file."},state:{$ref:"#/$defs/stateContainer"},result:{$ref:"#/$defs/resultContainer"},volatile:{$ref:"#/$defs/volatileContainer"},timeseries:{type:"object",description:"Define time-series data channels for recording measurements.",additionalProperties:!1,maxProperties:9,errorMessage:{maxProperties:"The timeseries container supports a maximum of 9 fields."},properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a timeseries field."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a timeseries field."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a timeseries field."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a timeseries field."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a timeseries field."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a timeseries field."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a timeseries field."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a timeseries field."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a timeseries field."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a timeseries field."}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{$ref:"#/$defs/timeseriesFields"}}},aloha:{type:"object",description:"Special container to transport live data during put-into-operation procedures.",$ref:"#/$defs/alohaContainer"},setting:{$ref:"#/$defs/settingContainer"},command:{$ref:"#/$defs/commandContainer"},storage:{$ref:"#/$defs/serverStorageContainer"},relations:{$ref:"#/$defs/serverRelationsContainer"}}}}],$defs:{stateContainer:{type:"object",title:"state - Transferred from the device",description:"Use this container for low-frequency state changes. Data is transferred from the device to the server.",markdownDescription:`**state** \u2013 Transferred from the device
|
|
1548
|
-
|
|
1549
|
-
Use this container for **low-frequency state changes**.
|
|
1550
|
-
|
|
1551
|
-
Data is transferred from the device to the server.`,$ref:"#/$defs/configurationFields"},resultContainer:{type:"object",title:"result - Transferred from the device",description:"Use this container for higher-frequency changes, e.g. responses to an executed command. Data is transferred from the device to the server.",markdownDescription:`**result** \u2013 Transferred from the device
|
|
1552
|
-
|
|
1553
|
-
Use this container for **higher-frequency changes**, e.g. responses to an executed command.
|
|
1554
|
-
|
|
1555
|
-
Data is transferred from the device to the server.`,$ref:"#/$defs/configurationFields"},volatileContainer:{type:"object",title:"volatile - Transferred from the device",description:"Container is not persisted on the device. Common use case: transaction responses. Use 'DDE_volatile_persist()' to persist this data.",markdownDescription:`**volatile** \u2013 Transferred from the device
|
|
1556
|
-
|
|
1557
|
-
Container is **not persisted** on the device.
|
|
1558
|
-
|
|
1559
|
-
Common use case: transaction responses.
|
|
1560
|
-
|
|
1561
|
-
If you want to persist this data, use \`DDE_volatile_persist()\`.`,$ref:"#/$defs/configurationFields"},alohaContainer:{type:"object",title:"aloha - Transferred from the device",description:"A special container to transport live data during put-into-operation procedures.",markdownDescription:`**aloha** \u2013 Transferred from the device
|
|
1562
|
-
|
|
1563
|
-
A special container to transport **live data** during put-into-operation procedures.`,$ref:"#/$defs/configurationFields"},settingContainer:{type:"object",title:"setting - Transferred to the device",description:"Use this container for low-frequency changes, e.g. application settings like a transfer interval. Data is transferred from the server to the device.",markdownDescription:`**setting** \u2013 Transferred to the device
|
|
1564
|
-
|
|
1565
|
-
Use this container for **low-frequency changes**, e.g. application settings like a transfer interval.
|
|
1566
|
-
|
|
1567
|
-
Data is transferred from the server to the device.`,$ref:"#/$defs/configurationFields"},commandContainer:{type:"object",title:"command - Transferred to the device",description:"Use this container for high-frequency changes, e.g. changing the state of a physical output. Data is transferred from the server to the device.",markdownDescription:`**command** \u2013 Transferred to the device
|
|
1568
|
-
|
|
1569
|
-
Use this container for **high-frequency changes**, e.g. changing the state of a physical output.
|
|
1570
|
-
|
|
1571
|
-
Data is transferred from the server to the device.`,$ref:"#/$defs/configurationFields"},serverStorageContainer:{type:"object",title:"storage - Server only",description:"Use this container to store any POV or BLO related settings. This data is only stored on the server and not transferred to the device.",markdownDescription:`**storage** \u2013 Server only
|
|
1572
|
-
|
|
1573
|
-
Use this container to store any **POV** or **BLO** related settings.
|
|
1574
|
-
|
|
1575
|
-
This data is only stored on the server and **not transferred** to the device.`,$ref:"#/$defs/configurationFields"},serverRelationsContainer:{type:"object",title:"relations - Server only",description:"Use this container to store field-related configuration. This data is only stored on the server.",markdownDescription:`**relations** \u2013 Server only
|
|
1576
|
-
|
|
1577
|
-
Use this container to store **field-related configuration**.
|
|
1578
|
-
|
|
1579
|
-
This data is only stored on the server.`,$ref:"#/$defs/configurationFields"},configurationFields:{type:"object",description:"Fields of the container. Field names must start with a letter or underscore, and may contain letters, digits, and underscores. Names like 'field0', 'ch0', etc. are not allowed.",markdownDescription:"Fields of the container.\n\n**Naming rules:**\n- Must start with a letter or `_`\n- May contain letters, digits, and `_`\n- Names like `field0`, `ch0`, etc. are **not allowed**\n- Reserved names (`_id`, `id`, `_stamp`, `stamp`, `tag`, `_uid`, `customer_id`, `site_id`, `_rec_flags__`, `applog`) are **not allowed**",additionalProperties:!1,errorMessage:{additionalProperties:"Invalid field name. Field names must start with a letter or underscore, may contain letters, digits, and underscores. Names matching 'fieldN' or 'chN' patterns and reserved names (_id, id, _stamp, stamp, tag, _uid, customer_id, site_id, _rec_flags__, applog) are not allowed."},$ref:"#/$defs/reservedNamesFieldNames",properties:{},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{allOf:[{$ref:"#/$defs/defaultFieldProperties"},{$ref:"#/$defs/configArrayDefinition"}]}}},timeseriesFields:{type:"object",description:"Timeseries fields of the container. Supports additional chart and channel properties compared to configuration fields.",markdownDescription:`Timeseries fields of the container.
|
|
1580
|
-
|
|
1581
|
-
Supports additional **chart** and **channel** properties compared to configuration fields.`,additionalProperties:!1,errorMessage:{additionalProperties:"Invalid field name. Field names must start with a letter or underscore, may contain letters, digits, and underscores. Names matching 'fieldN' or 'chN' patterns and reserved names are not allowed."},$ref:"#/$defs/reservedNamesFieldNames",patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{allOf:[{$ref:"#/$defs/defaultFieldProperties"},{type:"object",properties:{channelMode:{type:["string","number"],description:"Defines how values are treated upon aggregation. Applies to numeric fields only.",markdownDescription:"Defines how values are treated upon aggregation.\n\n**Applies to numeric fields only.**\n\nOptions:\n- `digital` \u2013 Treatment as digital value (0 or 1)\n- `day-counter` \u2013 Counter reset once per day\n- `interval-counter` \u2013 Counter reset on each recording\n- `analog` \u2013 (default) Normal measurement value\n- `infinite-counter` \u2013 Counter that is never reset\n- Relation link (`@container.field`)",anyOf:[{const:"digital",description:"Treatment as digital value. The raw value should be 0 or 1."},{const:"day-counter",description:"A counter which is reset once per day"},{const:"interval-counter",description:"A counter which is reset on each recording"},{const:"analog",description:"(default) - A 'normal' measurement value. E.g. temperature"},{const:"infinite-counter",description:"A counter which is never reset, e.g. water- or electricity meter."},{$ref:"#/$defs/relationLinkPattern"}]},chartAlarmLow:{title:"Chart Alarm Low",$ref:"#/$defs/chartAlarmWarn"},chartAlarmHigh:{title:"Chart Alarm High",$ref:"#/$defs/chartAlarmWarn"},chartWarningLow:{title:"Chart Warning Low",$ref:"#/$defs/chartAlarmWarn"},chartWarningHigh:{title:"Chart Warning High",$ref:"#/$defs/chartAlarmWarn"},chartHysteresis:{title:"Chart Hysteresis",type:["number","string"],description:"The server uses this property to show a hysteresis in charts. The value is in %. Requires 'chartWarningX' and/or 'chartAlarmX'.",markdownDescription:"The server uses this property to show a **hysteresis** in charts.\n\nThe value is in **%**.\n\n\u26A0\uFE0F Requires `chartWarningX` and/or `chartAlarmX` to be set.",$ref:"#/$defs/relationLinkPattern"},chartTriggerThreshold:{title:"Chart Trigger Threshold",type:["number","string"],description:"The server uses this property to show a trigger threshold in charts.",markdownDescription:"The server uses this property to show a **trigger threshold** in charts.",$ref:"#/$defs/relationLinkPattern"},chartTriggerRelation:{title:"Chart Trigger Relation",type:["string"],description:"Defines if the 'chartTriggerThreshold' displays as overshoot or undershoot. Requires 'chartTriggerThreshold' to be set.",markdownDescription:"Defines if the `chartTriggerThreshold` displays as **overshoot** or **undershoot**.\n\n\u26A0\uFE0F Requires `chartTriggerThreshold` to be set.",anyOf:[{title:"Greater or equal",description:"Highlights the measurement value if it is greater or equal the 'chartTriggerThreshold'.",const:"greater-or-equal"},{title:"Less or equal",description:"Highlights the measurement value if it is less or equal the 'chartTriggerThreshold'.",const:"less-or-equal"},{$ref:"#/$defs/relationLinkPattern"}]},chartSetPoint:{title:"Chart Set Point",type:["string"],description:"Used to report the actual state of the referenced value. The server will display a pending information if the value is not transmitted yet.",markdownDescription:`Used to report the actual state of the referenced value.
|
|
1582
|
-
|
|
1583
|
-
The server will display a **pending** indicator if the value has not been transmitted yet.`,$ref:"#/$defs/setPointRelationPattern"}},dependencies:{chartTriggerRelation:{required:["chartTriggerThreshold"],errorMessage:"'chartTriggerRelation' requires 'chartTriggerThreshold' to also be defined."}}},{$ref:"#/$defs/timeseriesArrayDefinition"}]}}},reservedNamesFieldNames:{type:"object",properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a field name."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a field name."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a field name."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a field name."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a field name."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a field name."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a field name."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a field name."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a field name."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a field name."}}},defaultFieldProperties:{type:"object",additionalProperties:!1,properties:{type:{$ref:"#/$defs/dataTypes"},title:{type:"string",description:"Title to describe the field's content within the portal.",markdownDescription:"Title to describe the field's content within the portal.\n\nCan also reference a relation using `@container.field` syntax."},description:{type:"string",description:"Description what this field is about."},array:{type:"number",description:"Length of the array. Must be between 1 and 1024.",markdownDescription:`Length of the array.
|
|
1584
|
-
|
|
1585
|
-
**Range:** 1\u20131024`,minimum:1,inclusiveMaximum:1024},unit:{type:"string",description:"Unit information to be shown in the default POV (e.g. 'kg', '\xB0C', 'V').",markdownDescription:"Unit information to be shown in the default POV.\n\n**Examples:** `kg`, `\xB0C`, `V`, `%`\n\nCan also reference a relation using `@container.field` syntax."},hex:{type:"boolean",description:"Server-side processing. Declares if this field should be displayed as HEX string. The API will also process the field as HEX.",markdownDescription:`Server-side processing. Declares if this field should be displayed as **HEX** string.
|
|
1586
|
-
|
|
1587
|
-
The API will also process the field as HEX.`},decimalPlaces:{$ref:"#/$defs/decimalPlaces"},writePermission:{description:"User level required for editing. Applies for down containers only (setting, command).",markdownDescription:"User level required for editing.\n\n**Applies for down containers only** (`setting`, `command`).\n\nSet to `read-only` to prevent editing.",anyOf:[{$ref:"#/$defs/userLevel"},{const:"read-only",title:"Read only",description:"Field can not be edited."}]},readPermission:{description:"User level required for viewing.",markdownDescription:"User level required for viewing this field.",$ref:"#/$defs/userLevel"},bytes:!0,fields:!0,length:!0,defaultValue:!0,channelMode:!0,scale:!0,offset:!0,chartMinimum:!0,chartMaximum:!0,chartAlarmLow:!0,chartAlarmHigh:!0,chartWarningLow:!0,chartWarningHigh:!0,chartHysteresis:!0,chartTriggerThreshold:!0,chartTriggerRelation:!0,chartSetPoint:!0,utilsTransferInterval:!0,shadowFields:{type:"object",deprecated:!0,title:"DEPRECATED",description:"Allows defining multiple fields within the same memory space. This property is deprecated and should not be used in new projects.",markdownDescription:`\u26A0\uFE0F **DEPRECATED**
|
|
1588
|
-
|
|
1589
|
-
Allows defining multiple fields within the same memory space.
|
|
1590
|
-
|
|
1591
|
-
This property is deprecated and should not be used in new projects.`,$ref:"#/$defs/configurationFields"},bitmask:{type:"string",title:"Bitmask",description:"Defines what bits of the according data type are used for storage. Must be a hex (0x...) or binary (0b...) string.",markdownDescription:"Defines what bits of the according data type are used for storage.\n\n**Formats:**\n- Hexadecimal: `0xAB CD` (prefix `0x`, hex digits and spaces)\n- Binary: `0b1010 0101` (prefix `0b`, binary digits and spaces)",anyOf:[{default:'"0x"',pattern:"^0x[0-9A-F ]+$",patternErrorMessage:"Hexadecimal bitmask must start with '0x' followed by uppercase hex digits (0-9, A-F) and optional spaces (e.g. '0xFF' or '0xFF 00').",description:"Bitmask defined as hexadecimal. Defines what bits of the according data type are used for storage."},{default:'"0b"',pattern:"^0b[0-1 ]+$",patternErrorMessage:"Binary bitmask must start with '0b' followed by binary digits (0, 1) and optional spaces (e.g. '0b11110000' or '0b1111 0000').",description:"Bitmask defined as binary. Defines what bits of the according data type are used for storage."}]}},required:["type"],errorMessage:{required:{type:"Every field must have a 'type' property specifying its data type."}},allOf:[{if:{description:"Force the byte amount if datatype is binary",properties:{type:{enum:["binary"]}}},then:{properties:{bytes:{type:"number",description:"Number of bytes for binary data. Required when type is 'binary'.",markdownDescription:"Number of bytes for binary data.\n\n**Required** when type is `binary`."},defaultValue:{type:"string",description:"Default value as hex (e.g. '0xFF 00'). Must start with '0x'.",markdownDescription:"Default value as hex.\n\n**Format:** `0x` followed by uppercase hex digits and optional spaces.\n\n**Example:** `0xFF 00`",pattern:"^0x[0-9A-F ]+$",patternErrorMessage:"Default value for binary type must be a hex string starting with '0x' followed by uppercase hex digits (0-9, A-F) and optional spaces."}},required:["bytes"],errorMessage:{required:{bytes:"The 'bytes' property is required when type is 'binary'. Specify the number of bytes."}}},else:{properties:{bytes:{not:{},errorMessage:"The 'bytes' property is only allowed when type is 'binary'."}}}},{if:{description:"Special handling for string types",properties:{type:{enum:["astring","nstring","cstring","wstring","ustring"]}}},then:{properties:{length:{type:"number",description:"Length of the string. Required for string types. Must be at least 1.",markdownDescription:"Length of the string.\n\n**Required** for string types (`astring`, `nstring`, `cstring`, `wstring`, `ustring`).\n\n**Minimum:** 1",minimum:1},defaultValue:{type:"string",description:"Default string value for this field."}},required:["length"],errorMessage:{required:{length:"The 'length' property is required for string types (astring, nstring, cstring, wstring, ustring). Specify the string length."}}}},{if:{properties:{type:{enum:["int8","int16","int32","int64","uint8","uint16","uint32","float16","float32","float64"]}}},then:{properties:{decimalPlaces:{$ref:"#/$defs/decimalPlaces"},defaultValue:{type:["number","string"],description:"Default value for this field. Use a number or 'NaN'.",markdownDescription:"Default value for this field.\n\nAccepts a **number** or the string `NaN`.",pattern:"^NaN$",patternErrorMessage:"String default values for numeric types must be 'NaN'. Use a number for other default values."},chartMinimum:{type:["number","string"],description:"Disables auto scaling of lower range in POV charts.",markdownDescription:"Disables **auto scaling** of the lower range in POV charts.\n\nAccepts a number or a relation link (`@container.field`).",$ref:"#/$defs/relationLinkPattern"},chartMaximum:{type:["number","string"],description:"Disables auto scaling of higher range in POV charts.",markdownDescription:"Disables **auto scaling** of the higher range in POV charts.\n\nAccepts a number or a relation link (`@container.field`).",$ref:"#/$defs/relationLinkPattern"},scale:{type:["number","string"],title:"Scale the raw value",description:"Server-side processing. Applies to POV and API. Formula: scaled = raw \xD7 scale + offset",markdownDescription:"Server-side processing. Applies to POV and API.\n\n**Formula:** `scaled = raw \xD7 scale + offset`\n\nAccepts a number or a relation link (`@container.field`).",$ref:"#/$defs/relationLinkPattern"},offset:{type:["number","string"],title:"Add an offset to the raw value",description:"Server-side processing. Applies to POV and API. Formula: scaled = raw \xD7 scale + offset",markdownDescription:"Server-side processing. Applies to POV and API.\n\n**Formula:** `scaled = raw \xD7 scale + offset`\n\nAccepts a number or a relation link (`@container.field`).",$ref:"#/$defs/relationLinkPattern"},utilsTransferInterval:{title:"Transfer Interval",type:["boolean"],description:"Indicates the server that this field should be used for the remaining time until next connection. Field value has to be in seconds.",markdownDescription:`Indicates the server that this field should be used for the **remaining time until next connection**.
|
|
1592
|
-
|
|
1593
|
-
Field value has to be in **seconds**.`}}},else:{properties:{decimalPlaces:{not:{},errorMessage:"'decimalPlaces' is only allowed for numeric types (int8, int16, int32, int64, uint8, uint16, uint32, float16, float32, float64)."},chartMinimum:{not:{},errorMessage:"'chartMinimum' is only allowed for numeric types (int8, int16, int32, int64, uint8, uint16, uint32, float16, float32, float64)."},chartMaximum:{not:{},errorMessage:"'chartMaximum' is only allowed for numeric types (int8, int16, int32, int64, uint8, uint16, uint32, float16, float32, float64)."},scale:{not:{},errorMessage:"'scale' is only allowed for numeric types (int8, int16, int32, int64, uint8, uint16, uint32, float16, float32, float64)."},offset:{not:{},errorMessage:"'offset' is only allowed for numeric types (int8, int16, int32, int64, uint8, uint16, uint32, float16, float32, float64)."}}}},{if:{description:"Enable regex relation validation if the string starts with @",properties:{title:{pattern:"^(?=@)"}}},then:{properties:{title:{$ref:"#/$defs/relationLinkPattern"}}}},{if:{description:"Enable regex relation validation if the string starts with @",properties:{unit:{pattern:"^(?=@)"}}},then:{properties:{unit:{$ref:"#/$defs/relationLinkPattern"}}}}]},dataTypes:{type:"string",description:"Data type of the field. Integer types: int8, int16, int32, int64, uint8, uint16, uint32. Float types: float16, float32, float64. Binary: binary. Timestamps: stamp32, stamp40. Strings: astring, nstring, cstring, wstring, ustring. Composite: array.",markdownDescription:"Data type of the field.\n\n**Integer types:** `int8`, `int16`, `int32`, `int64`, `uint8`, `uint16`, `uint32`\n\n**Float types:** `float16`, `float32`, `float64`\n\n**Binary:** `binary`\n\n**Timestamps:** `stamp32`, `stamp40`\n\n**Strings:** `astring`, `nstring`, `cstring`, `wstring`, `ustring`\n\n**Composite:** `array`",anyOf:[{const:"int8",title:"int8",description:`Signed integer 8bit
|
|
1594
|
-
Range: -128 \u2026 127`},{const:"int16",title:"int16",description:`Signed integer 16bit
|
|
1595
|
-
Range: -32768 \u2026 32767`},{const:"int32",title:"int32",description:`Signed integer 32bit
|
|
1596
|
-
Range: -\u202D2147483648 \u2026 \u202D2147483647\u202C`},{const:"int64",title:"int64",description:`Signed integer 64bit
|
|
1597
|
-
Range: -9.223e+15 \u2026 \u202D9.223e+15
|
|
1598
|
-
DLO natively supports s32 (a 'cell') only. Therefore s64
|
|
1599
|
-
- is implemented as binary buffer
|
|
1600
|
-
- u8[8] does not support maths`},{const:"uint8",title:"uint8",description:`Unsigned integer 8bit
|
|
1601
|
-
Range: 0 \u2026 255 (0xff)`},{const:"uint16",title:"uint16",description:`Unsigned integer 16bit
|
|
1602
|
-
Range: 0 \u2026 65535 (0xffff)`},{const:"uint32",title:"uint32",description:`Unsigned integer 32bit
|
|
1603
|
-
Range: 0 \u2026 \u202D4294967295\u202C (0xffffffff)
|
|
1604
|
-
Limited support in DLO due to s32 cell size.`},{const:"float16",title:"float16",description:`Floating point 16bit
|
|
1605
|
-
Range: \xB19.76e-4 \u2026 \xB11.048e+6
|
|
1606
|
-
- half precision
|
|
1607
|
-
- 3 significant digits`},{const:"float32",title:"float32",description:`Floating point 32bit
|
|
1608
|
-
Range: \xB11.18e\u221238 \u2026 \xB13.4e+38
|
|
1609
|
-
- single precision
|
|
1610
|
-
- approx. 7 significant digits`},{const:"float64",title:"float64",description:`Floating point 64bit
|
|
1611
|
-
Range: \xB12.23e\u2212308 \u2026 \xB11.80e+308
|
|
1612
|
-
- double precision
|
|
1613
|
-
- approx. 16 significant digits
|
|
1614
|
-
DLO natively supports f32 (a 'Float:cell') only. Therefore f64
|
|
1615
|
-
- is implemented as binary buffer
|
|
1616
|
-
- u8[8] does not support maths`},{const:"binary",title:"binary",description:`Binary blob.
|
|
1617
|
-
Packs 4 bytes per 'cell'. Uses always a full multiple of 'cells' for storage.`},{const:"stamp32",title:"stamp32",description:`Timestamp UTC.
|
|
1618
|
-
Resolution: 1 second
|
|
1619
|
-
Seconds since 1999-12-31 00:00:00 UTC`},{const:"stamp40",title:"stamp40",description:`Timestamp UTC extended accuracy.
|
|
1620
|
-
Resolution: 1/256 second
|
|
1621
|
-
Seconds since 1999-12-31 00:00:00 UTC`},{const:"array",title:"Array",description:"Array of parameters. Requires 'length' and 'fields' properties."},{const:"astring",title:"astring",description:`ANSI CP-1252 stored as 8bit ANSI.
|
|
1622
|
-
Character codes 0x01 \u2026 0xFF are by default assigned to CP-1252 (0x00 is reserved for terminating zero).
|
|
1623
|
-
Requires the 'length' property.`},{const:"nstring",title:"nstring",description:`Named string type.
|
|
1624
|
-
Requires the 'length' property.`},{const:"cstring",title:"cstring",description:`ANSI with custom codepage stored as binary.
|
|
1625
|
-
Requires the 'length' property.`},{const:"wstring",title:"wstring",description:`Unicode utf-32 stored as utf-8.
|
|
1626
|
-
Use this type only if Unicode is required and your DLO routines insist on utf-32 encoded strings.
|
|
1627
|
-
Requires the 'length' property.`},{const:"ustring",title:"ustring",description:`Unicode utf-8 stored as utf-8.
|
|
1628
|
-
Use this type only if Unicode is required and your DLO routines (such as display drivers) are able to deal with utf-8 encoded strings.
|
|
1629
|
-
Requires the 'length' property.`}]},userLevel:{type:"string",description:"User permission level. Ranges from UL1 (Customer operator) to UL7 (Administrator).",markdownDescription:"User permission level.\n\n| Level | Role |\n|-------|------|\n| `UL1` | Customer operator |\n| `UL2` | Customer administrator |\n| `UL3` | Provider operator |\n| `UL4` | Provider administrator |\n| `UL6` | Rights administrator |\n| `UL7` | Administrator |\n| `UL8+` | Custom levels |",anyOf:[{const:"UL1",title:"UL1 - Customer operator",description:"Customer operator"},{const:"UL2",title:"UL2 - Customer administrator",description:"Customer administrator"},{const:"UL3",title:"UL3 - Provider operator",description:"Provider operator"},{const:"UL4",title:"UL4 - Provider administrator",description:"Provider administrator"},{const:"UL6",title:"UL6 - Rights administrator",description:"Rights administrator"},{const:"UL7",title:"UL7 - Administrator",description:"Administrator"},{pattern:"UL([7-9]|[1-9][0-9])",patternErrorMessage:"Custom user level must match the pattern 'ULN' where N is 7 or higher (e.g. 'UL8', 'UL10').",description:"Custom user level (UL7 or higher)"}]},configArrayDefinition:{if:{description:"Handle array definition",properties:{type:{const:"array"}}},then:{properties:{fields:{$ref:"#/$defs/configurationFields"},length:{type:"number",description:"Size of the array. Must be between 1 and 1024.",markdownDescription:`Size of the array.
|
|
1630
|
-
|
|
1631
|
-
**Range:** 1\u20131024`,minimum:1,inclusiveMaximum:1024},array:{not:{},errorMessage:"The 'array' property is not allowed when type is 'array'. Use 'length' to define the array size."},title:{not:{},errorMessage:"The 'title' property is not allowed when type is 'array'."}},required:["length","fields"],errorMessage:{required:{length:"The 'length' property is required when type is 'array'. Specify the array size.",fields:"The 'fields' property is required when type is 'array'. Define the array's sub-fields."}}},else:{properties:{fields:{not:{},errorMessage:"The 'fields' property is only allowed when type is 'array'."}}}},timeseriesArrayDefinition:{if:{description:"Handle array definition",properties:{type:{const:"array"}}},then:{properties:{fields:{$ref:"#/$defs/timeseriesFields"},length:{type:"number",description:"Size of the array. Must be between 1 and 1024.",markdownDescription:`Size of the array.
|
|
1632
|
-
|
|
1633
|
-
**Range:** 1\u20131024`,minimum:1,inclusiveMaximum:1024},array:{not:{},errorMessage:"The 'array' property is not allowed when type is 'array'. Use 'length' to define the array size."},title:{not:{},errorMessage:"The 'title' property is not allowed when type is 'array'."}},required:["length","fields"],errorMessage:{required:{length:"The 'length' property is required when type is 'array'. Specify the array size.",fields:"The 'fields' property is required when type is 'array'. Define the array's sub-fields."}}},else:{properties:{fields:{not:{},errorMessage:"The 'fields' property is only allowed when type is 'array'."}}}},decimalPlaces:{type:["number","string"],description:"Number of decimal places to show. Applies to POV and API. Only valid for numeric types.",markdownDescription:`Number of decimal places to show.
|
|
1634
|
-
|
|
1635
|
-
Applies to POV and API. Only valid for numeric types.
|
|
1636
|
-
|
|
1637
|
-
Accepts a number (\u2265 0) or a relation link (\`@container.field\`).`,minimum:0,$ref:"#/$defs/relationLinkPattern"},relationLinkPattern:{anyOf:[{pattern:"^(@[a-zA-Z_][a-zA-Z0-9_]*\\.[a-zA-Z_][a-zA-Z0-9_]*(\\[[^\\]]+\\])?(\\.[a-zA-Z_][a-zA-Z0-9_]*)*|lib:[a-zA-Z0-9_-]+@[a-zA-Z_][a-zA-Z0-9_]*\\.[a-zA-Z_][a-zA-Z0-9_]*(\\[[^\\]]+\\])?(\\.[a-zA-Z_][a-zA-Z0-9_]*)*)$",patternErrorMessage:"Relation link must match the format '@container.field' or 'lib:library-name@container.field'. Optional array index '[index]' and nested paths are supported (e.g. '@setting.myField', '@state.data[0].value', 'lib:my-lib@setting.param')."}]},setPointRelationPattern:{anyOf:[{pattern:"^(@[a-zA-Z_][a-zA-Z0-9_]*\\.[a-zA-Z_][a-zA-Z0-9_]*(\\[[^\\]]+\\])?(\\.[a-zA-Z_][a-zA-Z0-9_]*)*|lib:[a-zA-Z0-9_-]+@[a-zA-Z_][a-zA-Z0-9_]*\\.[a-zA-Z_][a-zA-Z0-9_]*(\\[[^\\]]+\\])?(\\.[a-zA-Z_][a-zA-Z0-9_]*)*)$",patternErrorMessage:"Set point relation must match the format '@container.field' or 'lib:library-name@container.field' (e.g. '@setting.targetTemperature')."},{const:'"@setting."',description:"Relation link to container setting",title:"Relation link to container setting"},{const:'"@command."',description:"Relation link to container control",title:"Relation link to container control"}]},chartAlarmWarn:{type:["number","string"],description:"The server uses this property to show the threshold in charts and gauges. Important: This does not activate any alarming. This must be done in the DLO.",markdownDescription:`The server uses this property to show the **threshold** in charts and gauges.
|
|
1638
|
-
|
|
1639
|
-
\u26A0\uFE0F **Important:** This does not activate any alarming. Alarming must be implemented in the DLO.
|
|
1640
|
-
|
|
1641
|
-
Accepts a number or a relation link (\`@container.field\`).`,$ref:"#/$defs/relationLinkPattern"}}};var Tt=require("yaml");var Be=require("yaml");var Jr;(x=>x.CODE={ddeFieldLength:"field_name_length"})(Jr||={});var R0;(H=>{let A;(B0=>(B0.state="state",B0.result="result",B0.aloha="aloha",B0.volatile="volatile",B0.setting="setting",B0.command="command",B0.storage="storage",B0.relations="relations"))(A=H.DDEContainerName||={});let x;(f0=>(f0.configA="configA",f0.configB="configB",f0.configC="configC",f0.config0="config0",f0.config1="config1",f0.config2="config2",f0.config3="config3",f0.config4="config4",f0.config5="config5",f0.config6="config6",f0.config7="config7",f0.config8="config8",f0.config9="config9",f0.histdata0="histdata0",f0.histdata1="histdata1",f0.histdata2="histdata2",f0.histdata3="histdata3",f0.histdata4="histdata4",f0.histdata5="histdata5",f0.histdata6="histdata6",f0.histdata7="histdata7",f0.histdata8="histdata8",f0.histdata9="histdata9",f0.aloha="aloha",f0.alerts="alerts",f0.applog="applog"))(x=H.ContainerName||={});let e;(U=>(U.cx="cx",U.hx="hx",U.cb="cb",U.aloha="aloha",U.applog="applog"))(e=H.ContainerType||={});let r;(q0=>(q0.up="up",q0.down="down",q0.upPlus="up+",q0.downPlus="down+",q0.none="none",q0.backendOnly="backend-only",q0.deviceOnly="device-only",q0.both="both",q0.bothPlus="both+",q0.noneBackend="none-be"))(r=H.TransferDirection||={});function t(z,i0){return z==="cx"&&!["backend-only"].includes(i0)?"DDE_CID_CONFIG":z==="hx"?"DDE_CID_HISTDATA":z==="aloha"?"DDE_CID_ALOHA":null}H.CONTAINER_DEF_DLO_CID_BASE=t;let s=["up","up+","down","down+","both","none","both+","backend-only","device-only"],n=["up","up+","backend-only"];H.CONTAINER_DEFS={configA:{ctype:"cb",cnum:"a",alias:"",flds:"field",xmits:["backend-only"]},configB:{ctype:"cb",cnum:"b",alias:"",flds:"field",xmits:["backend-only"]},configC:{ctype:"cb",cnum:"c",alias:"",flds:"field",xmits:["backend-only"]},config0:{ctype:"cx",cnum:0,alias:"",flds:"field",xmits:s},config1:{ctype:"cx",cnum:1,alias:"",flds:"field",xmits:s},config2:{ctype:"cx",cnum:2,alias:"",flds:"field",xmits:s},config3:{ctype:"cx",cnum:3,alias:"",flds:"field",xmits:s},config4:{ctype:"cx",cnum:4,alias:"",flds:"field",xmits:s},config5:{ctype:"cx",cnum:5,alias:"",flds:"field",xmits:s},config6:{ctype:"cx",cnum:6,alias:"",flds:"field",xmits:s},config7:{ctype:"cx",cnum:7,alias:"",flds:"field",xmits:s},config8:{ctype:"cx",cnum:8,alias:"",flds:"field",xmits:s},config9:{ctype:"cx",cnum:9,alias:"",flds:"field",xmits:s},histdata0:{ctype:"hx",cnum:0,alias:"",flds:"ch",xmits:n},histdata1:{ctype:"hx",cnum:1,alias:"",flds:"ch",xmits:n},histdata2:{ctype:"hx",cnum:2,alias:"",flds:"ch",xmits:n},histdata3:{ctype:"hx",cnum:3,alias:"",flds:"ch",xmits:n},histdata4:{ctype:"hx",cnum:4,alias:"",flds:"ch",xmits:n},histdata5:{ctype:"hx",cnum:5,alias:"",flds:"ch",xmits:n},histdata6:{ctype:"hx",cnum:6,alias:"",flds:"ch",xmits:n},histdata7:{ctype:"hx",cnum:7,alias:"",flds:"ch",xmits:n},histdata8:{ctype:"hx",cnum:8,alias:"",flds:"ch",xmits:n},histdata9:{ctype:"hx",cnum:9,alias:"",flds:"ch",xmits:n},aloha:{ctype:"aloha",cnum:void 0,alias:"aloha",flds:null,xmits:["up","up+"]},alerts:{ctype:void 0,cnum:void 0,alias:"alerts",flds:null,xmits:["up"]},applog:{ctype:"applog",cnum:void 0,alias:"applog",flds:null,xmits:["up+"]}},H.HISTDATA_CONTAINER=["histdata0","histdata1","histdata2","histdata3","histdata4","histdata5","histdata6","histdata7","histdata8","histdata9"],H.CONFIG_CONTAINER=["config0","config1","config2","config3","config4","config5","config6","config7","config8","config9"],H.SERVER_CONTAINER=["configA","configB","configC"],H.regexRelation=/^(@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*|lib:[a-zA-Z0-9_-]+@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*)$/;let j=["astring","nstring","cstring","wstring","ustring"],_=["int8","int16","int32","int64","uint8","uint16","uint32","float16","float32","float64"];H.allowedRelationTypes={title:j,unit:j,chartMinimum:_,chartMaximum:_,scale:_,offset:_,decimalPlaces:["uint8","uint16","uint32","int8","int16","int32","int64"],channelMode:["uint8","uint16","uint32"],chartAlarmLow:_,chartAlarmHigh:_,chartWarningLow:_,chartWarningHigh:_,chartHysteresis:_,chartTriggerThreshold:_,chartTriggerRelation:_,chartSetPoint:_};function S(z,i0,r0){let Z=i0[z];if(Z!==void 0)if(H.regexRelation.exec(`${Z}`)){let n0=z==="chartSetPoint",[U,...F0]=Z.split("."),[,v0]=U.split("@"),B0=Object.values(r0.containers).find(ox=>ox.title===v0),d0=F0.join("."),q0=n0?";":"%",M0=(n0?"":"%")+(B0?.name||v0)+q0;if(M0=M0+`${d0}`,n0){let ox=r0.setPointList[i0.name];M0=M0+`;actual_output_value_${ox}`}return M0}else return Z}H.parseXMLValueWithRelation=S;function P(z){let{bitmask:i0}=z;if(!i0)return;let r0="$",Z=i0.replaceAll(" ","");if(i0.startsWith("0x"))r0+=Z.substring(2);else if(Z.startsWith("0b")){let n0=Z.substring(2).replaceAll(" ","");r0+=parseInt(n0,2).toString(16).toUpperCase()}return r0}H.parseXMLBitmask=P;function N(z){return z.type==="binary"?z.defaultValue.substring(2):z.defaultValue==="NaN"?"NAN":z.defaultValue}H.parseXMLDefaultValue=N,H.TDEF_NUMBER={xmlOut(z,i0,r0){z.decpl=S("decimalPlaces",i0,r0),z.decpl===void 0&&(z.decpl=0),z.vscale=S("scale",i0,r0),z.vofs=S("offset",i0,r0),z.min=S("chartMinimum",i0,r0),z.max=S("chartMaximum",i0,r0)}};let O={isBlob:1,xmlOut(z,i0){z.max=i0.byteSize}},s0={xmlOut(z){z.decpl=-1,z.param0="local",z.units="UTC"}};H.TYPE_DEFS={u8:{dde:"uint8",dim:1,len:1,...H.TDEF_NUMBER,rdef:1,xml:{type:"u8"},pwn:{rwfunc:"u8",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u16:{dde:"uint16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"u16"},pwn:{rwfunc:"u16",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u32:{dde:"uint32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"u32"},pwn:{rwfunc:"u32",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},s8:{dde:"int8",dim:1,len:1,...H.TDEF_NUMBER,rdef:1,xml:{type:"s8"},pwn:{rwfunc:"s8",htype:"s32",printf:"%d"},openApi:{type:"number"}},s16:{dde:"int16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"s16"},pwn:{rwfunc:"s16",htype:"s32",printf:"%d"},openApi:{type:"number"}},s32:{dde:"int32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"s32"},pwn:{rwfunc:"s32",printf:"%d"},openApi:{type:"number"}},s64:{dde:"int64",dim:0,len:8,...H.TDEF_NUMBER,rdef:1,xml:{type:"s64"},pwn:{rwfunc:"s64",rwp:"%n{%l}",htype:"{%l}",printf:"%d"},openApi:{type:"number"}},f16:{dde:"float16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"floatm16"},pwn:{rwfunc:"f16",rwp:"Float:%n",htype:"f32",printf:"%f"},openApi:{type:"number"}},f32:{dde:"float32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"f32"},pwn:{rwfunc:"f32",rwp:"Float:%n",printf:"%f"},openApi:{type:"number"}},f64:{dde:"float64",dim:0,len:8,...H.TDEF_NUMBER,rdef:0,xml:{type:"f64"},pwn:{rwfunc:"f64",rwp:"%n{%l}",htype:"{%l}",printf:"%f"},openApi:{type:"number"}},stamp32:{dde:"stamp32",dim:1,len:4,...s0,rdef:0,xml:{type:"stamp4"},pwn:{rwfunc:"stamp32",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},stamp40:{dde:"stamp40",dim:0,len:5,...s0,rdef:0,xml:{type:"stamp"},pwn:{rwfunc:"stamp40",rwp:"%n{%l}",htype:"{%l}",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},bin:{dde:"binary",dim:0,...O,rdef:0,lenUnits:"byte",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"bin",rwlen:1,rwp:"%n{%l}",htype:"{%l}",printf:null,printfFormat:"memtostr"},openApi:{type:"string",description:"HEX string"}},astr:{dde:"astring",dim:0,...O,rdef:1,lenUnits:"char",xml:{type:"string",param1:"nocodepage"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},nstr:{dde:"nstring",dim:0,...O,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"nstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},wstr:{dde:"wstring",dim:0,...O,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"wstr",rwlen:1,rwp:"%n[%l+1]",htype:"[%l+1]",printf:"%s"},openApi:{type:"string"}},ustr:{dde:"ustring",dim:0,...O,rdef:0,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"ustr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},cstr:{dde:"cstring",dim:0,...O,rdef:1,lenUnits:"char",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"cstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},_siteref:{dim:0,len:80,rdef:0,xml:{type:"string",max:"80",editmask:"%QUERY%all_sites;-name;!id;class;name;%EMPTY%"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}"},js:{rwfunc:"String"}}},H.fieldTypeDefinitions={uint8:H.TYPE_DEFS.u8,uint16:H.TYPE_DEFS.u16,uint32:H.TYPE_DEFS.u32,int8:H.TYPE_DEFS.s8,int16:H.TYPE_DEFS.s16,int32:H.TYPE_DEFS.s32,int64:H.TYPE_DEFS.s64,float16:H.TYPE_DEFS.f16,float32:H.TYPE_DEFS.f32,float64:H.TYPE_DEFS.f64,stamp32:H.TYPE_DEFS.stamp32,stamp40:H.TYPE_DEFS.stamp40,binary:H.TYPE_DEFS.bin,astring:H.TYPE_DEFS.astr,nstring:H.TYPE_DEFS.nstr,wstring:H.TYPE_DEFS.wstr,ustring:H.TYPE_DEFS.ustr,cstring:H.TYPE_DEFS.cstr};let M=["_id","id","_stamp","stamp","tag","_uid","customer_id","site_id","_rec_flags__","applog"];function Y(z){let i0=z.toLowerCase();return M.includes(i0)||/^field\d+$/.test(i0)||/^ch\d+$/.test(i0)}H.checkForReservedFieldName=Y;function W(z){return!!z.fields.find(i0=>i0.library===null&&i0.type!=="shadow")}H.hasContainerAppFields=W})(R0||={});var Ce=R0.DDEContainerName,qi=R0.allowedRelationTypes,Yv=R0.regexRelation,Qv=R0.ContainerType,Zv=R0.checkForReservedFieldName,ht=R0.ContainerName,Pi=R0.CONTAINER_DEFS,xf=R0.SERVER_CONTAINER,Af=R0.HISTDATA_CONTAINER,ef=R0.CONFIG_CONTAINER,vr=R0.TransferDirection,Ti=R0.fieldTypeDefinitions,aA=j0.yamlRangeToLineInformation,gt;(x=>{class A{constructor(r,t,s){this.manifest=r;this.libraryFiles=t;this.ddeHistory=s}manifest;libraryFiles;ddeHistory;fieldNamesPerContainer={};usedContainerNames={};fileDiagnostics=[];libraryDDE=[];libraryYaml={};parseLibraries(){this.libraryDDE.length=0;let r=[];return this.libraryFiles.forEach(t=>{let{parsedDDE:s,diagnostics:n,parsedYaml:F}=this.parseYamlFile(t.path,t.yaml,t.libraryName);r.push(...n),this.libraryDDE.push(s),this.libraryYaml[t.libraryName]=F}),r}get previousVersion(){return{setPointList:{...this.ddeHistory?.setPointList},containers:{...this.ddeHistory?.containers}}}getContainerOfPreviousVersion(r){let t=this.previousVersion,s=r.startsWith("timeseries_")?r.substring(11):r;return Object.values(t.containers).find(n=>n.title===s)||null}parseMainDDE(r,t){let{parsedDDE:s,diagnostics:n}=this.parseYamlFile(r,t);return n.find(c=>c.level==="error")?{ddeJSON:null,diagnostics:n}:{ddeJSON:this.mergeAndFormat(s),diagnostics:n}}parseYamlFile(r,t,s){this.fileDiagnostics.length=0;let n=new Be.LineCounter,F=(0,Be.parseDocument)(t,{lineCounter:n});if(!F.contents)return{parsedDDE:{containers:{},setPointList:{}},diagnostics:[],parsedYaml:null};let f=F.contents||new Be.YAMLMap;return this.validateContainerDefinition(f.items).forEach(D=>{this.validateAllowedContainer(r,D,n,s),this.validateContainerFields(F,r,D,n)}),{parsedDDE:this.yamlDocToDdeJson(F.toJS({mapAsMap:!0}),s),diagnostics:[...this.fileDiagnostics],parsedYaml:F}}yamlDocToDdeJson(r,t){let s={containers:{},setPointList:{}},n=new Map,F=[...Object.values(Ce)];if(r.get("cloudProject")){let c=Object.values(this.previousVersion.containers).map(p=>p.title),D=[...new Set([...F,...c])];F.length=0,F.push(...D)}for(let c of F)r.has(c)&&n.set(c,r.get(c));let f=r.get("timeseries");if(f)for(let[c,D]of f)n.set(c,D);for(let[c,D]of n){let{realContainer:p,transferDirection:j,legacyTitle:_}=this.getRealContainerInformation(c);if(!p)continue;let k=Pi[p],S=c.includes("timeseries_")?c.replace("timeseries_",""):c,P={name:p,title:S,previousTitle:_,containerType:k.ctype,volatile:c===Ce.volatile,transferDirection:j,fieldCount:D.size,knownNames:[],libraries:[],arrays:{},shadows:{},fields:[],size:0,fieldIndex:0};t&&P.libraries.push(t);for(let[N,L]of D){let O=[],s0=L.get("type"),R=Ti[s0];if(!(!R&&s0!=="array")){if(s0==="array"){let g=[],M=L.get("length"),Y=L.get("fields"),W={name:N,length:M,library:t||null,fields:[]};P.arrays[N]=W;for(let H=0;H<M;H++){let z={name:N,index:H};for(let[i0,r0]of Y){let Z=Ti[r0.get("type")];if(!Z)continue;W.fields?.find(v0=>v0.name===i0)||W.fields.push({name:i0,type:r0.get("type"),byteSize:Z.len||r0.get("bytes")||r0.get("length")});let n0=`${N}[${H}].${i0}`,{fields:U,shadowInfo:F0}=this.createDDEJsonFields(n0,t,Z,r0);U.forEach(v0=>{v0.arrayRef=z}),F0&&(P.shadows[F0.name]=F0),g.push(...U)}}O.push(...g)}else{let{arrayInfo:g,fields:M,shadowInfo:Y}=this.createDDEJsonFields(N,t,R,L);g&&(P.arrays[g.name]=g),Y&&(P.shadows[Y.name]=Y),O.push(...M)}O.forEach(g=>{g.index=++P.fieldIndex,P.fields.push(g),P.size+=g.byteSize})}}s.containers[p]=P}return s}getRealContainerInformation(r){let t,s,n;if(this.previousVersion){let F=r.startsWith("timeseries_")?r.substring(11):r,{name:f,direction:c,previousTitle:D}=this.findPreviousUsedContainer(F);t=f,s=c,n=D}if(!t){let F=Object.entries(this.usedContainerNames).find(([,f])=>f===r);F&&(t=F[0])}return t||(t=this.findNextFreeContainer(r)),this.usedContainerNames[t]=r,s||(s=[Ce.setting,Ce.command].includes(r)?vr.down:vr.up),s===vr.up&&t&&Pi[t].xmits.includes(vr.upPlus)&&(s=vr.upPlus),t&&[ht.configA,ht.configB].includes(t)&&(s=vr.backendOnly),{realContainer:t,transferDirection:s,legacyTitle:n}}findNextFreeContainer(r){if(r===ht.aloha)return ht.aloha;let t=ef;r.startsWith("timeseries_")?t=Af:[Ce.relations,Ce.storage].includes(r)&&(t=xf);let s=this.previousVersion?.containers;return s&&(t=t.filter(n=>!Object.hasOwn(s,n))),t.find(n=>!Object.hasOwn(this.usedContainerNames,n))}findPreviousUsedContainer(r){let t=this.previousVersion.containers,s=Object.values(t).find(n=>n.title===r);return{name:s?.name,direction:s?.transferDirection,previousTitle:s?.previousTitle}}createDDEJsonFields(r,t,s,n){let F=n.get("array"),f=[],c,D;if(F){c={name:r,library:t||null,length:F};for(let p=0;p<F;p++){let j=`${r.toLowerCase()}[${p}]`;f.push(this.buildDDEJsonField(j,n,{name:r,index:p},s,t,null))}}else{let p=this.buildDDEJsonField(r,n,null,s,t,null);f.push(p);let j=n.get("shadowFields");if(j){D={name:p.name,byteSize:p.byteSize,byteOffset:p.byteOffset};for(let[_,k]of j){let S=_;r.includes(".")&&(S=r.split(".")[0]+`.${_}`),f.push(this.buildDDEJsonField(S,k,null,s,t,p.name))}}}return{arrayInfo:c,shadowInfo:D,fields:f}}buildDDEJsonField(r,t,s,n,F,f){return{id:r.toLowerCase(),name:r,index:0,library:F||null,byteOffset:0,byteSize:n.len||t.get("bytes")||t.get("length"),type:t.get("type"),title:t.get("title")||null,arrayRef:s,shadowRef:f,unit:t.get("unit"),hex:t.get("hex"),decimalPlaces:t.get("decimalPlaces"),writePermission:this.parseUserLevel(t.get("writePermission")),readPermission:this.parseUserLevel(t.get("readPermission")),channelMode:this.parseChannelMode(t.get("channelMode")),defaultValue:t.get("defaultValue"),scale:t.get("scale"),offset:t.get("offset"),chartMinimum:t.get("chartMinimum"),description:t.get("description"),chartMaximum:t.get("chartMaximum"),chartAlarmLow:t.get("chartAlarmLow"),chartAlarmHigh:t.get("chartAlarmHigh"),chartWarningLow:t.get("chartWarningLow"),chartWarningHigh:t.get("chartWarningHigh"),chartHysteresis:t.get("chartHysteresis"),chartTriggerThreshold:t.get("chartTriggerThreshold"),chartTriggerRelation:this.parseTriggerUndershoot(t.get("chartTriggerRelation")),chartSetPoint:t.get("chartSetPoint"),utilsTransferInterval:!!t.get("utilsTransferInterval"),bitmask:t.get("bitmask")}}resolvePossibleAlias(r,t){return(0,Be.isAlias)(t)?t.resolve(r).value:t?.value}validateContainerDefinition(r){let t=[];return r.forEach(s=>{let F=s.key.value;F==="timeseries"?s.value.items.forEach(f=>{f.key.value=`timeseries_${f.key}`,t.push(f)}):["dde","cloudProject","constants"].includes(F)||t.push(s)}),t}parseUserLevel(r){if(r==="read-only")return 99;if(r?.startsWith("UL"))return Number(r.substring(2))}parseChannelMode(r){if(r)return{digital:1,"day-counter":2,"interval-counter":3,analog:6,"infinite-counter":12}[r]??r}parseTriggerUndershoot(r){if(r)return{"greater-or-equal":0,"less-or-equal":1}[r]??r}validateAllowedContainer(r,t,s,n){if(!t.value)return;let f=t.key.value;if(n&&(f.startsWith("aloha")||f.startsWith("timeseries"))){let c=f.includes("_")?f.split("_")[1]:f;this.fileDiagnostics.push({file:r,level:"error",message:`"${c}" not allowed within a library`,...aA(s,t.key.range)})}if(J.isAnalytics(this.manifest)&&![Ce.relations,Ce.storage].includes(f)){let c=f.includes("_")?f.split("_")[1]:f;this.fileDiagnostics.push({file:r,level:"error",message:`"${c}" not allowed within an analytics app. Only "relations" and "storage" are allowed.`,...aA(s,t.key.range)})}}validateContainerFields(r,t,s,n){let F=s.value;if(!F)return;let f=s.key.value;Object.hasOwn(this.fieldNamesPerContainer,f)||(this.fieldNamesPerContainer[f]=[]);let c=this.getContainerOfPreviousVersion(f);F.items.forEach(D=>{let j=D.key.value;this.checkForContainerRelation(D,r,t,n),this.validateFieldName(D,f,t,n),this.checkFieldNameLength(D,f,t,n);let _=c?.fields.find(O=>O.id===j.toLowerCase()),k=D.value,S=k.get("type",!0),P=this.resolvePossibleAlias(r,S),N=k.get("bytes",!0),L=this.resolvePossibleAlias(r,N);_&&(S&&P&&_.type!==P&&this.fileDiagnostics.push({file:t,level:"warning",message:`Field type changed from "${_.type}" to "${P}".
|
|
1642
|
-
Changing the type of an existing field can result in data loss or unexpected behaviour.`,...aA(n,S.range)}),N&&L&&_.byteSize!==L&&this.fileDiagnostics.push({file:t,level:"warning",message:`Byte size changed from '${_.byteSize}' to '${L}'.
|
|
1643
|
-
Changing the size of an existing field can result in data loss or unexpected behaviour.`,...aA(n,N.range)}))})}checkForContainerRelation(r,t,s,n){let F=r.value.get("fields");F&&F.items.forEach(c=>{this.checkForContainerRelation(c,t,s,n)}),r.value.items.forEach(c=>{let D=c.value;if(D?.value&&Yv.exec(`${D.value}`)){let p=c.key.value;if(p){if(!Object.hasOwn(qi,p))return this.fileDiagnostics.push({file:s,level:"error",message:`Property "${p}" does not allow relations.`,...aA(n,D.range)});if(["scale","offset"].includes(p))return this.fileDiagnostics.push({file:s,level:"warning",message:`Container relations for "${p}" are not available within the dlo source.`,...aA(n,D.range)})}return this.validateContainerRelation(p,D,t,s,n)}})}validateFieldName(r,t,s,n){let F=this.fieldNamesPerContainer[t],f=r.key,c=f.value;Zv(c)&&this.fileDiagnostics.push({file:s,level:"error",message:`Reserved property "${c}" is not allowed.`,...aA(n,f.range)});let D=r.value.get("shadowFields");D&&D.items.forEach(p=>{this.validateFieldName(p,t,s,n)}),F.includes(c.toLowerCase())?this.fileDiagnostics.push({file:s,level:"error",message:`Field name "${c}" is already occupied`,...aA(n,f.range)}):F.push(c.toLowerCase())}checkFieldNameLength(r,t,s,n){let F=r.key,f=F.value,D=`DDE_${t.startsWith("timeseries")?t.substring(10):t}_`,p=31-D.length;D.length+f.length>31&&this.fileDiagnostics.push({file:s,level:"error",code:Jr.CODE.ddeFieldLength,message:`Field name "${f}" to long. ${p} characters allowed for this field/container.`,...aA(n,F.range)})}validateContainerRelation(r,t,s,n,F){let[f,c,D]=t.value.split(".",3),[p,j]=f.split("@"),_=p?p.split(":")[1]:null,S=(_&&this.libraryYaml[_]?this.libraryYaml[_]:s).contents?.get(j),P=c.split("[")[0],N=null;if(S){let L=S.get(P);if(L)if(D){let O=L.get("fields");O&&O.get(D)&&(N=O.get(D))}else N=L;else N=this.findRelatedShadowField(S,P)}if(N){let L=qi[r],O=N.get("type");L.includes(O)||this.fileDiagnostics.push({file:n,level:"error",message:`Related field type "${O}" is not allowed for attribute "${r}".`,...aA(F,t.range)})}else _&&!this.libraryYaml[_]?this.fileDiagnostics.push({file:n,level:"error",message:`Related library "${_}" does not exist.`,...aA(F,t.range)}):this.fileDiagnostics.push({file:n,level:"error",message:`Related field "${t.value}" does not exist.`,...aA(F,t.range)})}findRelatedShadowField(r,t){for(let s of r.items){let F=s.value.get("shadowFields");if(!F)continue;let f=F.get(t);if(f)return f}}mergeAndFormat(r){let t={containers:{},setPointList:{}};for(let s of this.libraryDDE)this.combineDDE(t,s);return this.combineDDE(t,r),this.sortContainerFields(t),this.generateSetPointList(t),t}combineDDE(r,t){for(let[s,n]of Object.entries(t.containers)){let F=r.containers[s];F?(F.title=n.title,F.knownNames.unshift(n.title),F.libraries.push(...n.libraries),F.fields.push(...n.fields),F.arrays={...F.arrays,...n.arrays},F.shadows={...F.shadows,...n.shadows}):(F=r.containers[s]=structuredClone(n),F.knownNames.unshift(n.title),F.fieldCount=F.fields.length,F.fieldIndex=0);let f=this.initialContainerByteOffset(F);for(let[c,D]of F.fields.entries()){if(D.shadowRef){let p=F.shadows[D.shadowRef];D.byteOffset=p.byteOffset}else D.byteOffset=f,this.updateShadowFieldInformation(r.containers[s],D),f+=D.byteSize||0;c>F.fieldCount-1&&(D.index+=F.fieldIndex)}F.fieldIndex+=n.fieldIndex,F.knownNames=[...new Set(F.knownNames)],F.libraries=[...new Set(F.libraries)],F.fieldCount=F.fields.length}}initialContainerByteOffset(r){return r.containerType===Qv.hx?1:0}updateShadowFieldInformation(r,t){t&&Object.hasOwn(r.shadows,t.name)&&(r.shadows[t.name].byteOffset=t.byteOffset)}sortContainerFields(r){for(let t of Object.values(r.containers)){let{sortedFields:s,containerSize:n}=this.sortFields(t);t.fields=s,t.size=n,t.fieldCount=t.fields.length}}sortFields(r){let t=r.fields.filter(p=>!p.shadowRef),s=r.fields.filter(p=>p.shadowRef),n=[],F=r.name;if(this.previousVersion.containers[F]){let p=this.sortPreviousContainerFields(r,t);n.push(...p)}else n.push(...t);n.forEach(p=>{this.updateShadowFieldInformation(r,p)});let c=n[n.length-1],D=c.byteSize+c.byteOffset;return s.forEach(p=>{p.byteOffset=r.shadows[p.shadowRef].byteOffset,n.push(p)}),{sortedFields:n,containerSize:D}}sortPreviousContainerFields(r,t){let s=r.name,n=this.previousVersion.containers[s],F=[],f=this.initialContainerByteOffset(r);for(let c of n.fields){if(c.shadowRef)continue;let D=t.findIndex(j=>c.id===j.name?.toLowerCase());if(D===-1){f=c.byteOffset+c.byteSize;continue}let p=t[D];if(c.type!==p.type&&c.byteSize!==p.byteSize){f=c.byteOffset+c.byteSize;continue}p.byteOffset=c.byteOffset,t.splice(D,1),F.push(p),f=this.initialContainerByteOffset(r)}if(f>this.initialContainerByteOffset(r)){let c=t.shift();F.push(...this.generatePlaceholderFieldIfNeeded(f,c)),this.updateShadowFieldInformation(r,c)}for(let c of t){if(c.shadowRef)c.byteOffset=r.shadows[c.shadowRef].byteOffset;else{this.updateShadowFieldInformation(r,c);let D=F[F.length-1];D.shadowRef&&(D=r.shadows[D.shadowRef]),c.byteOffset=D.byteOffset+D.byteSize}F.push(c)}return F}generatePlaceholderFieldIfNeeded(r,t){let s=[];if(t)t.byteOffset=r,s.push(t);else{let n={byteOffset:r,byteSize:0,id:"_shadow",library:null,name:"_shadow",type:"shadow",arrayRef:null,shadowRef:null,title:null,index:0};s.push(n)}return s}generateSetPointList(r){r.setPointList={...this.previousVersion.setPointList||{}};for(let t of Object.values(r.containers))for(let s of t.fields)s.chartSetPoint&&(Object.hasOwn(r.setPointList,s.name)||(r.setPointList[s.name]=this.getNextSetpointValue(r.setPointList)))}getNextSetpointValue(r){let t=[...Object.values(r),0];return Math.max(...t)+1}}x.PreCompiler=A})(gt||={});var Wx=R0.TransferDirection,uA=R0.parseXMLValueWithRelation,rf=R0.parseXMLBitmask,tf=R0.parseXMLDefaultValue,nf=R0.fieldTypeDefinitions;function Rn(A,x){let r=[];function t(F,f=!0){if(f){if(Array.isArray(F)){r.push.apply(r,F);return}r.push(""+F)}}function s(F,f){F!=="mergeofs"&&t(`${F}=${f}`)}t("// DDE STRUCTURE created by Microtronics Studio");let n="source=rm2mraw";for(let[F,f]of Object.entries(x.containers)){F.startsWith("histdata")&&f.transferDirection!==Wx.deviceOnly&&(t("<split>"),t(n),t("target="+F),t("key=0"+F.substr(-1,1)),t("</split>")),t("<table>"),s("name",F),s("alias",f.title),s("title",f.title.replace("_"," "));let c={};[Wx.none,Wx.backendOnly,Wx.deviceOnly,Wx.down,Wx.downPlus].includes(f.transferDirection)&&s("upload","0"),[Wx.none,Wx.backendOnly,Wx.deviceOnly,Wx.up,Wx.upPlus].includes(f.transferDirection)&&s("download","0"),(J.isIotApp(A)||J.isLibrary(A))&&[Wx.up,Wx.upPlus].includes(f.transferDirection)&&s("edit","99");for(let D of f.fields){if(D.type==="shadow")continue;let p=sf(D),j=nf[p.type],_=uA("title",p,x)||p.name;!_.startsWith("%")&&p.library&&(_=`${p.library}: ${_}`);let k={title:_,alias:p.name,index:D.index,...c};k.byteofs=`${p.byteOffset}`;for(let[S,P]of Object.entries(j.xml))k[S]=P;Object.hasOwn(j,"xmlOut")&&j.xmlOut(k,p,x),k.units=uA("unit",p,x),k.chmode=uA("channelMode",p,x),k.ialarm_high=uA("chartAlarmHigh",p,x),k.ialarm_low=uA("chartAlarmLow",p,x),k.iwarn_high=uA("chartWarningHigh",p,x),k.iwarn_low=uA("chartWarningLow",p,x),k.hysterese=uA("chartHysteresis",p,x),k.itrigger=uA("chartTriggerThreshold",p,x),k.itriggerus=uA("chartTriggerRelation",p,x),k.setpoint=uA("chartSetPoint",p,x),k.bitmask=rf(p),p.hex&&(k.editmask="%HEX%"),p.readPermission&&(k.view=p.readPermission),p.writePermission&&(k.edit=p.writePermission),p.defaultValue!==void 0&&(k.default=tf(p)),p.utilsTransferInterval===!0&&(k.param0="%FFFF0005%transfer_interval"),t("<field>"),p.library&&t(`// declared by ${p.library} library`,!0);for(let[S,P]of Object.entries(k))P!==void 0&&s(S,`${P}`);t("</field>")}["alerts","applog"].includes(F)||(t("</table>"),t("// "+f.size+" bytes total size"))}return t("<split>"),t(n),t("target=alarm0"),t("key=20"),t("</split>"),t("<split>"),t(n),t("target=applog0"),t("key=28"),t("</split>"),r.join(`
|
|
1644
|
-
`)}function sf(A){let x=structuredClone(A),e=A.arrayRef?.index;if(e===void 0)return x;for(let[r,t]of Object.entries(x))x[r]=j0.patchValueWithArrayInfo(t,e);return x}var MA=cx(require("semver"));var bA=cx(require("semver"));var fr={DP_registry_sz:1024,DP_config_sz:4e3,DP_histdata_sz:1024,DP_DISPLAY_CNT:0,DP_LED_CNT:0,DP_BUTTON_CNT:0,DP_GPIO_CNT:0,DP_IRQ_CNT:0,DP_DIGOUT_CNT:0,DP_UIN_CNT:0,DP_TEMP_CNT:0,DP_I2C_CNT:0,DP_SPI_CNT:0,DP_UART_CNT:0,DP_RS485_CNT:0,DP_RS232_CNT:0,DP_WIFI_CNT:0,DP_BLE_CNT:0,DP_LORA_CNT:0,DP_NBIOT_CNT:0},On={max_size:1e5,max_fields:1e3},IA={max_size:4e3,max_fields:1e3},pA={max_size:1024,max_fields:1e3},Er={configA:On,configB:On,configC:On,config0:IA,config1:IA,config2:IA,config3:IA,config4:IA,config5:IA,config6:IA,config7:IA,config8:IA,config9:IA,histdata0:pA,histdata1:pA,histdata2:pA,histdata3:pA,histdata4:pA,histdata5:pA,histdata6:pA,histdata7:pA,histdata8:pA,histdata9:pA,aloha:{...pA,warn_fields:10},alerts:{max_size:13,max_fields:0,exact_match:!0},applog:{max_size:125,max_fields:0,exact_match:!1}},yt={m22x:{name:"M22x",dpid:"m22x",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M M2 HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:Er,auto_inc:{...fr,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:2,DP_WIFI_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m23x:{name:"M23x",dpid:"m23x",interface:{type:"usb",filter:{vendorId:1155},fileChunk:4096},usb_ids:["rapidM2M M23 HW2.0","rapidM2M M23 HW1.0"],alt_ids:[],generation:"M23",prog_mem:8*1024*1024,data_mem:8*1024*1024,total_mem:8*1024*1024,hw_reqd:!1,dde:Er,auto_inc:{...fr,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:1,DP_WIFI_CNT:1},usbcaps:{dbgItfMayHangFixed:"99v999"},dlo:{compileRestrictions:{}}},nrf91:{name:"NRF91",dpid:"nrf91",interface:{type:"usb",filter:{vendorId:9540},fileChunk:2048},usb_ids:["rapidM2M NRF91 HW1.0","ONE NRF91 HW1.0","rapidM2M Evolve HW1.0"],alt_ids:[],generation:"NRF91",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:Er,auto_inc:{...fr,DP_LED_CNT:1,DP_GPIO_CNT:32,DP_IRQ_CNT:6,DP_I2C_CNT:2,DP_SPI_CNT:2,DP_UART_CNT:2,DP_AIN_CNT:8,DP_PWM_CNT:3},usbcaps:{}},m2blegw:{name:"BLE Gateway",dpid:"m2blegw",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M BLEGW HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:Er,auto_inc:{...fr,DP_DISPLAY_CNT:1,DP_DISPLAY_TYPE:"xc",DP_BUTTON_CNT:1,DP_BLE_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyv3:{name:"myDatalogEasy V3",dpid:"m2easyv3",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M Easy HW3.0"],alt_ids:["rapidM2M EasyIoT HW1.0","rapidM2M M220 HW1.0"],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:Er,auto_inc:{...fr,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyiot:{name:"myDatalogEasy IoT",dpid:"m2easyiot",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M EasyIoT HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:Er,auto_inc:{...fr,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}}};var Hn=require("vscode-uri");var yx=R0.ContainerType,I0=R0.TransferDirection,Vr=R0.regexRelation,af=R0.CONFIG_CONTAINER,Un=R0.CONTAINER_DEF_DLO_CID_BASE,Xr=R0.CONTAINER_DEFS,_t=R0.fieldTypeDefinitions,Ii=j0.isNumeric;function oA(A){let x=_t[A.type];return x.pwn.rwp||(x.pwn.rwp="%n"),x.pwn.htype||(x.pwn.htype=x.pwn.rwfunc),x.pwn}var kt="Microtronics/dlo-core";function zn(A){return J.isLibrary(A)&&A.name==="dlo-core"?A.version:A.libraryDependencies&&Object.hasOwn(A.libraryDependencies,kt)?Q0.rangeToVersion(A.libraryDependencies[kt]):A.libraryDevDependencies&&Object.hasOwn(A.libraryDevDependencies,kt)?Q0.rangeToVersion(A.libraryDevDependencies[kt]):null}function of(A){let x=zn(A);return x===null||bA.gte(x,"0.3.0")?bA.valid(A.version)?A.version:bA.coerce(`${A.version}`):bA.coerce(A.version)?.major}function Gn(A){let x=zn(A);if(x===null)return!1;let e=bA.coerce(x);return bA.gte(e,"1.1.0")}function Ff(A){let x=zn(A);if(x===null)return!1;let e=bA.coerce(x);return bA.gte(e,"1.15.0")}var vf=["u8","u16","u32","s8","s16","s32","s64","f16","f32","f64"];function ff(A){if(A.type==="ustring")return!1;if(A.defaultValue!=="NaN")return!0;let x=oA(A);return!x||x==="skip"?!1:vf.includes(`${x.rwfunc}`)}function Ef(A,x,e){A("PROJECT META");let{dpid:r,registry:t}=e;if(!r)throw new Error('Setting "dpid" is required to generate dlo files');let{auto_inc:s}=yt[r];x("APM_DPID",`${r}`),x(`APM_DPID_${r}`,"1"),x(`APM_DPID_${r.toUpperCase()}`,"1"),x("APM_ID",t?.id||"");let n=of(e);x("APM_VERSION",`${n}`),x("APM_NAME",`${e.name}`),x("APM_AUTHOR",`${e.publisher}`);for(let[F,f]of Object.entries(s))Ii(f)?x(F,`${f}`):x(F,`"${f}"`)}function lf(A,x,e,r){let t=r.flat,{definesWithSource:s}=r;x("GLOBAL DEFINES");for(let[n,F]of Object.entries(t)){let f=s[n]?.comment;if(f){let D=f.split(`
|
|
1645
|
-
`);if(D.length===1)A(`/** ${D[0]} */`);else{A("/**");for(let p of D)A(` * ${p}`);A(" */")}}let c=Object.hasOwn(t,F);e(n,`${F}`,c)}}function cf(A,x,e,r){let t=parseInt(A.substring(6)),s=1<<t;e[t]=x.size,r.cx_isupm|=[I0.both,I0.none,I0.deviceOnly,I0.up,I0.upPlus].includes(x.transferDirection)?s:0,r.cx_isvolatilem|=x.volatile?s:0,r.cx_isdnm|=[I0.both,I0.none,I0.deviceOnly,I0.down,I0.downPlus].includes(x.transferDirection)?s:0,r.cx_isvlm|=[I0.bothPlus,I0.upPlus,I0.downPlus].includes(x.transferDirection)?s:0}function Bf(A,x,e,r){let t=parseInt(A.substring(8));e[t]=x.size,r.hx_isvlm|=[I0.upPlus].includes(x.transferDirection)?1<<t:0}function Cf(A){return[I0.upPlus].includes(A.transferDirection)}function df(A,x,e){let r=0,t=Array(10).fill(0),s={cx_isupm:0,cx_isvolatilem:0,cx_isdnm:0,cx_isvlm:0},n=0,F=Array(10).fill(0),f={hx_isvlm:0},c;for(let[p,j]of Object.entries(e.containers))j.containerType===yx.cx&&j.transferDirection!==I0.backendOnly?(cf(p,j,t,s),r=Math.max(r,j.size)):j.containerType===yx.hx?(Bf(p,j,F,f),r=Math.max(r,j.size)):j.containerType===yx.aloha&&(c=Cf(j),r=Math.max(r,j.size));x("DDE CORE"),A(`#define _DDE_BUF_BYTES (${r}+10)`),A(""),A("// c0 c1 c2 c3 c4 c5 c6 c7 c8 c9"),A(`stock _DDE_CONFIGS_size[] =[ ${t.join(", ")}];`),A(`#define _DDE_CONFIGS_upm 0b${s.cx_isupm.toString(2)} // ..is tolerant when reading back container with under-length`),A(`#define _DDE_CONFIGS_volatilem 0b${s.cx_isvolatilem.toString(2)} // inits container as volatile`),A(`#define _DDE_CONFIGS_downm 0b${s.cx_isdnm.toString(2)} // reading the container expects strict length`),A(`#define _DDE_CONFIGS_varlenm 0b${s.cx_isvlm.toString(2)} // allow partial write (dde_wxxx)`),A(`#define _DDE_CONFIGS_rdef 0b${n.toString(2)} // ..apply defaults reading a container with under-length`),A(""),A("// h0 h1 h2 h3 h4 h5 h6 h7 h8 h9"),A(`stock _DDE_HISTS_size[] =[ ${F.join(", ")}];`),A(`#define _DDE_HISTS_varlenm 0b${f.hx_isvlm.toString(2)} // allow partial write (dde_wxxx)`);let D=[...F];Object.hasOwn(e,"applog")&&D.push(125),Object.hasOwn(e,"alerts")&&D.push(13),A(`#define _DDE_HISTS_maxsize ${Math.max(...D)}`),A(""),c!==void 0&&(A(`#define _DDE_ALOHA_varlen ${c?1:0}`),A(""))}function Df(A,x,e){for(let[r,t]of Object.entries(e.containers)){if(t.containerType==="applog")continue;x(`${t.title.toUpperCase()} - ${t.transferDirection} via #${r}`);let s=Un(t.containerType,t.transferDirection);if(!s){A("// ... container not available in DLO");continue}let n=`DDE_${t.containerType===yx.aloha?yx.aloha:t.title}`,F=Xr[r];A(`// ${n}_id - container identifier required for ${n}_read/_write operations`),A(`#define ${n}_id (${s}+${F.cnum||0})`),A(`// ${n}_sz - [byte] container total size`),A(`#define ${n}_sz ${t.size}`),F.cnum!==void 0&&(A(`// ${n}_idx - 0+ container index number`),A(`#define ${n}_idx ${F.cnum}`))}}function Mi(A,x,e){let r=[],t=r.push.bind(r);function s(F){t(`
|
|
1646
|
-
// === ${F} ===
|
|
1647
|
-
`)}function n(F,f,c=!1){let D=Ii(f)?"":'"';c&&(D=""),t(`#define ${F} ${D}${f}${D}`)}return Ef(s,n,e),lf(t,s,n,x),df(t,s,A),Df(t,s,A),r.join(`
|
|
1648
|
-
`)}var Yr=class{constructor(x,e,r){this.manifest=x;this.ddeMap=e;this.context=r;this.sourceType="pawnSource"}manifest;ddeMap;context;globalVariables=[];pawnGlobalSource=[];pawnHelperSource=[];timeSeriesSource=[];readWriteSource=[];definesSource=[];defaultDefinesSource=[];knownDefines=[];pawnIndent=0;sourceType;pawn(x,e){e&&x==="<"&&this.pawnIndent--,{pawnSource:this.pawnGlobalSource,globalVariables:this.globalVariables,timeseries:this.timeSeriesSource,readWrite:this.readWriteSource,defines:this.definesSource,defaultDefines:this.defaultDefinesSource}[this.sourceType].push(" ".repeat(this.pawnIndent)+(e||x)),e&&x===">"&&this.pawnIndent++}generate(){for(let[x,e]of Object.entries(this.ddeMap.containers))this.context&&!e.libraries.includes(this.context)||!Un(e.containerType,e.transferDirection)||!e.fields||!this.context&&!R0.hasContainerAppFields(e)||Xr[x].ctype!==yx.cx&&this.context||(this.generateGlobalVarsForContainer(e),this.generateReadWriteFunctions(e));return this.mergeSourceTypes(),{globals:this.pawnGlobalSource,helper:this.pawnHelperSource}}createGlobalVar(x,e){this.sourceType="globalVariables";let r=e?this.variableNameForPawnDefinition(x,e):x;if(e){let t=this.generateCommentForField(e);t&&(Array.isArray(t)?(this.pawn("/**"),t.forEach(s=>{this.pawn(` * ${s}`)}),this.pawn(" */")):this.pawn(`// ${t}`))}this.pawn(`stock ${r}${e?this.initialiserForGlobalVar(e):""};`)}initialiserForGlobalVar(x){if(x.defaultDloDefine===void 0||x.arrayRef)return"";let e=oA(x);return!e||e==="skip"||`${e.rwp||""}`.includes("%l")?"":` = ${x.defaultDloDefine}`}insertSection(x){this.pawn(""),this.pawn("// ============================================================================="),this.pawn(`// ${x}`),this.pawn("// ============================================================================="),this.pawn("")}mergeSourceTypes(){this.sourceType="pawnSource",this.definesSource.length&&(this.insertSection("Defines"),this.pawnGlobalSource.push(...this.definesSource)),this.defaultDefinesSource.length&&(this.insertSection("Field defaults"),this.pawnGlobalSource.push(...this.defaultDefinesSource)),this.globalVariables.length&&(this.insertSection("Global Variables"),this.pawnGlobalSource.push(...this.globalVariables)),this.readWriteSource.length&&(this.insertSection("Internal read/write calls"),this.pawnHelperSource.push(...this.readWriteSource)),this.pawn("")}generateGlobalVarsForContainer(x){this.sourceType="globalVariables",this.pawn(""),this.pawn(`// Container '${x.title.replace("_"," ")}'`),this.pawn("");let e=`DDE_${x.title}`;this.generateArrayDefines(e,x);for(let r of x.fields){if(r.type==="shadow"||r.shadowRef||r.library!==this.context)continue;if(r.arrayRef!==null){let s=x.arrays[r.arrayRef.name],n=`${e}_${r.arrayRef.name}`;s.fields?.length&&(n+=`_${r.name.split(".")[1]}`),this.createDefaultDefineForField(n,r);continue}let t=this.generateFieldVariableName(e,r);this.createDefaultDefineForField(t,r),this.createGlobalVar(`${t}`,r)}}generateArrayDefines(x,e){for(let r of Object.values(e.arrays)){if(this.context!==r.library)continue;let t=`${x}_${r.name}_dim`;if(this.sourceType="defines",this.pawn(`#define ${t} ${r.length}`),r.fields){for(let F of r.fields)_t[F.type]?.isBlob&&F.byteSize&&this.addDefine(`${x}_${r.name}_${F.name}_dim`,F.byteSize);let s={...e};s.fields=[],r.fields.forEach(F=>{s.fields.push({arrayRef:null,shadowRef:null,byteOffset:0,byteSize:F.byteSize,id:F.name,library:r.library,name:F.name,type:F.type,title:null,index:0})});let n=`${x}_${r.name}_def`;this.generateTypeDefinitions(s,n),this.createGlobalVar(`${x}_${r.name}[${t}][${n}]`)}else this.createGlobalVar(`${x}_${r.name}[${t}]`)}}generateCommentForField(x){let e=[`@type ${x.type}`];if(x.description&&e.unshift(x.description),x.defaultValue!==void 0){let{value:r,reason:t}=this.parseFieldDefault(x);e.push(`@default ${r} ${t||""}`)}return e}generateFieldVariableName(x,e){let r=`${x}_${e.name}`,t=Object.hasOwn(_t,e.type)&&_t[e.type].isBlob,s=e.byteSize;return s&&t&&(this.sourceType="defines",this.pawn(`#define ${x}_${e.name}_dim ${s}`),this.pawn(`#define ${x}_${e.name}_iter() for(new i=0;i<${s};i++)`)),this.sourceType="globalVariables",r}generateTypeDefinitions(x,e){this.sourceType="defines";let r=x.fields;if(!r)return;let t=[];this.pawn(">",`#define ${e} [`);for(let s of r){let n=this.generateFieldTypeDefinition(s,x,t,e);n!==null&&this.pawn(n)}this.pawn("<","]")}handleArrayFieldDedup(x,e,r,t){let s=x.arrayRef;if(s){let f=e.arrays[s.name];if(!r.includes(s.name)&&!f.fields)r.push(s.name);else return null}let n=x.arrayRef?x.arrayRef.name:x.name,F=x.arrayRef?`[${t}_${n}_dim]`:"";return{fieldName:n,fld_dim:F}}generateFieldTypeDefinition(x,e,r,t){if(x.type==="shadow"||x.shadowRef||x.library!==this.context)return null;let s=this.handleArrayFieldDedup(x,e,r,t);if(s===null)return null;let{fieldName:n,fld_dim:F}=s,f="";if(x.type==="struct")f="// ."+n+F;else{let c=oA(x);if(!c)return null;c==="skip"?f=`// skipped - .${n}${F}`:f+=c.rwp.replace("%n",`.${n}${F}`).replace("%l",x.byteSize)}return f+=",",x.library&&(f+=` // declared by ${x.library} library`),f}variableNameForPawnDefinition(x,e){let r=oA(e);return r&&r!=="skip"?r.rwp.replace("%n",`${x}`).replace("%l",e.byteSize):x}createDefaultDefineForField(x,e){if(this.sourceType="defaultDefines",e.scale!==void 0&&this.addDefine(`${x}_scale`,e.scale),e.offset!==void 0&&this.addDefine(`${x}_offset`,e.offset),e.defaultValue!==void 0&&ff(e)){let{value:r,reason:t}=this.parseFieldDefault(e),s=`${x}_default`;this.addDefine(s,r,t)&&(e.defaultDloDefine=s)}}addDefine(x,e,r){return Vr.exec(`${e}`)?!1:(this.knownDefines.includes(x)||(r&&this.pawn(`// ${r}`),this.pawn(`#define ${x} ${e}`),this.knownDefines.push(x)),!0)}generateReadWriteFunctions(x){let e=x.name,r=Xr[e],t=`DDE_${x.containerType===yx.aloha?yx.aloha:x.title}`;[I0.both,I0.bothPlus,I0.none,I0.deviceOnly,I0.up,I0.upPlus].includes(x.transferDirection)&&this.generateWriteMethod(t,x),r.ctype===yx.cx&&this.generateReadMethod(t,x)}generateWriteMethod(x,e){this.sourceType="readWrite";let r=`DDE_${e.title}_id`,t=[yx.hx,yx.aloha].includes(e.containerType),s=e.containerType===yx.hx,n=e.containerType===yx.aloha,F=`_${x}_write`,f=Gn(this.manifest)?", flags":"",c=s?`stamp${f}`:"",D=Gn(this.manifest)?"const stamp=0, const flags=0":"const stamp=0";this.pawn(">",`stock ${F}(${s?D:""}) {`),t&&this.pawn(`dde_wbegin(DDE_${n?yx.aloha:e.title}_id);`),this.generateRWFunctionBody(x,e,"dde_w"),t&&this.pawn(`return dde_wend(${c});`),this.pawn("<","}"),this.pawn(""),this.sourceType="globalVariables";let p=`${x}_transfer`,j=`${x}_persist`,_=this.functionArgumentsForDdeWrite(s,t);if(this.pawn(">",`${this.context?"stock ":""}${p}(${_}) {`),t)this.pawn(`${F}(${c});`);else{let k=e.name.slice(-1);this.pawn(`dde_flush(${k}, immediate);`)}this.pawn("<","}"),this.pawn(""),e.volatile&&(this.pawn(">",`stock ${j}() {`),this.pawn(`return rM2M_CfgFlush(${r});`),this.pawn("<","}"))}functionArgumentsForDdeWrite(x,e){let r=Gn(this.manifest)?", const flags=0":"";return x?`const stamp=0${r}`:e?"":"bool:immediate=false"}generateReadMethod(x,e){this.sourceType="readWrite";let r=`_${x}_read`;this.pawn(">",`stock ${r}() {`),this.generateRWFunctionBody(x,e,"dde_r"),this.pawn("<","}"),this.pawn("")}isFieldSkipped(x){return x.type==="shadow"||!!x.shadowRef||x.library!==this.context}emitFieldRW(x,e,r,t,s,n,F){if(!e.arrayRef)return this.emitSingleField(x,e,r,t,F);let f=e.arrayRef.name,c=s.get(f);return c?n.has(f)?F:(n.add(f),this.emitArrayLoop(x,c,r)):this.emitSingleField(x,e,r,t,F)}generateRWFunctionBody(x,e,r){let t=e.fields,s=this.analyzeArrayGroups(t,x,e),n=new Set,F=-1;for(let f of t){if(this.isFieldSkipped(f))continue;let c=oA(f);!c||c==="skip"||(F=this.emitFieldRW(x,f,r,c,s,n,F))}}defaultArgumentFor(x,e){return x.defaultDloDefine===void 0?"":e==="dde_r"||Ff(this.manifest)?`, ${x.defaultDloDefine}`:""}emitSingleField(x,e,r,t,s){e.byteOffset!==s&&this.pawn(`_dde_idx = ${e.byteOffset};`);let n="";n+=r,n+=t.rwfunc;let F=`${x}_${e.name}`;return n+=`(${F}`,t.rwlen&&(n+=`, ${e.byteSize}`),n+=this.defaultArgumentFor(e,r),this.pawn(n+");"),e.byteOffset+e.byteSize}emitArrayLoop(x,e,r){this.pawn(">",`for (new _i = 0; _i < ${e.dimDefine}; _i++) {`);let t=-1;for(let s of e.templateFields){let n=oA(s);if(!n||n==="skip")continue;let F=s.byteOffset;F!==t&&this.pawn(`_dde_idx = ${F} + (_i * ${e.stride});`),t=F+s.byteSize;let f=`${x}_${s.name.replace(/\[\d+\]/,"[_i]")}`,c=`${r}${n.rwfunc}(${f}`;n.rwlen&&(c+=`, ${s.byteSize}`),c+=this.defaultArgumentFor(s,r),this.pawn(c+");")}return this.pawn("<","}"),-1}analyzeArrayGroups(x,e,r){let t=this.collectArrayFieldsByIndex(x);return this.buildArrayGroups(t,e,r)}collectArrayFieldsByIndex(x){let e=new Map;for(let r of x){if(this.isFieldSkipped(r)||!r.arrayRef)continue;let t=oA(r);if(!t||t==="skip")continue;let{name:s,index:n}=r.arrayRef;e.has(s)||e.set(s,new Map);let F=e.get(s);F.has(n)||F.set(n,[]),F.get(n).push(r)}return e}validateArrayStride(x,e){let r=e[0].byteOffset-x[0].byteOffset;if(r<=0)return null;for(let t=0;t<x.length;t++)if(e[t].byteOffset-x[t].byteOffset!==r)return null;return r}buildArrayGroups(x,e,r){let t=new Map;for(let[s,n]of x){let F=r.arrays[s];if(!F||F.length<2)continue;let f=n.get(0),c=n.get(1);if(!f||!c||f.length===0||c.length===0||f.length!==c.length)continue;let D=this.validateArrayStride(f,c);D!==null&&t.set(s,{arrayName:s,dimDefine:`${e}_${s}_dim`,stride:D,templateFields:f})}return t}parseFieldDefault(x){let e=oA(x),r=x.defaultValue;function t(n,F){return{value:n,reason:F}}switch(x.type){case"astring":case"nstring":case"cstring":return t(`"${r}"`);case"wstring":return t(`''${r}''`);case"ustring":return t(`/* default not supported: ${r} */`);case"binary":{let F=`{ 0x${(r.substring(2).replace(/\s+/g,"").match(/.{1,2}/g)||[]).join(", 0x")} }`;return t(F)}}if(r==="NaN"){let n=e.rwfunc;return t(`${n}_NaN`.toUpperCase())}let s=this.parseFieldScaleOffset(x);return s?t(s.calculated,s.reason):(r!==void 0&&!Vr.exec(`${r}`)&&x.type.startsWith("float")&&r%1===0&&(r=r.toFixed(x.decimalPlaces||1)),t(`${r}`))}parseFieldScaleOffset(x){let e=x.defaultValue;if(!(!!Vr.exec(`${x.offset}`)||!!Vr.exec(`${x.scale}`)||!!Vr.exec(`${x.defaultValue}`))&&(x.offset!==void 0||x.scale!==void 0)){let t=x.offset!==void 0?Number(x.offset):0,s=x.scale!==void 0?Number(x.scale):1;if(s===0)return null;let n=(Number(e)-t)/s,F=`(defaultValue - offset) / scale -> (${e} - ${t}) / ${s}`;return x.type.startsWith("float")?n%1===0&&(n=n.toFixed(1)):(n=Math.round(n),F=`Rounded value of: ${F}`),{calculated:n,reason:F}}return null}};function uf(A){return`${`onUplinkApply_${A}()`};`}function Li(A,x,e){x.libraries.forEach(r=>{let t=j0.generateHashForLibraryName(r);A(` #ifdef _${t}${e}_${x.title}`),A(` _${t}${e}_${x.title}(); // ${r}`),A(" #endif")})}function pf(A,x){A("stock _onUplinkEvent(ev, param) {"),x.forEach(e=>{let t=`_${j0.generateHashForLibraryName(e)}UplinkEvent`;A(` #ifdef ${t}`),A(` ${t}(ev, param);`),A(" #endif")}),A(" onUplinkEvent(ev, param);"),A("}")}function bf(A){let x=[],e=[];for(let[r,t]of Object.entries(A.containers))Xr[r].ctype===yx.cx&&([I0.up,I0.upPlus,I0.deviceOnly].includes(t.transferDirection)&&e.push(t),[I0.bothPlus,I0.both,I0.downPlus,I0.down].includes(t.transferDirection)&&x.push(t));return{containerApply:x,containerRestore:e}}function mf(A,x){x.length&&A("");for(let e of x)e.knownNames.forEach(r=>{A(`forward onUplinkRestore_${r}();`)}),A(""),A(`stock restoreUplink${e.name}() {`),A(` _DDE_${e.name}_read();`),Li(A,e,"Restore"),R0.hasContainerAppFields(e)&&A(` onUplinkRestore_${e.title}();`),A("}");if(A("#pragma warning push"),A("stock _onUplinkRestore(cfgId) {"),x.length){A(" switch(cfgId) {");for(let e of x)A(` case DDE_${e.title}_id: restoreUplink${e.name}(); // ${e.name}`);A(" }")}else A(" #pragma warning disable 203"),A(" // no containers to restore");A("}"),A("#pragma warning pop")}function jf(A,x){x.length&&A("");for(let e of x)e.knownNames.forEach(r=>{A(`forward onUplinkApply_${r}();`)}),A(""),A(`stock applyUplink${e.name}() {`),A(` _DDE_${e.name}_read();`),Li(A,e,"Apply"),R0.hasContainerAppFields(e)&&A(` ${uf(e.title)}`),A(" return(OK);"),A("}");if(A("#pragma warning push"),A("stock _onUplinkApply(cfgId) {"),x.length){A(" switch(cfgId) {");for(let e of x)A(` case DDE_${e.title}_id: return applyUplink${e.name}(); // ${e.name}`);A(" }"),A(" return ERROR;")}else A(" #pragma warning disable 203"),A(" // no containers to apply"),A(" return OK;");A("}"),A("#pragma warning pop")}function Ri(A,x){let e=[],r=e.push.bind(e);pf(r,x);let{containerApply:t,containerRestore:s}=bf(A);return mf(r,s),jf(r,t),e.join(`
|
|
1649
|
-
`)}var hf=af.map(A=>`_DDE_${A}_write`);function Oi(A){let x=[],e=x.push.bind(x),r=[...hf];for(let[t,s]of Object.entries(A.containers)){let n=Un(s.containerType,s.transferDirection),F=Xr[t];if(!n||!s.fields||F.ctype!==yx.cx)continue;let f=`DDE_${s.name}`,c=`DDE_${s.title}_id`;if([I0.both,I0.bothPlus,I0.none,I0.deviceOnly,I0.up,I0.upPlus].includes(s.transferDirection)){let D=`_${f}_write`;e(`stock ${D}() {`),e(` dde_wbegin(${c});`),Ni(e,s,"write"),e(" return dde_wend();"),e("}"),r.splice(r.indexOf(D),1)}if(F.ctype===yx.cx){let D=`_${f}_read`;e(`stock ${D}() {`),e(` if (dde_rbegin(${c})) return ERROR;`),Ni(e,s,"read"),e(" dde_rend();"),e(" return OK;"),e("}")}}if(r.length){e(""),e("// Dummy functions needed by the dde library");for(let t of r)e(`stock ${t}() { return OK; }`)}return x.join(`
|
|
1650
|
-
`)}function Ni(A,x,e){x.libraries.forEach(r=>{let t=j0.generateHashForLibraryName(r);A(` #ifdef __${t}${x.title}_${e}`),A(` __${t}${x.title}_${e}();`),A(" #endif")}),R0.hasContainerAppFields(x)&&(A(` #ifdef _DDE_${x.title}_${e}`),A(` _DDE_${x.title}_${e}();`),A(" #endif"))}async function Gi(A,x){let e=[],r=await Q0.getApmPartDependencies(A,x,p0.Part.dlo);await Wr(A,x,e,e0.fileNames.autoInc);let t=await gf(A,x,r);for(let s of r)s.name==="local-data-interface"&&await Wr(A,x,e,e0.fileNames.autoLocalDataInc),e.push(`#include <${s.name}>`),s.name==="dlo-core"&&(e.push(...t),await Wr(A,x,e,e0.fileNames.autoDdeInc.replace("X","app")),await Wr(A,x,e,e0.fileNames.autoDdeInc.replace("X","main")));return r.some(s=>s.name==="dlo-core")&&await Wr(A,x,e,e0.fileNames.autoUplinkInc),e.join(`
|
|
1651
|
-
`)}async function gf(A,x,e){let r=[];for(let t of e){let s=e0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",t.name);await x.stat(Hn.Utils.joinPath(A,s))&&r.push(`#include "${e0.fileNames.autoDdeInc.replace("X",t.name)}"`)}return r}async function Wr(A,x,e,r){let t=Hn.Utils.joinPath(A,e0.filePaths.studio.auto.dlo.path,r);await x.stat(t)&&e.push(`#include "${r}"`)}var Hi=cx(require("semver")),zi=require("yaml");var FA=R0.ContainerType,St=R0.TransferDirection,yf=R0.fieldTypeDefinitions,lr={$ref:"#/components/parameters/contextId"},kf={$ref:"#/components/parameters/addonId"},_f={$ref:"#/components/parameters/appId"},Ui={$ref:"#/components/schemas/histdataResponse"},wf={$ref:"#/components/schemas/histdataRequest"},$t={$ref:"#/components/schemas/rapidM2MStamp"},Sf={$ref:"#/components/schemas/timeseriesRequestBase"},wt="rapidM2M Stamp",mA={description:"Successful operation"},Ki={parameters:{contextId:{name:"siteUid",in:"path",description:"The site uid",schema:{type:"string"},required:!0},appId:{name:"appUid",in:"path",description:"The app uid",schema:{type:"string"},required:!0}},schemas:{rapidM2MStamp:{type:"string",format:"YYYYMMDDhhmmssSSS",description:'Special format of an UTC timestamp. Important: The trailing 0 are truncated. eg.: "2024-02-10" -> "2024021"'}}},Ji={...structuredClone(Ki)};Object.assign(Ji.schemas,{histdataResponse:{type:"array",description:"Array of histdata records. Array starts with the youngest record",items:{type:"array",description:'First item is always the rapidM2M timestamp of the record. All following values are in the order of the "select" array.',items:{anyOf:[$t,{type:"string"},{type:"number"}]}}},histdataRequest:{type:"object",additionalProperties:!1,required:["from","until"],properties:{from:{type:"string",format:wt,description:"items to include must be older or equal, UTC w/o time saving."},until:{type:"string",format:wt,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until."},count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set."},offset:{type:"integer",description:"skips the given number of records in the result set."}}},timeseriesRequestBase:{type:"object",additionalProperties:!1,properties:{count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set.",minimum:-1e3,maximum:1e3,default:1e3},from:{type:"string",format:wt,description:"items to include must be older or equal, UTC w/o time saving"},until:{type:"string",format:wt,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until"},offset:{type:"integer",description:"Skips the given number of records in the result set",minimum:0,default:0}}}});var Qr={content:{"application/json":{schema:{type:"object",additionalProperties:!1,properties:{err:{type:"string",description:"Information what went wrong"}}}}}},de={401:{description:"Permission denied",...Qr},403:{description:"Forbidden",...Qr},404:{description:"Resource not found",...Qr},500:{description:"Internal error",...Qr}};function Kn(A,x,e=null){let r=Hi.coerce(x.version)?.version,t={openapi:"3.0.3",info:{description:x.description,title:x.name,version:r||""},tags:[],paths:{},components:{parameters:{},schemas:{}}};e?Object.assign(t.components,structuredClone(Ki)):Object.assign(t.components,structuredClone(Ji));let s=J.isAddon(x),n=J.isAnalytics(x);s&&(t.components.parameters.addonId={name:"addonUid",in:"path",description:"The addon uid",schema:{type:"string"},required:!0});for(let F of Object.values(A.containers))e&&(!F.libraries.includes(e)||F.containerType===FA.hx)||!e&&!R0.hasContainerAppFields(F)||F.containerType===FA.aloha||($f(t,F),Pf(t,F,e),If(t,F,s,n),!s&&!n&&(qf(t,F,e),Nf(t,F)));return t.tags.push({name:"app-center",description:"App Center related routes"}),(0,zi.stringify)(t)}function $f(A,x){A.tags.push({name:Xx(x.title),description:`Transfer direction ${x.transferDirection}`})}function Xx(A){return A.split("_").join(" ")}function qf(A,x,e){let r=`${x.name}`,t={type:"object",description:`Container: "${x.title}"`,additionalProperties:!1,properties:{}},s=[];x.containerType===FA.hx&&(r+="Select",s.push("select"),t.properties.select={type:"array",items:{type:"string",enum:[]}});for(let n of x.fields)n.library!==e||n.type==="shadow"||(x.containerType===FA.hx?t.properties.select.items.enum.push(n.id):(t.properties[n.id]=Vi(n),!n.readPermission&&!n.writePermission&&s.push(n.id)));t.required=s.length?s:void 0,A.components.schemas[r]=t}function Pf(A,x,e=null){let r=`${x.title}`,t={type:"object",description:`Container: "${x.title}" with device transfer direction "${x.transferDirection}"`,additionalProperties:!1,properties:{}},s=[],n=x.containerType===FA.hx;for(let f of x.fields)f.library!==e||f.type==="shadow"||(t.properties[f.name]=Vi(f),!f.readPermission&&!f.writePermission&&s.push(f.name));t.required=s.length?s:void 0,A.components.schemas[r]=t;let F=t.properties;if(n){t.required=t.required?.map(c=>c.toLowerCase());let f={};for(let[c,D]of Object.entries(t.properties))f[c.toLowerCase()]=D;t.properties=f}if(n){let f={type:"object",description:`Request schema of "${x.title}"`,additionalProperties:!1,properties:{select:{type:"array",description:"Optional selection of specific fields of the given container",items:{type:"string",enum:Object.keys(F)}}}};A.components.schemas[`${r}RequestSingle`]=f,A.components.schemas[`${r}Request`]={allOf:[Sf,f]},t.properties.stamp=$t,s.push("stamp")}}function Vi(A){let e={...yf[A.type].openApi},r=Tf(A);return e.default=r,e.example=r,e.description=A.description,e}function Tf(A){return A.defaultValue===void 0?A.defaultValue:A.type==="binary"?`${A.defaultValue.substring(2)}`:A.defaultValue}function Nf(A,x){let e=`/api/1/sites/{siteUid}/${x.name}`,r={get:void 0,put:void 0};if([FA.cx,FA.cb].includes(x.containerType))r.get={deprecated:!0,tags:[Xx(x.title)],summary:`Retrieve the data of the "${Xx(x.title)}" container`,parameters:[lr],responses:{200:{...mA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:$t}},{$ref:`#/components/schemas/${x.name}`}]}}}},...de}},[St.down,St.backendOnly].includes(x.transferDirection)&&(r.put={deprecated:!0,tags:[Xx(x.title)],summary:`Modify the data of the "${Xx(x.title)}" container`,parameters:[lr],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${x.name}`}}}},responses:{201:{...mA},204:{...mA},...de}});else if(x.containerType===FA.hx){let t=`${e}`;e+="/youngest",r.get={deprecated:!0,tags:[Xx(x.title)],summary:`Retrieve the youngest data of the "${Xx(x.title)}" container`,parameters:[lr,{name:"json",in:"query",required:!0,schema:{$ref:`#/components/schemas/${x.name}Select`}}],responses:{200:{...mA,content:{"application/json":{schema:Ui}}},...de}},A.paths[t]={get:{deprecated:!0,tags:[Xx(x.title)],summary:`Get the historical data of the "${Xx(x.title)}" container.`,parameters:[lr,{name:"json",in:"query",required:!0,schema:{allOf:[{$ref:`#/components/schemas/${x.name}Select`},wf]}}],responses:{200:{...mA,content:{"application/json":{schema:Ui}}},...de}}}}A.paths[e]=r}function If(A,x,e=!1,r=!1){let s=x.containerType===FA.hx?"timeseries":"containers",n=[],F=Xx(x.title);r||n.push({path:`/api/1/sites/{siteUid}/${s}/${x.title}`,params:[lr],tags:[F]}),e&&(n=[{path:`/api/1/sites/{siteUid}/addons/{addonUid}/${s}/${x.title}`,params:[lr,kf],tags:[F]}]);let f={path:`/api/1/app-center/apps/{appUid}/${s}/${x.title}`,params:[_f],tags:["app-center"]};r&&f.tags.push(F),n.push(f);let c={get:void 0,put:void 0,post:void 0},D={tags:[],summary:`Retrieve the data of the "${Xx(x.title)}" container`,parameters:[],responses:{200:{...mA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:$t}},{$ref:`#/components/schemas/${x.title}`}]}}}},...de}};if([FA.cx,FA.cb].includes(x.containerType)&&(c.get=D,[St.down,St.backendOnly].includes(x.transferDirection)&&(c.put={tags:[],summary:`Modify the data of the "${Xx(x.title)}" container`,parameters:[],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${x.title}`}}}},responses:{201:{...mA},204:{...mA},...de}}),n.forEach(p=>{let j=structuredClone(c);Object.values(j).forEach(_=>{_?.parameters?.unshift(...p.params),_?.tags?.unshift(...p.tags)}),A.paths[p.path]=j})),x.containerType===FA.hx){c.get={tags:[],summary:`Get the historical data of "${x.title}"`,parameters:[{name:"json",in:"query",required:!1,schema:{$ref:`#/components/schemas/${x.title}Request`}}],responses:{200:{...mA,content:{"application/json":{schema:{type:"array",items:{$ref:`#/components/schemas/${x.title}`}}}}},...de}},e&&(c.post={tags:[],summary:`Insert data into the "${Xx(x.title)}" container`,parameters:[{name:"allow_future_date",in:"query",description:"Allow inserting records with a stamp value in the future",schema:{type:"boolean"}}],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${x.title}`}}}},responses:{201:{...mA},400:{description:"Bad request",...Qr},...de}});let p=n[0],j=structuredClone(c);Object.values(j).forEach(O=>{O?.parameters?.unshift(...p.params),O?.tags?.unshift(...p.tags)}),A.paths[p.path]=j;let _={...mA,content:{"application/json":{schema:{$ref:`#/components/schemas/${x.title}`}}}},k=`${p.path}/youngest`,S={get:structuredClone(j.get)};S.get.summary=`Get the youngest record of "${x.title}" container`,S.get.responses[200]=_;let P=e?2:1;S.get.parameters[P].schema.$ref=`#/components/schemas/${x.title}RequestSingle`,A.paths[k]=S;let N=`${p.path}/oldest`,L={get:structuredClone(j.get)};L.get.summary=`Get the oldest record of "${x.title}" container`,L.get.responses[200]=_,L.get.parameters[P].schema.$ref=`#/components/schemas/${x.title}RequestSingle`,A.paths[N]=L}}var Xi=R0.TransferDirection,qt=" new szTemp{64};",Pt=" return strcat(aData, szTemp, sizeof(szTemp));";function Yi(A){if(!A.printf&&A.printfFormat==="memtostr")return"bin";if(!A.printf)return null;let x=A.rwp||"%n",e=x.includes("["),t=x.includes("{")||e;if(A.printfFormat==="stampToISOString")return t?null:"stamp";switch(A.printf){case"%d":return t?null:"d";case"%f":return t?null:"f";case"%s":return e?null:"s";default:return null}}function Jn(A){if(A.type==="shadow"||A.shadowRef)return null;let x=oA(A);return!x||x==="skip"?null:Yi(x)}function Qi(A){return[R0.ContainerType.hx,R0.ContainerType.cx].includes(A.containerType)&&A.transferDirection!==Xi.backendOnly}function Mf(A){if(A.type==="shadow"||A.shadowRef)return!1;let x=oA(A);return!!x&&x!=="skip"}function Lf(A,x,e){let r=A.name.indexOf("]"),t=r>=0?A.name.substring(r+1):"",s=`${A.arrayRef.name}|${t}|${x}`;e.has(s)||e.set(s,{fields:[],formatType:x}),e.get(s).fields.push(A)}function Rf(A){let x=[],e=new Map,r=new Set,t=!1;for(let s of A){if(!Mf(s))continue;let n=Jn(s);s.arrayRef&&n?Lf(s,n,e):(x.push(s),n?r.add(n):t=!0)}return{standaloneFields:x,groupMap:e,usedFormats:r,hasInlineFields:t}}function Of(A,x,e){e.sort((c,D)=>c.arrayRef.index-D.arrayRef.index);let r=e.map(c=>c.byteOffset),t=r[1]-r[0];if(!(t>0&&r.every((c,D)=>D===0||c-r[D-1]===t)))return null;let[n,F]=x.split("|"),f=e[0].library?`_${j0.generateHashForLibraryName(e[0].library)}`:"DDE_";return{arrayName:n,subField:F,fields:e,startOffset:r[0],endOffset:r[r.length-1],step:t,formatType:Jn(e[0]),pawnVarBase:`${f}${A}_${n}`}}function Gf(A,x){let{standaloneFields:e,groupMap:r,usedFormats:t,hasInlineFields:s}=Rf(x),n=[];for(let[F,f]of r){let{fields:c,formatType:D}=f;if(c.length<2){e.push(...c),t.add(D);continue}let p=Of(A,F,c);p?(t.add(D),n.push(p)):(e.push(...c),t.add(D))}return e.sort((F,f)=>F.byteOffset-f.byteOffset),{arrayGroups:n,standaloneFields:e,usedFormats:t,hasInlineFields:s}}function Uf(A){let x=new Set;for(let[,e]of Object.entries(A.containers))if(Qi(e))for(let r of e.fields){let t=Jn(r);t&&x.add(t)}return x}function Hf(A,x){x.has("d")&&(A("stock _DDE_fmt_d(aData{}, value) {"),A(qt),A(' sprintf(szTemp, _, "%d", value);'),A(Pt),A("}")),x.has("f")&&(A(""),A("stock _DDE_fmt_f(aData{}, Float:value) {"),A(qt),A(' sprintf(szTemp, _, "%.3f", value);'),A(Pt),A("}")),x.has("s")&&(A(""),A("stock _DDE_fmt_s(aData{}, value{}) {"),A(qt),A(' sprintf(szTemp, _, "%s", value);'),A(Pt),A("}")),x.has("stamp")&&(A(""),A("stock _DDE_fmt_stamp(aData{}, value) {"),A(qt),A(' sprintf(szTemp, _, "%s", (stampToISOString(value)));'),A(Pt),A("}")),x.has("bin")&&(A(""),A("stock _DDE_fmt_bin(aData{}, mem{}, dim) {"),A(" #pragma warning disable 224"),A(" memtostr(aData, mem, 0, dim);"),A(" #pragma warning disable 224"),A(" return dim;"),A("}"))}function zf(A,x){return x===1?A===0?"idx":`idx - ${A}`:A===0?`idx / ${x}`:`(idx - ${A}) / ${x}`}function Kf(A,x,e){let r=`idx >= ${A} && idx <= ${x}`;if(e===1)return r;let t=A===0?`idx % ${e} == 0`:`(idx - ${A}) % ${e} == 0`;return`${r} && ${t}`}function Jf(A,x){let{startOffset:e,endOffset:r,step:t,formatType:s,pawnVarBase:n,subField:F}=x,f=zf(e,t),c=Kf(e,r,t);if(A(` if (${c}) {`),s==="bin"){let D=`${n}[${f}]${F}`,p=F?F.substring(1):"",j=p?`${n}_${p}_dim`:`${n}_dim`;A(` return _DDE_fmt_bin(aData, ${D}, ${j});`)}else A(` return _DDE_fmt_${s}(aData, ${n}[${f}]${F});`);A(" }")}function Vf(A,x,e){if(e.type==="shadow"||e.shadowRef)return;let r=oA(e);if(!r||r==="skip")return;let s=`${e.library?`_${j0.generateHashForLibraryName(e.library)}`:"DDE_"}${x}_${e.name}`,n=Yi(r);if(n==="bin")A(` case ${e.byteOffset}: return _DDE_fmt_bin(aData, ${s}, ${s}_dim);`);else if(n)A(` case ${e.byteOffset}: return _DDE_fmt_${n}(aData, ${s});`);else{if(A(` case ${e.byteOffset}: {`),r.printf){let F=s;r.printfFormat&&(F=`(${r.printfFormat}(${F}))`),A(` sprintf(szTemp, _, "${r.printf}", ${F});`),A(" return (strcat(aData, szTemp, sizeof(szTemp)));")}A(" }")}}function Wf(A,x,e){A(` case '${x.at(-1)}': {`),A(` return _DDE_local_${e.title}(aData, idx);`),A(" }")}function Wi(A,x,e){let r=e===R0.ContainerType.cx?"c":"h",t=e===R0.ContainerType.cx?"config":"histdata";A(` if(cname{0} == '${r}'){`),A(" switch(cname{1}) {");for(let[s,n]of Object.entries(x.containers))e===n.containerType&&s.startsWith(t)&&n.transferDirection!==Xi.backendOnly&&Wf(A,s,n);A(" default:"),A(" return OK;"),A(" }"),A(" return OK;"),A(" }")}function Xf(A,x){let e=Gf(x.title,x.fields);A(""),A(`stock _DDE_local_${x.title}(aData{}, idx) {`),e.hasInlineFields&&A(" new szTemp{64};");for(let r of e.arrayGroups)Jf(A,r);if(e.standaloneFields.length>0){A(" switch(idx) {");for(let r of e.standaloneFields)Vf(A,x.title,r);A(" default:"),A(" return OK;"),A(" }")}A(" return OK;"),A("}")}function Yf(A,x){for(let[,e]of Object.entries(x.containers))Qi(e)&&Xf(A,e)}function Zi(A){let x=[],e=x.push.bind(x),r=Uf(A);return Hf(e,r),r.size>0&&e(""),e("stock DDE_get_local_data(cname{}, aData{}, idx) {"),Wi(e,A,R0.ContainerType.cx),Wi(e,A,R0.ContainerType.hx),e(" return OK;"),e("}"),Yf(e,A),x.join(`
|
|
1652
|
-
`)}var ra=j0.yamlRangeToLineInformation,Zr=e0.filePaths.dde.path,vA;(s0=>{let A=R0.DDEJson,x=j0.convertBlobToString;s0.DDE_SCHEMA=$i;async function r(R,g){let M=await g.readFile(R);return x(M)}s0.readYamlFile=r;async function t(R,g,M=e0.fileNames.mainDDE,Y){let W=[],H=await J.read(R,g),z=await xa(R,g,H);if(Y)for(let Z of z){let{result:n0,unresolvedKeys:U}=Bx.replaceDefineTemplates(Z.yaml,Y);Z.yaml=n0;for(let F0 of U)W.push({file:Z.path,level:"error",message:`Unresolved define template: {{${F0}}}`,line:0,startCharacter:0,endCharacter:0})}for(let Z of z)W.push(...f(Z.path,Z.yaml));let i0=Cx.Utils.joinPath(R,Zr,M),r0=await r(i0,g);if(Y){let{result:Z,unresolvedKeys:n0}=Bx.replaceDefineTemplates(r0,Y);r0=Z;for(let U of n0)W.push({file:i0,level:"error",message:`Unresolved define template: {{${U}}}`,line:0,startCharacter:0,endCharacter:0})}return W.push(...f(i0,r0)),{manifest:H,libraryFiles:z,main:{path:i0,yaml:r0},diagnostics:W}}s0.validate=t;async function s(R,g,M,Y=e0.fileNames.mainDDE){let W=await J.read(R,g),H=await Bx.read(R,g,M),z=await t(R,g,Y,H.flat);if(z.diagnostics.filter(B0=>B0.level==="error").length>0)return{ddeJSON:null,diagnostics:z.diagnostics};let r0=await _(R,g,M),Z=new gt.PreCompiler(W,z.libraryFiles,r0),n0=Z.parseLibraries();if(n0.find(B0=>B0.level==="error"))return{ddeJSON:null,diagnostics:[...z.diagnostics,...n0]};let{ddeJSON:F0,diagnostics:v0}=Z.parseMainDDE(z.main.path,z.main.yaml);return{ddeJSON:F0,diagnostics:[...z.diagnostics,...v0]}}s0.compileDDE=s;let n=new Aa.default({strict:!1,allErrors:!0,verbose:!0});(0,ea.default)(n);let F=n.compile(s0.DDE_SCHEMA);function f(R,g){let M=new Tt.LineCounter,Y=(0,Tt.parseDocument)(g,{lineCounter:M,keepSourceTokens:!0}),W=[];for(let i0 of Y.errors){let r0=i0.pos?ra(M,[i0.pos[0],i0.pos[1],i0.pos[1]]):{line:0,startCharacter:0,endCharacter:0};W.push({file:R,level:"error",message:i0.message,...r0})}if(W.length>0)return W;let H=Y.toJSON();if(!F(H)){let r0=(F.errors||[]).filter(n0=>n0.keyword!=="if"),Z=new Set;for(let n0 of r0){let U=xE(n0);if(Z.has(U))continue;Z.add(U);let F0=eE(Y,M,n0);W.push({file:R,level:"error",message:U,...F0})}}return W}s0.validateJsonSchema=f,s0.PreCompiler=(R,g,M)=>new gt.PreCompiler(R,g,M);function D(R,g){return Rn(R,g)}s0.generateMyDatanetXML=D;async function p(R,g,M,Y){let W=await J.read(R,g),H=Rn(W,Y),z=Cx.Utils.joinPath(R,e0.filePaths.dist.ddeXmlPath);await g.writeFile(z,H),M.log("Generated",e0.filePaths.dist.ddeXmlPath)}s0.exportMyDatanetXML=p;async function j(R,g,M,Y,W){let H=Cx.Utils.joinPath(R,e0.filePaths.studio.auto.dde.historyJson);await g.rm(H).catch(console.error);let z=await J.read(R,g);if(!J.isApp(z)||!z.registry?.id)return;if(!W){M.warn("Could not fetch dde of previous version: No API token provided.");return}let i0=MA.coerce(z.version);try{let n0=(await ex.getExistingApplication(W,z.publisher,z.registry.id,Y)).versions.find(B0=>!MA.prerelease(B0.version)&&MA.lte(B0.version,i0)),U=n0?.files.find(B0=>B0.name==="dde.json");if(!U){M.warn("Could not find a valid previous released app version to fetch the previous dde from.");return}let F0=await fetch(U.downloadUrl,{headers:{...iA(W),...ex.injectSemverHeader(!0)}});if(F0.status!==200){M.warn(`Could not fetch the dde.json of version "${n0?.version}"`);return}let v0=await F0.text();await g.writeFile(H,v0),M.log(`Saved history.json of previous app version ${n0.version}`)}catch(r0){M.error("Failed to fetch the dde of previous version",r0)}}s0.fetchPreviousHistoryJson=j;async function _(R,g,M){try{let Y=Cx.Utils.joinPath(R,e0.filePaths.studio.auto.dde.historyJson);if(await g.stat(Y)){let H=await g.readFile(Y);return JSON.parse(x(H))}let W=Cx.Utils.joinPath(R,Zr,"history.json");if(await g.stat(W)){M.warn(`"${e0.filePaths.studio.auto.dde.historyJson}" does not exist - fallback to "${Zr}history.json"`);let H=await g.readFile(W),z=JSON.parse(x(H)),i0=await J.read(R,g),r0=MA.coerce(i0.version)?.version,Z=Object.keys(z||{}).sort(MA.rcompare).find(U=>U!==r0);if(!Z)return null;let n0=z[Z];return{version:Z,...n0}}}catch(Y){M.error("Failed to read history.json",Y)}return M.warn("history.json does not exist"),null}s0.getHistoryJson=_;function k(R,g){return{version:MA.coerce(g.version)?.version||"1.0.0",...structuredClone(R)}}s0.buildHistoryJson=k;async function S(R,g,M,Y){let W=await J.read(R,g),H=k(Y,W),z=Cx.Utils.joinPath(R,e0.filePaths.dist.historyJson);await g.writeFile(z,JSON.stringify(H,null," ")),M.log("Generated",e0.filePaths.dist.historyJson)}s0.exportHistoryJson=S;async function P(R,g){return g.rm(Cx.Utils.joinPath(R,e0.filePaths.studio.auto.dlo.path))}s0.clearAutoDloDir=P;async function N(R,g,M,Y){await P(R,g);let W=await J.read(R,g),H=await xa(R,g,W),z=await Bx.read(R,g,M),i0=Mi(Y,z,W),Z=new Yr(W,Y,null).generate();for(let ox of H){let Hx=new Yr(W,Y,ox.libraryName),{globals:hA,helper:gA}=Hx.generate(),sx=[...hA,...gA].join(`\r
|
|
1653
|
-
`),Z0=e0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",ox.libraryName),xA=Cx.Utils.joinPath(R,Z0);sx.length&&(M.log("Generated",Z0),await g.writeFile(xA,sx))}let n0=Oi(Y),U=Ri(Y,H.map(ox=>ox.libraryName)),F0=Zi(Y),v0=Cx.Utils.joinPath(R,e0.filePaths.studio.auto.dlo.autoInc);await g.writeFile(v0,i0),M.log("Generated",e0.filePaths.studio.auto.dlo.autoInc);let B0=Cx.Utils.joinPath(R,e0.filePaths.studio.auto.dlo.autoUplinkInc);await g.writeFile(B0,U),M.log("Generated",e0.filePaths.studio.auto.dlo.autoUplinkInc);let d0=Cx.Utils.joinPath(R,e0.filePaths.studio.auto.dlo.autoLocalDataInc);await g.writeFile(d0,F0),M.log("Generated",e0.filePaths.studio.auto.dlo.autoLocalDataInc);let q0=Cx.Utils.joinPath(R,e0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));await g.writeFile(q0,[...Z.globals,...Z.helper].join(`
|
|
1654
|
-
`)),M.log("Generated",e0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));let M0=Cx.Utils.joinPath(R,e0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main"));await g.writeFile(M0,n0),M.log("Generated",e0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main")),await O(R,g,M)}s0.exportAutoDloFiles=N;async function L(R,g,M,Y){let W=await J.read(R,g),H=J.isLibrary(W),z=Cx.Utils.joinPath(R,e0.filePaths.dist.path,"dde-api.yaml");await g.rm(z).catch(()=>{});let i0=Cx.Utils.joinPath(R,e0.filePaths.dist.ddeApi);if(await g.writeFile(i0,Kn(Y,W)),M.log("Generated",e0.filePaths.dist.ddeApi),H){let r0=Cx.Utils.joinPath(R,e0.filePaths.dist.ddeApiPath,`${W.name}.yaml`),Z=Kn(Y,W,W.name);Z.length&&(await g.writeFile(r0,Z),M.log("Generated",e0.filePaths.dist.ddeApiPath+`${W.name}.yaml`))}}s0.exportOpenApi=L;async function O(R,g,M){let Y=Cx.Utils.joinPath(R,e0.filePaths.studio.auto.dlo.defaultInc),W=await Gi(R,g);await g.writeFile(Y,W),M.log("Generated",e0.filePaths.studio.auto.dlo.defaultInc)}s0.exportDefaultInc=O})(vA||={});async function xa(A,x,e){let r=[],t=await Q0.getAll(e);for(let s in t){let n=Q0.dependencyToPath(A,s),F=Q0.dependencyIdToName(s),f=Cx.Utils.joinPath(n,`${Zr}/${F}.dde`);await x.stat(f)&&r.push({libraryName:F,path:f,yaml:await vA.readYamlFile(f,x)})}if(J.isLibrary(e)){let s=Cx.Utils.joinPath(A,`/${Zr}/${e.name}.dde`);await x.stat(s)&&r.push({libraryName:e.name,path:s,yaml:await vA.readYamlFile(s,x)})}return r}function Qf(A,x,e){if(typeof A=="string")return A;if(typeof A!="object"||A===null)return"";let r=A[x];if(typeof r=="string")return r;if(typeof r!="object"||r===null)return"";let t=e?.missingProperty;return t?r[t]??"":""}function Zf(A,x,e,r){let s={required:()=>`Missing required property '${x.missingProperty}'.`,additionalProperties:()=>`Unknown property '${x.additionalProperty}' is not allowed.`,type:()=>`Must be of type '${x.type}'.`,enum:()=>`Must be one of the allowed values: ${JSON.stringify(x.allowedValues)}.`,pattern:()=>`Value does not match the required pattern. ${r?.patternErrorMessage??e}`,minimum:()=>`${e}.`,maximum:()=>`${e}.`,exclusiveMinimum:()=>`${e}.`,exclusiveMaximum:()=>`${e}.`,not:()=>`This value is not allowed here. ${r?.description??""}`.trimEnd(),anyOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd(),oneOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd()}[A];return s?s():e}function xE(A){let x=A.instancePath||"/",e=A.parentSchema,r=Qf(e?.errorMessage,A.keyword,A.params);if(r)return`${x}: ${r}`;let t=A.message||"unknown validation error";return`${x}: ${Zf(A.keyword,A.params,t,e)}`}function AE(A,x){let e=x.split("/").filter(Boolean).map(r=>{let t=Number(r);return Number.isNaN(t)?r:t});for(let r=e.length;r>=0;r--){let t=e.slice(0,r),s=A.getIn(t,!0);if(s?.range)return s.range}return null}function eE(A,x,e){let r=AE(A,e.instancePath||"");return r?ra(x,r):{line:0,startCharacter:0,endCharacter:0}}var Vn=require("vscode-uri");var cr=class{dloFileMap={};rootUri=Vn.URI.parse("");constructor(){}set workspacePath(x){this.rootUri=x}getSequenceForFile(x){let e=x.substring(this.rootUri.path.length||0);if(this.rootUri.scheme!=="file"){let t=this.rootUri.toString();e=x.substring(t.length+1)}if(Object.hasOwn(this.dloFileMap,e))return this.dloFileMap[e];let r=j0.generateHashForFilePath(e);return this.dloFileMap[e]=r,r}getFilePathForSequence(x){let e=Object.entries(this.dloFileMap).find(([,r])=>r===x);return e?Vn.URI.parse(`${this.rootUri.path}${e[0]}`).path:null}};var sa=require("vscode-uri");var rE=/^(?:\s*#options\s+)(.*)(?:\s*)$/,tE=/^(?:\s*#preinclude\s+)(.*)(?:\s*)$/,nE=/^(?:\s*#ifdef\s+)(.*)$/,sE=/^(?:\s*#ifndef\s+)(.*)$/,iE=/^(?:\s*#elseifdef\s+)(.*)$/,aE=/^(?:\s*#elseifndef\s+)(.*)$/,ia=/^(\s*)(?:#callback\s+)(\w*)(?:\s*\(\s*)(.*?)(?:\s*\)\s*)(\{*){1}(?:\s*)$/,aa=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,oa=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Fa=/^(.*)(^|\s+)(?:assert\s*\(\s*\);*\s*)$/,va=/^(.*)(^|\s+)(?:catch\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,oE=/^\s*#include\s*</,FE=/^\s*#endinput\s*/,vE=/^\s*#pragma\s+dynamic\s+(\S+)\s*(\/\/.*|\/\*.*|)$/,fa=/^(.*)(^|\s+)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Ea=/^(.*)(^|\s*)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/;function ta(A,x=""){let e=" ",r=A;return x.length?e={fatal:"\xA7",alarm:"!",warning:"?",debug:"~",ok:"$"}[x]||null:["!","?","~","$","\xA7"].includes(A.substring(1,1))&&(e=A.substring(1,1),r=`"${A.substring(2,A.length-1)}"`),{priority:`'${e}'`,code:r}}var la=/^(.*)(^|\s+)(?:log(|_debug|_info|_warn|_error)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,ca=(t=>(t[t.debug=0]="debug",t[t.info=1]="info",t[t.warn=2]="warn",t[t.error=3]="error",t))(ca||{}),fE=/^(.*)(^|\s*)DDE_(state|result|aloha|volatile|setting|command)_/,EE=/^(.*)(^|\s*)onUplink(Restore|Apply)_(state|result|aloha|volatile|setting|command)/,lE=/^(.*)(^|\s*)onUplinkEvent/,cE=/(?:^|\s)(?:assert|catch|applog(?:_ok|_warning|_alarm|_debug|_fatal)?|log(?:_debug|_info|_warn|_error)?)\s*\(/,BE=/^\s*#callback\s+\w+\s*\(/;function na(A){let x=0,e=!1,r="";for(let t=0;t<A.length;t++){let s=A[t];if(e){if(s==="\\"){t++;continue}s===r&&(e=!1);continue}if(s==='"'||s==="'"){e=!0,r=s;continue}s==="("?x++:s===")"&&x--}return x}function Ba(A){return ia.test(A)||Fa.test(A)||aa.test(A)||oa.test(A)||va.test(A)||fa.test(A)||Ea.test(A)||la.test(A)}function CE(A,x,e){if(!(cE.test(e)||BE.test(e)))return null;let t=na(e);if(t<=0)return null;let s=t,n=[A[x]],F=[e],f=x+1,c=100;for(;s>0&&f<A.length&&f-x<c;){let j=A[f],_=j.split("//",1)[0];n.push(j),F.push(_),s+=na(_),f++}if(n.length<=1||s>0)return null;let D=n.map((j,_)=>_===0?j:j.trim()).join(" "),p=F.map((j,_)=>_===0?j:j.trim()).join(" ");return Ba(p)?{joinedOriginal:D,joinedStripped:p,extraLineCount:n.length-1}:null}var Br=class{pragmaDynamic=null;dloFileSequencer=new cr;constructor(){}get pragmaDynamicFlag(){return this.pragmaDynamic?`-S${this.pragmaDynamic}`:null}preCompileDloFile(x,e,r,t,s){this.dloFileSequencer.workspacePath=x;let n=[],F=t.path,f=!1,c=sa.Utils.basename(t);if(F.includes(e0.filePaths.studio.auto.dlo.path)){let k=c.substring(0,c.length-8);!["app","main"].includes(k)&&c.endsWith("-dde.inc")&&(f=j0.generateHashForLibraryName(k))}else if(F.includes(e0.filePaths.studio.libdeps)){let k=F.split("libdeps/")[1],[S]=k.split("/");["dlo-core"].includes(S)||(f=j0.generateHashForLibraryName(S))}else J.isLibrary(r)&&(c.endsWith(".dlo")||F.includes("/dlo/examples/")||F.includes("/dlo/test/")?e.log("Skipping dde mangling for project file",c):f=j0.generateHashForLibraryName(r.name));if(F.endsWith(".auto/default.inc"))return{data:s.join(`
|
|
1655
|
-
`),diagnostics:n};let D=[],p=this.dloFileSequencer.getSequenceForFile(F);D.push(`stock static __file{} = "${p}";`),D.push(`stock static __refid{} = "${p}";`),D.push('stock static __applog_src_id{} = "A\\0\\0\\0\\0\\0\\0\\0";'),D.push("#line 0");let _=0;for(let k=0;k<s.length;k++){let S=s[k],P=S.split("//",1)[0],N=null,L=0;if(!Ba(P)){let O=CE(s,k,P);O&&(S=O.joinedOriginal,P=O.joinedStripped,L=O.extraLineCount)}if(N=rE.exec(P))S="// "+S,n.push({file:t,level:"error",line:k,message:"#options is not supported here. Use the DLO settings instead."});else if(N=tE.exec(P))S="// "+S,n.push({file:t,level:"error",line:k,message:"#preinclude is not supported here. Use the DLO settings instead."});else if(N=vE.exec(P)){let O=Number(N[1].startsWith("(")?N[1].substring(1,N[1].length-1):N[1]);!Number.isInteger(O)||O<64?n.push({file:t,level:"error",line:k,message:"#pragma dynamic only supports integer values and must be greater than 63"}):(!this.pragmaDynamic||O>this.pragmaDynamic)&&(this.pragmaDynamic=O)}else if(N=nE.exec(P))S=S.replace("#ifdef ","#if defined ");else if(N=sE.exec(P))S=S.replace("#ifndef ","#if !defined ");else if(N=iE.exec(P))S=S.replace("#elseifdef ","#elseif defined ");else if(N=aE.exec(P))S=S.replace("#elseifndef ","#elseif !defined ");else if(N=ia.exec(P)){let[,O,s0,R,g]=N;S=`${O}#define ${s0} _catch_funcidx( "___${s0}")
|
|
1656
|
-
forward ___${s0}( ${R});
|
|
1657
|
-
#line
|
|
1658
|
-
${_}
|
|
1659
|
-
public ___${s0}( ${R})${g}`}else if(N=Fa.exec(P)){let[,O,s0]=N;S=`${O}${s0}{_log_string="";_assert(__refid,__line);}`}else if(N=aa.exec(P)){let[,O,s0,R,g]=N;S=`${O}${s0}{ if (!(${R})) { sprintf(_log_string,_,${g.replace(/%%/g,"\xFF")});_assert(__refid,__line); }}`}else if(N=oa.exec(P)){let[,O,s0,R]=N;S=`${O}${s0}{ if (!(${R})) { _log_string="";_assert(__refid,__line); }}`}else if(N=va.exec(P)){let[,O,s0,R]=N;S=`${O}${s0}_catch(__refid,__line,${R});`}else if(N=fa.exec(P)){let[,O,s0,R,g,M]=N,{priority:Y,code:W}=ta(g,R.substring(1));Y!==null&&(S=`${O}${s0}{new params_str{DDE_APPLOG_SIZE_PARAMS};sprintf(params_str,_,${M});DDE_applog_write(${Y}, ${W}, params_str, __applog_src_id);}`)}else if(N=Ea.exec(P)){let[,O,s0,R,g]=N,{priority:M,code:Y}=ta(g,R.substring(1));M!==null&&(S=`${O}${s0}DDE_applog_write(${M}, ${Y}, "", __applog_src_id);`)}else if(N=la.exec(P)){let[,O,s0,R,g]=N,M=R.substring(1),Y=ca[M];S=`${O}${s0}{ if(_log_level <= ${Y}){ sprintf(_log_string,_,${g.replace(/%%/g,"\xFF")}); _log${R}(__refid,__line); }}`}else(N=oE.exec(P))&&!F.includes(e0.filePaths.studio.auto.path)?(F.includes(e0.filePaths.studio.libdeps)||n.push({file:t,level:"warning",line:k,message:"Libraries are included automatically - remove this #include line"}),S="// Libraries are included automatically! - "+P):(N=FE.exec(P))&&(n.push({file:t,level:"error",line:k,message:"#endinput is not supported - use #if/#endif instead"}),S=P);f&&!r.legacyProject&&(fE.exec(P)&&(S=S.replaceAll("DDE_",`_${f}`)),EE.exec(P)&&(S=S.replace("onUplink",`_${f}`)),lE.exec(P)&&(S=S.replace("onUplink",`_${f}Uplink`))),D.push(S),_++;for(let O=0;O<L;O++)D.push(""),_++,k++}if(c!=="main.dlo"){let k=c.split(".")[0].replace(/[^a-zA-Z0-9]/g,"_"),S=`_inc_${k}`.substring(0,31),P=`_inc_${k}_inc`.substring(0,31);D.push(`#if defined ${S}`),D.push(`#undef ${S}`),D.push("#endif"),D.push(`#if defined ${P}`),D.push(`#undef ${P}`),D.push("#endif")}return{data:D.join(`
|
|
1660
|
-
`),diagnostics:n}}};var LA=require("vscode-uri");var $0=cx(require("fs")),rx=require("vscode-uri");var ua=cx(require("iconv-lite")),dE=j0.convertBlobToStringArray,pa=16384,ba=511,Wn=pa|ba,DE=32768,uE=438,Ca=DE|uE,pE=new Br,Cr={};function ma(){let A=[];for(let x of Object.keys(Cr))A.push(...Cr[x].diagnostics);return A}var Nt=!!process.env.DLO_PROFILE,ZA={precompileCount:0,cacheHits:0,precompileMs:0};function ja(A){Nt&&(A.log(`[DLO_PROFILE] precompile: ${ZA.precompileCount} runs, ${ZA.cacheHits} cache hits, ${ZA.precompileMs.toFixed(1)}ms`),ZA.precompileCount=0,ZA.cacheHits=0,ZA.precompileMs=0)}var Xn=(A,x,e,r)=>{let t={getattr(n){let F=rx.Utils.joinPath(rx.URI.parse(n.mount.opts.root),A.getPath(n)),f=F.fsPath;if(!$0.existsSync(f))throw new A.ErrnoError(44);let c=Da(x,r,e,F),D=$0.statSync(f),p=c?.length||D.size;return{mode:D.isDirectory()?Wn:Ca,size:p,atime:D.atime,mtime:D.mtime,ctime:D.ctime}},setattr(n,F){let f=rx.Utils.joinPath(rx.URI.parse(n.mount.opts.root),A.getPath(n)).fsPath;if(!$0.existsSync(f))throw new A.ErrnoError(44);if(typeof F.size=="number"&&$0.truncateSync(f,F.size),typeof F.mode=="number"&&$0.chmodSync(f,F.mode),F.atime||F.mtime){let c=$0.statSync(f);$0.utimesSync(f,F.atime??c.atime,F.mtime??c.mtime)}},lookup(n,F){let c=rx.Utils.joinPath(rx.URI.parse(n.mount.opts.root),A.getPath(n),F).fsPath;if(!$0.existsSync(c))throw new A.ErrnoError(44);let D=$0.statSync(c),p=A.createNode(n,F,D.isDirectory()?Wn:Ca,0);return p.node_ops=n.node_ops,p.stream_ops=n.stream_ops,p},readdir(n){let F=rx.Utils.joinPath(rx.URI.parse(n.mount.opts.root),A.getPath(n)).fsPath;return[".","..",...$0.readdirSync(F)]},mknod(n,F,f,c){let D=rx.Utils.joinPath(rx.URI.parse(n.mount.opts.root),A.getPath(n),F).fsPath;$0.writeFileSync(D,"");let p=A.createNode(n,F,f,c);return p.node_ops=n.node_ops,p.stream_ops=n.stream_ops,p},unlink(n,F){let f=rx.Utils.joinPath(rx.URI.parse(n.mount.opts.root),A.getPath(n),F).fsPath;$0.unlinkSync(f)},mkdir(n,F,f){let c=rx.Utils.joinPath(rx.URI.parse(n.mount.opts.root),A.getPath(n),F).fsPath;$0.mkdirSync(c,{mode:f});let D=A.createNode(n,F,f|Wn,0);return D.node_ops=n.node_ops,D.stream_ops=n.stream_ops,D},rmdir(n,F){let f=rx.Utils.joinPath(rx.URI.parse(n.mount.opts.root),A.getPath(n),F).fsPath;$0.rmdirSync(f)},rename(n,F,f){let c=rx.Utils.joinPath(rx.URI.parse(n.mount.opts.root),A.getPath(n)).fsPath,D=rx.Utils.joinPath(rx.URI.parse(F.mount.opts.root),A.getPath(F),f).fsPath;$0.renameSync(c,D)}},s={open(n){let F=rx.Utils.joinPath(rx.URI.parse(n.node.mount.opts.root),A.getPath(n.node));n.modifiedContent=Da(x,r,e,F),n.modifiedContent||(n.nfd=$0.openSync(F.fsPath,da(n.flags)))},close(n){n.nfd&&$0.closeSync(n.nfd)},read(n,F,f,c,D){if(!n.modifiedContent)return $0.readSync(n.nfd,F,f,c,D);let p=n.modifiedContent;if(D>=p.length)return 0;let j=p.length-D,_=Math.min(c,j);return bE(p,F,f,D,D+_),_},write(n,F,f,c,D){return $0.writeSync(n.nfd,F,f,c,D)},flagsToMode:da,llseek(n,F,f){let c=F;if(f===1)c+=n.position;else if(f===2){let D=$0.fstatSync(n.nfd);c+=D.size}if(c<0)throw new A.ErrnoError(28);return n.position=c,c}};return{mount(){let n=xe(x),F=A.createNode(null,n,pa|ba,0);return F.node_ops=t,F.stream_ops=s,F},node_ops:t,stream_ops:s}};function da(A){let x=A&2097155;if(x===0)return"r";if(x===1)return"r+";if(x===65)return"w";if(x===577)return"w+";if(x===1089)return"a";if(x===1217)return"a+";throw new Error(`Unknown file open flags: ${A}`)}function bE(A,x,e,r,t){if(Buffer.isBuffer(A)&&Buffer.isBuffer(x))A.copy(x,e,r,t);else{let s=A.subarray(r,t);Buffer.isBuffer(x)?Uint8Array.prototype.set.call(x,s,e):x.set(s,e)}}function Da(A,x,e,r){let t=r.fsPath;if(!t.endsWith(".dlo")&&!t.endsWith(".inc"))return;let s=mE(t);if(!s){delete Cr[t];return}let n=Cr[t];if(n&&n.mtimeMs===s.mtimeMs&&n.size===s.size)return Nt&&ZA.cacheHits++,n.buffer;let F=Nt?performance.now():0,f=jE(A,x,e,r);return Nt&&(ZA.precompileCount++,ZA.precompileMs+=performance.now()-F),Cr[t]={buffer:f.buffer,mtimeMs:s.mtimeMs,size:s.size,diagnostics:f.diagnostics},Cr[t].buffer}function mE(A){try{return $0.statSync(A)}catch{return null}}function jE(A,x,e,r){let t=$0.readFileSync(r.fsPath),s=dE(t),n=pE.preCompileDloFile(A,x,e,r,s);return{buffer:ua.encode(n.data,"cp1252"),diagnostics:n.diagnostics}}function xe(A){return A.fsPath.replace(/\\/g,"/")}function xt(A,x){let e=xe(A);return xe(x).replace(e,"")}var $a=Sa(),et=$a.createPawnCC,qa=$a.createPawnDbg;var dr=class{constructor(x,e,r){this.cwd=x;this.fs=e;this.logger=r;this.dloCC=null}cwd;fs;logger;dloCC;stdout=[];stderr=[];async initDloCC(x=!1){this.stdout.length=0,this.stderr.length=0,this.dloCC=await et({noExitRuntime:x,print:n=>{let F=Yn(this.cwd,n);this.logger.log(F?F.message:n),this.stdout.push(n)},printErr:n=>{let F=Yn(this.cwd,n);n.includes(": warning")?this.logger.warn(F?F.message:n):this.logger.error(F?F.message:n),this.stderr.push(n),this.stdout.push(n)}});let e=xe(this.cwd),[r]=e.split("/"),t=this.dloCC.FS,s=await J.read(this.cwd,this.fs);t.filesystems.NODEFS_TS=Xn(t,this.cwd,s,this.logger),t.mkdir(r),t.mount(t.filesystems.NODEFS_TS,{root:"/"},r),t.chdir(xe(this.cwd))}async compile(x,e){let r=await J.read(x,e);if(!await J.isApmPartEnabled(x,e,p0.Part.dlo,r))return this.logger.log("DLO not enabled. Skipped."),{code:0,stdout:[],stderr:[],diagnostics:[]};await this.initDloCC(),await e.mkdir(LA.Utils.joinPath(x,"dist/dlo"));let t=LA.Utils.joinPath(x,r.dlo?.mainFile||e0.filePaths.dlo.mainDLO),s=[],n=LA.Utils.joinPath(x,e0.filePaths.studio.auto.dlo.cfg),F=xt(x,n);s.push(`-T.${F}`);let f=0;try{let c=`.${xt(x,t)}`;f=await this.dloCC.callMain([c,...s])}catch(c){this.logger.error(c)}return{code:f,stdout:this.stdout,stderr:this.stderr,diagnostics:[...ma(),...Qn(x,this.stderr,t)]}}async getDloSymbols(x,e){let r=e.map(D=>{let p=D.substring(0,2);return["-D","-e","-i","-o","-p","-r","-T"].includes(p)?`${p}.${D.substring(2)}`:D}),t=!!process.env.DLO_PROFILE,s=t?performance.now():0,{compiler:n,print:F}=await this.getSymbolCompiler(),f=t?performance.now()-s:0,c=t?performance.now():0;try{if(await n.callMain(["."+x,...r,"-R"]))return null}catch(D){if(D.stack?.startsWith("RuntimeError"))return null;throw D}finally{if(t){let D=performance.now()-c;this.logger.log(`[DLO_PROFILE] instantiate: ${f.toFixed(1)}ms, callMain: ${D.toFixed(1)}ms`),ja(this.logger)}}return[...F.stdout,...F.stderr]}async getSymbolCompiler(){let x={stdout:[],stderr:[]},e=await et({noExitRuntime:!1,print:F=>{x.stdout.push(F)},printErr:F=>{x.stderr.push(F)}}),r=xe(this.cwd),[t]=r.split("/"),s=e.FS,n=await J.read(this.cwd,this.fs);return s.filesystems.NODEFS_TS=Xn(s,this.cwd,n,this.logger),s.mkdir(t),s.mount(s.filesystems.NODEFS_TS,{root:"/"},t),{compiler:e,print:x}}};function Qn(A,x,e){let r=[],t=x.filter(s=>!!s.trim());for(let s of t){if((s.includes("Assertion failed:")||s.includes("Compilation aborted."))&&e){r.push({file:e,level:"error",line:0,message:s});continue}let n=Yn(A,s);n&&r.push({file:LA.URI.parse(`file:///${n?.posixPath}`),level:n.level,line:Number(n.lineNumber)-1,message:n.msg})}return r}function Yn(A,x){let e=x.indexOf(" : "),r=x.indexOf(": ",e+3),t=x.substring(0,e).trim(),s=x.substring(e+3,r).trim(),n=x.substring(r+2).trim();if(!t||!s||!n)return null;let[F,f]=t.split(/[()(-)]/),c=s.split(" "),D=c[c.length-2],j=LA.Utils.joinPath(A,F).fsPath.replace(/\\/g,"/");j.startsWith("/")&&(j=j.substring(1));let _=x.replace(F,j);return{level:D,msg:n,posixPath:j,lineNumber:f,message:_}}async function Pa(A,x,e){let r=["-M","-v2"],t=LA.Utils.joinPath(A,e0.filePaths.studio.auto.dlo.defaultInc);r.push(`-p.${xt(A,t)}`);let s=await Q0.getApmPartDependencies(A,x,p0.Part.dlo);for(let F of s){let f=LA.Utils.dirname(F.path);r.push(`-i.${xt(A,f)}`)}let n=e.dlo;return n&&r.push(...n.compileOptions),r.push("-o./dist/dlo/main.amx"),{path:LA.Utils.joinPath(A,e0.filePaths.studio.auto.dlo.cfg),data:r.join(`
|
|
1661
|
-
`)}}var rt;(f=>{f.createPawnCC=et,f.createPawnDbg=qa,f.FileSequencer=cr,f.PreCompiler=Br,f.Compiler=dr,f.uriToMemFs=xe,f.parseCompilerWarningsAndErrors=Qn;async function F(c,D,p){let j=await J.read(c,D),_=await Pa(c,D,j);await D.writeFile(_.path,_.data),p.log("Generated",e0.filePaths.studio.auto.dlo.cfg)}f.exportDloConfig=F})(rt||={});var Zn=require("vscode-uri");var Na=cx(require("node:child_process"));var It;(e=>{async function A(r,t,s){let n=await J.read(r,t);if(await J.isApmPartEnabled(r,t,p0.Part.pov)){s.info("Executing POV build script",n.pov?.details.buildCommand);let{buildCommand:F,workingPath:f}=n.pov.details,c=Zn.Utils.joinPath(r,f);try{await Ta(c,F,s)}catch(D){throw D.code?new Error(`APM part '${p0.Part.pov}' has errors. Aborted.`):D}}}e.tryBuildPov=A;async function x(r,t,s){let n=await J.read(r,t);if(await J.isApmPartEnabled(r,t,p0.Part.blo,n)){s.info("Executing BLO build script",n.blo?.buildCommand);let{buildCommand:F,workingPath:f}=n.blo,c=Zn.Utils.joinPath(r,f);try{await Ta(c,F,s)}catch(D){throw D.code?new Error(`APM part '${p0.Part.blo}' has errors. Aborted.`):D}}}e.tryBuildBlo=x})(It||={});async function Ta(A,x,e){return new Promise((r,t)=>{Na.exec(x,{cwd:A.fsPath,env:process.env},(s,n,F)=>{e.log(n),F&&e.error(F),s&&t(s),r(null)})})}var Ma=require("vscode-uri");var As=require("minimatch");var La=require("@gera2ld/tarjs"),LE=j0.convertBlobToString,RE=require("pako"),Ra=".studioignore",Oa=[".vscodeignore","package-lock.json","npm-debug.log","yarn.lock","yarn-error.log","npm-shrinkwrap.json",".editorconfig",".npmrc",".yarnrc",".gitattributes","*.todo","tslint.yaml",".eslintrc*",".babelrc*",".prettierrc*",".cz-config.js",".commitlintrc*","webpack.config.js","ISSUE_TEMPLATE.md","CONTRIBUTING.md","PULL_REQUEST_TEMPLATE.md","CODE_OF_CONDUCT.md",".github",".travis.yml","appveyor.yml","**/.git","**/.git/**","**/*.vsix","**/.DS_Store","**/*.vsixmanifest","**/.vscode-test/**","**/.vscode-test-web/**"];Oa.push("**/.studio/**","**/node_modules/**",Ra,"dist/defines.app.ts");var Ia={dot:!0},Ne;(r=>{async function A(t,s){let n=new La.TarWriter;(await x(t,s)).forEach(c=>{n.addFile(c.name,c.data)});let f=await n.write();return RE.gzip(await f.arrayBuffer())}r.createArchive=A;async function x(t,s){let n=[],{ignore:F,negate:f}=await OE(t,s),D=(await s.findFiles(t,"**/*")).filter(({path:p})=>{let j=p.slice(t.path.length+1);return!F.some(_=>(0,As.minimatch)(j,_,Ia))||f.some(_=>(0,As.minimatch)(j,_.slice(1),Ia))});for(let p of D){let j=p.path.slice(t.path.length+1),[_,k]=await Promise.all([s.stat(p),s.readFile(p)]);_&&n.push({name:j,data:k,modifyTime:new Date(_.mtime)})}return n}r.getFilesForArchive=x;async function e(t,s,n,F=Bx.ENV.production){let{publisher:f,name:c,version:D}=s,p=await jx.readFilesFromTarGz(n,["CHANGELOG.md","README.md","studio.json"]),j={"CHANGELOG.md":await xs(p["CHANGELOG.md"]),"README.md":await xs(p["README.md"]),"studio.json":await xs(p["studio.json"]),"library.tar.gz":n};return await ex.publishLibraryVersion(t,f,c,D,j,F)}r.publishPackage=e})(Ne||={});async function OE(A,x){let e=["!studio.json","!README.md"],t=(await GE(A,x)).split(/[\n\r]/).map(c=>c.trim()).filter(c=>!!c).filter(c=>!/^\s*#/.test(c)),s=[...t,...t.filter(c=>!/(^|\/)[^/]*\*[^/]*$/.test(c)).map(c=>/\/$/.test(c)?`${c}**`:`${c}/**`)],n=[...Oa,...s,...e],[F,f]=n.reduce((c,D)=>/^\s*!/.test(D)?[c[0],[...c[1],D]]:[[...c[0],D],c[1]],[[],[]]);return{ignore:F,negate:f}}async function GE(A,x){let e=Ma.Utils.joinPath(A,Ra);if(await x.stat(e)){let t=await x.readFile(e);return LE(t)}else return""}async function xs(A){return new Uint8Array(await A.arrayBuffer())}var RA=require("vscode-uri");var De=require("yaml");var UE=j0.convertBlobToString,Mt=j0.yamlRangeToLineInformation,tt;(n=>{let A;(D=>(D.static="static",D.dynamic="dynamic",D.appDynamic="app-dynamic"))(A=n.Type||={});let x;(p=>(p.crcStamp="crc_stamp",p.stampOnly="stamp_only",p.onlyDown="only_down",p.onlyUp="only_up"))(x=n.SyncLogic||={});let e;(D=>(D.down="down",D.up="up",D.off="off"))(e=n.Force||={});async function r(F,f,c){let{properties:D,diagnostics:p,libraryFiles:j}=await t(F,f),_=RA.Utils.joinPath(F,e0.filePaths.dist.dfilesPath);await f.stat(_)&&await f.rm(_);for(let[k,S]of Object.entries(D))await zE(F,f,k,S,j);return Object.keys(D).length&&(c.done(`${Object.keys(D).length} dfiles processed.`),await f.writeFile(RA.Utils.joinPath(F,e0.filePaths.dist.dfilesProperties),JSON.stringify(D,null," "))),p}n.process=r;async function t(F,f){let c=[],D={},p=await Q0.getApmPartDependencies(F,f,p0.Part.dfiles);for(let k of p){let{properties:S,diagnostics:P}=await s(f,k.path,k.name);Object.assign(D,S),c.push(...P)}let{properties:j,diagnostics:_}=await s(f,RA.Utils.joinPath(F,e0.filePaths.dfiles.mainDFILES),null);return Object.assign(D,j),c.push(..._),{properties:D,diagnostics:c,libraryFiles:p}}n.parseDfile=t;async function s(F,f,c){let D=[],p={};if(!await F.stat(f))return{properties:p,diagnostics:D};let j=await F.readFile(f),_=UE(j),k=new De.LineCounter,P=(0,De.parseDocument)(_,{lineCounter:k}).contents||new De.YAMLMap;for(let N of P.items){let L=N.key.value,O=(0,De.isMap)(N.value)?N.value:null,s0=Mt(k,N.key.range),R=O?O.has("syncMode"):!1,g=R?O.get("syncMode"):"crc_stamp";if(R){let z=Object.values(n.SyncLogic);if(!z.includes(g)){let i0=O.items.find(Z=>Z.key.value==="syncMode"),r0=Mt(k,i0.key.range);D.push({file:f,code:"",message:`Property syncMode does not match any of "${z.join(", ")}"`,line:r0.line,startCharacter:r0.startCharacter,endCharacter:r0.endCharacter,level:"error"})}}else D.push({file:f,code:"",message:'Property "syncMode" missing',line:s0.line,startCharacter:s0.startCharacter,endCharacter:s0.endCharacter,level:"error"});let M=O?O.has("type"):!1,Y=M?O.get("type"):"static";if(M){let z=Object.values(n.Type);if(!z.includes(Y)){let i0=O.items.find(Z=>Z.key.value==="type"),r0=Mt(k,i0.key.range);D.push({file:f,code:"",message:`Property type does not match any of "${z.join(", ")}"`,line:r0.line,startCharacter:r0.startCharacter,endCharacter:r0.endCharacter,level:"error"})}}L.match(/^[a-z0-9._-]*$/)||D.push({file:f,code:"",message:'Filename does not match pattern "a-z0-9._-"',line:s0.line,startCharacter:s0.startCharacter,endCharacter:s0.endCharacter,level:"error"});let W=RA.Utils.joinPath(RA.Utils.dirname(f),L),H=await HE(F,W);if(H)p[L]={crc:H.crc,force:"off",readable:!1,size:H.size,stamp:H.stamp,sync_logic:g,type:Y,library:c};else{let z=Mt(k,N.key.range);D.push({file:f,code:"",message:`Could not find file "${L}"`,line:z.line,startCharacter:z.startCharacter,endCharacter:z.endCharacter,level:"error"})}}return{properties:p,diagnostics:D}}n.parseYamlFile=s})(tt||={});async function HE(A,x){let e=await A.stat(x);if(!e)return null;let r=await A.readFile(x);return{size:e.size,stamp:Math.trunc(e.ctime),crc:j0.generateCRC32ForFileContent(r)}}async function zE(A,x,e,r,t){let n=r.library!==null?RA.Utils.dirname(t.find(c=>c.name===r.library).path):RA.Utils.joinPath(A,e0.filePaths.dfiles.path),F=RA.Utils.joinPath(A,e0.filePaths.dist.dfilesPath,e),f=RA.Utils.joinPath(n,e);await x.copy(f,F)}var es=require("vscode-uri");var Ga=cx(require("semver")),KE="package.json",JE=["peerDependencies","dependencies","optionalDependencies"],VE=" ",Dr;(r=>{r.PART_DIST_PATHS=[e0.filePaths.dist.bloPath,e0.filePaths.dist.povDetailsPath];async function x(t,s,n,F){let f=es.Utils.joinPath(t,KE),c=`${n.name}/${xl(t)}`;if(!await s.stat(f))return!1;let p=await WE(s,f,c,F);if(!p)return!1;let j=p.pkg;if(typeof j!="object"||j===null||Array.isArray(j))return F.warn(`"${c}/package.json" does not contain a JSON object - skipped normalizing it.`),!1;if(!Ga.valid(n.version))return F.warn(`Library manifest version "${n.version}" is not a valid semantic version - skipped normalizing "${c}/package.json".`),!1;XE(j,n,c,F);let _=YE(j,n.version);j=_.pkg;let k=_.changed;k&&F.warn(`Patched version "${_.oldVersion??"<none>"}" -> "${n.version}" in "${c}/package.json" (studio.json is the source of truth).`);let S=ZE(n);if(QE(j,S,c,F)&&(k=!0),!k)return!1;let P=Al(p.raw),N=p.raw.endsWith(`
|
|
1662
|
-
`),L=JSON.stringify(j,null,P)+(N?`
|
|
1663
|
-
`:"");try{await s.writeFile(f,L)}catch(O){return F.warn(`Could not write "${c}/package.json": ${O}`),!1}return!0}r.normalizePartPackageJson=x;async function e(t,s,n,F){for(let f of r.PART_DIST_PATHS){let c=es.Utils.joinPath(t,f);await x(c,s,n,F)}}r.normalizeLibraryParts=e})(Dr||={});async function WE(A,x,e,r){try{let t=await A.readFile(x),s=j0.convertBlobToString(t),n=JSON.parse(s);return{raw:s,pkg:n}}catch(t){return r.warn(`Could not read/parse "${e}/package.json": ${t}`),null}}function XE(A,x,e,r){A.name!==void 0&&A.name!==x.name&&r.warn(`"${e}/package.json" name "${A.name}" does not match library name "${x.name}".`)}function YE(A,x){if(A.version===x)return{pkg:A,changed:!1,oldVersion:A.version};let e=A.version;if(A.version===void 0&&Object.hasOwn(A,"name")){let{name:r,...t}=A;A={name:r,version:x,...t}}else A.version=x;return{pkg:A,changed:!0,oldVersion:e}}function QE(A,x,e,r){let t=!1;for(let s of JE){let n=A[s];if(!n)continue;let F=!1;for(let f of Object.keys(n)){if(!x.has(f))continue;let c=n[f];if(typeof c!="string"||c.startsWith("npm:")||c.includes("://")){r.warn(`Left "${f}" in ${s} of ${e}/package.json untouched - its value "${c}" does not look like a Studio library reference.`);continue}delete n[f],F=!0,t=!0,r.warn(`Removed "${f}" from ${s} of ${e}/package.json - Studio libraries must be declared in studio.json "libraryDependencies" (npm ranges never match prereleases across minor versions).`)}F&&Object.keys(n).length===0&&delete A[s]}return t}function ZE(A){let x=[...Object.keys(A.libraryDependencies||{}),...Object.keys(A.libraryDevDependencies||{})];return new Set(x.map(e=>e.split("/")[1]))}function xl(A){let x=A.path.replace(/\\/g,"/");for(let e of Dr.PART_DIST_PATHS)if(x===e||x.endsWith(`/${e}`))return e;return x}function Al(A){let x=A.match(/^\{\r?\n([ \t]+)/);return x?x[1].startsWith(" ")?" ":x[1]:VE}var nt=require("@gera2ld/tarjs"),Ua=j0.convertBlobToString,rs=require("pako"),jx;(p=>{class A extends Error{_mergedDiagnostics;constructor(_,k){super(_),this.name="BuildError",this._mergedDiagnostics=k}get mergedDiagnostics(){return this._mergedDiagnostics}}p.BuildError=A;async function x(j,_,k,S,P,N=!0,L){N=el(k,N),await rl(j,_,k,S,P,N);try{let R=await Bx.read(j,_,k);await tl(j,_,k,R)}catch(R){k.warn("Could not generate defines.ts:",R)}let O={[p0.Part.dde]:[],[p0.Part.dlo]:[],[p0.Part.dfiles]:[]},s0={[p0.Part.dde]:nl,[p0.Part.dlo]:sl,[p0.Part.dfiles]:il};try{for(let R of[p0.Part.dde,p0.Part.dlo,p0.Part.dfiles])if(N.includes(R)&&(k.info(`Building ${R.toUpperCase()}...`),await vl(k,R,s0[R],O[R],j,_)))return O}catch(R){throw L?new A(R?.message,O):R}return N.includes(p0.Part.pov)?await It.tryBuildPov(j,_,k):k.info("Skipping pov build"),N.includes(p0.Part.blo)?await It.tryBuildBlo(j,_,k):k.info("Skipping blo build"),await al(j,_,k),await ol(j,_,k),k.done("Project build completed."),O}p.buildAll=x;async function e(j,_,k,S,P,N,L){let O=await J.read(j,_);return J.isLibrary(O)?(k.info("Library project detected. Publishing library..."),s(j,_,k,P,S)):(k.info("App project detected. Publishing app..."),t(j,_,k,P,N,L,S))}p.release=e;async function r(j,_,k,S,P,N){let L=await J.read(j,_),O=`${L.name}-${L.version}.tar.gz`,s0=null;if(J.isLibrary(L))k.info("Library project detected. Packing library..."),s0=await Ha(j,_,k,P,S);else{k.info("App project detected. Packing app...");let g=await za(j,_,k,P,N,S);s0=await El(g)}let R=Ie.Utils.joinPath(j,O);s0!==null?(await _.writeFile(R,s0),k.done(`Packaged: ${R.fsPath}`)):k.error(`Could not create archive: ${R.fsPath}`)}p.pack=r;async function t(j,_,k,S,P,N=null,L){if(!await p0.validateAccess(j,_,S,!1,L))throw new Error("Could not validate access to application");let s0=await za(j,_,k,S,P,L);await p0.updateProfile(j,_,S,L);let R=await p0.publishTag(j,_,S,s0,L);if(N!==null){let g=await J.read(j,_);await ex.updateExistingApplicationVersion(S,g.publisher,g.registry?.id,g.version,{allowedBackends:N},L),k.info(`Tag "${R.version}" with phase "${R.phase}" shared with ${[...N].join(";")}!`)}k.done(`Tag "${R.version}" with phase "${R.phase}" published!`)}p.releaseAPM=t;async function s(j,_,k,S,P){let N=await J.read(j,_),L=await Ha(j,_,k,S,P);await Ne.publishPackage(S,N,L,P),k.done(`Library "${N.publisher}/${N.name}" with version "${N.version}" published!`)}p.releaseLibrary=s;async function n(j,_,k,S,P,N,L,O=null){if(N==="*"){let H=await J.read(j,_);N=`${H.name}-${H.version}.tar.gz`,k.info(`Publishing detected archive package "${N}"...`)}let s0=Ie.Utils.joinPath(j,N);if(!await _.stat(s0))throw new Error(`Archive package not found: ${s0.fsPath}`);let R=await _.readFile(s0),g=await ll(R),{publisher:M,registry:Y,version:W}=g;J.isLibrary(g)?(await Ne.publishPackage(S,g,R,P),k.done(`Library "${M}/${g.name}" with version "${g.version}" published!`)):(await ex.updateApplicationFile(S,M,Y.id,W,"app.tar.gz",R,P),await ex.updateExistingApplicationVersion(S,M,Y?.id,W,{allowedBackends:O||void 0,phase:L||void 0},P),k.info(`Tag "${W}" with phase "${L}" shared with ${[...O||""].join(";")}!`),k.done(`Tag "${W}" with phase "${L}" published!`))}p.publishArchive=n;async function F(j,_,k){let S;try{S=await _.readFile(Ie.Utils.joinPath(j,"README.md"))}catch{throw new Error('Could not find "README.md". "README.md" is required for publishing.')}if(Ua(S)===e0.readme(k))throw new Error('"README.md" matches the default template. Please write a brief project description.');return S}p.getReadmeFile=F;async function f(j,_){let k;try{k=await _.readFile(Ie.Utils.joinPath(j,"CHANGELOG.md"))}catch{throw new Error('Could not find "CHANGELOG.md". "CHANGELOG.md" is required for publishing.')}if(Ua(k)===e0.changelog)throw new Error('"CHANGELOG.md" matches the default template.');return k}p.getChangelogFile=f;async function c(j,_,k,S){let P=await J.read(j,_),{name:N,publisher:L,description:O}=P,s0=J.validateProjectName(N,J.isLibrary(P));if(s0)throw new Error(`name: ${s0}`);let R=J.validateDescription(O);if(R)throw new Error(`description: ${R}`);let g=J.validatePublisherId(L)||await J.validatePublisherOnline(k,L,S);if(g)throw new Error(`publisher: ${g}`);if(!J.isLibrary(P)&&(await J.validateApplicationIcon(j,_,P),J.validateEngineSettings(P),J.isApp(P)&&await J.isApmPartEnabled(j,_,p0.Part.dlo,P)&&(!P.dpid||!Object.values(J.DeviceProfiles).includes(P.dpid))))throw new Error("dpid: The device profile is needed to compile a dlo")}p.validatePublishSettings=c;async function D(j,_){let k=rs.ungzip(j),S=await nt.TarReader.load(k),P={};for(let N of S.fileInfos)_.includes(N.name)&&(P[N.name]=S.getFileBlob(N.name));return P}p.readFilesFromTarGz=D})(jx||={});function el(A,x){let e=Object.values(p0.Part);return x===!0?(A.info("Building project..."),e):x===!1?[]:x}async function rl(A,x,e,r,t,s){await Q0.validateMinimumBackendVersion(A,x,e),s.includes(p0.Part.dde)&&await vA.fetchPreviousHistoryJson(A,x,e,r,t)}async function tl(A,x,e,r){r.defaultsOnly?(await Bx.exportDefinesTs(A,x,r.defaultsOnly),e.log("Generated",e0.filePaths.dist.definesTs,"(defaults only)"),await Bx.exportDefinesTs(A,x,r,e0.filePaths.dist.definesAppTs),e.log("Generated",e0.filePaths.dist.definesAppTs,"(with app.ini overrides)")):(await Bx.exportDefinesTs(A,x,r),e.log("Generated",e0.filePaths.dist.definesTs))}async function nl(A,x,e){let r=await vA.compileDDE(A,x,e);if(r.ddeJSON){await vA.exportMyDatanetXML(A,x,e,r.ddeJSON);let t=await J.read(A,x);J.isLibrary(t)||await vA.exportHistoryJson(A,x,e,r.ddeJSON),await vA.exportOpenApi(A,x,e,r.ddeJSON),await J.isApmPartEnabled(A,x,p0.Part.dlo,t)&&(await vA.exportAutoDloFiles(A,x,e,r.ddeJSON),await rt.exportDloConfig(A,x,e))}return r.diagnostics}async function sl(A,x,e){let r=new dr(A,x,e),{diagnostics:t}=await r.compile(A,x);return t}async function il(A,x,e){return await tt.process(A,x,e)}async function al(A,x,e){let r=await J.read(A,x);J.isLibrary(r)&&await Dr.normalizeLibraryParts(A,x,r,e)}async function ol(A,x,e){let r=Ie.Utils.joinPath(A,e0.fileNames.reportTemplate);if(await x.stat(r)){let t=Ie.Utils.joinPath(A,e0.filePaths.dist.reportTemplate);await x.copy(r,t),e.log(`Copied "${e0.fileNames.reportTemplate}" to dist folder.`)}}function Fl(A,x,e){x!==p0.Part.dlo&&fl(A,e);let r=e.some(t=>t.level==="error");if(r){let t=`APM part "${x}" has errors. Aborted.`;throw new Error(t)}return r}async function vl(A,x,e,r,t,s){let n=await e(t,s,A);return r.push(...n),Fl(A,x,n)}function fl(A,x){x.forEach(e=>{let r=e.startCharacter?`:${e.startCharacter+1}`:"",t=`${e.file.path}:${e.line+1}${r} - ${e.message}`;e.level==="error"?A.error(t):e.level==="warning"?A.warn(t):A.log(t)})}async function Ha(A,x,e,r,t){let s=await J.read(A,x);return await J.validateBasicManifest(A,x,s),await jx.buildAll(A,x,e,t,r),await Ne.createArchive(A,x)}async function za(A,x,e,r,t,s){if(!Object.values(p0.TagPhase).includes(t))throw new Error(`ReleasePhase: ${t} is not a valid release phase`);return await J.validateBasicManifest(A,x,null),await jx.buildAll(A,x,e,s,r),await p0.createTag(A,x,t)}async function El(A){let x=new nt.TarWriter;for(let[r,t]of A.entries())if(r==="tag"){let s=t;x.addFile(r,s)}else{let s=t;x.addFile(r,await s.arrayBuffer())}let e=await x.write();return rs.gzip(await e.arrayBuffer())}async function ll(A){let x=await cl(A,["studio.json","src/studio.json"]);if(!x)throw new Error('Could not find "studio.json" in archive');return JSON.parse(await x.text())}async function cl(A,x){let e=rs.ungzip(A),r=await nt.TarReader.load(e);for(let t of r.fileInfos)if(x.includes(t.name))return r.getFileBlob(t.name);return null}var Bl=j0.bufferToBase64;var p0;(D=>{let A;(L=>(L.alpha="alpha",L.beta="beta",L.rc="rc",L.release="release",L.stage="stage",L.passive="passive",L.withdrawn="withdrawn"))(A=D.TagPhase||={});let x;(P=>(P.dde="dde",P.dlo="dlo",P.pov="pov",P.blo="blo",P.dfiles="dfiles"))(x=D.Part||={});function e(p){let{description:j,name:_,pov:k,engines:S,blo:P,publisher:N,type:L}=p,O=L||J.ProjectTypes.app,s0={name:_,abstract:j,author:N||"",pov_location:J.PovLocation.embedded,pov_details_lowlevel:!1,required_be:S?.backend,required_hwfw:S?.hwfw?.join(";"),required_productcode:S?.productId?.join(";"),blo_level:P?.accessLevel||J.BloAccessLevel.restricted,pip_id:""};return k&&k.details&&(s0.pov_location=J.PovLocation.pure,s0.pov_details_lowlevel=!!k.details.lowLevel),O==="addon"&&(s0.required_hwfw=void 0,s0.required_productcode=void 0,s0.addon_max_sources=1,s0.addon_max_per_site=p.maxInstancesPerSite),s0}D.createBaseTagHeader=e;async function r(p,j,_){let k=await J.read(p,j),S=e(k),P={version:k.version,...S,phase:_};return await s(p,j,k,P)}D.createTag=r;async function t(p,j){let _=await J.read(p,j),S={...e(_),blo_autostart:!1};return s(p,j,_,S)}D.createDevTag=t;async function s(p,j,_,k){let S=new FormData;S.append("tag",JSON.stringify(k)),S.append(`src/${J.fileName}`,new Blob([await J.readAsBlob(p,j)]));let P=new Blob([await j.readFile(Ae.Utils.joinPath(p,e0.filePaths.dist.ddeXmlPath))]);if(S.append("bin/dde/xml",P),_.icon){let L=await j.readFile(Ae.Utils.joinPath(p,_.icon)),O=Bl(L);S.append("previews/00.png",new Blob([`data:image/png;base64,${O}`]))}if(Object.hasOwn(k,"phase")){let L=await jx.getReadmeFile(p,j,k.name),O=await jx.getChangelogFile(p,j);S.append("previews/README.md",new Blob([L])),S.append("previews/CHANGELOG.md",new Blob([O]))}if(await J.isApmPartEnabled(p,j,"dlo")){let L=new Blob([await j.readFile(Ae.Utils.joinPath(p,e0.filePaths.dist.mainAmxPath))]);S.append("bin/dlo/amx",L)}if(await J.isApmPartEnabled(p,j,"pov",_)){await Ka(p,j,S,e0.filePaths.dist.povDetailsPath,"bin/pov/details");let L=new TextEncoder().encode('<!DOCTYPE html><html lang="en">');S.append("bin/pov/list/index.html",new Blob([L]))}let N=await j.findFiles(p,`${e0.filePaths.dist.dfilesPath}/*`);for(let L of N){let O=new Blob([await j.readFile(L)]);S.append(`bin/dfiles/${Ae.Utils.basename(L)}`,O)}return await J.isApmPartEnabled(p,j,"blo",_)&&await Ka(p,j,S,e0.filePaths.dist.bloPath,"bin/blo"),await Cl(p,j,S),S}D.createBuffer=s;async function n(p,j,_,k,S){let P=await J.read(p,j);k||await jx.validatePublishSettings(p,j,_,S);let{registry:N}=P,L=N?.id;if(!L&&!k&&(L=await F(p,j,_,P,S)),L){let{publisher:O}=P;if(!O)return null;try{return{id:L,...await ex.getExistingApplication(_,O,L,S)}}catch(s0){if(s0?.message==="Could not find given application")return L=await F(p,j,_,P,S),{id:L,...await ex.getExistingApplication(_,O,L,S)}}}return null}D.validateAccess=n;async function F(p,j,_,k,S){let P="myDatanet",{publisher:N,name:L,description:O,registry:s0}=k,R={id:s0?.id,type:k.type||J.ProjectTypes.app,name:L,targetSystem:P,description:O||"",allowedBackends:null};J.isAddon(k)&&(R.allowedApplications=null);let g=await ex.createNewApplication(_,N,R,S);if(!g)throw new Error("Failed to initialize application");return k.registry={id:g},await J.write(p,j,k),g}D.registerNew=F;async function f(p,j,_,k){let{name:S,publisher:P,description:N,registry:L}=await J.read(p,j),O=L?.id;await ex.updateExistingApplication(_,P,O,{description:N,name:S,targetSystem:"myDatanet"},k)}D.updateProfile=f;async function c(p,j,_,k,S){let{publisher:P,registry:N,version:L}=await J.read(p,j);return await ex.publishApplicationVersion(_,P,N?.id,L,k,S)}D.publishTag=c})(p0||={});async function Ka(A,x,e,r,t){let s=await x.findFiles(A,`${r}/**`);for(let n of s){let F=Ae.Utils.joinPath(A,r),f=n.path.substring(F.path.length+1),c=new Blob([await x.readFile(Ae.Utils.joinPath(A,`${r}/${f}`))]);e.append(`${t}/${f}`,c)}}async function Cl(A,x,e){let r=Ae.Utils.joinPath(A,e0.filePaths.dist.reportTemplate);if(await x.stat(r)){let s=new Blob([await x.readFile(r)]);e.append("bin/pov/mdn_report_template.json",s)}let t=Ae.Utils.joinPath(A,e0.filePaths.dist.historyJson);await x.stat(t)&&e.append("src/dde/history.json",new Blob([await x.readFile(t)]))}var Qa=require("deepmerge-ts"),dl=j0.isNumeric,Ja="52v007",Va="53v001",Dl="54v001",ul="56v001",fA={_manifest:null,_stat:null,_overwrites:null,get manifest(){return(0,Qa.deepmerge)(structuredClone(this._manifest),fA._overwrites||{})},set manifest(A){this._manifest=A},set overwrites(A){this._overwrites=A},get stat(){return this._stat},set stat(A){this._stat=A},clear(){this._stat=null,this._manifest=null}},J;(n0=>{let A=j0.convertBlobToString;n0.fileName="studio.json";let e;(M0=>(M0.m22x="m22x",M0.m23x="m23x",M0.nrf91="nrf91",M0.m2blegw="m2blegw",M0.m2easyv3="m2easyv3",M0.m2easyiot="m2easyiot"))(e=n0.DeviceProfiles||={});let r;(d0=>(d0.app="app",d0.library="library",d0.addon="addon",d0.analytics="analytics"))(r=n0.ProjectTypes||={});let t;(v0=>(v0.restricted="restricted",v0.global="global"))(t=n0.BloAccessLevel||={});let s;(v0=>(v0.embedded="$embedded",v0.pure="$pure"))(s=n0.PovLocation||={});function n(U){fA.overwrites=U}n0.setOverwrites=n;function F(){fA.overwrites=null}n0.clearOverwrites=F;async function f(U,F0){let v0=ur.Utils.joinPath(U,n0.fileName),B0=await F0.stat(v0);if(fA.manifest===null||v0?.fsPath!==fA.stat?.path.fsPath||B0?.ctime!==fA.stat?.ctime||B0?.mtime!==fA.stat?.mtime||B0?.size!==fA.stat?.size){let d0=await F0.readFile(v0),q0=A(d0);fA.manifest=JSON.parse(q0),fA.stat={...B0,path:v0}}return fA.manifest}n0.read=f;async function c(U,F0){return await F0.readFile(ur.Utils.joinPath(U,n0.fileName))}n0.readAsBlob=c;async function D(U,F0){let v0=ur.Utils.joinPath(U,n0.fileName),B0=await F0.readFile(v0),d0=A(B0);return JSON.parse(d0)}n0.readRaw=D;async function p(U,F0,v0){return fA.clear(),yl(v0),F0.writeFile(ur.Utils.joinPath(U,n0.fileName),JSON.stringify(v0,null," "))}n0.write=p;function j(U){return U.library!==void 0?U.library:U.type==="library"}n0.isLibrary=j;function _(U){return U.type==="addon"}n0.isAddon=_;function k(U){return U.type===void 0&&!j(U)?!0:U.type==="app"}n0.isApp=k;function S(U){return U.type===void 0?!0:U.type==="app"}n0.isIotApp=S;function P(U){return U.type==="analytics"}n0.isAnalytics=P;async function N(U,F0,v0){v0||(v0=await f(U,F0)),gl(v0),pl(v0),bl(v0),hl(v0)}n0.validateBasicManifest=N;function L(U){let F0="Library name can only contain 'a' through 'z', '0' through '9', '_' and '-'. The Library name must start with an alphabetic or numeric character.";if(U.match(/^[a-z0-9-_]+$/)){let B0=["-","_"];if(B0.includes(U[0])||B0.includes(U[U.length-1]))return F0}else return F0;return U.length<3||U.length>20?"The library name is beyond permissible length of 20 characters.":null}n0.validateLibraryName=L;function O(U,F0){if(F0)return L(U);{let v0="Project name can only contain 'A' through 'Z', 'a' through 'z', '0' through '9', ' ', '_' and '-'. The Project name must start with an alphabetic or numeric character.";if(!U.match(/^([a-zA-Z0-9 _-]+)$/))return v0;if(U.length<3||U.length>40)return"The project name is beyond permissible length of 40 characters.";let d0=["-","_"," "];return d0.includes(U[0])||d0.includes(U[U.length-1])?v0:null}}n0.validateProjectName=O;function s0(U){return U.length<5?"The description must have at least 5 characters.":null}n0.validateDescription=s0;function R(U){if(!U)return"No publisher set yet";let F0="Publisher can only contain 'A' through 'Z', 'a' through 'z', '0' through '9' and '-'. The Publisher start with an alphabetic or numeric character.";if(U.match(/^[a-zA-Z0-9-]+$/)){let B0=["_"];if(B0.includes(U[0])||B0.includes(U[U.length-1]))return F0}else return F0;return null}n0.validatePublisherId=R;async function g(U,F0,v0){return await ex.getPublisher(U,F0,v0)?null:`Publisher '${F0}' does not exist.`}n0.validatePublisherOnline=g;let M=/^(((?!-))(xn--)?[a-z0-9\-_]{0,61}[a-z0-9]{1,1}\.)*(xn--)?([a-z0-9-]{1,61}|[a-z0-9-]{1,30})\.[a-z]{2,}$/;async function Y(U){if(U===void 0)return"Allowed backends not specified yet";if(U===null)return null;if(Array.isArray(U)||U?.includes(";")){let F0=U?.includes(";")?U.split(";"):U;for(let v0 of F0)if(!v0.match(M))return`Domain "${v0}" is invalid`}else if(!U?.match(M)&&U!=="*")return'Invalid value for "allowedBackends"';return null}n0.validateRegistryAllowedBackends=Y;let W=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;async function H(U){if(U===void 0)return"Allowed applications not specified yet";if(U===null)return null;if(Array.isArray(U)||U?.includes(";")){let F0=U?.includes(";")?U.split(";"):U;for(let v0 of F0)if(!v0.match(W))return`Application id "${v0}" is invalid`}else if(!U?.match(W)&&U!=="*")return'Invalid value for "allowedApplications"';return null}n0.validateRegistryAllowedApplications=H;async function z(U,F0,v0){let B0=v0.icon;if(!B0)throw new Error("App icon is required for publishing an application!");let d0=ur.Utils.joinPath(U,B0);if(!await F0.stat(d0))throw new Error(`Could not load icon "${B0}"`);let M0=await F0.readFile(d0),ox=(0,Wa.imageDimensionsFromData)(M0);if(!ox)throw new Error("App icon could not be validated!");if(ox?.width!==ox?.height)throw new Error("App icon has to be a square!");if(ox.width>512||ox.width<75)throw new Error("App icon size should be between 75px and 512px!");if(!(0,Xa.isPNG)(M0))throw new Error("App icon has to be of type PNG!")}n0.validateApplicationIcon=z;function i0(U){let{engines:F0}=U;if(F0?.backend&&!F0.backend.match(/(^[5-9][2-9]|[6-9]\d+|\d{3,})v(0(0[0-9]|[1-9]\d)|[1-9]\d{2}|[1-9]\d{3,})$/))throw new Error('Setting "engines.backend" is invalid');ml(U),jl(U)}n0.validateEngineSettings=i0;function r0(U,F0){let v0=q0=>{let M0=/^(\d+)v(\d+)$/.exec(q0);return M0?[Number(M0[1]),Number(M0[2])]:null},B0=v0(U),d0=v0(F0);return B0&&d0?B0[0]-d0[0]||B0[1]-d0[1]:U===F0?0:U<F0?-1:1}n0.compareBackendVersion=r0;async function Z(U,F0,v0,B0){B0||(B0=await n0.read(U,F0));let d0=n0.isAddon(B0),q0=n0.isAnalytics(B0);switch(v0){case p0.Part.dlo:return!!B0?.dlo?.mainFile&&!d0&&!q0;case p0.Part.blo:return!!(B0.blo?.buildCommand&&B0.blo?.workingPath);case p0.Part.pov:return!!(B0.pov?.details?.buildCommand&&B0.pov.details.workingPath);case p0.Part.dde:case p0.Part.dfiles:return!0;default:return!1}}n0.isApmPartEnabled=Z})(J||={});function pl(A){let{pov:x}=A;if(x&&x.details){if(!Object.hasOwn(x.details,"buildCommand"))throw new Error('Setting "pov.details.buildCommand" missing!');if(!Object.hasOwn(x.details,"workingPath"))throw new Error('Setting "pov.details.workingPath" missing!')}}function bl(A){let{blo:x}=A;if(x){if(!Object.hasOwn(x,"buildCommand"))throw new Error('Setting "blo.buildCommand" missing!');if(!Object.hasOwn(x,"workingPath"))throw new Error('Setting "blo.workingPath" missing!');if(x.accessLevel&&!["restricted","global"].includes(x.accessLevel))throw new Error('Only "restricted" or "global" are allowed as value for "blo.accessLevel"!')}}function ml(A){let{backend:x,productId:e,hwfw:r}=A.engines;if(J.isAddon(A)&&(e||r))throw new Error('For project type "addon", "engines.hwfw" or "engines.productId" is not allowed!"');if(x&&x>=Ja){if(r&&e)throw new Error('Only "engines.hwfw" or "engines.productId" is allowed!"')}else if(e)throw new Error(`"engines.productId" requires "engines.backend" to be "${Ja}"`)}function jl(A){if(!J.isAddon(A)&&!J.isAnalytics(A))return;let{backend:x}=A.engines,e=J.isAddon(A)?Dl:ul;if(!x||x<e)throw new Error(`Project type "${A.type}" requires "engines.backend" to be ">=${e}"`);if(A.dlo)throw new Error(`For project type "${A.type}", "dlo" is not supported!"`);if(A.dpid)throw new Error(`For project type "${A.type}", "dpid" is not supported!"`)}function hl(A){let{maxInstancesPerSite:x}=A;if(x===void 0){if(J.isAddon(A))throw new Error('Property "maxInstancesPerSite" is required for addon projects!');return}if(!J.isAddon(A))throw new Error('Property "maxInstancesPerSite" is only allowed for addon projects!');if(!Number.isInteger(x))throw new Error('Property "maxInstancesPerSite" must be an integer!');if(x<1||x>100)throw new Error('Property "maxInstancesPerSite" must be between 1 and 100!')}function gl(A){if((A.engines?.backend||"00v000")>=Va||J.isLibrary(A)){if(!Ya.default.valid(A.version))throw new Error(`From "engines.backend" version >= ${Va} onwards "version" has to be a semantic version string!"`)}else if(!dl(A.version))throw new Error('"version" has to be a number!')}function yl(A){A.registry&&(delete A.registry.allowedBackends,delete A.registry.target)}var OA=cx(require("semver"));var eo=cx(require("node:child_process")),ro=require("minimatch");var kl=require("tinytar-fix"),_l=require("pako"),ee=".studio/libdeps",st="package.json",wl="package-lock.json";function Za(A){return[...Object.keys(A.libraryDependencies||{}),...Object.keys(A.libraryDevDependencies||{})].map(Q0.dependencyIdToName)}async function Sl(A,x,e,r){let t=Dx.Utils.joinPath(A,ee,r);try{return await x.stat(Dx.Utils.joinPath(t,J.fileName))?await J.readRaw(t,x):null}catch(s){return e.warn(`Could not read manifest for library "${r}": ${s}`),null}}async function $l(A,x,e,r){let t=new Set,s=Za(r),n=null;for(;s.length>0;){let F=s.shift();if(t.has(F))continue;t.add(F);let f=await Sl(A,x,e,F);if(!f)continue;let c=f.engines?.backend;c&&(!n||J.compareBackendVersion(c,n.backend)>0)&&(n={backend:c,requiredBy:`${f.publisher}/${f.name}`}),s.push(...Za(f))}return n}var Q0;(R=>{async function A(g,M=!1){let Y=g.libraryDependencies||{};return M||Object.assign(Y,g.libraryDevDependencies||{}),Y}R.getAll=A;function x(g){return g.split("/")[1]}R.dependencyIdToName=x;function e(g,M){let Y=x(M);return Dx.Utils.joinPath(g,ee,Y)}R.dependencyToPath=e;function r(g){return isNaN(g.split("")[0])?g.substring(1):g}R.rangeToVersion=r;function t(g,M,Y){if(!OA.satisfies(M,Y,{includePrerelease:!0}))throw new Error(`${g}, version ${M} does not satisfy required constraint ${Y}`)}R.satisfiesSemverRange=t;async function s(g,M,Y={},W=!1){let H=await J.read(g,M),z=H.libraryDependencies||{};W&&Object.assign(z,H.libraryDevDependencies);let i0=Object.keys(Y);for(let r0 of i0)if(Object.hasOwn(z,r0)){let Z=Y[r0],n0=z[r0],U=r(Z),F0=r(n0),v0=OA.compare(U,F0);v0===1?(z[r0]=Z,t(r0,U,n0)):v0===-1&&(z[r0]=n0,t(r0,F0,Z))}else z[r0]=Y[r0];return z}R.validateDependencyTree=s;async function n(g,M,Y,W,H){let z=r(H),i0=Dx.Utils.joinPath(g,ee,W);try{let r0=await J.read(i0,M);return OA.gte(r0.version,z)&&r0.publisher.toLowerCase()===Y.toLowerCase()}catch{return!1}}R.isDependencyInstalled=n;async function F(g,M,Y,W){let H=Dx.Utils.joinPath(g,ee,W);await M.rm(H).catch(z=>{Y.error("removeExisting",z)})}R.removeExisting=F;async function f(g,M,Y,W,H){let z=kl.untar(_l.ungzip(H));await F(g,M,Y,W);for(let i0 of z.values())try{let r0=Dx.Utils.joinPath(g,ee,W,i0.name);await M.writeFile(r0,i0.data)}catch(r0){Y.error("Extracting lib",r0)}}R.extractLibraryContent=f;async function c(g,M,Y,W,H,z,i0,r0=!1){let[Z,n0]=z.split("/");if(i0&&await n(g,M,Z,n0,i0))return;await F(g,M,Y,n0);let U=await ex.getLibraryProfile(H,Z,n0,W),F0=i0?U.versions?.find(Z0=>OA.eq(Z0.name,R.rangeToVersion(i0))):U.versions[0];if(!F0)throw new Error(`Library ${z} with version ${i0} does not exist!`);let v0=F0.files.find(Z0=>Z0.name==="studio.json"),d0=(await ql(H,v0.downloadUrl)).libraryDependencies||{},q0={...d0};q0[z]=`^${F0.name}`,await s(g,M,q0,r0);for(let[Z0,xA]of Object.entries(d0))await c(g,M,Y,W,H,Z0,xA,r0);let M0=F0.files.find(Z0=>Z0.name==="library.tar.gz");if(!M0)throw new Error(`Library ${z} has no content!`);let ox=await ex.fetchCustomContent(H,M0.downloadUrl);await f(g,M,Y,n0,ox),await O(g,M,Y,n0,r0);let Hx=await J.read(g,M),hA=Hx.libraryDependencies||{},gA=Hx.libraryDevDependencies||{},sx=r0?gA:hA;sx[z]=`^${F0.name}`,Hx.libraryDependencies=hA,Hx.libraryDevDependencies=gA,await J.write(g,M,Hx)}R.installDependency=c;async function D(g,M,Y,W,H){let z=await J.read(g,M),i0=z.libraryDependencies||{},r0=z.libraryDevDependencies||{},Z=Object.assign(i0,r0);for(let[n0,U]of Object.entries(Z)){let F0=Object.hasOwn(r0,n0);await c(g,M,Y,W,H,n0,U,F0)}for(let[n0]of Object.entries(Z)){let U=x(n0),F0=Object.hasOwn(r0,n0);await O(g,M,Y,U,F0)}Y.done(`Installed ${Object.entries(Z).length} dependencies`)}R.installDependencies=D;async function p(g,M,Y,W,H){let z=await J.read(g,M),i0=z.libraryDependencies||{},r0=z.libraryDevDependencies||{},Z=Object.assign(i0,r0),n0=`${W}/${H}`;delete Z[n0];let U=await Pl(g,M,Z);if(!Object.hasOwn(U,n0))await s0(g,M,Y,H),await F(g,M,Y,H),delete r0[n0],delete i0[n0],await J.write(g,M,z);else throw new Error(`Library '${H}' not removed. This library is a dependency of other libraries.`)}R.uninstallDependency=p;async function j(g,M){try{let W=(await to(Dx.Utils.joinPath(g,st),M)).workspaces;if(Array.isArray(W)&&W.every(z=>typeof z=="string")&&W.length>0)return W;let H=W?.packages;return Array.isArray(H)&&H.every(z=>typeof z=="string")&&H.length>0?H:null}catch{return null}}R.readNpmWorkspacePatterns=j;function _(g,M){let Y=H=>H.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/$/,""),W=Y(g);return M.some(H=>{let z=Y(H);return z===W||(0,ro.minimatch)(W,z)})}R.isPathInWorkspaces=_;function k(g,M){if(!M)return{rootInstall:!1,partInstalls:g.map(H=>H.workingPath)};let Y=[],W=!1;for(let H of g)_(H.workingPath,M)?W=!0:Y.push(H.workingPath);return{rootInstall:W,partInstalls:Y}}R.planNpmInstalls=k;async function S(g,M,Y){let W=await J.read(g,M),H=new Set([...Object.keys(W.libraryDependencies||{}),...Object.keys(W.libraryDevDependencies||{})].map(x)),z=new Set,i0=[...H];for(;i0.length>0;){let r0=i0.shift();if(z.has(r0))continue;z.add(r0);let Z=Dx.Utils.joinPath(g,ee,r0);try{let n0=Dx.Utils.joinPath(Z,J.fileName);if(!await M.stat(n0))continue;let U=await J.readRaw(Z,M);await Dr.normalizeLibraryParts(Z,M,U,Y),i0.push(...[...Object.keys(U.libraryDependencies||{}),...Object.keys(U.libraryDevDependencies||{})].map(x))}catch(n0){Y.warn(`Could not normalize library parts for "${r0}": ${n0}`)}}}R.normalizeInstalledLibraryParts=S;async function P(g,M,Y){let W=await J.read(g,M),H=await $l(g,M,Y,W);if(!H)return;let z=W.engines?.backend;if(!z||J.compareBackendVersion(H.backend,z)>0){let i0=z?`"${z}"`:"none",r0=J.isLibrary(W)?"library":"application",Z=J.isLibrary(W)?" Every application using this library must then satisfy that version as well.":"";throw new Error(`Library "${H.requiredBy}" requires "engines.backend" >= "${H.backend}" but the ${r0} "${W.publisher}/${W.name}" declares ${i0}. Raise "engines.backend" in studio.json to at least "${H.backend}".${Z}`)}}R.validateMinimumBackendVersion=P;async function N(g,M,Y){await S(g,M,Y);let W=await J.read(g,M),H=[];W.pov?.details?.workingPath&&H.push({name:"pov",workingPath:W.pov.details.workingPath}),W.blo?.workingPath&&H.push({name:"blo",workingPath:W.blo.workingPath});let z=[];for(let n0 of H){let U=Dx.Utils.joinPath(g,n0.workingPath),F0=Dx.Utils.joinPath(U,st);await M.stat(F0)&&z.push(n0)}if(z.length===0)return;let i0=await j(g,M),{rootInstall:r0,partInstalls:Z}=k(z,i0);if(r0){let n0=z.filter(U=>!Z.includes(U.workingPath)).map(U=>U.workingPath).join(", ");Y.info(`npm workspaces detected in root package.json - installing dependencies once at the project root (${n0}) using 'npm install' (an in-sync package-lock.json is installed as-is and left unchanged)`),await Lt(g,"npm install --no-audit --no-fund",Y)}for(let n0 of z){if(!Z.includes(n0.workingPath))continue;i0?Y.warn(`${n0.workingPath} (${n0.name}) is not covered by any workspace pattern in the root package.json - installing it separately.`):Y.info(`Installing npm dependencies for ${n0.name} (${n0.workingPath})...`);let U=Dx.Utils.joinPath(g,n0.workingPath);await Il(U,M,Y)}}R.installNpmInApmParts=N;async function L(g,M,Y){let W=await J.read(g,M),H=await A(W),z=[],i0=e0.filePaths[Y].path,r0=Y===p0.Part.dlo?"inc":"dfiles";for(let Z in H){let n0=R.dependencyToPath(g,Z),U=R.dependencyIdToName(Z),F0=Dx.Utils.joinPath(n0,i0,`${U}.${r0}`);await M.stat(F0)&&z.push({name:U,path:F0})}if(J.isLibrary(W)){let Z=Dx.Utils.joinPath(g,i0,`${W.name}.${r0}`);await M.stat(Z)&&z.push({name:W.name,path:Z})}return z}R.getApmPartDependencies=L;async function O(g,M,Y,W,H){let z=await J.read(g,M),i0=[{partName:"blo",partDistPath:"blo",workingPath:z.blo?.workingPath},{partName:"pov",partDistPath:"pov/details",workingPath:z.pov?.details?.workingPath}];for(let{partName:r0,partDistPath:Z,workingPath:n0}of i0){if(!n0)continue;let U=Dx.Utils.joinPath(g,ee,W,"dist",...Z.split("/"),st);if(await M.stat(U))try{let v0=await xo(g,M,n0),B0=H?"devDependencies":"dependencies";v0[B0]=v0[B0]||{};let d0=n0.split("/").length,q0=Array(d0).fill("..").join("/");v0[B0][W]=`file:${q0}/${ee}/${W}/dist/${Z}`,await Ao(g,M,n0,v0),Y.info(`Linked ${W} to ${r0} (${n0})`)}catch(v0){Y.warn(`Could not link ${W} to ${r0}: ${v0}`)}}}R.linkLibraryApmParts=O;async function s0(g,M,Y,W){let H=await J.read(g,M),z=[{partName:"blo",workingPath:H.blo?.workingPath},{partName:"pov",workingPath:H.pov?.details?.workingPath}];for(let{partName:i0,workingPath:r0}of z)if(r0)try{let Z=await xo(g,M,r0),n0=!1;Z.dependencies?.[W]?.startsWith("file:")&&(delete Z.dependencies[W],n0=!0),Z.devDependencies?.[W]?.startsWith("file:")&&(delete Z.devDependencies[W],n0=!0),n0&&(await Ao(g,M,r0,Z),Y.info(`Unlinked ${W} from ${i0}`))}catch(Z){Y.warn(`Could not unlink ${W} from ${i0}: ${Z}`)}}R.unlinkLibraryApmParts=s0})(Q0||={});async function to(A,x){let e=await x.readFile(A);return JSON.parse(j0.convertBlobToString(e))}function xo(A,x,e){return to(Dx.Utils.joinPath(A,e,st),x)}async function Ao(A,x,e,r){let t=Dx.Utils.joinPath(A,e,st),s=JSON.stringify(r,null," ")+`
|
|
1664
|
-
`;await x.writeFile(t,s)}async function ql(A,x){return await ex.fetchCustomContent(A,x,!0)}async function Pl(A,x,e){let r={};function t(c,D,p,j=!1){let _=r[c],k=Q0.rangeToVersion(p),S=Q0.rangeToVersion(p);(!_||OA.gt(k,S))&&(r[c]={publisherId:D,version:p,installed:j})}let s=Object.entries(e).map(([c,D])=>{let[p,j]=c.split("/");return t(j,p,D,!0),j}),n={};for(let c of s)try{let D=await Tl(A,x,c);n[c]=Object.entries(D).map(([p,j])=>{let[_,k]=p.split("/");return t(k,_,j),k}),s.push(...n[c])}catch{let p=r[c];throw new Error(`Please import "${p.publisherId}/${c}" first.`)}let F=[];for(;;){let c=s.filter(D=>F.includes(D)?!1:(n[D]||[]).every(j=>F.includes(j)));if(F.push(...c),s.length===F.length||!c.length)break}let f={};return[...new Set(F)].forEach(c=>{let{version:D,publisherId:p}=r[c],j=Nl(p,c,D);f[j.libraryId]=j.libraryVersion}),f}async function Tl(A,x,e){let r=Dx.Utils.joinPath(A,ee,e);return(await J.read(r,x))?.libraryDependencies||{}}function Nl(A,x,e){return{libraryName:x,publisherId:A,libraryVersion:e[0]==="^"?e:"^"+e,libraryId:`${A}/${x}`}}function Lt(A,x,e){return new Promise((r,t)=>{eo.exec(x,{cwd:A.fsPath,env:process.env},(s,n,F)=>{if(n&&e.log(n),F&&e.error(F),s){t(new Error(`${s.message}
|
|
1665
|
-
${n}
|
|
1666
|
-
${F}`));return}r()})})}async function Il(A,x,e){let r=Dx.Utils.joinPath(A,wl);if(!await x.stat(r)){e.warn(`No package-lock.json found in ${A.fsPath} - running 'npm install' instead of 'npm ci'.`),await Lt(A,"npm install",e);return}try{await Lt(A,"npm ci",e)}catch{e.warn(`'npm ci' failed in ${A.fsPath} - falling back to 'npm install'. If package-lock.json changed afterwards, commit it.`),await Lt(A,"npm install",e)}}var no=cx(require("dotenv")),so=require("vscode-uri");var Ml=".env.local",ts;(x=>{async function A(e,r){let t=so.Utils.joinPath(e,Ml);if(await r.stat(t)){let s=await r.readFile(t);return no.default.parse(j0.convertBlobToString(s))}return{}}x.read=A})(ts||={});var pr=cx(require("chalk")),re;(r=>{let A;(D=>(D[D.log=0]="log",D[D.done=1]="done",D[D.info=2]="info",D[D.warning=3]="warning",D[D.error=4]="error",D[D.debug=5]="debug"))(A=r.LogMessageType||={}),r.LOG_PREFIX={1:pr.default.bgGreen.black(" DONE "),0:"",2:pr.default.bgBlueBright.black(" INFO "),3:pr.default.bgYellow.black(" WARNING "),4:pr.default.bgRed.black(" ERROR "),5:pr.default.bgBlackBright.black(" DEBUG ")};class e{_logHandler;_silent=!1;_debugEnabled=!1;constructor(s=console){this._logHandler=s}_log(s,n,...F){this._silent&&s!==4||(F=[r.LOG_PREFIX[s],n,...F],this._logHandler.log(...F))}set silent(s){this._silent=s}set output(s){this._logHandler=s}log(s,...n){this._log(0,s,...n)}debug(s,...n){this._debugEnabled&&this._log(5,s,...n)}set debugEnabled(s){this._debugEnabled=s}error(s,...n){this._log(4,s,...n)}info(s,...n){this._log(2,s,...n)}warn(s,...n){this._log(3,s,...n)}done(s,...n){this._log(1,s,...n)}}r.Logger=e})(re||={});var ai=require("node:child_process"),L8=require("node:fs"),ii=require("vscode-uri");var b8=require("node:events"),ri=require("vscode-uri");var xF=require("events"),tF=require("events"),yF=require("events");var _F=require("events"),$F=require("events"),qF=require("events"),TF=require("events");var Ll=Object.create,Ss=Object.defineProperty,Rl=Object.getOwnPropertyDescriptor,Ho=Object.getOwnPropertyNames,Ol=Object.getPrototypeOf,Gl=Object.prototype.hasOwnProperty,Ul=(A,x,e)=>x in A?Ss(A,x,{enumerable:!0,configurable:!0,writable:!0,value:e}):A[x]=e,io=(A=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(A,{get:(x,e)=>(typeof require<"u"?require:x)[e]}):A)(function(A){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+A+'" is not supported')}),Hl=(A,x)=>function(){try{return x||(0,A[Ho(A)[0]])((x={exports:{}}).exports,x),x.exports}catch(r){throw x=0,r}},zl=(A,x,e,r)=>{if(x&&typeof x=="object"||typeof x=="function")for(let t of Ho(x))!Gl.call(A,t)&&t!==e&&Ss(A,t,{get:()=>x[t],enumerable:!(r=Rl(x,t))||r.enumerable});return A},Kl=(A,x,e)=>(e=A!=null?Ll(Ol(A)):{},zl(x||!A||!A.__esModule?Ss(e,"default",{value:A,enumerable:!0}):e,A)),E0=(A,x,e)=>Ul(A,typeof x!="symbol"?x+"":x,e),Jl=Hl({"mdn_com_wasm/bin/mdnCOM.js"(A,x){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s;(function(){function l(A0){A0=A0.split("-")[0];for(var c0=A0.split(".").slice(0,3);c0.length<3;)c0.push("00");return c0=c0.map((u0,W0,K0)=>u0.padStart(2,"0")),c0.join("")}var C=A0=>[A0/1e4|0,(A0/100|0)%100,A0%100].join("."),h=2147483647,q=typeof process<"u"&&process.versions?.node?l(process.versions.node):h;if(q<180300)throw new Error(`This emscripten-generated code requires node v${C(180300)} (detected v${C(q)})`);var T=typeof navigator<"u"&&navigator.userAgent;if(T){var Q=T.includes("Safari/")&&!T.includes("Chrome/")&&T.match(/Version\/(\d+\.?\d*\.?\d*)/)?l(T.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]):h;if(Q<15e4)throw new Error(`This emscripten-generated code requires Safari v${C(15e4)} (detected v${Q})`);var X=T.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(T.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):h;if(X<79)throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${X})`);var x0=T.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(T.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):h;if(x0<85)throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${x0})`)}})();var n=t,F=!!globalThis.window,f=!!globalThis.WorkerGlobalScope,c=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",D=!F&&!c&&!f,p=[],j="./this.program",_=(l,C)=>{throw C};typeof __filename<"u"?r=__filename:f&&(r=self.location.href);var k="",S,P;if(c){if(!(globalThis.process?.versions?.node&&globalThis.process?.type!="renderer"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var N=io("fs");k=__dirname+"/",P=C=>{C=M(C)?new URL(C):C;var h=N.readFileSync(C);return g(Buffer.isBuffer(h)),h},S=async(C,h=!0)=>{C=M(C)?new URL(C):C;var q=N.readFileSync(C,h?void 0:"utf8");return g(h?Buffer.isBuffer(q):typeof q=="string"),q},process.argv.length>1&&(j=process.argv[1].replace(/\\/g,"/")),p=process.argv.slice(2),_=(C,h)=>{throw process.exitCode=C,h}}else if(!D)if(F||f){try{k=new URL(".",r).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");f&&(P=l=>{var C=new XMLHttpRequest;return C.open("GET",l,!1),C.responseType="arraybuffer",C.send(null),new Uint8Array(C.response)}),S=async l=>{if(M(l))return new Promise((h,q)=>{var T=new XMLHttpRequest;T.open("GET",l,!0),T.responseType="arraybuffer",T.onload=()=>{if(T.status==200||T.status==0&&T.response){h(T.response);return}q(T.status)},T.onerror=q,T.send(null)});var C=await fetch(l,{credentials:"same-origin"});if(C.ok)return C.arrayBuffer();throw new Error(C.status+" : "+C.url)}}else throw new Error("environment detection error");var L=console.log.bind(console),O=console.error.bind(console);g(!D,"shell environment detected but not enabled at build time (add `shell` to `-sENVIRONMENT` to enable)");var s0;globalThis.WebAssembly||O("no native wasm support detected");var R=!1;function g(l,C){l||sx("Assertion failed"+(C?": "+C:""))}var M=l=>l.startsWith("file://");function Y(){var l=Tn();g((l&3)==0),l==0&&(l+=4),g0[l>>2]=34821223,g0[l+4>>2]=2310721022,g0[0]=1668509029}function W(){if(!R){var l=Tn();l==0&&(l+=4);var C=g0[l>>2],h=g0[l+4>>2];(C!=34821223||h!=2310721022)&&sx(`Stack overflow! Stack cookie has been overwritten at ${fx(l)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${fx(h)} ${fx(C)}`),g0[0]!=1668509029&&sx("Runtime error: The application has corrupted its heap memory area (address zero)!")}}class H{}class z extends H{}var i0=!0;(()=>{var l=new Int16Array(1),C=new Int8Array(l.buffer);l[0]=25459,(C[0]!==115||C[1]!==99)&&sx("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function r0(l){Object.getOwnPropertyDescriptor(n,l)||Object.defineProperty(n,l,{configurable:!0,set(){sx(`Attempt to set \`Module.${l}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}function Z(l){return()=>g(!1,`call to '${l}' via reference taken before Wasm module initialization`)}function n0(l){Object.getOwnPropertyDescriptor(n,l)&&sx(`\`Module.${l}\` was supplied but \`${l}\` not included in INCOMING_MODULE_JS_API`)}function U(l){return l==="FS_createPath"||l==="FS_createDataFile"||l==="FS_createPreloadedFile"||l==="FS_preloadFile"||l==="FS_unlink"||l==="addRunDependency"||l==="FS_createLazyFile"||l==="FS_createDevice"||l==="removeRunDependency"}function F0(l){v0(l)}function v0(l){Object.getOwnPropertyDescriptor(n,l)||Object.defineProperty(n,l,{configurable:!0,get(){var C=`'${l}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;U(l)&&(C+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),sx(C)}})}function B0(l){for(var C=0,h=l.length,q=new Uint8Array(h),T;C<h;++C)T=l.charCodeAt(C),q[C]=~T>>8&T;return q}var d0,q0,M0=!1;function ox(){var l=ut.buffer;zx=new Int8Array(l),yA=new Int16Array(l),n.HEAPU8=ux=new Uint8Array(l),nx=new Uint16Array(l),kA=new Int32Array(l),g0=new Uint32Array(l),Ye=new Float32Array(l),ie=new Float64Array(l),Xe=new BigInt64Array(l),eA=new BigUint64Array(l)}g(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function Hx(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)Sr(n.preRun.shift());r0("preRun"),lA(l0)}function hA(){g(!M0),M0=!0,W(),ar.__wasm_call_ctors()}function gA(){if(W(),n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)_A(n.postRun.shift());r0("postRun"),lA(rA)}function sx(l){n.onAbort?.(l),l=`Aborted(${l})`,O(l),R=!0;var C=new WebAssembly.RuntimeError(l);throw q0?.(C),C}function Z0(){sx("Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM")}var xA={init:Z0,createDataFile:Z0,createPreloadedFile:Z0,createLazyFile:Z0,open:Z0,mkdev:Z0,registerDevice:Z0,analyzePath:Z0,ErrnoError:Z0};function U0(l,C){return(...h)=>{g(M0,`native function \`${l}\` called before runtime initialization`);var q=ar[l];return g(q,`exported native function \`${l}\` not found`),g(h.length<=C,`native function \`${l}\` called with ${h.length} args but expects ${C}`),q(...h)}}var O0;function H0(){return B0(`\0asm\0\0\0\xCF\`\x7F\0\`\x7F\x7F\0\`\x7F\x7F\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\0\0\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F~\`
|
|
1526
|
+
\0A\x80\v\vp\0\0D\0\0\0`)}function vx(a){return a}async function zx(a){return a}async function yA(a,E){try{var d=await zx(a),b=await WebAssembly.instantiate(d,E);return b}catch(y){L(`failed to asynchronously prepare wasm: ${y}`),d0(y)}}async function kA(a,E,d){return yA(E,d)}function ax(){var a={env:Pe,wasi_snapshot_preview1:Pe};return a}async function Ax(){function a($,G){return xe=$.exports,ZA(xe),Z(),xe}function E($){return a($.instance)}var d=ax();if(n.instantiateWasm)return new Promise(($,G)=>{n.instantiateWasm(d,(V,o0)=>{$(a(V,o0))})});q0??(q0=I0());var b=await kA(O,q0,d),y=E(b);return y}class xA{constructor(E){Dx(this,"name","ExitStatus"),this.message=`Program terminated with exit(${E})`,this.status=E}}var K0,O0,z0,ox,qr,Tr,Pr,E0,Nr,AA,_A=a=>{for(;a.length>0;)a.shift()(n)},wA=[],Ar=a=>wA.push(a),Jx=[],er=a=>Jx.push(a),ve=!1,ix=globalThis.TextDecoder&&new TextDecoder,g0=(a,E,d,b)=>{var y=E+d;if(b)return y;for(;a[E]&&!(E>=y);)++E;return E},eA=(a,E=0,d,b)=>{var y=g0(a,E,d,b);if(y-E>16&&a.buffer&&ix)return ix.decode(a.subarray(E,y));for(var $="";E<y;){var G=a[E++];if(!(G&128)){$+=String.fromCharCode(G);continue}var V=a[E++]&63;if((G&224)==192){$+=String.fromCharCode((G&31)<<6|V);continue}var o0=a[E++]&63;if((G&240)==224?G=(G&15)<<12|V<<6|o0:G=(G&7)<<18|V<<12|o0<<6|a[E++]&63,G<65536)$+=String.fromCharCode(G);else{var D0=G-65536;$+=String.fromCharCode(55296|D0>>10,56320|D0&1023)}}return $},px=(a,E,d)=>a?eA(AA,a,E,d):"",BA=(a,E,d,b)=>d0(`Assertion failed: ${px(a)}, at: `+[E?px(E):"unknown filename",d,b?px(b):"unknown function"]),rA=()=>{var a=O0[+k0.varargs>>2];return k0.varargs+=4,a},SA=rA,l0={isAbs:a=>a.charAt(0)==="/",splitPath:a=>{var E=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return E.exec(a).slice(1)},normalizeArray:(a,E)=>{for(var d=0,b=a.length-1;b>=0;b--){var y=a[b];y==="."?a.splice(b,1):y===".."?(a.splice(b,1),d++):d&&(a.splice(b,1),d--)}if(E)for(;d;d--)a.unshift("..");return a},normalize:a=>{var E=l0.isAbs(a),d=a.slice(-1)==="/";return a=l0.normalizeArray(a.split("/").filter(b=>!!b),!E).join("/"),!a&&!E&&(a="."),a&&d&&(a+="/"),(E?"/":"")+a},dirname:a=>{var E=l0.splitPath(a),d=E[0],b=E[1];return!d&&!b?".":(b&&(b=b.slice(0,-1)),d+b)},basename:a=>a&&a.match(/([^\/]+|\/)\/*$/)[1],join:(...a)=>l0.normalize(a.join("/")),join2:(a,E)=>l0.normalize(a+"/"+E)},Mr=()=>{if(C){var a=require("crypto");return E=>a.randomFillSync(E)}return E=>(crypto.getRandomValues(E),0)},ke=a=>(ke=Mr())(a),lx={resolve:(...a)=>{for(var E="",d=!1,b=a.length-1;b>=-1&&!d;b--){var y=b>=0?a[b]:o.cwd();if(typeof y!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!y)return"";E=y+"/"+E,d=l0.isAbs(y)}return E=l0.normalizeArray(E.split("/").filter($=>!!$),!d).join("/"),(d?"/":"")+E||"."},relative:(a,E)=>{a=lx.resolve(a).slice(1),E=lx.resolve(E).slice(1);function d(D0){for(var J0=0;J0<D0.length&&D0[J0]==="";J0++);for(var N0=D0.length-1;N0>=0&&D0[N0]==="";N0--);return J0>N0?[]:D0.slice(J0,N0-J0+1)}for(var b=d(a.split("/")),y=d(E.split("/")),$=Math.min(b.length,y.length),G=$,V=0;V<$;V++)if(b[V]!==y[V]){G=V;break}for(var o0=[],V=G;V<b.length;V++)o0.push("..");return o0=o0.concat(y.slice(G)),o0.join("/")}},Ox=[],JA=a=>{for(var E=0,d=0;d<a.length;++d){var b=a.charCodeAt(d);b<=127?E++:b<=2047?E+=2:b>=55296&&b<=57343?(E+=4,++d):E+=3}return E},_e=(a,E,d,b)=>{if(!(b>0))return 0;for(var y=d,$=d+b-1,G=0;G<a.length;++G){var V=a.codePointAt(G);if(V<=127){if(d>=$)break;E[d++]=V}else if(V<=2047){if(d+1>=$)break;E[d++]=192|V>>6,E[d++]=128|V&63}else if(V<=65535){if(d+2>=$)break;E[d++]=224|V>>12,E[d++]=128|V>>6&63,E[d++]=128|V&63}else{if(d+3>=$)break;E[d++]=240|V>>18,E[d++]=128|V>>12&63,E[d++]=128|V>>6&63,E[d++]=128|V&63,G++}}return E[d]=0,d-y},VA=(a,E,d)=>{var b=d>0?d:JA(a)+1,y=new Array(b),$=_e(a,y,0,y.length);return E&&(y.length=$),y},Ir=()=>{if(!Ox.length){var a=null;if(C){var E=256,d=Buffer.alloc(E),b=0,y=process.stdin.fd;try{b=T.readSync(y,d,0,E)}catch($){if($.toString().includes("EOF"))b=0;else throw $}b>0&&(a=d.slice(0,b).toString("utf-8"))}else globalThis.window?.prompt&&(a=window.prompt("Input: "),a!==null&&(a+=`
|
|
1527
|
+
`));if(!a)return null;Ox=VA(a,!0)}return Ox.shift()},ex={ttys:[],init(){},shutdown(){},register(a,E){ex.ttys[a]={input:[],output:[],ops:E},o.registerDevice(a,ex.stream_ops)},stream_ops:{open(a){var E=ex.ttys[a.node.rdev];if(!E)throw new o.ErrnoError(43);a.tty=E,a.seekable=!1},close(a){a.tty.ops.fsync(a.tty)},fsync(a){a.tty.ops.fsync(a.tty)},read(a,E,d,b,y){if(!a.tty||!a.tty.ops.get_char)throw new o.ErrnoError(60);for(var $=0,G=0;G<b;G++){var V;try{V=a.tty.ops.get_char(a.tty)}catch{throw new o.ErrnoError(29)}if(V===void 0&&$===0)throw new o.ErrnoError(6);if(V==null)break;$++,E[d+G]=V}return $&&(a.node.atime=Date.now()),$},write(a,E,d,b,y){if(!a.tty||!a.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var $=0;$<b;$++)a.tty.ops.put_char(a.tty,E[d+$])}catch{throw new o.ErrnoError(29)}return b&&(a.node.mtime=a.node.ctime=Date.now()),$}},default_tty_ops:{get_char(a){return Ir()},put_char(a,E){E===null||E===10?(N(eA(a.output)),a.output=[]):E!=0&&a.output.push(E)},fsync(a){a.output?.length>0&&(N(eA(a.output)),a.output=[])},ioctl_tcgets(a){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(a,E,d){return 0},ioctl_tiocgwinsz(a){return[24,80]}},default_tty1_ops:{put_char(a,E){E===null||E===10?(L(eA(a.output)),a.output=[]):E!=0&&a.output.push(E)},fsync(a){a.output?.length>0&&(L(eA(a.output)),a.output=[])}}},$A=a=>{d0()},n0={ops_table:null,mount(a){return n0.createNode(null,"/",16895,0)},createNode(a,E,d,b){if(o.isBlkdev(d)||o.isFIFO(d))throw new o.ErrnoError(63);n0.ops_table||(n0.ops_table={dir:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr,lookup:n0.node_ops.lookup,mknod:n0.node_ops.mknod,rename:n0.node_ops.rename,unlink:n0.node_ops.unlink,rmdir:n0.node_ops.rmdir,readdir:n0.node_ops.readdir,symlink:n0.node_ops.symlink},stream:{llseek:n0.stream_ops.llseek}},file:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr},stream:{llseek:n0.stream_ops.llseek,read:n0.stream_ops.read,write:n0.stream_ops.write,mmap:n0.stream_ops.mmap,msync:n0.stream_ops.msync}},link:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr,readlink:n0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr},stream:o.chrdev_stream_ops}});var y=o.createNode(a,E,d,b);return o.isDir(y.mode)?(y.node_ops=n0.ops_table.dir.node,y.stream_ops=n0.ops_table.dir.stream,y.contents={}):o.isFile(y.mode)?(y.node_ops=n0.ops_table.file.node,y.stream_ops=n0.ops_table.file.stream,y.usedBytes=0,y.contents=n0.emptyFileContents??(n0.emptyFileContents=new Uint8Array(0))):o.isLink(y.mode)?(y.node_ops=n0.ops_table.link.node,y.stream_ops=n0.ops_table.link.stream):o.isChrdev(y.mode)&&(y.node_ops=n0.ops_table.chrdev.node,y.stream_ops=n0.ops_table.chrdev.stream),y.atime=y.mtime=y.ctime=Date.now(),a&&(a.contents[E]=y,a.atime=a.mtime=a.ctime=y.atime),y},getFileDataAsTypedArray(a){return a.contents.subarray(0,a.usedBytes)},expandFileStorage(a,E){var d=a.contents.length;if(!(d>=E)){var b=1024*1024;E=Math.max(E,d*(d<b?2:1.125)>>>0),d&&(E=Math.max(E,256));var y=n0.getFileDataAsTypedArray(a);a.contents=new Uint8Array(E),a.contents.set(y)}},resizeFileStorage(a,E){if(a.usedBytes!=E){var d=a.contents;a.contents=new Uint8Array(E),a.contents.set(d.subarray(0,Math.min(E,a.usedBytes))),a.usedBytes=E}},node_ops:{getattr(a){var E={};return E.dev=o.isChrdev(a.mode)?a.id:1,E.ino=a.id,E.mode=a.mode,E.nlink=1,E.uid=0,E.gid=0,E.rdev=a.rdev,o.isDir(a.mode)?E.size=4096:o.isFile(a.mode)?E.size=a.usedBytes:o.isLink(a.mode)?E.size=a.link.length:E.size=0,E.atime=new Date(a.atime),E.mtime=new Date(a.mtime),E.ctime=new Date(a.ctime),E.blksize=4096,E.blocks=Math.ceil(E.size/E.blksize),E},setattr(a,E){for(let d of["mode","atime","mtime","ctime"])E[d]!=null&&(a[d]=E[d]);E.size!==void 0&&n0.resizeFileStorage(a,E.size)},lookup(a,E){throw n0.doesNotExistError||(n0.doesNotExistError=new o.ErrnoError(44),n0.doesNotExistError.stack="<generic error, no stack>"),n0.doesNotExistError},mknod(a,E,d,b){return n0.createNode(a,E,d,b)},rename(a,E,d){var b;try{b=o.lookupNode(E,d)}catch{}if(b){if(o.isDir(a.mode))for(var y in b.contents)throw new o.ErrnoError(55);o.hashRemoveNode(b)}delete a.parent.contents[a.name],E.contents[d]=a,a.name=d,E.ctime=E.mtime=a.parent.ctime=a.parent.mtime=Date.now()},unlink(a,E){delete a.contents[E],a.ctime=a.mtime=Date.now()},rmdir(a,E){var d=o.lookupNode(a,E);for(var b in d.contents)throw new o.ErrnoError(55);delete a.contents[E],a.ctime=a.mtime=Date.now()},readdir(a){return[".","..",...Object.keys(a.contents)]},symlink(a,E,d){var b=n0.createNode(a,E,41471,0);return b.link=d,b},readlink(a){if(!o.isLink(a.mode))throw new o.ErrnoError(28);return a.link}},stream_ops:{read(a,E,d,b,y){var $=a.node.contents;if(y>=a.node.usedBytes)return 0;var G=Math.min(a.node.usedBytes-y,b);return E.set($.subarray(y,y+G),d),G},write(a,E,d,b,y,$){if(E.buffer===ox.buffer&&($=!1),!b)return 0;var G=a.node;return G.mtime=G.ctime=Date.now(),$?(G.contents=E.subarray(d,d+b),G.usedBytes=b):G.usedBytes===0&&y===0?(G.contents=E.slice(d,d+b),G.usedBytes=b):(n0.expandFileStorage(G,y+b),G.contents.set(E.subarray(d,d+b),y),G.usedBytes=Math.max(G.usedBytes,y+b)),b},llseek(a,E,d){var b=E;if(d===1?b+=a.position:d===2&&o.isFile(a.node.mode)&&(b+=a.node.usedBytes),b<0)throw new o.ErrnoError(28);return b},mmap(a,E,d,b,y){if(!o.isFile(a.node.mode))throw new o.ErrnoError(43);var $,G,V=a.node.contents;if(!(y&2)&&V.buffer===ox.buffer)G=!1,$=V.byteOffset;else{if(G=!0,$=$A(E),!$)throw new o.ErrnoError(48);V&&((d>0||d+E<V.length)&&(V.subarray?V=V.subarray(d,d+E):V=Array.prototype.slice.call(V,d,d+E)),ox.set(V,$))}return{ptr:$,allocated:G}},msync(a,E,d,b,y){return n0.stream_ops.write(a,E,0,b,d,!1),0}}},qA=a=>{if(typeof a!="string")return a;var E={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},d=E[a];if(typeof d>"u")throw new Error(`Unknown file open mode: ${a}`);return d},Vx=a=>(typeof a=="string"&&(a=VA(a,!0)),a.subarray||(a=new Uint8Array(a)),a),tA=(a,E)=>{var d=0;return a&&(d|=365),E&&(d|=146),d},T0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},y0={mount(a){return y0.createNode(null,"/",a.opts.fs.lstat(a.opts.root).mode,0)},createNode(a,E,d,b){if(!o.isDir(d)&&!o.isFile(d)&&!o.isLink(d))throw new o.ErrnoError(T0.EINVAL);var y=o.createNode(a,E,d);return y.node_ops=y0.node_ops,y.stream_ops=y0.stream_ops,y},realPath(a){for(var E=[];a.parent!==a;)E.push(a.name),a=a.parent;return E.push(a.mount.opts.root),E.reverse(),l0.join(...E)},node_ops:{getattr(a){var E=y0.realPath(a),d;try{d=a.mount.opts.fs.lstat(E)}catch(b){throw b.code?new o.ErrnoError(T0[b.code]):b}return{dev:d.dev,ino:d.ino,mode:d.mode,nlink:d.nlink,uid:d.uid,gid:d.gid,rdev:d.rdev,size:d.size,atime:d.atime,mtime:d.mtime,ctime:d.ctime,blksize:d.blksize,blocks:d.blocks}},setattr(a,E){var d=y0.realPath(a);try{if(E.mode!==void 0&&(a.mount.opts.fs.chmod(d,E.mode),a.mode=E.mode),E.atime||E.mtime){var b=new Date(E.atime||E.mtime),y=new Date(E.mtime||E.atime);a.mount.opts.fs.utime(d,b,y)}E.size!==void 0&&a.mount.opts.fs.truncate(d,E.size)}catch($){throw $.code?new o.ErrnoError(T0[$.code]):$}},lookup(a,E){try{var d=l0.join2(y0.realPath(a),E),b=a.mount.opts.fs.lstat(d).mode,y=y0.createNode(a,E,b);return y}catch($){throw $.code?new o.ErrnoError(T0[$.code]):$}},mknod(a,E,d,b){var y=y0.createNode(a,E,d,b),$=y0.realPath(y);try{o.isDir(y.mode)?y.mount.opts.fs.mkdir($,y.mode):y.mount.opts.fs.writeFile($,"",{mode:y.mode})}catch(G){throw G.code?new o.ErrnoError(T0[G.code]):G}return y},rename(a,E,d){var b=y0.realPath(a),y=l0.join2(y0.realPath(E),d);try{a.mount.opts.fs.rename(b,y),a.name=d}catch($){throw $.code?new o.ErrnoError(T0[$.code]):$}},unlink(a,E){var d=l0.join2(y0.realPath(a),E);try{a.mount.opts.fs.unlink(d)}catch(b){throw b.code?new o.ErrnoError(T0[b.code]):b}},rmdir(a,E){var d=l0.join2(y0.realPath(a),E);try{a.mount.opts.fs.rmdir(d)}catch(b){throw b.code?new o.ErrnoError(T0[b.code]):b}},readdir(a){var E=y0.realPath(a);try{return a.mount.opts.fs.readdir(E)}catch(d){throw d.code?new o.ErrnoError(T0[d.code]):d}},symlink(a,E,d){var b=l0.join2(y0.realPath(a),E);try{a.mount.opts.fs.symlink(d,b)}catch(y){throw y.code?new o.ErrnoError(T0[y.code]):y}},readlink(a){var E=y0.realPath(a);try{return a.mount.opts.fs.readlink(E)}catch(d){throw d.code?new o.ErrnoError(T0[d.code]):d}}},stream_ops:{open(a){var E=y0.realPath(a.node);try{a.nfd=a.node.mount.opts.fs.open(E,a.flags)}catch(d){throw d.code?new o.ErrnoError(T0[d.code]):d}},close(a){try{a.node.mount.opts.fs.close(a.nfd)}catch(E){throw E.code?new o.ErrnoError(T0[E.code]):E}},read(a,E,d,b,y){try{return a.node.mount.opts.fs.read(a.nfd,E,d,b,y)}catch($){throw $.code?new o.ErrnoError(T0[$.code]):$}},write(a,E,d,b,y){try{return a.node.mount.opts.fs.write(a.nfd,E,d,b,y)}catch($){throw $.code?new o.ErrnoError(T0[$.code]):$}},llseek(a,E,d){var b=E;if(d===1)b+=a.position;else if(d===2&&o.isFile(a.node.mode))try{var y=a.node.node_ops.getattr(a.node);b+=y.size}catch($){throw new o.ErrnoError(T0[$.code])}if(b<0)throw new o.ErrnoError(T0.EINVAL);return b}}},CA=async a=>{var E=await k(a);return new Uint8Array(E)},we=(...a)=>o.createDataFile(...a),cx=a=>a,fx=0,b0=null,Se=a=>{if(fx--,n.monitorRunDependencies?.(fx),fx==0&&b0){var E=b0;b0=null,E()}},$x=a=>{fx++,n.monitorRunDependencies?.(fx)},fe=[],dA=async(a,E)=>{typeof Browser<"u"&&Browser.init();for(var d of fe)if(d.canHandle(E))return d.handle(a,E);return a},TA=async(a,E,d,b,y,$,G,V)=>{var o0=E?lx.resolve(l0.join2(a,E)):a,D0=cx(`cp ${o0}`);$x(D0);try{var J0=d;typeof d=="string"&&(J0=await CA(d)),J0=await dA(J0,o0),V?.(),$||we(a,E,J0,b,y,G)}finally{Se(D0)}},Lr=(a,E,d,b,y,$,G,V,o0,D0)=>{TA(a,E,d,b,y,V,o0,D0).then($).catch(G)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(a){Dx(this,"name","ErrnoError"),this.errno=a}},FSStream:class{constructor(){Dx(this,"shared",{})}get object(){return this.node}set object(a){this.node=a}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(a){this.shared.flags=a}get position(){return this.shared.position}set position(a){this.shared.position=a}},FSNode:class{constructor(a,E,d,b){Dx(this,"node_ops",{}),Dx(this,"stream_ops",{}),Dx(this,"readMode",365),Dx(this,"writeMode",146),Dx(this,"mounted",null),a||(a=this),this.parent=a,this.mount=a.mount,this.id=o.nextInode++,this.name=E,this.mode=d,this.rdev=b,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(a){a?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(a){a?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(a,E={}){if(!a)throw new o.ErrnoError(44);E.follow_mount??(E.follow_mount=!0),l0.isAbs(a)||(a=o.cwd()+"/"+a);x:for(var d=0;d<40;d++){for(var b=a.split("/").filter(D0=>!!D0),y=o.root,$="/",G=0;G<b.length;G++){var V=G===b.length-1;if(V&&E.parent)break;if(b[G]!=="."){if(b[G]===".."){if($=l0.dirname($),o.isRoot(y)){a=$+"/"+b.slice(G+1).join("/"),d--;continue x}else y=y.parent;continue}$=l0.join2($,b[G]);try{y=o.lookupNode(y,b[G])}catch(D0){if(D0?.errno===44&&V&&E.noent_okay)return{path:$};throw D0}if(o.isMountpoint(y)&&(!V||E.follow_mount)&&(y=y.mounted.root),o.isLink(y.mode)&&(!V||E.follow)){if(!y.node_ops.readlink)throw new o.ErrnoError(52);var o0=y.node_ops.readlink(y);l0.isAbs(o0)||(o0=l0.dirname($)+"/"+o0),a=o0+"/"+b.slice(G+1).join("/");continue x}}}return{path:$,node:y}}throw new o.ErrnoError(32)},getPath(a){for(var E;;){if(o.isRoot(a)){var d=a.mount.mountpoint;return E?d[d.length-1]!=="/"?`${d}/${E}`:d+E:d}E=E?`${a.name}/${E}`:a.name,a=a.parent}},hashName(a,E){for(var d=0,b=0;b<E.length;b++)d=(d<<5)-d+E.charCodeAt(b)|0;return(a+d>>>0)%o.nameTable.length},hashAddNode(a){var E=o.hashName(a.parent.id,a.name);a.name_next=o.nameTable[E],o.nameTable[E]=a},hashRemoveNode(a){var E=o.hashName(a.parent.id,a.name);if(o.nameTable[E]===a)o.nameTable[E]=a.name_next;else for(var d=o.nameTable[E];d;){if(d.name_next===a){d.name_next=a.name_next;break}d=d.name_next}},lookupNode(a,E){var d=o.mayLookup(a);if(d)throw new o.ErrnoError(d);for(var b=o.hashName(a.id,E),y=o.nameTable[b];y;y=y.name_next){var $=y.name;if(y.parent.id===a.id&&$===E)return y}return o.lookup(a,E)},createNode(a,E,d,b){var y=new o.FSNode(a,E,d,b);return o.hashAddNode(y),y},destroyNode(a){o.hashRemoveNode(a)},isRoot(a){return a===a.parent},isMountpoint(a){return!!a.mounted},isFile(a){return(a&61440)===32768},isDir(a){return(a&61440)===16384},isLink(a){return(a&61440)===40960},isChrdev(a){return(a&61440)===8192},isBlkdev(a){return(a&61440)===24576},isFIFO(a){return(a&61440)===4096},isSocket(a){return(a&49152)===49152},flagsToPermissionString(a){var E=["r","w","rw"][a&3];return a&512&&(E+="w"),E},nodePermissions(a,E){return o.ignorePermissions?0:E.includes("r")&&!(a.mode&292)||E.includes("w")&&!(a.mode&146)||E.includes("x")&&!(a.mode&73)?2:0},mayLookup(a){if(!o.isDir(a.mode))return 54;var E=o.nodePermissions(a,"x");return E||(a.node_ops.lookup?0:2)},mayCreate(a,E){if(!o.isDir(a.mode))return 54;try{var d=o.lookupNode(a,E);return 20}catch{}return o.nodePermissions(a,"wx")},mayDelete(a,E,d){var b;try{b=o.lookupNode(a,E)}catch($){return $.errno}var y=o.nodePermissions(a,"wx");if(y)return y;if(d){if(!o.isDir(b.mode))return 54;if(o.isRoot(b)||o.getPath(b)===o.cwd())return 10}else if(o.isDir(b.mode))return 31;return 0},mayOpen(a,E){if(!a)return 44;if(o.isLink(a.mode))return 32;var d=o.flagsToPermissionString(E);return o.isDir(a.mode)&&(d!=="r"||E&576)?31:o.nodePermissions(a,d)},checkOpExists(a,E){if(!a)throw new o.ErrnoError(E);return a},MAX_OPEN_FDS:4096,nextfd(){for(var a=0;a<=o.MAX_OPEN_FDS;a++)if(!o.streams[a])return a;throw new o.ErrnoError(33)},getStreamChecked(a){var E=o.getStream(a);if(!E)throw new o.ErrnoError(8);return E},getStream:a=>o.streams[a],createStream(a,E=-1){return a=Object.assign(new o.FSStream,a),E==-1&&(E=o.nextfd()),a.fd=E,o.streams[E]=a,a},closeStream(a){o.streams[a]=null},dupStream(a,E=-1){var d=o.createStream(a,E);return d.stream_ops?.dup?.(d),d},doSetAttr(a,E,d){var b=a?.stream_ops.setattr,y=b?a:E;b??(b=E.node_ops.setattr),o.checkOpExists(b,63);try{b(y,d)}catch($){throw $ instanceof RangeError?new o.ErrnoError(22):$}},chrdev_stream_ops:{open(a){var E=o.getDevice(a.node.rdev);a.stream_ops=E.stream_ops,a.stream_ops.open?.(a)},llseek(){throw new o.ErrnoError(70)}},major:a=>a>>8,minor:a=>a&255,makedev:(a,E)=>a<<8|E,registerDevice(a,E){o.devices[a]={stream_ops:E}},getDevice:a=>o.devices[a],getMounts(a){for(var E=[],d=[a];d.length;){var b=d.pop();E.push(b),d.push(...b.mounts)}return E},syncfs(a,E){typeof a=="function"&&(E=a,a=!1),o.syncFSRequests++,o.syncFSRequests>1&&L(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var d=o.getMounts(o.root.mount),b=0;function y(V){return o.syncFSRequests--,E(V)}function $(V){if(V)return $.errored?void 0:($.errored=!0,y(V));++b>=d.length&&y(null)}for(var G of d)G.type.syncfs?G.type.syncfs(G,a,$):$(null)},mount(a,E,d){var b=d==="/",y=!d,$;if(b&&o.root)throw new o.ErrnoError(10);if(!b&&!y){var G=o.lookupPath(d,{follow_mount:!1});if(d=G.path,$=G.node,o.isMountpoint($))throw new o.ErrnoError(10);if(!o.isDir($.mode))throw new o.ErrnoError(54)}var V={type:a,opts:E,mountpoint:d,mounts:[]},o0=a.mount(V);return o0.mount=V,V.root=o0,b?o.root=o0:$&&($.mounted=V,$.mount&&$.mount.mounts.push(V)),o0},unmount(a){var E=o.lookupPath(a,{follow_mount:!1});if(!o.isMountpoint(E.node))throw new o.ErrnoError(28);var d=E.node,b=d.mounted,y=o.getMounts(b);for(var[$,G]of Object.entries(o.nameTable))for(;G;){var V=G.name_next;y.includes(G.mount)&&o.destroyNode(G),G=V}d.mounted=null;var o0=d.mount.mounts.indexOf(b);d.mount.mounts.splice(o0,1)},lookup(a,E){return a.node_ops.lookup(a,E)},mknod(a,E,d){var b=o.lookupPath(a,{parent:!0}),y=b.node,$=l0.basename(a);if(!$)throw new o.ErrnoError(28);if($==="."||$==="..")throw new o.ErrnoError(20);var G=o.mayCreate(y,$);if(G)throw new o.ErrnoError(G);if(!y.node_ops.mknod)throw new o.ErrnoError(63);return y.node_ops.mknod(y,$,E,d)},statfs(a){return o.statfsNode(o.lookupPath(a,{follow:!0}).node)},statfsStream(a){return o.statfsNode(a.node)},statfsNode(a){var E={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return a.node_ops.statfs&&Object.assign(E,a.node_ops.statfs(a.mount.opts.root)),E},create(a,E=438){return E&=4095,E|=32768,o.mknod(a,E,0)},mkdir(a,E=511){return E&=1023,E|=16384,o.mknod(a,E,0)},mkdirTree(a,E){var d=a.split("/"),b="";for(var y of d)if(y){(b||l0.isAbs(a))&&(b+="/"),b+=y;try{o.mkdir(b,E)}catch($){if($.errno!=20)throw $}}},mkdev(a,E,d){return typeof d>"u"&&(d=E,E=438),E|=8192,o.mknod(a,E,d)},symlink(a,E){if(!lx.resolve(a))throw new o.ErrnoError(44);var d=o.lookupPath(E,{parent:!0}),b=d.node;if(!b)throw new o.ErrnoError(44);var y=l0.basename(E),$=o.mayCreate(b,y);if($)throw new o.ErrnoError($);if(!b.node_ops.symlink)throw new o.ErrnoError(63);return b.node_ops.symlink(b,y,a)},rename(a,E){var d=l0.dirname(a),b=l0.dirname(E),y=l0.basename(a),$=l0.basename(E),G,V,o0;if(G=o.lookupPath(a,{parent:!0}),V=G.node,G=o.lookupPath(E,{parent:!0}),o0=G.node,!V||!o0)throw new o.ErrnoError(44);if(V.mount!==o0.mount)throw new o.ErrnoError(75);var D0=o.lookupNode(V,y),J0=lx.relative(a,b);if(J0.charAt(0)!==".")throw new o.ErrnoError(28);if(J0=lx.relative(E,d),J0.charAt(0)!==".")throw new o.ErrnoError(55);var N0;try{N0=o.lookupNode(o0,$)}catch{}if(D0!==N0){var S0=o.isDir(D0.mode),m0=o.mayDelete(V,y,S0);if(m0)throw new o.ErrnoError(m0);if(m0=N0?o.mayDelete(o0,$,S0):o.mayCreate(o0,$),m0)throw new o.ErrnoError(m0);if(!V.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(D0)||N0&&o.isMountpoint(N0))throw new o.ErrnoError(10);if(o0!==V&&(m0=o.nodePermissions(V,"w"),m0))throw new o.ErrnoError(m0);o.hashRemoveNode(D0);try{V.node_ops.rename(D0,o0,$),D0.parent=o0}catch(rx){throw rx}finally{o.hashAddNode(D0)}}},rmdir(a){var E=o.lookupPath(a,{parent:!0}),d=E.node,b=l0.basename(a),y=o.lookupNode(d,b),$=o.mayDelete(d,b,!0);if($)throw new o.ErrnoError($);if(!d.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(y))throw new o.ErrnoError(10);d.node_ops.rmdir(d,b),o.destroyNode(y)},readdir(a){var E=o.lookupPath(a,{follow:!0}),d=E.node,b=o.checkOpExists(d.node_ops.readdir,54);return b(d)},unlink(a){var E=o.lookupPath(a,{parent:!0}),d=E.node;if(!d)throw new o.ErrnoError(44);var b=l0.basename(a),y=o.lookupNode(d,b),$=o.mayDelete(d,b,!1);if($)throw new o.ErrnoError($);if(!d.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(y))throw new o.ErrnoError(10);d.node_ops.unlink(d,b),o.destroyNode(y)},readlink(a){var E=o.lookupPath(a),d=E.node;if(!d)throw new o.ErrnoError(44);if(!d.node_ops.readlink)throw new o.ErrnoError(28);return d.node_ops.readlink(d)},stat(a,E){var d=o.lookupPath(a,{follow:!E}),b=d.node,y=o.checkOpExists(b.node_ops.getattr,63);return y(b)},fstat(a){var E=o.getStreamChecked(a),d=E.node,b=E.stream_ops.getattr,y=b?E:d;return b??(b=d.node_ops.getattr),o.checkOpExists(b,63),b(y)},lstat(a){return o.stat(a,!0)},doChmod(a,E,d,b){o.doSetAttr(a,E,{mode:d&4095|E.mode&-4096,ctime:Date.now(),dontFollow:b})},chmod(a,E,d){var b;if(typeof a=="string"){var y=o.lookupPath(a,{follow:!d});b=y.node}else b=a;o.doChmod(null,b,E,d)},lchmod(a,E){o.chmod(a,E,!0)},fchmod(a,E){var d=o.getStreamChecked(a);o.doChmod(d,d.node,E,!1)},doChown(a,E,d){o.doSetAttr(a,E,{timestamp:Date.now(),dontFollow:d})},chown(a,E,d,b){var y;if(typeof a=="string"){var $=o.lookupPath(a,{follow:!b});y=$.node}else y=a;o.doChown(null,y,b)},lchown(a,E,d){o.chown(a,E,d,!0)},fchown(a,E,d){var b=o.getStreamChecked(a);o.doChown(b,b.node,!1)},doTruncate(a,E,d){if(o.isDir(E.mode))throw new o.ErrnoError(31);if(!o.isFile(E.mode))throw new o.ErrnoError(28);var b=o.nodePermissions(E,"w");if(b)throw new o.ErrnoError(b);o.doSetAttr(a,E,{size:d,timestamp:Date.now()})},truncate(a,E){if(E<0)throw new o.ErrnoError(28);var d;if(typeof a=="string"){var b=o.lookupPath(a,{follow:!0});d=b.node}else d=a;o.doTruncate(null,d,E)},ftruncate(a,E){var d=o.getStreamChecked(a);if(E<0||(d.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(d,d.node,E)},utime(a,E,d){var b=o.lookupPath(a,{follow:!0}),y=b.node,$=o.checkOpExists(y.node_ops.setattr,63);$(y,{atime:E,mtime:d})},open(a,E,d=438){if(a==="")throw new o.ErrnoError(44);E=qA(E),E&64?d=d&4095|32768:d=0;var b,y;if(typeof a=="object")b=a;else{y=a.endsWith("/");var $=o.lookupPath(a,{follow:!(E&131072),noent_okay:!0});b=$.node,a=$.path}var G=!1;if(E&64)if(b){if(E&128)throw new o.ErrnoError(20)}else{if(y)throw new o.ErrnoError(31);b=o.mknod(a,d|511,0),G=!0}if(!b)throw new o.ErrnoError(44);if(o.isChrdev(b.mode)&&(E&=-513),E&65536&&!o.isDir(b.mode))throw new o.ErrnoError(54);if(!G){var V=o.mayOpen(b,E);if(V)throw new o.ErrnoError(V)}E&512&&!G&&o.truncate(b,0),E&=-131713;var o0=o.createStream({node:b,path:o.getPath(b),flags:E,seekable:!0,position:0,stream_ops:b.stream_ops,ungotten:[],error:!1});return o0.stream_ops.open&&o0.stream_ops.open(o0),G&&o.chmod(b,d&511),o0},close(a){if(o.isClosed(a))throw new o.ErrnoError(8);a.getdents&&(a.getdents=null);try{a.stream_ops.close&&a.stream_ops.close(a)}catch(E){throw E}finally{o.closeStream(a.fd)}a.fd=null},isClosed(a){return a.fd===null},llseek(a,E,d){if(o.isClosed(a))throw new o.ErrnoError(8);if(!a.seekable||!a.stream_ops.llseek)throw new o.ErrnoError(70);if(d!=0&&d!=1&&d!=2)throw new o.ErrnoError(28);return a.position=a.stream_ops.llseek(a,E,d),a.ungotten=[],a.position},read(a,E,d,b,y){if(b<0||y<0)throw new o.ErrnoError(28);if(o.isClosed(a))throw new o.ErrnoError(8);if((a.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(a.node.mode))throw new o.ErrnoError(31);if(!a.stream_ops.read)throw new o.ErrnoError(28);var $=typeof y<"u";if(!$)y=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var G=a.stream_ops.read(a,E,d,b,y);return $||(a.position+=G),G},write(a,E,d,b,y,$){if(b<0||y<0)throw new o.ErrnoError(28);if(o.isClosed(a))throw new o.ErrnoError(8);if((a.flags&2097155)===0)throw new o.ErrnoError(8);if(o.isDir(a.node.mode))throw new o.ErrnoError(31);if(!a.stream_ops.write)throw new o.ErrnoError(28);a.seekable&&a.flags&1024&&o.llseek(a,0,2);var G=typeof y<"u";if(!G)y=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var V=a.stream_ops.write(a,E,d,b,y,$);return G||(a.position+=V),V},mmap(a,E,d,b,y){if((b&2)!==0&&(y&2)===0&&(a.flags&2097155)!==2)throw new o.ErrnoError(2);if((a.flags&2097155)===1)throw new o.ErrnoError(2);if(!a.stream_ops.mmap)throw new o.ErrnoError(43);if(!E)throw new o.ErrnoError(28);return a.stream_ops.mmap(a,E,d,b,y)},msync(a,E,d,b,y){return a.stream_ops.msync?a.stream_ops.msync(a,E,d,b,y):0},ioctl(a,E,d){if(!a.stream_ops.ioctl)throw new o.ErrnoError(59);return a.stream_ops.ioctl(a,E,d)},readFile(a,E={}){E.flags=E.flags||0,E.encoding=E.encoding||"binary",E.encoding!=="utf8"&&E.encoding!=="binary"&&d0(`Invalid encoding type "${E.encoding}"`);var d=o.open(a,E.flags),b=o.stat(a),y=b.size,$=new Uint8Array(y);return o.read(d,$,0,y,0),E.encoding==="utf8"&&($=eA($)),o.close(d),$},writeFile(a,E,d={}){d.flags=d.flags||577;var b=o.open(a,d.flags,d.mode);E=Vx(E),o.write(b,E,0,E.byteLength,void 0,d.canOwn),o.close(b)},cwd:()=>o.currentPath,chdir(a){var E=o.lookupPath(a,{follow:!0});if(E.node===null)throw new o.ErrnoError(44);if(!o.isDir(E.node.mode))throw new o.ErrnoError(54);var d=o.nodePermissions(E.node,"x");if(d)throw new o.ErrnoError(d);o.currentPath=E.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(b,y,$,G,V)=>G,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),ex.register(o.makedev(5,0),ex.default_tty_ops),ex.register(o.makedev(6,0),ex.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var a=new Uint8Array(1024),E=0,d=()=>(E===0&&(ke(a),E=a.byteLength),a[--E]);o.createDevice("/dev","random",d),o.createDevice("/dev","urandom",d),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var a=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var E=o.createNode(a,"fd",16895,73);return E.stream_ops={llseek:n0.stream_ops.llseek},E.node_ops={lookup(d,b){var y=+b,$=o.getStreamChecked(y),G={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>$.path},id:y+1};return G.parent=G,G},readdir(){return Array.from(o.streams.entries()).filter(([d,b])=>b).map(([d,b])=>d.toString())}},E}},{},"/proc/self/fd")},createStandardStreams(a,E,d){a?o.createDevice("/dev","stdin",a):o.symlink("/dev/tty","/dev/stdin"),E?o.createDevice("/dev","stdout",null,E):o.symlink("/dev/tty","/dev/stdout"),d?o.createDevice("/dev","stderr",null,d):o.symlink("/dev/tty1","/dev/stderr");var b=o.open("/dev/stdin",0),y=o.open("/dev/stdout",1),$=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(n0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:n0,PROXYFS:y0}},init(a,E,d){o.initialized=!0,a??(a=n.stdin),E??(E=n.stdout),d??(d=n.stderr),o.createStandardStreams(a,E,d)},quit(){o.initialized=!1,YA(0);for(var a of o.streams)a&&o.close(a)},findObject(a,E){var d=o.analyzePath(a,E);return d.exists?d.object:null},analyzePath(a,E){try{var d=o.lookupPath(a,{follow:!E});a=d.path}catch{}var b={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var d=o.lookupPath(a,{parent:!0});b.parentExists=!0,b.parentPath=d.path,b.parentObject=d.node,b.name=l0.basename(a),d=o.lookupPath(a,{follow:!E}),b.exists=!0,b.path=d.path,b.object=d.node,b.name=d.node.name,b.isRoot=d.path==="/"}catch(y){b.error=y.errno}return b},createPath(a,E,d,b){a=typeof a=="string"?a:o.getPath(a);for(var y=E.split("/").reverse();y.length;){var $=y.pop();if($){var G=l0.join2(a,$);try{o.mkdir(G)}catch(V){if(V.errno!=20)throw V}a=G}}return G},createFile(a,E,d,b,y){var $=l0.join2(typeof a=="string"?a:o.getPath(a),E),G=tA(b,y);return o.create($,G)},createDataFile(a,E,d,b,y,$){var G=E;a&&(a=typeof a=="string"?a:o.getPath(a),G=E?l0.join2(a,E):a);var V=tA(b,y),o0=o.create(G,V);if(d){d=Vx(d),o.chmod(o0,V|146);var D0=o.open(o0,577);o.write(D0,d,0,d.length,0,$),o.close(D0),o.chmod(o0,V)}},createDevice(a,E,d,b){var y,$=l0.join2(typeof a=="string"?a:o.getPath(a),E),G=tA(!!d,!!b);(y=o.createDevice).major??(y.major=64);var V=o.makedev(o.createDevice.major++,0);return o.registerDevice(V,{open(o0){o0.seekable=!1},close(o0){b?.buffer?.length&&b(10)},read(o0,D0,J0,N0,S0){for(var m0=0,rx=0;rx<N0;rx++){var bx;try{bx=d()}catch{throw new o.ErrnoError(29)}if(bx===void 0&&m0===0)throw new o.ErrnoError(6);if(bx==null)break;m0++,D0[J0+rx]=bx}return m0&&(o0.node.atime=Date.now()),m0},write(o0,D0,J0,N0,S0){for(var m0=0;m0<N0;m0++)try{b(D0[J0+m0])}catch{throw new o.ErrnoError(29)}return N0&&(o0.node.mtime=o0.node.ctime=Date.now()),m0}}),o.mkdev($,G,V)},forceLoadFile(a){if(a.isDevice||a.isFolder||a.link||a.contents)return!0;if(globalThis.XMLHttpRequest)d0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{a.contents=S(a.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(a,E,d,b,y){class ${constructor(){Dx(this,"lengthKnown",!1),Dx(this,"chunks",[])}get(S0){if(!(S0>this.length-1||S0<0)){var m0=S0%this.chunkSize,rx=S0/this.chunkSize|0;return this.getter(rx)[m0]}}setDataGetter(S0){this.getter=S0}cacheLength(){var S0=new XMLHttpRequest;S0.open("HEAD",d,!1),S0.send(null),S0.status>=200&&S0.status<300||S0.status===304||d0("Couldn't load "+d+". Status: "+S0.status);var m0=Number(S0.getResponseHeader("Content-length")),rx,bx=(rx=S0.getResponseHeader("Accept-Ranges"))&&rx==="bytes",Tx=(rx=S0.getResponseHeader("Content-Encoding"))&&rx==="gzip",Ix=1024*1024;bx||(Ix=m0);var Lx=(Gx,uA)=>{Gx>uA&&d0("invalid range ("+Gx+", "+uA+") or no bytes requested!"),uA>m0-1&&d0("only "+m0+" bytes available! programmer error!");var Fx=new XMLHttpRequest;return Fx.open("GET",d,!1),m0!==Ix&&Fx.setRequestHeader("Range","bytes="+Gx+"-"+uA),Fx.responseType="arraybuffer",Fx.overrideMimeType&&Fx.overrideMimeType("text/plain; charset=x-user-defined"),Fx.send(null),Fx.status>=200&&Fx.status<300||Fx.status===304||d0("Couldn't load "+d+". Status: "+Fx.status),Fx.response!==void 0?new Uint8Array(Fx.response||[]):VA(Fx.responseText||"",!0)},Ae=this;Ae.setDataGetter(Gx=>{var uA=Gx*Ix,Fx=(Gx+1)*Ix-1;return Fx=Math.min(Fx,m0-1),typeof Ae.chunks[Gx]>"u"&&(Ae.chunks[Gx]=Lx(uA,Fx)),typeof Ae.chunks[Gx]>"u"&&d0("doXHR failed!"),Ae.chunks[Gx]}),(Tx||!m0)&&(Ix=m0=1,m0=this.getter(0).length,Ix=m0,N("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=m0,this._chunkSize=Ix,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){f||d0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var G=new $,V={isDevice:!1,contents:G}}else var V={isDevice:!1,url:d};var o0=o.createFile(a,E,V,b,y);V.contents?o0.contents=V.contents:V.url&&(o0.contents=null,o0.url=V.url),Object.defineProperties(o0,{usedBytes:{get:function(){return this.contents.length}}});var D0={};for(let[N0,S0]of Object.entries(o0.stream_ops))D0[N0]=(...m0)=>(o.forceLoadFile(o0),S0(...m0));function J0(N0,S0,m0,rx,bx){var Tx=N0.node.contents;if(bx>=Tx.length)return 0;var Ix=Math.min(Tx.length-bx,rx);if(Tx.slice)for(var Lx=0;Lx<Ix;Lx++)S0[m0+Lx]=Tx[bx+Lx];else for(var Lx=0;Lx<Ix;Lx++)S0[m0+Lx]=Tx.get(bx+Lx);return Ix}return D0.read=(N0,S0,m0,rx,bx)=>(o.forceLoadFile(o0),J0(N0,S0,m0,rx,bx)),D0.mmap=(N0,S0,m0,rx,bx)=>{o.forceLoadFile(o0);var Tx=$A(S0);if(!Tx)throw new o.ErrnoError(48);return J0(N0,ox,Tx,S0,m0),{ptr:Tx,allocated:!0}},o0.stream_ops=D0,o0}},k0={currentUmask:18,calculateAt(a,E,d){if(l0.isAbs(E))return E;var b;if(a===-100)b=o.cwd();else{var y=k0.getStreamFromFD(a);b=y.path}if(E.length==0){if(!d)throw new o.ErrnoError(44);return b}return b+"/"+E},writeStat(a,E){E0[a>>2]=E.dev,E0[a+4>>2]=E.mode,E0[a+8>>2]=E.nlink,E0[a+12>>2]=E.uid,E0[a+16>>2]=E.gid,E0[a+20>>2]=E.rdev,z0[a+24>>3]=BigInt(E.size),O0[a+32>>2]=4096,O0[a+36>>2]=E.blocks;var d=E.atime.getTime(),b=E.mtime.getTime(),y=E.ctime.getTime();return z0[a+40>>3]=BigInt(Math.floor(d/1e3)),E0[a+48>>2]=d%1e3*1e3*1e3,z0[a+56>>3]=BigInt(Math.floor(b/1e3)),E0[a+64>>2]=b%1e3*1e3*1e3,z0[a+72>>3]=BigInt(Math.floor(y/1e3)),E0[a+80>>2]=y%1e3*1e3*1e3,z0[a+88>>3]=BigInt(E.ino),0},writeStatFs(a,E){E0[a+4>>2]=E.bsize,E0[a+60>>2]=E.bsize,z0[a+8>>3]=BigInt(E.blocks),z0[a+16>>3]=BigInt(E.bfree),z0[a+24>>3]=BigInt(E.bavail),z0[a+32>>3]=BigInt(E.files),z0[a+40>>3]=BigInt(E.ffree),E0[a+48>>2]=E.fsid,E0[a+64>>2]=E.flags,E0[a+56>>2]=E.namelen},doMsync(a,E,d,b,y){if(!o.isFile(E.node.mode))throw new o.ErrnoError(43);if(b&2)return 0;var $=AA.slice(a,a+d);o.msync(E,$,y,d,b)},getStreamFromFD(a){var E=o.getStreamChecked(a);return E},varargs:void 0,getStr(a){var E=px(a);return E}};function $e(a,E,d){k0.varargs=d;try{var b=k0.getStreamFromFD(a);switch(E){case 0:{var y=rA();if(y<0)return-28;for(;o.streams[y];)y++;var $;return $=o.dupStream(b,y),$.fd}case 1:case 2:return 0;case 3:return b.flags;case 4:{var y=rA(),G=289792;return b.flags=b.flags&~G|y&G,0}case 12:{var y=SA(),V=0;return K0[y+V>>1]=2,0}case 13:case 14:return 0}return-28}catch(o0){if(typeof o>"u"||o0.name!=="ErrnoError")throw o0;return-o0.errno}}function PA(a,E,d){k0.varargs=d;try{var b=k0.getStreamFromFD(a);switch(E){case 21509:return b.tty?0:-59;case 21505:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcgets){var y=b.tty.ops.ioctl_tcgets(b),$=SA();O0[$>>2]=y.c_iflag||0,O0[$+4>>2]=y.c_oflag||0,O0[$+8>>2]=y.c_cflag||0,O0[$+12>>2]=y.c_lflag||0;for(var G=0;G<32;G++)ox[$+G+17]=y.c_cc[G]||0;return 0}return 0}case 21510:case 21511:case 21512:return b.tty?0:-59;case 21506:case 21507:case 21508:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcsets){for(var $=SA(),V=O0[$>>2],o0=O0[$+4>>2],D0=O0[$+8>>2],J0=O0[$+12>>2],N0=[],G=0;G<32;G++)N0.push(ox[$+G+17]);return b.tty.ops.ioctl_tcsets(b.tty,E,{c_iflag:V,c_oflag:o0,c_cflag:D0,c_lflag:J0,c_cc:N0})}return 0}case 21519:{if(!b.tty)return-59;var $=SA();return O0[$>>2]=0,0}case 21520:return b.tty?-28:-59;case 21537:case 21531:{var $=SA();return o.ioctl(b,E,$)}case 21523:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tiocgwinsz){var S0=b.tty.ops.ioctl_tiocgwinsz(b.tty),$=SA();K0[$>>1]=S0[0],K0[$+2>>1]=S0[1]}return 0}case 21524:return b.tty?0:-59;case 21515:return b.tty?0:-59;default:return-28}}catch(m0){if(typeof o>"u"||m0.name!=="ErrnoError")throw m0;return-m0.errno}}function DA(a,E,d,b){k0.varargs=b;try{E=k0.getStr(E),E=k0.calculateAt(a,E);var y=b?rA():0;return d&64&&(y&=~k0.currentUmask),o.open(E,d,y).fd}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return-$.errno}}var Rr=()=>2147483648,Ee=(a,E)=>Math.ceil(a/E)*E,rr=a=>{var E=NA.buffer.byteLength,d=(a-E+65535)/65536|0;try{return NA.grow(d),Z(),1}catch{}},tr=a=>{var E=AA.length;a>>>=0;var d=Rr();if(a>d)return!1;for(var b=1;b<=4;b*=2){var y=E*(1+.2/b);y=Math.min(y,a+100663296);var $=Math.min(d,Ee(Math.max(a,y),65536)),G=rr($);if(G)return!0}return!1};function Or(a){try{var E=k0.getStreamFromFD(a);return o.close(E),0}catch(d){if(typeof o>"u"||d.name!=="ErrnoError")throw d;return d.errno}}var Gr=(a,E,d,b)=>{for(var y=0,$=0;$<d;$++){var G=E0[E>>2],V=E0[E+4>>2];E+=8;var o0=o.read(a,ox,G,V,b);if(o0<0)return-1;if(y+=o0,o0<V)break;typeof b<"u"&&(b+=o0)}return y};function Ur(a,E,d,b){try{var y=k0.getStreamFromFD(a),$=Gr(y,E,d);return E0[b>>2]=$,0}catch(G){if(typeof o>"u"||G.name!=="ErrnoError")throw G;return G.errno}}var le=9007199254740992,nr=-9007199254740992,WA=a=>a<nr||a>le?NaN:Number(a);function ce(a,E,d,b){E=WA(E);try{if(isNaN(E))return 22;var y=k0.getStreamFromFD(a);return o.llseek(y,E,d),z0[b>>3]=BigInt(y.position),y.getdents&&E===0&&d===0&&(y.getdents=null),0}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return $.errno}}var Hr=(a,E,d,b)=>{for(var y=0,$=0;$<d;$++){var G=E0[E>>2],V=E0[E+4>>2];E+=8;var o0=o.write(a,ox,G,V,b);if(o0<0)return-1;if(y+=o0,o0<V)break;typeof b<"u"&&(b+=o0)}return y};function sr(a,E,d,b){try{var y=k0.getStreamFromFD(a),$=Hr(y,E,d);return E0[b>>2]=$,0}catch(G){if(typeof o>"u"||G.name!=="ErrnoError")throw G;return G.errno}}var Kr=0,XA=()=>ve||Kr>0,qe=a=>{R=a,XA()||(n.onExit?.(a),i0=!0),j(a,new xA(a))},ir=(a,E)=>{R=a,XA()||f0(),qe(a)},ar=a=>{if(a instanceof xA||a=="unwind")return R;j(1,a)},zr=(a,E,d)=>_e(a,AA,E,d),or=a=>QA(a),Jr=a=>{var E=JA(a)+1,d=or(E);return zr(a,d,E),d},Vr=(...a)=>o.createPath(...a),Be=(...a)=>o.unlink(...a),Wr=(...a)=>o.createLazyFile(...a),Xr=(...a)=>o.createDevice(...a);if(o.createPreloadedFile=Lr,o.preloadFile=TA,o.staticInit(),n.noExitRuntime&&(ve=n.noExitRuntime),n.preloadPlugins&&(fe=n.preloadPlugins),n.print&&(N=n.print),n.printErr&&(L=n.printErr),n.wasmBinary&&(O=n.wasmBinary),n.arguments&&(D=n.arguments),n.thisProgram&&(p=n.thisProgram),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n.callMain=Bx,n.addRunDependency=$x,n.removeRunDependency=Se,n.FS_preloadFile=TA,n.FS_unlink=Be,n.FS_createPath=Vr,n.FS_createDevice=Xr,n.FS=o,n.FS_createDataFile=we,n.FS_createLazyFile=Wr,n.PROXYFS=y0;var Fr,vr,YA,fr,QA,Te,qx,Yr,NA;function ZA(a){Fr=n._main=a.__main_argc_argv,vr=a.__funcs_on_exit,YA=a.fflush,fr=a._emscripten_stack_restore,QA=a._emscripten_stack_alloc,Te=a.emscripten_stack_get_current,qx=NA=a.memory,Yr=a.__indirect_function_table}var Pe={__assert_fail:BA,__syscall_fcntl64:$e,__syscall_ioctl:PA,__syscall_openat:DA,emscripten_resize_heap:tr,fd_close:Or,fd_read:Ur,fd_seek:ce,fd_write:sr};function Bx(a=[]){var E=Fr;a.unshift(p);var d=a.length,b=or((d+1)*4),y=b;for(var $ of a)E0[y>>2]=Jr($),y+=4;E0[y>>2]=0;try{var G=E(d,b);return ir(G,!0),G}catch(V){return ar(V)}}function Ce(a=D){if(fx>0){b0=Ce;return}if(s0(),fx>0){b0=Ce;return}function E(){if(n.calledRun=!0,!i0){U(),H?.(n),n.onRuntimeInitialized?.();var d=n.noInitialRun||!0;d||Bx(a),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),E()},1)):E()}var xe;return xe=await Ax(),Ce(),a0?s=n:s=new Promise((a,E)=>{H=a,K=E}),s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),eo={};dl(eo,{createPawnCC:()=>jl,createPawnDbg:()=>hl});ro.exports=Dl(eo);var bl=Ao(ul(),1),ml=Ao(pl(),1),jl=bl.default,hl=ml.default});var Ye=Vi((nb,Y8)=>{"use strict";var yc=Object.create,Dt=Object.defineProperty,kc=Object.getOwnPropertyDescriptor,nF=Object.getOwnPropertyNames,_c=Object.getPrototypeOf,wc=Object.prototype.hasOwnProperty,Sc=(x,A,e)=>A in x?Dt(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,$c=(x,A)=>function(){try{return A||(0,x[nF(x)[0]])((A={exports:{}}).exports,A),A.exports}catch(r){throw A=0,r}},qc=(x,A)=>{for(var e in A)Dt(x,e,{get:A[e],enumerable:!0})},sF=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of nF(A))!wc.call(x,t)&&t!==e&&Dt(x,t,{get:()=>A[t],enumerable:!(r=kc(A,t))||r.enumerable});return x},Tc=(x,A,e)=>(e=x!=null?yc(_c(x)):{},sF(A||!x||!x.__esModule?Dt(e,"default",{value:x,enumerable:!0}):e,x)),Pc=x=>sF(Dt({},"__esModule",{value:!0}),x),A0=(x,A,e)=>Sc(x,typeof A!="symbol"?A+"":A,e),Nc=$c({"mdn_com_wasm/bin/mdnCOM.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s;(function(){function l(e0){e0=e0.split("-")[0];for(var c0=e0.split(".").slice(0,3);c0.length<3;)c0.push("00");return c0=c0.map((u0,W0,V0)=>u0.padStart(2,"0")),c0.join("")}var B=e0=>[e0/1e4|0,(e0/100|0)%100,e0%100].join("."),h=2147483647,q=typeof process<"u"&&process.versions?.node?l(process.versions.node):h;if(q<180300)throw new Error(`This emscripten-generated code requires node v${B(180300)} (detected v${B(q)})`);var P=typeof navigator<"u"&&navigator.userAgent;if(P){var Q=P.includes("Safari/")&&!P.includes("Chrome/")&&P.match(/Version\/(\d+\.?\d*\.?\d*)/)?l(P.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]):h;if(Q<15e4)throw new Error(`This emscripten-generated code requires Safari v${B(15e4)} (detected v${Q})`);var X=P.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(P.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):h;if(X<79)throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${X})`);var x0=P.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(P.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):h;if(x0<85)throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${x0})`)}})();var n=t,F=!!globalThis.window,f=!!globalThis.WorkerGlobalScope,C=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",D=!F&&!C&&!f,p=[],j="./this.program",_=(l,B)=>{throw B};typeof __filename<"u"?r=__filename:f&&(r=self.location.href);var k="",S,T;if(C){if(!(globalThis.process?.versions?.node&&globalThis.process?.type!="renderer"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var N=require("fs");k=__dirname+"/",T=B=>{B=I(B)?new URL(B):B;var h=N.readFileSync(B);return g(Buffer.isBuffer(h)),h},S=async(B,h=!0)=>{B=I(B)?new URL(B):B;var q=N.readFileSync(B,h?void 0:"utf8");return g(h?Buffer.isBuffer(q):typeof q=="string"),q},process.argv.length>1&&(j=process.argv[1].replace(/\\/g,"/")),p=process.argv.slice(2),_=(B,h)=>{throw process.exitCode=B,h}}else if(!D)if(F||f){try{k=new URL(".",r).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");f&&(T=l=>{var B=new XMLHttpRequest;return B.open("GET",l,!1),B.responseType="arraybuffer",B.send(null),new Uint8Array(B.response)}),S=async l=>{if(I(l))return new Promise((h,q)=>{var P=new XMLHttpRequest;P.open("GET",l,!0),P.responseType="arraybuffer",P.onload=()=>{if(P.status==200||P.status==0&&P.response){h(P.response);return}q(P.status)},P.onerror=q,P.send(null)});var B=await fetch(l,{credentials:"same-origin"});if(B.ok)return B.arrayBuffer();throw new Error(B.status+" : "+B.url)}}else throw new Error("environment detection error");var L=console.log.bind(console),O=console.error.bind(console);g(!D,"shell environment detected but not enabled at build time (add `shell` to `-sENVIRONMENT` to enable)");var i0;globalThis.WebAssembly||O("no native wasm support detected");var R=!1;function g(l,B){l||ax("Assertion failed"+(B?": "+B:""))}var I=l=>l.startsWith("file://");function Y(){var l=Hn();g((l&3)==0),l==0&&(l+=4),g0[l>>2]=34821223,g0[l+4>>2]=2310721022,g0[0]=1668509029}function W(){if(!R){var l=Hn();l==0&&(l+=4);var B=g0[l>>2],h=g0[l+4>>2];(B!=34821223||h!=2310721022)&&ax(`Stack overflow! Stack cookie has been overwritten at ${lx(l)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${lx(h)} ${lx(B)}`),g0[0]!=1668509029&&ax("Runtime error: The application has corrupted its heap memory area (address zero)!")}}class H{}class K extends H{}var a0=!0;(()=>{var l=new Int16Array(1),B=new Int8Array(l.buffer);l[0]=25459,(B[0]!==115||B[1]!==99)&&ax("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function t0(l){Object.getOwnPropertyDescriptor(n,l)||Object.defineProperty(n,l,{configurable:!0,set(){ax(`Attempt to set \`Module.${l}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}function Z(l){return()=>g(!1,`call to '${l}' via reference taken before Wasm module initialization`)}function s0(l){Object.getOwnPropertyDescriptor(n,l)&&ax(`\`Module.${l}\` was supplied but \`${l}\` not included in INCOMING_MODULE_JS_API`)}function U(l){return l==="FS_createPath"||l==="FS_createDataFile"||l==="FS_createPreloadedFile"||l==="FS_preloadFile"||l==="FS_unlink"||l==="addRunDependency"||l==="FS_createLazyFile"||l==="FS_createDevice"||l==="removeRunDependency"}function v0(l){f0(l)}function f0(l){Object.getOwnPropertyDescriptor(n,l)||Object.defineProperty(n,l,{configurable:!0,get(){var B=`'${l}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;U(l)&&(B+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),ax(B)}})}function B0(l){for(var B=0,h=l.length,q=new Uint8Array(h),P;B<h;++B)P=l.charCodeAt(B),q[B]=~P>>8&P;return q}var d0,q0,I0=!1;function vx(){var l=wt.buffer;Jx=new Int8Array(l),_A=new Int16Array(l),n.HEAPU8=px=new Uint8Array(l),ix=new Uint16Array(l),wA=new Int32Array(l),g0=new Uint32Array(l),er=new Float32Array(l),ve=new Float64Array(l),Ar=new BigInt64Array(l),eA=new BigUint64Array(l)}g(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function zx(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)Mr(n.preRun.shift());t0("preRun"),BA(l0)}function yA(){g(!I0),I0=!0,W(),Er.__wasm_call_ctors()}function kA(){if(W(),n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)SA(n.postRun.shift());t0("postRun"),BA(rA)}function ax(l){n.onAbort?.(l),l=`Aborted(${l})`,O(l),R=!0;var B=new WebAssembly.RuntimeError(l);throw q0?.(B),B}function Ax(){ax("Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM")}var xA={init:Ax,createDataFile:Ax,createPreloadedFile:Ax,createLazyFile:Ax,open:Ax,mkdev:Ax,registerDevice:Ax,analyzePath:Ax,ErrnoError:Ax};function K0(l,B){return(...h)=>{g(I0,`native function \`${l}\` called before runtime initialization`);var q=Er[l];return g(q,`exported native function \`${l}\` not found`),g(h.length<=B,`native function \`${l}\` called with ${h.length} args but expects ${B}`),q(...h)}}var O0;function z0(){return B0(`\0asm\0\0\0\xCF\`\x7F\0\`\x7F\x7F\0\`\x7F\x7F\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\0\0\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F~\`
|
|
1667
1528
|
\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F|\`\r\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\b\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F~~\0\`\x7F~\x7F\x7F\x7F\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`|\x7F|\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\x7F\xA7\x07env_emval_new_cstring\0env_emval_get_property\0env\r_emval_decref\0\0env_emval_create_invoker\0env\r_emval_incref\0\0env\r_emval_invoke\0env_emval_run_destructors\0\0env_emval_get_module_property\0env_embind_register_value_object\0\venv#_embind_register_value_object_field\0\renv_embind_finalize_value_object\0\0env_embind_register_class\0env"_embind_register_class_constructor\0\venv_embind_register_class_property\0\renv_embind_register_function\0env\v__cxa_throw\0env_embind_register_void\0env_embind_register_bool\0\x07env_embind_register_integer\0
|
|
1668
1529
|
env_embind_register_bigint\0env_embind_register_float\0env\x1B_embind_register_std_string\0env_embind_register_std_wstring\0env_embind_register_emval\0\0env_embind_register_memory_view\0wasi_snapshot_preview1
|
|
1669
1530
|
random_get\0env _abort_js\0wasi_snapshot_preview1\bfd_write\0 wasi_snapshot_preview1\bfd_close\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\xB6\xB4 \0\b\0\0\0\b\b\0\b\0 \0\0\b\0\b\0\0 \x07 \x07
|
|
@@ -2311,41 +2172,180 @@ jv.\xC9\xC2\x81\x85,r\x92\xA1\xE8\xBF\xA2Kf\xA8p\x8BK\xC2\xA3Ql\xC7\xE8\x92\xD
|
|
|
2311
2172
|
\x07\0\0 \v\0\0 \v\0\0\v\0\0\0\0\0A\x91\x9C\v!\0\0\0\0\0\0\0\0\0\v\r\0\r\0\0\0 \0\0\0 \0\0\0\0A\xCB\x9C\v\f\0A\xD7\x9C\v\0\0\0\0\0\0\0\0 \f\0\0\0\0\0\f\0\0\f\0A\x85\x9D\v\0A\x91\x9D\v\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xBF\x9D\v\0A\xCB\x9D\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0A\x82\x9E\v\0\0\0\0\0\0\0\0\0 \0A\xB3\x9E\v\0A\xBF\x9E\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xED\x9E\v\0A\xF9\x9E\v\xAF\b\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\x000123456789ABCDEF\x90\\\0\0\fR\0\0\xB0O\0\0\xF8R\0\0N10__cxxabiv116__shim_type_infoE\0\0\0\0\fR\0\0\xE0O\0\0\xA4O\0\0N10__cxxabiv117__class_type_infoE\0\0\0\fR\0\0P\0\0\xA4O\0\0N10__cxxabiv117__pbase_type_infoE\0\0\0\fR\0\0@P\0\0P\0\0N10__cxxabiv119__pointer_type_infoE\0\fR\0\0pP\0\0\xA4O\0\0N10__cxxabiv120__function_type_infoE\0\0\0\0\fR\0\0\xA4P\0\0P\0\0N10__cxxabiv129__pointer_to_member_type_infoE\0\0\0\0\0\0\0\xF0P\0\0G\0\0\0H\0\0\0I\0\0\0J\0\0\0K\0\0\0\fR\0\0\xFCP\0\0\xA4O\0\0N10__cxxabiv123__fundamental_type_infoE\0\xDCP\0\0,Q\0\0v\0Dn\0\0\0\0\xDCP\0\0<Q\0\0b\0\0\0\xDCP\0\0HQ\0\0c\0\0\0\xDCP\0\0TQ\0\0h\0\0\0\xDCP\0\0\`Q\0\0a\0\0\0\xDCP\0\0lQ\0\0s\0\0\0\xDCP\0\0xQ\0\0t\0\0\0\xDCP\0\0\x84Q\0\0i\0\0\0\xDCP\0\0\x90Q\0\0j\0\0\0\xDCP\0\0\x9CQ\0\0l\0\0\0\xDCP\0\0\xA8Q\0\0m\0\0\0\xDCP\0\0\xB4Q\0\0x\0\0\0\xDCP\0\0\xC0Q\0\0y\0\0\0\xDCP\0\0\xCCQ\0\0f\0\0\0\xDCP\0\0\xD8Q\0\0d\0\0\0\0\0\0\0\xD4O\0\0G\0\0\0L\0\0\0I\0\0\0J\0\0\0M\0\0\0N\0\0\0O\0\0\0P\0\0\0\0\0\0\0,R\0\0G\0\0\0Q\0\0\0I\0\0\0J\0\0\0M\0\0\0R\0\0\0S\0\0\0T\0\0\0\fR\0\x008R\0\0\xD4O\0\0N10__cxxabiv120__si_class_type_infoE\0\0\0\0\0\0\0\x004P\0\0G\0\0\0U\0\0\0I\0\0\0J\0\0\0V\0\0\0\xE4Q\0\0\x84R\0\0St9exception\0\0\0\0\0\0\0\0\xA8R\0\x009\0\0\0W\0\0\0X\0\0\0\fR\0\0\xB4R\0\0|R\0\0St11logic_error\0\0\0\0\0\xD8R\0\x009\0\0\0Y\0\0\0X\0\0\0\fR\0\0\xE4R\0\0\xA8R\0\0St12length_error\0\0\0\0\xE4Q\0\0\0S\0\0St9type_info\0\0\0\0\0\0\xA0N\0\xEB\xA7~ u\x86\xFA\0\xB9,\xFD\xB7\x8Az\xBC\0\xCC\xA2\0=I\xD7\0\b\0\x93\b\x8F*_\xB7\xFAX\xD9\xFD\xCA\xBD\xE1\xCD\xDC@x\0}ga\xEC\0\xE5
|
|
2312
2173
|
\xD4\0\xCC>Ov\x98\xAF\0\0D\0\xAE\0\xAE\`\0\xFAw!\xEB+\0\`A\x92\0\xA9\xA3nN\0A\xD8\xA7\v\f\0\0\0\0\0\0\0\0*\0A\xF8\xA7\v'9H\0A\x8E\xA8\v\x92\0A\xA2\xA8\v\x8D8R\`S\0\0\xCA\0\0\0\0\0\0\0\0\xBB\xDB\xEB\x07+\x07;\x07P\x07Success\0Illegal byte sequence\0Domain error\0Result not representable\0Not a tty\0Permission denied\0Operation not permitted\0No such file or directory\0No such process\0File exists\0Value too large for defined data type\0No space left on device\0Out of memory\0Resource busy\0Interrupted system call\0Resource temporarily unavailable\0Invalid seek\0Cross-device link\0Read-only file system\0Directory not empty\0Connection reset by peer\0Operation timed out\0Connection refused\0Host is down\0Host is unreachable\0Address in use\0Broken pipe\0I/O error\0No such device or address\0Block device required\0No such device\0Not a directory\0Is a directory\0Text file busy\0Exec format error\0Invalid argument\0Argument list too long\0Symbolic link loop\0Filename too long\0Too many open files in system\0No file descriptors available\0Bad file descriptor\0No child process\0Bad address\0File too large\0Too many links\0No locks available\0Resource deadlock would occur\0State not recoverable\0Owner died\0Operation canceled\0Function not implemented\0No message of desired type\0Identifier removed\0Device not a stream\0No data available\0Device timeout\0Out of streams resources\0Link has been severed\0Protocol error\0Bad message\0File descriptor in bad state\0Not a socket\0Destination address required\0Message too large\0Protocol wrong type for socket\0Protocol not available\0Protocol not supported\0Socket type not supported\0Not supported\0Protocol family not supported\0Address family not supported by protocol\0Address not available\0Network is down\0Network unreachable\0Connection reset by network\0Connection aborted\0No buffer space available\0Socket is connected\0Socket not connected\0Cannot send after socket shutdown\0Operation already in progress\0Operation in progress\0Stale file handle\0Remote I/O error\0Quota exceeded\0No medium found\0Wrong medium type\0Multihop attempted\0Required key not available\0Key has expired\0Key has been revoked\0Key was rejected by service\0A\xB0\xB7\vI\0\0\0 F\0\0 K\0\0\0\0\0\0\0\0\0\xA0J\0\0\xA0K\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 L\0\0\0\0\0\0\0\0\0\x07\0\0\0\0 \0\0\0\0\0\0\0A\x84\xB8\v@\0A\x9C\xB8\vA\0\0\0B\0\0\0u\0\0\0\0A\xB4\xB8\v\0A\xC4\xB8\v\xFF\xFF\xFF\xFF
|
|
2313
2174
|
\0A\x88\xB9\v \xF8[\0\x008y\0\0\0A\x9C\xB9\vE\0A\xB4\xB9\v
|
|
2314
|
-
A\0\0\0F\0\0\0Xy\0A\xCC\xB9\v\0A\xDC\xB9\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xA0\xBA\v\x07\x90\\\0\0P{`)}function
|
|
2175
|
+
A\0\0\0F\0\0\0Xy\0A\xCC\xB9\v\0A\xDC\xB9\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xA0\xBA\v\x07\x90\\\0\0P{`)}function ox(l){return l}async function qr(l){return l}async function Tr(l,B){try{var h=await qr(l),q=await WebAssembly.instantiate(h,B);return q}catch(P){O(`failed to asynchronously prepare wasm: ${P}`),I(l)&&O(`warning: Loading from a file URI (${l}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`),ax(P)}}async function Pr(l,B,h){return Tr(B,h)}function E0(){var l={env:Ui,wasi_snapshot_preview1:Ui};return l}async function Nr(){function l(X,x0){return Er=X.exports,df(Er),vx(),Er}var B=n;function h(X){return g(n===B,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?"),B=null,l(X.instance)}var q=E0();if(n.instantiateWasm)return new Promise((X,x0)=>{try{n.instantiateWasm(q,(e0,c0)=>{X(l(e0,c0))})}catch(e0){O(`Module.instantiateWasm callback failed with error: ${e0}`),x0(e0)}});O0??(O0=z0());var P=await Pr(i0,O0,q),Q=h(P);return Q}class AA{constructor(B){A0(this,"name","ExitStatus"),this.message=`Program terminated with exit(${B})`,this.status=B}}var _A,wA,Ar,Jx,er,ve,ix,g0,eA,px,BA=l=>{for(;l.length>0;)l.shift()(n)},rA=[],SA=l=>rA.push(l),l0=[],Mr=l=>l0.push(l),ke=!0;function lx(l){return g(typeof l=="number",`ptrToString expects a number, got ${typeof l}`),l>>>=0,"0x"+l.toString(16).padStart(8,"0")}var Ox=l=>{Ox.shown||(Ox.shown={}),Ox.shown[l]||(Ox.shown[l]=1,C&&(l="warning: "+l),O(l))};class JA{constructor(B){this.excPtr=B,this.ptr=B-24}set_type(B){g0[this.ptr+4>>2]=B}get_type(){return g0[this.ptr+4>>2]}set_destructor(B){g0[this.ptr+8>>2]=B}get_destructor(){return g0[this.ptr+8>>2]}set_caught(B){B=B?1:0,Jx[this.ptr+12]=B}get_caught(){return Jx[this.ptr+12]!=0}set_rethrown(B){B=B?1:0,Jx[this.ptr+13]=B}get_rethrown(){return Jx[this.ptr+13]!=0}init(B,h){this.set_adjusted_ptr(0),this.set_type(B),this.set_destructor(h)}set_adjusted_ptr(B){g0[this.ptr+16>>2]=B}get_adjusted_ptr(){return g0[this.ptr+16>>2]}}var _e=0,VA=(l,B,h)=>{var q=new JA(l);q.init(B,h),_e++,g(!1,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")},Ir=()=>ax("native code called abort()"),ex={},$A=l=>{for(;l.length;){var B=l.pop(),h=l.pop();h(B)}};function n0(l){return this.fromWireType(g0[l>>2])}var qA={},Vx={},tA={},T0=class extends Error{constructor(B){super(B),this.name="InternalError"}},y0=l=>{throw new T0(l)},CA=(l,B,h)=>{l.forEach(x0=>tA[x0]=B);function q(x0){var e0=h(x0);e0.length!==l.length&&y0("Mismatched type converter count");for(var c0=0;c0<l.length;++c0)$x(l[c0],e0[c0])}var P=new Array(B.length),Q=[],X=0;for(let[x0,e0]of B.entries())Vx.hasOwnProperty(e0)?P[x0]=Vx[e0]:(Q.push(e0),qA.hasOwnProperty(e0)||(qA[e0]=[]),qA[e0].push(()=>{P[x0]=Vx[e0],++X,X===Q.length&&q(P)}));Q.length===0&&q(P)},we=l=>{var B=ex[l];delete ex[l];var h=B.rawConstructor,q=B.rawDestructor,P=B.fields,Q=P.map(X=>X.getterReturnType).concat(P.map(X=>X.setterArgumentType));CA([l],Q,X=>{var x0={};for(var[e0,c0]of P.entries()){let u0=X[e0],W0=c0.getter,V0=c0.getterContext,Y0=X[e0+P.length],Px=c0.setter,jx=c0.setterContext;x0[c0.fieldName]={read:sA=>u0.fromWireType(W0(V0,sA)),write:(sA,MA)=>{var pA=[];Px(jx,sA,Y0.toWireType(pA,MA)),$A(pA)},optional:u0.optional}}return[{name:B.name,fromWireType:u0=>{var W0={};for(var V0 in x0)W0[V0]=x0[V0].read(u0);return q(u0),W0},toWireType:(u0,W0)=>{for(var V0 in x0)if(!(V0 in W0)&&!x0[V0].optional)throw new TypeError(`Missing field: "${V0}"`);var Y0=h();for(V0 in x0)x0[V0].write(Y0,W0[V0]);return u0!==null&&u0.push(q,Y0),Y0},readValueFromPointer:n0,destructorFunction:q}]})},cx=l=>{for(var B="";;){var h=px[l++];if(!h)return B;B+=String.fromCharCode(h)}},fx=class extends Error{constructor(B){super(B),this.name="BindingError"}},b0=l=>{throw new fx(l)};function Se(l,B,h={}){var q=B.name;if(l||b0(`type "${q}" must have a positive integer typeid pointer`),Vx.hasOwnProperty(l)){if(h.ignoreDuplicateRegistrations)return;b0(`Cannot register type '${q}' twice`)}if(Vx[l]=B,delete tA[l],qA.hasOwnProperty(l)){var P=qA[l];delete qA[l],P.forEach(Q=>Q())}}function $x(l,B,h={}){return Se(l,B,h)}var fe=(l,B,h)=>{switch(B){case 1:return h?q=>Jx[q]:q=>px[q];case 2:return h?q=>_A[q>>1]:q=>ix[q>>1];case 4:return h?q=>wA[q>>2]:q=>g0[q>>2];case 8:return h?q=>Ar[q>>3]:q=>eA[q>>3];default:throw new TypeError(`invalid integer width (${B}): ${l}`)}},dA=l=>{if(l===null)return"null";var B=typeof l;return B==="object"||B==="array"||B==="function"?l.toString():""+l},TA=(l,B,h,q)=>{if(B<h||B>q)throw new TypeError(`Passing a number "${dA(B)}" from JS side to C/C++ side to an argument of type "${l}", which is outside the valid range [${h}, ${q}]!`)},Lr=(l,B,h,q,P)=>{B=cx(B);let Q=q===0n,X=x0=>x0;if(Q){let x0=h*8;X=e0=>BigInt.asUintN(x0,e0),P=X(P)}$x(l,{name:B,fromWireType:X,toWireType:(x0,e0)=>{if(typeof e0=="number")e0=BigInt(e0);else if(typeof e0!="bigint")throw new TypeError(`Cannot convert "${dA(e0)}" to ${B}`);return TA(B,e0,q,P),e0},readValueFromPointer:fe(B,h,!Q),destructorFunction:null})},o=(l,B,h,q)=>{B=cx(B),$x(l,{name:B,fromWireType:function(P){return!!P},toWireType:function(P,Q){return Q?h:q},readValueFromPointer:function(P){return this.fromWireType(px[P])},destructorFunction:null})},k0=l=>({count:l.count,deleteScheduled:l.deleteScheduled,preservePointerOnDelete:l.preservePointerOnDelete,ptr:l.ptr,ptrType:l.ptrType,smartPtr:l.smartPtr,smartPtrType:l.smartPtrType}),$e=l=>{function B(h){return h.$$.ptrType.registeredClass.name}b0(B(l)+" instance already deleted")},PA=!1,DA=l=>{},Rr=l=>{l.smartPtr?l.smartPtrType.rawDestructor(l.smartPtr):l.ptrType.registeredClass.rawDestructor(l.ptr)},Ee=l=>{l.count.value-=1;var B=l.count.value===0;B&&Rr(l)},rr=(l,B,h)=>{if(B===h)return l;if(h.baseClass===void 0)return null;var q=rr(l,B,h.baseClass);return q===null?null:h.downcast(q)},tr={},Or={},Gr=(l,B)=>{for(B===void 0&&b0("ptr should not be undefined");l.baseClass;)B=l.upcast(B),l=l.baseClass;return B},Ur=(l,B)=>(B=Gr(l,B),Or[B]),le=(l,B)=>{(!B.ptrType||!B.ptr)&&y0("makeClassHandle requires ptr and ptrType");var h=!!B.smartPtrType,q=!!B.smartPtr;return h!==q&&y0("Both smartPtrType and smartPtr must be specified"),B.count={value:1},WA(Object.create(l,{$$:{value:B,writable:!0}}))};function nr(l){var B=this.getPointee(l);if(!B)return this.destructor(l),null;var h=Ur(this.registeredClass,B);if(h!==void 0){if(h.$$.count.value===0)return h.$$.ptr=B,h.$$.smartPtr=l,h.clone();var q=h.clone();return this.destructor(l),q}function P(){return this.isSmartPointer?le(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:B,smartPtrType:this,smartPtr:l}):le(this.registeredClass.instancePrototype,{ptrType:this,ptr:l})}var Q=this.registeredClass.getActualType(B),X=tr[Q];if(!X)return P.call(this);var x0;this.isConst?x0=X.constPointerType:x0=X.pointerType;var e0=rr(B,this.registeredClass,x0.registeredClass);return e0===null?P.call(this):this.isSmartPointer?le(x0.registeredClass.instancePrototype,{ptrType:x0,ptr:e0,smartPtrType:this,smartPtr:l}):le(x0.registeredClass.instancePrototype,{ptrType:x0,ptr:e0})}var WA=l=>globalThis.FinalizationRegistry?(PA=new FinalizationRegistry(B=>{console.warn(B.leakWarning),Ee(B.$$)}),WA=B=>{var h=B.$$,q=!!h.smartPtr;if(q){var P={$$:h},Q=h.ptrType.registeredClass,X=new Error(`Embind found a leaked C++ instance ${Q.name} <${lx(h.ptr)}>.
|
|
2315
2176
|
We'll free it automatically in this case, but this functionality is not reliable across various environments.
|
|
2316
2177
|
Make sure to invoke .delete() manually once you're done with the instance instead.
|
|
2317
|
-
Originally allocated`);"captureStackTrace"in Error&&Error.captureStackTrace(X,
|
|
2178
|
+
Originally allocated`);"captureStackTrace"in Error&&Error.captureStackTrace(X,nr),P.leakWarning=X.stack.replace(/^Error: /,""),PA.register(B,P,B)}return B},DA=B=>PA.unregister(B),WA(l)):(WA=B=>B,l),ce=[],Hr=()=>{for(;ce.length;){var l=ce.pop();l.$$.deleteScheduled=!1,l.delete()}},sr,Kr=()=>{let l=XA.prototype;Object.assign(l,{isAliasOf(h){if(!(this instanceof XA)||!(h instanceof XA))return!1;var q=this.$$.ptrType.registeredClass,P=this.$$.ptr;h.$$=h.$$;for(var Q=h.$$.ptrType.registeredClass,X=h.$$.ptr;q.baseClass;)P=q.upcast(P),q=q.baseClass;for(;Q.baseClass;)X=Q.upcast(X),Q=Q.baseClass;return q===Q&&P===X},clone(){if(this.$$.ptr||$e(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var h=WA(Object.create(Object.getPrototypeOf(this),{$$:{value:k0(this.$$)}}));return h.$$.count.value+=1,h.$$.deleteScheduled=!1,h},delete(){this.$$.ptr||$e(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&b0("Object already scheduled for deletion"),DA(this),Ee(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||$e(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&b0("Object already scheduled for deletion"),ce.push(this),ce.length===1&&sr&&sr(Hr),this.$$.deleteScheduled=!0,this}});let B=Symbol.dispose;B&&(l[B]=l.delete)};function XA(){}var qe=(l,B)=>Object.defineProperty(B,"name",{value:l}),ir=(l,B,h)=>{if(l[B].overloadTable===void 0){var q=l[B];l[B]=function(...P){return l[B].overloadTable.hasOwnProperty(P.length)||b0(`Function '${h}' called with an invalid number of arguments (${P.length}) - expects one of (${l[B].overloadTable})!`),l[B].overloadTable[P.length].apply(this,P)},l[B].overloadTable=[],l[B].overloadTable[q.argCount]=q}},ar=(l,B,h)=>{n.hasOwnProperty(l)?((h===void 0||n[l].overloadTable!==void 0&&n[l].overloadTable[h]!==void 0)&&b0(`Cannot register public name '${l}' twice`),ir(n,l,l),n[l].overloadTable.hasOwnProperty(h)&&b0(`Cannot register multiple overloads of a function with the same number of arguments (${h})!`),n[l].overloadTable[h]=B):(n[l]=B,n[l].argCount=h)},zr=48,or=57,Jr=l=>{g(typeof l=="string"),l=l.replace(/[^a-zA-Z0-9_]/g,"$");var B=l.charCodeAt(0);return B>=zr&&B<=or?`_${l}`:l};function Vr(l,B,h,q,P,Q,X,x0){this.name=l,this.constructor=B,this.instancePrototype=h,this.rawDestructor=q,this.baseClass=P,this.getActualType=Q,this.upcast=X,this.downcast=x0,this.pureVirtualFunctions=[]}var Be=(l,B,h)=>{for(;B!==h;)B.upcast||b0(`Expected null or instance of ${h.name}, got an instance of ${B.name}`),l=B.upcast(l),B=B.baseClass;return l};function Wr(l,B){if(B===null)return this.isReference&&b0(`null is not a valid ${this.name}`),0;B.$$||b0(`Cannot pass "${dA(B)}" as a ${this.name}`),B.$$.ptr||b0(`Cannot pass deleted object as a pointer of type ${this.name}`);var h=B.$$.ptrType.registeredClass,q=Be(B.$$.ptr,h,this.registeredClass);return q}function Xr(l,B){var h;if(B===null)return this.isReference&&b0(`null is not a valid ${this.name}`),this.isSmartPointer?(h=this.rawConstructor(),l!==null&&l.push(this.rawDestructor,h),h):0;(!B||!B.$$)&&b0(`Cannot pass "${dA(B)}" as a ${this.name}`),B.$$.ptr||b0(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&B.$$.ptrType.isConst&&b0(`Cannot convert argument of type ${B.$$.smartPtrType?B.$$.smartPtrType.name:B.$$.ptrType.name} to parameter type ${this.name}`);var q=B.$$.ptrType.registeredClass;if(h=Be(B.$$.ptr,q,this.registeredClass),this.isSmartPointer)switch(B.$$.smartPtr===void 0&&b0("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:B.$$.smartPtrType===this?h=B.$$.smartPtr:b0(`Cannot convert argument of type ${B.$$.smartPtrType?B.$$.smartPtrType.name:B.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:h=B.$$.smartPtr;break;case 2:if(B.$$.smartPtrType===this)h=B.$$.smartPtr;else{var P=B.clone();h=this.rawShare(h,D0.toHandle(()=>P.delete())),l!==null&&l.push(this.rawDestructor,h)}break;default:b0("Unsupported sharing policy")}return h}function Fr(l,B){if(B===null)return this.isReference&&b0(`null is not a valid ${this.name}`),0;B.$$||b0(`Cannot pass "${dA(B)}" as a ${this.name}`),B.$$.ptr||b0(`Cannot pass deleted object as a pointer of type ${this.name}`),B.$$.ptrType.isConst&&b0(`Cannot convert argument of type ${B.$$.ptrType.name} to parameter type ${this.name}`);var h=B.$$.ptrType.registeredClass,q=Be(B.$$.ptr,h,this.registeredClass);return q}var vr=()=>{Object.assign(YA.prototype,{getPointee(l){return this.rawGetPointee&&(l=this.rawGetPointee(l)),l},destructor(l){this.rawDestructor?.(l)},readValueFromPointer:n0,fromWireType:nr})};function YA(l,B,h,q,P,Q,X,x0,e0,c0,u0){this.name=l,this.registeredClass=B,this.isReference=h,this.isConst=q,this.isSmartPointer=P,this.pointeeType=Q,this.sharingPolicy=X,this.rawGetPointee=x0,this.rawConstructor=e0,this.rawShare=c0,this.rawDestructor=u0,!P&&B.baseClass===void 0?q?(this.toWireType=Wr,this.destructorFunction=null):(this.toWireType=Fr,this.destructorFunction=null):this.toWireType=Xr}var fr=(l,B,h)=>{n.hasOwnProperty(l)||y0("Replacing nonexistent public symbol"),n[l].overloadTable!==void 0&&h!==void 0?n[l].overloadTable[h]=B:(n[l]=B,n[l].argCount=h)},QA=[],Te=l=>{var B=QA[l];return B||(QA[l]=B=Le.get(l)),g(Le.get(l)==B,"table mirror is out of date"),B},qx=(l,B,h=!1)=>{g(!h,"async bindings are only supported with JSPI"),l=cx(l);function q(){var Q=Te(B);return Q}var P=q();return typeof P!="function"&&b0(`unknown function pointer with signature ${l}: ${B}`),P};class Yr extends Error{}var NA=l=>{var B=Ri(l),h=cx(B);return ee(B),h},ZA=(l,B)=>{var h=[],q={};function P(Q){if(!q[Q]&&!Vx[Q]){if(tA[Q]){tA[Q].forEach(P);return}h.push(Q),q[Q]=!0}}throw B.forEach(P),new Yr(`${l}: `+h.map(NA).join([", "]))},Pe=(l,B,h,q,P,Q,X,x0,e0,c0,u0,W0,V0)=>{u0=cx(u0),Q=qx(P,Q),x0&&(x0=qx(X,x0)),c0&&(c0=qx(e0,c0)),V0=qx(W0,V0);var Y0=Jr(u0);ar(Y0,function(){ZA(`Cannot construct ${u0} due to unbound types`,[q])}),CA([l,B,h],q?[q]:[],Px=>{var jx;Px=Px[0];var sA,MA;q?(sA=Px.registeredClass,MA=sA.instancePrototype):MA=XA.prototype;var pA=qe(u0,function(...Kn){if(Object.getPrototypeOf(this)!==lr)throw new fx(`Use 'new' to construct ${u0}`);if(IA.constructor_body===void 0)throw new fx(`${u0} has no accessible constructor`);var Ji=IA.constructor_body[Kn.length];if(Ji===void 0)throw new fx(`Tried to invoke ctor of ${u0} with invalid number of parameters (${Kn.length}) - expected (${Object.keys(IA.constructor_body).toString()}) parameters instead!`);return Ji.apply(this,Kn)}),lr=Object.create(MA,{constructor:{value:pA}});pA.prototype=lr;var IA=new Vr(u0,pA,lr,V0,sA,Q,x0,c0);IA.baseClass&&((jx=IA.baseClass).__derivedClasses??(jx.__derivedClasses=[]),IA.baseClass.__derivedClasses.push(IA));var pf=new YA(u0,IA,!0,!1,!1),Ki=new YA(u0+"*",IA,!1,!1,!1),zi=new YA(u0+" const*",IA,!1,!0,!1);return tr[l]={pointerType:Ki,constPointerType:zi},fr(Y0,pA),[pf,Ki,zi]})},Bx=(l,B)=>{for(var h=[],q=0;q<l;q++)h.push(g0[B+q*4>>2]);return h};function Ce(l){for(var B=1;B<l.length;++B)if(l[B]!==null&&l[B].destructorFunction===void 0)return!0;return!1}function xe(l,B,h,q,P){if(l<B||l>h){var Q=B==h?B:`${B} to ${h}`;P(`function ${q} called with ${l} arguments, expected ${Q}`)}}function a(l,B,h,q){var P=Ce(l),Q=l.length-2,X=[],x0=["fn"];B&&x0.push("thisWired");for(var e0=0;e0<Q;++e0)X.push(`arg${e0}`),x0.push(`arg${e0}Wired`);X=X.join(","),x0=x0.join(",");var c0=`return function (${X}) {
|
|
2318
2179
|
`;c0+=`checkArgCount(arguments.length, minArgs, maxArgs, humanName, throwBindingError);
|
|
2319
|
-
`,
|
|
2320
|
-
`);var u0=
|
|
2321
|
-
`);for(var
|
|
2322
|
-
`,W0.push(
|
|
2323
|
-
`,
|
|
2324
|
-
`;else for(var
|
|
2180
|
+
`,P&&(c0+=`var destructors = [];
|
|
2181
|
+
`);var u0=P?"destructors":"null",W0=["humanName","throwBindingError","invoker","fn","runDestructors","fromRetWire","toClassParamWire"];B&&(c0+=`var thisWired = toClassParamWire(${u0}, this);
|
|
2182
|
+
`);for(var e0=0;e0<Q;++e0){var V0=`toArg${e0}Wire`;c0+=`var arg${e0}Wired = ${V0}(${u0}, arg${e0});
|
|
2183
|
+
`,W0.push(V0)}if(c0+=(h||q?"var rv = ":"")+`invoker(${x0});
|
|
2184
|
+
`,P)c0+=`runDestructors(destructors);
|
|
2185
|
+
`;else for(var e0=B?1:2;e0<l.length;++e0){var Y0=e0===1?"thisWired":"arg"+(e0-2)+"Wired";l[e0].destructorFunction!==null&&(c0+=`${Y0}_dtor(${Y0});
|
|
2325
2186
|
`,W0.push(`${Y0}_dtor`))}return h&&(c0+=`var ret = fromRetWire(rv);
|
|
2326
2187
|
return ret;
|
|
2327
2188
|
`),c0+=`}
|
|
2328
2189
|
`,W0.push("checkArgCount","minArgs","maxArgs"),c0=`if (arguments.length !== ${W0.length}){ throw new Error(humanName + "Expected ${W0.length} closure arguments " + arguments.length + " given."); }
|
|
2329
|
-
${c0}`,new Function(W0,c0)}function E(l){for(var
|
|
2190
|
+
${c0}`,new Function(W0,c0)}function E(l){for(var B=l.length-2,h=l.length-1;h>=2&&l[h].optional;--h)B--;return B}function d(l,B,h,q,P,Q){var X=B.length;X<2&&b0("argTypes array size mismatch! Must at least get return value and 'this' types!"),g(!Q,"async bindings are only supported with JSPI");for(var x0=B[1]!==null&&h!==null,e0=Ce(B),c0=!B[0].isVoid,u0=X-2,W0=E(B),V0=B[0],Y0=B[1],Px=[l,b0,q,P,$A,V0.fromWireType.bind(V0),Y0?.toWireType.bind(Y0)],jx=2;jx<X;++jx){var sA=B[jx];Px.push(sA.toWireType.bind(sA))}if(!e0)for(var jx=x0?1:2;jx<B.length;++jx)B[jx].destructorFunction!==null&&Px.push(B[jx].destructorFunction);Px.push(xe,W0,u0);var pA=a(B,x0,c0,Q)(...Px);return qe(l,pA)}var b=(l,B,h,q,P,Q)=>{g(B>0);var X=Bx(B,h);P=qx(q,P),CA([],[l],x0=>{x0=x0[0];var e0=`constructor ${x0.name}`;if(x0.registeredClass.constructor_body===void 0&&(x0.registeredClass.constructor_body=[]),x0.registeredClass.constructor_body[B-1]!==void 0)throw new fx(`Cannot register multiple constructors with identical number of parameters (${B-1}) for class '${x0.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return x0.registeredClass.constructor_body[B-1]=()=>{ZA(`Cannot construct ${x0.name} due to unbound types`,X)},CA([],X,c0=>(c0.splice(1,0,null),x0.registeredClass.constructor_body[B-1]=d(e0,c0,null,P,Q),[])),[]})},y=(l,B,h)=>(l instanceof Object||b0(`${h} with invalid "this": ${l}`),l instanceof B.registeredClass.constructor||b0(`${h} incompatible with "this" of type ${l.constructor.name}`),l.$$.ptr||b0(`cannot call emscripten binding method ${h} on deleted object`),Be(l.$$.ptr,l.$$.ptrType.registeredClass,B.registeredClass)),$=(l,B,h,q,P,Q,X,x0,e0,c0)=>{B=cx(B),P=qx(q,P),CA([],[l],u0=>{u0=u0[0];var W0=`${u0.name}.${B}`,V0={get(){ZA(`Cannot access ${W0} due to unbound types`,[h,X])},enumerable:!0,configurable:!0};return e0?V0.set=()=>ZA(`Cannot access ${W0} due to unbound types`,[h,X]):V0.set=Y0=>b0(W0+" is a read-only property"),Object.defineProperty(u0.registeredClass.instancePrototype,B,V0),CA([],e0?[h,X]:[h],Y0=>{var Px=Y0[0],jx={get(){var MA=y(this,u0,W0+" getter");return Px.fromWireType(P(Q,MA))},enumerable:!0};if(e0){e0=qx(x0,e0);var sA=Y0[1];jx.set=function(MA){var pA=y(this,u0,W0+" setter"),lr=[];e0(c0,pA,sA.toWireType(lr,MA)),$A(lr)}}return Object.defineProperty(u0.registeredClass.instancePrototype,B,jx),[]}),[]})},G=[],V=[0,1,,1,null,1,!0,1,!1,1],o0=l=>{if(l>9&&--V[l+1]===0){g(V[l]!==void 0,"decref for unallocated handle");var B=V[l];V[l]=void 0,G.push(l)}},D0={toValue:l=>(l||b0(`Cannot use deleted val. handle = ${l}`),g(l===2||V[l]!==void 0&&l%2===0,`invalid handle: ${l}`),V[l]),toHandle:l=>{switch(l){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let B=G.pop()||V.length;return V[B]=l,V[B+1]=1,B}}}},J0={name:"emscripten::val",fromWireType:l=>{var B=D0.toValue(l);return o0(l),B},toWireType:(l,B)=>D0.toHandle(B),readValueFromPointer:n0,destructorFunction:null},N0=l=>$x(l,J0),S0=(l,B)=>{switch(B){case 4:return function(h){return this.fromWireType(er[h>>2])};case 8:return function(h){return this.fromWireType(ve[h>>3])};default:throw new TypeError(`invalid float width (${B}): ${l}`)}},m0=(l,B,h)=>{B=cx(B),$x(l,{name:B,fromWireType:q=>q,toWireType:(q,P)=>{if(typeof P!="number"&&typeof P!="boolean")throw new TypeError(`Cannot convert ${dA(P)} to ${B}`);return P},readValueFromPointer:S0(B,h),destructorFunction:null})},rx=l=>{l=l.trim();let B=l.indexOf("(");return B===-1?l:(g(l.endsWith(")"),"Parentheses for argument names should match."),l.slice(0,B))},bx=(l,B,h,q,P,Q,X,x0)=>{var e0=Bx(B,h);l=cx(l),l=rx(l),P=qx(q,P,X),ar(l,function(){ZA(`Cannot call ${l} due to unbound types`,e0)},B-1),CA([],e0,c0=>{var u0=[c0[0],null].concat(c0.slice(1));return fr(l,d(l,u0,null,P,Q,X),B-1),[]})},Tx=(l,B,h,q,P)=>{B=cx(B);let Q=q===0,X=e0=>e0;if(Q){var x0=32-8*h;X=e0=>e0<<x0>>>x0,P=X(P)}$x(l,{name:B,fromWireType:X,toWireType:(e0,c0)=>{if(typeof c0!="number"&&typeof c0!="boolean")throw new TypeError(`Cannot convert "${dA(c0)}" to ${B}`);return TA(B,c0,q,P),c0},readValueFromPointer:fe(B,h,q!==0),destructorFunction:null})},Ix=(l,B,h)=>{var q=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array],P=q[B];function Q(X){var x0=g0[X>>2],e0=g0[X+4>>2];return new P(Jx.buffer,e0,x0)}h=cx(h),$x(l,{name:h,fromWireType:Q,readValueFromPointer:Q},{ignoreDuplicateRegistrations:!0})},Lx=(l,B,h,q)=>{if(g(typeof l=="string",`stringToUTF8Array expects a string (got ${typeof l})`),!(q>0))return 0;for(var P=h,Q=h+q-1,X=0;X<l.length;++X){var x0=l.codePointAt(X);if(x0<=127){if(h>=Q)break;B[h++]=x0}else if(x0<=2047){if(h+1>=Q)break;B[h++]=192|x0>>6,B[h++]=128|x0&63}else if(x0<=65535){if(h+2>=Q)break;B[h++]=224|x0>>12,B[h++]=128|x0>>6&63,B[h++]=128|x0&63}else{if(h+3>=Q)break;x0>1114111&&Ox(`Invalid Unicode code point ${lx(x0)} encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).`),B[h++]=240|x0>>18,B[h++]=128|x0>>12&63,B[h++]=128|x0>>6&63,B[h++]=128|x0&63,X++}}return B[h]=0,h-P},Ae=(l,B,h)=>(g(typeof h=="number","stringToUTF8 requires a third parameter that specifies the length of the output buffer"),Lx(l,px,B,h)),Gx=l=>{for(var B=0,h=0;h<l.length;++h){var q=l.charCodeAt(h);q<=127?B++:q<=2047?B+=2:q>=55296&&q<=57343?(B+=4,++h):B+=3}return B},uA=globalThis.TextDecoder&&new TextDecoder,Fx=(l,B,h,q)=>{var P=B+h;if(q)return P;for(;l[B]&&!(B>=P);)++B;return B},yt=(l,B=0,h,q)=>{var P=Fx(l,B,h,q);if(P-B>16&&l.buffer&&uA)return uA.decode(l.subarray(B,P));for(var Q="";B<P;){var X=l[B++];if(!(X&128)){Q+=String.fromCharCode(X);continue}var x0=l[B++]&63;if((X&224)==192){Q+=String.fromCharCode((X&31)<<6|x0);continue}var e0=l[B++]&63;if((X&240)==224?X=(X&15)<<12|x0<<6|e0:((X&248)!=240&&Ox(`Invalid UTF-8 leading byte ${lx(X)} encountered when deserializing a UTF-8 string in wasm memory to a JS string!`),X=(X&7)<<18|x0<<12|e0<<6|l[B++]&63),X<65536)Q+=String.fromCharCode(X);else{var c0=X-65536;Q+=String.fromCharCode(55296|c0>>10,56320|c0&1023)}}return Q},Pn=(l,B,h)=>(g(typeof l=="number",`UTF8ToString expects a number (got ${typeof l})`),l?yt(px,l,B,h):""),Nn=(l,B)=>{B=cx(B);var h=!0;$x(l,{name:B,fromWireType(q){var P=g0[q>>2],Q=q+4,X;if(h)X=Pn(Q,P,!0);else{X="";for(var x0=0;x0<P;++x0)X+=String.fromCharCode(px[Q+x0])}return ee(q),X},toWireType(q,P){P instanceof ArrayBuffer&&(P=new Uint8Array(P));var Q,X=typeof P=="string";X||ArrayBuffer.isView(P)&&P.BYTES_PER_ELEMENT==1||b0("Cannot pass non-string to std::string"),h&&X?Q=Gx(P):Q=P.length;var x0=Un(4+Q+1),e0=x0+4;if(g0[x0>>2]=Q,X)if(h)Ae(P,e0,Q+1);else for(var c0=0;c0<Q;++c0){var u0=P.charCodeAt(c0);u0>255&&(ee(x0),b0("String has UTF-16 code units that do not fit in 8 bits")),px[e0+c0]=u0}else px.set(P,e0);return q!==null&&q.push(ee,x0),x0},readValueFromPointer:n0,destructorFunction(q){ee(q)}})},kt=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,Mn=(l,B,h)=>{g(l%2==0,"pointer passed to UTF16ToString must be 2-byte aligned");var q=l>>1,P=Fx(ix,q,B/2,h);if(P-q>16&&kt)return kt.decode(ix.subarray(q,P));for(var Q="",X=q;X<P;++X){var x0=ix[X];Q+=String.fromCharCode(x0)}return Q},In=(l,B,h)=>{if(g(B%2==0,"pointer passed to stringToUTF16 must be 2-byte aligned"),g(typeof h=="number","stringToUTF16 requires a third parameter that specifies the length of the output buffer"),h??(h=2147483647),h<2)return 0;h-=2;for(var q=B,P=h<l.length*2?h/2:l.length,Q=0;Q<P;++Q){var X=l.charCodeAt(Q);_A[B>>1]=X,B+=2}return _A[B>>1]=0,B-q},_t=l=>l.length*2,Qr=(l,B,h)=>{g(l%4==0,"pointer passed to UTF32ToString must be 2-byte aligned");for(var q="",P=l>>2,Q=0;!(Q>=B/4);Q++){var X=g0[P+Q];if(!X&&!h)break;q+=String.fromCodePoint(X)}return q},Ne=(l,B,h)=>{if(g(B%4==0,"pointer passed to stringToUTF32 must be 4-byte aligned"),g(typeof h=="number","stringToUTF32 requires a third parameter that specifies the length of the output buffer"),h??(h=2147483647),h<4)return 0;for(var q=B,P=q+h-4,Q=0;Q<l.length;++Q){var X=l.codePointAt(Q);if(X>65535&&Q++,wA[B>>2]=X,B+=4,B+4>P)break}return wA[B>>2]=0,B-q},i=l=>{for(var B=0,h=0;h<l.length;++h){var q=l.codePointAt(h);q>65535&&h++,B+=4}return B},v=(l,B,h)=>{h=cx(h);var q,P,Q;B===2?(q=Mn,P=In,Q=_t):(g(B===4,"only 2-byte and 4-byte strings are currently supported"),q=Qr,P=Ne,Q=i),$x(l,{name:h,fromWireType:X=>{var x0=g0[X>>2],e0=q(X+4,x0*B,!0);return ee(X),e0},toWireType:(X,x0)=>{typeof x0!="string"&&b0(`Cannot pass non-string to C++ string type ${h}`);var e0=Q(x0),c0=Un(4+e0+B);return g0[c0>>2]=e0/B,P(x0,c0+4,e0+B),X!==null&&X.push(ee,c0),c0},readValueFromPointer:n0,destructorFunction(X){ee(X)}})},c=(l,B,h,q,P,Q)=>{ex[l]={name:cx(B),rawConstructor:qx(h,q),rawDestructor:qx(P,Q),fields:[]}},u=(l,B,h,q,P,Q,X,x0,e0,c0)=>{ex[l].fields.push({fieldName:cx(B),getterReturnType:h,getter:qx(q,P),getterContext:Q,setterArgumentType:X,setter:qx(x0,e0),setterContext:c0})},m=(l,B)=>{B=cx(B),$x(l,{isVoid:!0,name:B,fromWireType:()=>{},toWireType:(h,q)=>{}})},w=[],M=l=>{var B=w.length;return w.push(l),B},z=(l,B)=>{var h=Vx[l];return h===void 0&&b0(`${B} has unknown type ${NA(l)}`),h},F0=(l,B)=>{for(var h=new Array(l),q=0;q<l;++q)h[q]=z(g0[B+q*4>>2],`parameter ${q}`);return h},_0=(l,B,h)=>{var q=[],P=l(q,h);return q.length&&(g0[B>>2]=D0.toHandle(q)),P},X0={},L0=l=>{var B=X0[l];return B===void 0?cx(l):B},P0=(l,B,h)=>{var q=8,[P,...Q]=F0(l,B),X=P.toWireType.bind(P),x0=Q.map(Y0=>Y0.readValueFromPointer.bind(Y0));l--;var e0={toValue:D0.toValue},c0=x0.map((Y0,Px)=>{var jx=`argFromPtr${Px}`;return e0[jx]=Y0,`${jx}(args${Px?"+"+Px*q:""})`}),u0;switch(h){case 0:u0="toValue(handle)";break;case 2:u0="new (toValue(handle))";break;case 3:u0="";break;case 1:e0.getStringOrSymbol=L0,u0="toValue(handle)[getStringOrSymbol(methodName)]";break}u0+=`(${c0})`,P.isVoid||(e0.toReturnWire=X,e0.emval_returnValue=_0,u0=`return emval_returnValue(toReturnWire, destructorsRef, ${u0})`),u0=`return function (handle, methodName, destructorsRef, args) {
|
|
2330
2191
|
${u0}
|
|
2331
|
-
}`;var W0=new Function(Object.keys(A0),u0)(...Object.values(A0)),K0=`methodCaller<(${Q.map(Y0=>Y0.name)}) => ${T.name}>`;return I(_e(K0,W0))},h0=l=>(l=L0(l),D0.toHandle(n[l])),vx=(l,C)=>(l=D0.toValue(l),C=D0.toValue(C),D0.toHandle(l[C])),gx=l=>{l>9&&(V[l+1]+=1)},Ox=(l,C,h,q,T)=>w[l](C,h,q,T),Jx=l=>D0.toHandle(L0(l)),Vx=l=>{var C=D0.toValue(l);wA(C),a0(l)},qe=()=>2147483648,nA=(l,C)=>(g(C,"alignment argument is required"),Math.ceil(l/C)*C),le=l=>{var C=ut.buffer.byteLength,h=(l-C+65535)/65536|0;try{return ut.grow(h),ox(),1}catch(q){O(`growMemory: Attempted to grow heap from ${C} bytes to ${l} bytes, but got error: ${q}`)}},bx=l=>{var C=ux.length;l>>>=0,g(l>C);var h=qe();if(l>h)return O(`Cannot enlarge memory, requested ${l} bytes, but the limit is ${h} bytes!`),!1;for(var q=1;q<=4;q*=2){var T=C*(1+.2/q);T=Math.min(T,l+100663296);var Q=Math.min(h,nA(Math.max(l,T),65536)),X=le(Q);if(X)return!0}return O(`Failed to grow the heap from ${C} bytes to ${Q} bytes, not enough memory!`),!1},U8=l=>{sx("fd_close called without SYSCALLS_REQUIRE_FILESYSTEM")},H8=9007199254740992,z8=-9007199254740992,K8=l=>l<z8||l>H8?NaN:Number(l);function J8(l,C,h,q){return C=K8(C),70}var wn=[null,[],[]],Sn=(l,C)=>{var h=wn[l];g(h),C===0||C===10?((l===1?L:O)(Ct(h)),h.length=0):h.push(C)},Au=()=>{ci(0),wn[1].length&&Sn(1,10),wn[2].length&&Sn(2,10)},V8=(l,C,h,q)=>{for(var T=0,Q=0;Q<h;Q++){var X=g0[C>>2],x0=g0[C+4>>2];C+=8;for(var A0=0;A0<x0;A0++)Sn(l,ux[X+A0]);T+=x0}return g0[q>>2]=T,0},W8=()=>{if(c){var l=io("crypto");return C=>l.randomFillSync(C)}return C=>(crypto.getRandomValues(C),0)},vi=l=>(vi=W8())(l),X8=(l,C)=>vi(ux.subarray(l,l+C)),Y8=(l,C)=>{if(Pe)for(var h=l;h<l+C;h++){var q=we(h);q&&Pe.set(q,h)}},Pe,Q8=l=>(Pe||(Pe=new WeakMap,Y8(0,Te.length)),Pe.get(l)||0),$n=[],Z8=()=>{if($n.length)return $n.pop();try{return Te.grow(1)}catch(l){if(!(l instanceof RangeError))throw l;sx("Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.")}},qn=(l,C)=>{Te.set(l,C),VA[l]=Te.get(l)},fi=l=>{let C=l.length;return g(C<16384),[C%128|128,C>>7,...l]},xv={i:127,p:127,j:126,f:125,d:124,e:111},Ei=l=>fi(Array.from(l,C=>{var h=xv[C];return g(h,`invalid signature char: ${C}`),h})),Av=(l,C)=>{var h=Uint8Array.of(0,97,115,109,1,0,0,0,1,...fi([1,96,...Ei(C.slice(1)),...Ei(C[0]==="v"?"":C[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),q=new WebAssembly.Module(h),T=new WebAssembly.Instance(q,{e:{f:l}}),Q=T.exports.f;return Q},ev=(l,C)=>{g(typeof l<"u");var h=Q8(l);if(h)return h;var q=Z8();try{qn(q,l)}catch(Q){if(!(Q instanceof TypeError))throw Q;g(typeof C<"u","Missing signature argument to addFunction: "+l);var T=Av(l,C);qn(q,T)}return Pe.set(l,q),q},rv=l=>{Pe.delete(we(l)),qn(l,null),$n.push(l)};Lr(),sr(),g(V.length===10);{if(n.noExitRuntime&&(je=n.noExitRuntime),n.print&&(L=n.print),n.printErr&&(O=n.printErr),n.wasmBinary&&(s0=n.wasmBinary),n.FS_createDataFile=xA.createDataFile,n.FS_createPreloadedFile=xA.createPreloadedFile,sv(),n.arguments&&(p=n.arguments),n.thisProgram&&(j=n.thisProgram),g(typeof n.memoryInitializerPrefixURL>"u","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),g(typeof n.pthreadMainPrefixURL>"u","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),g(typeof n.cdInitializerPrefixURL>"u","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),g(typeof n.filePackagePrefixURL>"u","Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),g(typeof n.read>"u","Module.read option was removed"),g(typeof n.readAsync>"u","Module.readAsync option was removed (modify readAsync in JS)"),g(typeof n.readBinary>"u","Module.readBinary option was removed (modify readBinary in JS)"),g(typeof n.setWindowTitle>"u","Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)"),g(typeof n.TOTAL_MEMORY>"u","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"),g(typeof n.ENVIRONMENT>"u","Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)"),g(typeof n.STACK_SIZE>"u","STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time"),g(typeof n.wasmMemory>"u","Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally"),g(typeof n.INITIAL_MEMORY>"u","Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically"),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();r0("preInit")}n.addFunction=ev,n.removeFunction=rv;var tv=["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","stackAlloc","getTempRet0","setTempRet0","zeroMemory","exitJS","withStackSave","strError","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","readEmAsmArgs","jstoi_q","getExecutableName","autoResumeAudioContext","getDynCaller","dynCall","handleException","keepRuntimeAlive","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","asyncLoad","asmjsMangle","mmapAlloc","HandleAllocator","getUniqueRunDependency","addRunDependency","removeRunDependency","addOnInit","addOnPostCtor","addOnPreMain","addOnExit","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","ccall","cwrap","intArrayFromString","intArrayToString","stringToAscii","stringToNewUTF8","stringToUTF8OnStack","writeArrayToMemory","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","jsStackTrace","getCallstack","convertPCtoSourceLocation","getEnvStrings","checkWasiClock","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","safeSetTimeout","setImmediateWrapped","safeRequestAnimationFrame","clearImmediateWrapped","registerPostMainLoop","registerPreMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","findMatchingCatch","incrementUncaughtExceptionCount","decrementUncaughtExceptionCount","Browser_asyncPrepareDataCounter","isLeapYear","ydayFromDate","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_createPreloadedFile","FS_preloadFile","FS_modeStringToFlags","FS_getMode","FS_fileDataToTypedArray","FS_stdin_getChar","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","runAndAbortIfError","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","allocateUTF8","allocateUTF8OnStack","demangle","stackTrace","getNativeTypeSize","getFunctionArgsName","createJsInvokerSignature","getEnumValueType","PureVirtualError","registerInheritedInstance","unregisterInheritedInstance","getInheritedInstanceCount","getLiveInheritedInstances","enumReadValueFromPointer","installIndexedIterator","setDelayFunction","count_emval_handles"];tv.forEach(F0);var nv=["run","out","err","callMain","abort","wasmExports","writeStackCookie","checkStackCookie","INT53_MAX","INT53_MIN","bigintToI53Checked","HEAP8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAPF32","HEAPF64","HEAP64","HEAPU64","stackSave","stackRestore","createNamedFunction","ptrToString","getHeapMax","growMemory","ENV","ERRNO_CODES","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","alignMemory","wasmTable","wasmMemory","noExitRuntime","addOnPreRun","addOnPostRun","convertJsFunctionToWasm","freeTableIndexes","functionsInTableMap","getEmptyTableSlot","updateTableMap","getFunctionAddress","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","AsciiToString","UTF16Decoder","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","UNWIND_CACHE","ExitStatus","flush_NO_FILESYSTEM","initRandomFill","randomFill","emSetImmediate","emClearImmediate_deps","emClearImmediate","promiseMap","uncaughtExceptionCount","exceptionCaught","ExceptionInfo","Browser","requestFullscreen","requestFullScreen","setCanvasSize","getUserMedia","createContext","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","SYSCALLS","preloadPlugins","FS_stdin_getChar_buffer","FS_unlink","FS_createPath","FS_createDevice","FS_readFile","FS","FS_root","FS_mounts","FS_devices","FS_streams","FS_nextInode","FS_nameTable","FS_currentPath","FS_initialized","FS_ignorePermissions","FS_filesystems","FS_syncFSRequests","FS_lookupPath","FS_getPath","FS_hashName","FS_hashAddNode","FS_hashRemoveNode","FS_lookupNode","FS_createNode","FS_destroyNode","FS_isRoot","FS_isMountpoint","FS_isFile","FS_isDir","FS_isLink","FS_isChrdev","FS_isBlkdev","FS_isFIFO","FS_isSocket","FS_flagsToPermissionString","FS_nodePermissions","FS_mayLookup","FS_mayCreate","FS_mayDelete","FS_mayOpen","FS_checkOpExists","FS_nextfd","FS_getStreamChecked","FS_getStream","FS_createStream","FS_closeStream","FS_dupStream","FS_doSetAttr","FS_chrdev_stream_ops","FS_major","FS_minor","FS_makedev","FS_registerDevice","FS_getDevice","FS_getMounts","FS_syncfs","FS_mount","FS_unmount","FS_lookup","FS_mknod","FS_statfs","FS_statfsStream","FS_statfsNode","FS_create","FS_mkdir","FS_mkdev","FS_symlink","FS_rename","FS_rmdir","FS_readdir","FS_readlink","FS_stat","FS_fstat","FS_lstat","FS_doChmod","FS_chmod","FS_lchmod","FS_fchmod","FS_doChown","FS_chown","FS_lchown","FS_fchown","FS_doTruncate","FS_truncate","FS_ftruncate","FS_utime","FS_open","FS_close","FS_isClosed","FS_llseek","FS_read","FS_write","FS_mmap","FS_msync","FS_ioctl","FS_writeFile","FS_cwd","FS_chdir","FS_createDefaultDirectories","FS_createDefaultDevices","FS_createSpecialDirectories","FS_createStandardStreams","FS_staticInit","FS_init","FS_quit","FS_findObject","FS_analyzePath","FS_createFile","FS_createDataFile","FS_forceLoadFile","FS_createLazyFile","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","SDL","SDL_gfx","print","printErr","jstoi_s","InternalError","BindingError","throwInternalError","throwBindingError","registeredTypes","awaitingDependencies","typeDependencies","tupleRegistrations","structRegistrations","sharedRegisterType","whenDependentTypesAreResolved","getTypeName","getFunctionName","heap32VectorToArray","requireRegisteredType","usesDestructorStack","checkArgCount","getRequiredArgCount","createJsInvoker","UnboundTypeError","EmValType","EmValOptionalType","throwUnboundTypeError","ensureOverloadTable","exposePublicSymbol","replacePublicSymbol","embindRepr","registeredInstances","getBasestPointer","getInheritedInstance","registeredPointers","registerType","integerReadValueFromPointer","floatReadValueFromPointer","assertIntegerRange","readPointer","runDestructors","craftInvokerFunction","embind__requireFunction","genericPointerToWireType","constNoSmartPtrRawPointerToWireType","nonConstNoSmartPtrRawPointerToWireType","init_RegisteredPointer","RegisteredPointer","RegisteredPointer_fromWireType","runDestructor","releaseClassHandle","finalizationRegistry","detachFinalizer_deps","detachFinalizer","attachFinalizer","makeClassHandle","init_ClassHandle","ClassHandle","throwInstanceAlreadyDeleted","deletionQueue","flushPendingDeletes","delayFunction","RegisteredClass","shallowCopyInternalPointer","downcastPointer","upcastPointer","validateThis","char_0","char_9","makeLegalFunctionName","emval_freelist","emval_handles","emval_symbols","getStringOrSymbol","Emval","emval_returnValue","emval_lookupTypes","emval_methodCallers","emval_addMethodCaller"];nv.forEach(v0);function sv(){n0("fetchSettings"),n0("logReadFiles"),n0("loadSplitModule"),n0("onMalloc"),n0("onRealloc"),n0("onFree"),n0("onSbrkGrow")}var li=Z("___getTypeName"),Pn=Z("_malloc"),QA=Z("_free"),iv=n._MdnCom_ESCHandler=Z("_MdnCom_ESCHandler"),av=n._MdnCom_Free=Z("_MdnCom_Free"),ov=n._MdnCom_RawRx=Z("_MdnCom_RawRx"),Fv=n._MdnCom_CryptoSelfTest=Z("_MdnCom_CryptoSelfTest"),vv=n._MdnCom_SetCompanionKeypair=Z("_MdnCom_SetCompanionKeypair"),fv=n._MdnCom_InitiateEcsHandshake=Z("_MdnCom_InitiateEcsHandshake"),Ev=n._MdnCom_SetSecDebug=Z("_MdnCom_SetSecDebug"),lv=n._MdnCom_GetEcsState=Z("_MdnCom_GetEcsState"),cv=n._MdnCom_ResetEcs=Z("_MdnCom_ResetEcs"),Bv=n._MdnCom_RegisterEcsHandshakeCallback=Z("_MdnCom_RegisterEcsHandshakeCallback"),Cv=n._MdnCom_Init=Z("_MdnCom_Init"),dv=n._SendUtoQuery=Z("_SendUtoQuery"),Dv=n._SendUtoCmdExt=Z("_SendUtoCmdExt"),ci=Z("_fflush"),Tn=Z("_emscripten_stack_get_end"),uv=Z("_emscripten_stack_get_base"),pv=Z("_strerror"),Bi=Z("_emscripten_stack_init"),bv=Z("_emscripten_stack_get_free"),mv=Z("__emscripten_stack_restore"),jv=Z("__emscripten_stack_alloc"),hv=Z("_emscripten_stack_get_current"),gv=Z("memory"),yv=Z("__indirect_function_table"),ut=Z("wasmMemory"),Te=Z("wasmTable");function kv(l){g(typeof l.__getTypeName<"u","missing Wasm export: __getTypeName"),g(typeof l.malloc<"u","missing Wasm export: malloc"),g(typeof l.free<"u","missing Wasm export: free"),g(typeof l.MdnCom_ESCHandler<"u","missing Wasm export: MdnCom_ESCHandler"),g(typeof l.MdnCom_Free<"u","missing Wasm export: MdnCom_Free"),g(typeof l.MdnCom_RawRx<"u","missing Wasm export: MdnCom_RawRx"),g(typeof l.MdnCom_CryptoSelfTest<"u","missing Wasm export: MdnCom_CryptoSelfTest"),g(typeof l.MdnCom_SetCompanionKeypair<"u","missing Wasm export: MdnCom_SetCompanionKeypair"),g(typeof l.MdnCom_InitiateEcsHandshake<"u","missing Wasm export: MdnCom_InitiateEcsHandshake"),g(typeof l.MdnCom_SetSecDebug<"u","missing Wasm export: MdnCom_SetSecDebug"),g(typeof l.MdnCom_GetEcsState<"u","missing Wasm export: MdnCom_GetEcsState"),g(typeof l.MdnCom_ResetEcs<"u","missing Wasm export: MdnCom_ResetEcs"),g(typeof l.MdnCom_RegisterEcsHandshakeCallback<"u","missing Wasm export: MdnCom_RegisterEcsHandshakeCallback"),g(typeof l.MdnCom_Init<"u","missing Wasm export: MdnCom_Init"),g(typeof l.SendUtoQuery<"u","missing Wasm export: SendUtoQuery"),g(typeof l.SendUtoCmdExt<"u","missing Wasm export: SendUtoCmdExt"),g(typeof l.fflush<"u","missing Wasm export: fflush"),g(typeof l.emscripten_stack_get_end<"u","missing Wasm export: emscripten_stack_get_end"),g(typeof l.emscripten_stack_get_base<"u","missing Wasm export: emscripten_stack_get_base"),g(typeof l.strerror<"u","missing Wasm export: strerror"),g(typeof l.emscripten_stack_init<"u","missing Wasm export: emscripten_stack_init"),g(typeof l.emscripten_stack_get_free<"u","missing Wasm export: emscripten_stack_get_free"),g(typeof l._emscripten_stack_restore<"u","missing Wasm export: _emscripten_stack_restore"),g(typeof l._emscripten_stack_alloc<"u","missing Wasm export: _emscripten_stack_alloc"),g(typeof l.emscripten_stack_get_current<"u","missing Wasm export: emscripten_stack_get_current"),g(typeof l.memory<"u","missing Wasm export: memory"),g(typeof l.__indirect_function_table<"u","missing Wasm export: __indirect_function_table"),li=U0("__getTypeName",1),Pn=U0("malloc",1),QA=U0("free",1),iv=n._MdnCom_ESCHandler=U0("MdnCom_ESCHandler",1),av=n._MdnCom_Free=U0("MdnCom_Free",1),ov=n._MdnCom_RawRx=U0("MdnCom_RawRx",1),Fv=n._MdnCom_CryptoSelfTest=U0("MdnCom_CryptoSelfTest",0),vv=n._MdnCom_SetCompanionKeypair=U0("MdnCom_SetCompanionKeypair",2),fv=n._MdnCom_InitiateEcsHandshake=U0("MdnCom_InitiateEcsHandshake",0),Ev=n._MdnCom_SetSecDebug=U0("MdnCom_SetSecDebug",1),lv=n._MdnCom_GetEcsState=U0("MdnCom_GetEcsState",0),cv=n._MdnCom_ResetEcs=U0("MdnCom_ResetEcs",0),Bv=n._MdnCom_RegisterEcsHandshakeCallback=U0("MdnCom_RegisterEcsHandshakeCallback",1),Cv=n._MdnCom_Init=U0("MdnCom_Init",2),dv=n._SendUtoQuery=U0("SendUtoQuery",2),Dv=n._SendUtoCmdExt=U0("SendUtoCmdExt",4),ci=U0("fflush",1),Tn=l.emscripten_stack_get_end,uv=l.emscripten_stack_get_base,pv=U0("strerror",1),Bi=l.emscripten_stack_init,bv=l.emscripten_stack_get_free,mv=l._emscripten_stack_restore,jv=l._emscripten_stack_alloc,hv=l.emscripten_stack_get_current,gv=ut=l.memory,yv=Te=l.__indirect_function_table}var Ci={__cxa_throw:HA,_abort_js:$r,_embind_finalize_value_object:ge,_embind_register_bigint:qr,_embind_register_bool:o,_embind_register_class:Se,_embind_register_class_constructor:b,_embind_register_class_property:$,_embind_register_emval:N0,_embind_register_float:m0,_embind_register_function:px,_embind_register_integer:qx,_embind_register_memory_view:Ix,_embind_register_std_string:yn,_embind_register_std_wstring:v,_embind_register_value_object:B,_embind_register_value_object_field:u,_embind_register_void:m,_emval_create_invoker:T0,_emval_decref:a0,_emval_get_module_property:h0,_emval_get_property:vx,_emval_incref:gx,_emval_invoke:Ox,_emval_new_cstring:Jx,_emval_run_destructors:Vx,emscripten_resize_heap:bx,fd_close:U8,fd_seek:J8,fd_write:V8,random_get:X8},di;function _v(){Bi(),Y()}function wv(){_v(),Hx();function l(){g(!di),di=!0,n.calledRun=!0,!R&&(hA(),d0?.(n),n.onRuntimeInitialized?.(),r0("onRuntimeInitialized"),g(!n._main,'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'),gA())}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),l()},1)):l(),W()}var ar;ar=await wr(),wv(),M0?s=n:s=new Promise((l,C)=>{d0=l,q0=C});for(let l of Object.keys(n))l in t||Object.defineProperty(t,l,{configurable:!0,get(){sx(`Access to module property ('${l}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}});return s}})();typeof A=="object"&&typeof x=="object"?(x.exports=e,x.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),zo=Object.freeze({p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n}),{p:Jt,n:zt,Gx:ao,Gy:oo,a:ns,d:ss,h:Vl}=zo,ot=32,Wl=(...A)=>{"captureStackTrace"in Error&&typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(...A)},wx=(A="")=>{let x=new Error(A);throw Wl(x,wx),x},Xl=A=>typeof A=="bigint",Yl=A=>typeof A=="string",Ql=A=>A instanceof Uint8Array||ArrayBuffer.isView(A)&&A.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in A&&A.BYTES_PER_ELEMENT===1,Je=(A,x,e="")=>{let r=Ql(A),t=A?.length,s=x!==void 0;if(!r||s&&t!==x){let n=e&&`"${e}" `,F=s?` of length ${x}`:"",f=r?`length=${t}`:`type=${typeof A}`,c=n+"expected Uint8Array"+F+", got "+f;throw r?new RangeError(c):new TypeError(c)}return A},rn=A=>new Uint8Array(A),$s=A=>Uint8Array.from(A),Ko=(A,x)=>A.toString(16).padStart(x,"0"),Jo=A=>Array.from(Je(A)).map(x=>Ko(x,2)).join(""),te={_0:48,_9:57,A:65,F:70,a:97,f:102},Fo=A=>{if(A>=te._0&&A<=te._9)return A-te._0;if(A>=te.A&&A<=te.F)return A-(te.A-10);if(A>=te.a&&A<=te.f)return A-(te.a-10)},Vo=A=>{let x="hex invalid";if(!Yl(A))return wx(x);let e=A.length,r=e/2;if(e%2)return wx(x);let t=rn(r);for(let s=0,n=0;s<r;s++,n+=2){let F=Fo(A.charCodeAt(n)),f=Fo(A.charCodeAt(n+1));if(F===void 0||f===void 0)return wx(x);t[s]=F*16+f}return t},Wo=()=>globalThis?.crypto,Zl=()=>Wo()?.subtle??wx("crypto.subtle must be defined, consider polyfill"),Xo=(...A)=>{let x=0;for(let t of A)x+=Je(t).length;let e=rn(x),r=0;return A.forEach(t=>{e.set(t,r),r+=t.length}),e},xc=(A=ot)=>Wo().getRandomValues(rn(A)),Vt=BigInt,Oe=(A,x,e,r="bad number: out of range")=>{if(!Xl(A))throw new TypeError(r);if(x<=A&&A<e)return A;throw new RangeError(r)},tx=(A,x=Jt)=>{let e=A%x;return e>=0n?e:x+e},vo=(1n<<255n)-1n,C0=A=>{A<0n&&wx("negative coordinate");let x=(A>>255n)*19n+(A&vo);return x=(x>>255n)*19n+(x&vo),x%Jt},Ac=A=>tx(A,zt),ec=(A,x)=>{(A===0n||x<=0n)&&wx("no inverse n="+A+" mod="+x);let e=tx(A,x),r=x,t=0n,s=1n,n=1n,F=0n;for(;e!==0n;){let f=r/e,c=r%e,D=t-n*f,p=s-F*f;r=e,e=c,t=n,s=F,n=D,F=p}return r===1n?tx(t,x):wx("no inverse")},rc=A=>{let x=Ec[A];return typeof x!="function"&&wx("hashes."+A+" not set"),x},tc=A=>Je(A,64,"digest"),is=A=>A instanceof ft?A:wx("Point expected"),Ds=2n**256n,qs=class Ge{constructor(x,e,r,t){E0(this,"X"),E0(this,"Y"),E0(this,"Z"),E0(this,"T");let s=Ds;this.X=Oe(x,0n,s),this.Y=Oe(e,0n,s),this.Z=Oe(r,1n,s),this.T=Oe(t,0n,s),Object.freeze(this)}static CURVE(){return zo}static fromAffine(x){return new Ge(x.x,x.y,1n,C0(x.x*x.y))}static fromBytes(x,e=!1){let r=ss,t=$s(Je(x,ot)),s=x[31];t[31]=s&-129;let n=Yo(t);Oe(n,0n,e?Ds:Jt);let f=C0(n*n),c=tx(f-1n),D=C0(r*f+1n),{isValid:p,value:j}=ic(c,D);p||wx("bad point: y not sqrt");let _=(j&1n)===1n,k=(s&128)!==0;return!e&&j===0n&&k&&wx("bad point: x==0, isLastByteOdd"),k!==_&&(j=tx(-j)),new Ge(j,n,1n,C0(j*n))}static fromHex(x,e){return Ge.fromBytes(Vo(x),e)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){let x=ns,e=ss,r=this;if(r.is0())return wx("bad point: ZERO");let{X:t,Y:s,Z:n,T:F}=r,f=C0(t*t),c=C0(s*s),D=C0(n*n),p=C0(D*D),j=C0(f*x),_=C0(D*(j+c)),k=tx(p+C0(e*C0(f*c)));if(_!==k)return wx("bad point: equation left != right (1)");let S=C0(t*s),P=C0(n*F);return S!==P?wx("bad point: equation left != right (2)"):this}equals(x){let{X:e,Y:r,Z:t}=this,{X:s,Y:n,Z:F}=is(x),f=C0(e*F),c=C0(s*t),D=C0(r*F),p=C0(n*t);return f===c&&D===p}is0(){return this.equals(ze)}negate(){return new Ge(tx(-this.X),this.Y,this.Z,tx(-this.T))}double(){let{X:x,Y:e,Z:r}=this,t=ns,s=C0(x*x),n=C0(e*e),F=C0(2n*r*r),f=C0(t*s),c=tx(x+e),D=tx(C0(c*c)-s-n),p=tx(f+n),j=tx(p-F),_=tx(f-n),k=C0(D*j),S=C0(p*_),P=C0(D*_),N=C0(j*p);return new Ge(k,S,N,P)}add(x){let{X:e,Y:r,Z:t,T:s}=this,{X:n,Y:F,Z:f,T:c}=is(x),D=ns,p=ss,j=C0(e*n),_=C0(r*F),k=C0(C0(s*p)*c),S=C0(t*f),P=tx(C0(tx(e+r)*tx(n+F))-j-_),N=tx(S-k),L=tx(S+k),O=tx(_-C0(D*j)),s0=C0(P*N),R=C0(L*O),g=C0(P*O),M=C0(N*L);return new Ge(s0,R,M,g)}subtract(x){return this.add(is(x).negate())}multiply(x,e=!0){if(!e&&x===0n||(Oe(x,1n,zt),!e&&this.is0()))return ze;if(x===1n)return this;if(this.equals(jr))return dc(x).p;let r=ze,t=jr;for(let s=this;x>0n;s=s.double(),x>>=1n)x&1n?r=r.add(s):e&&(t=t.add(s));return r}multiplyUnsafe(x){return this.multiply(x,!1)}toAffine(){let{X:x,Y:e,Z:r}=this;if(this.equals(ze))return{x:0n,y:1n};let t=ec(r,Jt);C0(r*t)!==1n&&wx("invalid inverse");let s=C0(x*t),n=C0(e*t);return{x:s,y:n}}toBytes(){let{x,y:e}=this.toAffine(),r=nc(e);return r[31]|=x&1n?128:0,r}toHex(){return Jo(this.toBytes())}clearCofactor(){return this.multiply(Vt(Vl),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let x=this.multiply(zt/2n,!1).double();return zt%2n&&(x=x.add(this)),x.is0()}};E0(qs,"BASE");E0(qs,"ZERO");var ft=qs,jr=new ft(ao,oo,1n,tx(ao*oo)),ze=new ft(0n,1n,1n,0n);ft.BASE=jr;ft.ZERO=ze;var nc=A=>Vo(Ko(Oe(A,0n,Ds),64)).reverse(),Yo=A=>Vt("0x"+Jo($s(Je(A)).reverse())),GA=(A,x)=>{let e=A;for(;x-- >0n;)e=C0(e*e);return e},sc=A=>{let x=C0(A*A),e=C0(x*A),r=C0(GA(e,2n)*e),t=C0(GA(r,1n)*A),s=C0(GA(t,5n)*t),n=C0(GA(s,10n)*s),F=C0(GA(n,20n)*n),f=C0(GA(F,40n)*F),c=C0(GA(f,80n)*f),D=C0(GA(c,80n)*f),p=C0(GA(D,10n)*s);return{pow_p_5_8:C0(GA(p,2n)*A),b2:e}},fo=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,ic=(A,x)=>{let e=C0(x*C0(x*x)),r=C0(C0(e*e)*x),t=sc(C0(A*r)).pow_p_5_8,s=C0(A*C0(e*t)),n=C0(x*C0(s*s)),F=s,f=C0(s*fo),c=n===A,D=n===tx(-A),p=n===tx(-A*fo);return c&&(s=F),(D||p)&&(s=f),(tx(s)&1n)===1n&&(s=tx(-s)),{isValid:c||D,value:s}},ac=A=>Ac(Yo(A)),oc=(...A)=>Promise.resolve(rc("sha512Async")(Xo(...A))).then(tc),Fc=A=>{let x=$s(A),e=x.slice(0,32);e[0]&=248,e[31]&=127,e[31]|=64;let r=x.slice(32,64),t=ac(e),s=jr.multiply(t),n=s.toBytes();return{head:e,prefix:r,scalar:t,point:s,pointBytes:n}},vc=A=>oc(Je(A,ot)).then(Fc),fc=A=>vc(A).then(x=>x.pointBytes),Ec={sha512Async:async A=>{let x=Zl(),e=Xo(A);return rn(await x.digest("SHA-512",e.buffer))},sha512:void 0},lc=A=>(A=A===void 0?xc(ot):A,Je(A,ot)),cc=async A=>{let x=lc(A),e=await fc(x);return{secretKey:x,publicKey:e}},Wt=8,Bc=256,Qo=Math.ceil(Bc/Wt)+1,us=2**(Wt-1),Cc=()=>{let A=[],x=jr,e=x;for(let r=0;r<Qo;r++){e=x,A.push(e);for(let t=1;t<us;t++)e=e.add(x),A.push(e);x=e.double()}return A},Eo=void 0,lo=(A,x)=>{let e=x.negate();return A?e:x},dc=A=>{let x=Eo||(Eo=Cc()),e=ze,r=jr,t=2**Wt,s=t,n=Vt(t-1),F=Vt(Wt);for(let f=0;f<Qo;f++){let c=Number(A&n);A>>=F,c>us&&(c-=s,A+=1n);let D=f*us,p=D,j=D+Math.abs(c)-1,_=f%2!==0,k=c<0;c===0?r=r.add(lo(_,x[p])):e=e.add(lo(k,x[j]))}return A!==0n&&wx("invalid wnaf"),{p:e,f:r}},Dc=32,uc=64;async function co(){let{secretKey:A,publicKey:x}=await cc(),e=new Uint8Array(uc);return e.set(A,0),e.set(x,Dc),{publicKey:x,privateKey:e}}function ps(A){let x="";for(let e of A)x+=String.fromCharCode(e);return btoa(x)}function Bo(A,x="base64 value"){return bc(pc(A,x))}function pc(A,x){try{return atob(A)}catch{throw new Error(`malformed ${x}: not valid base64`)}}function Zo(A){return ps(A).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function bc(A){let x=new Uint8Array(A.length);for(let e=0;e<A.length;e++)x[e]=A.charCodeAt(e);return x}var Xt=class extends Error{constructor(A,x,e){super(e),E0(this,"httpStatus",A),E0(this,"code",x),this.name="CertApiError"}},Co="/api/1/companion/cert",mc=10080*60*1e3,Do=typeof __COMPANION_AUTH_DEV_PROXY__<"u"&&__COMPANION_AUTH_DEV_PROXY__;async function jc(A,x){let e=A.apiHost.replace(/\/+$/,""),r=Do?Co:e+Co,t={Authorization:`Bearer ${A.accessToken}`,"Content-Type":"application/json",Accept:"application/json"};Do&&e&&(t["x-target-host"]=e);let s=await fetch(r,{method:"POST",headers:t,body:JSON.stringify({publicKey:Zo(x.publicKey),subject:x.subject})});if(!s.ok){let F="unknown_error",f=s.statusText||`Cert API request failed (${s.status})`;try{let c=await s.json();c.code&&(F=c.code),c.message&&(f=c.message)}catch{}throw new Xt(s.status,F,f)}let n=await s.json();if(!n.certificate||!n.notAfter)throw new Xt(s.status,"invalid_response","Cert API response missing certificate or notAfter");return{certificateBase64Url:n.certificate,notAfter:n.notAfter}}function hc(A,x=mc){let e=Date.parse(A);return Number.isFinite(e)?e-Date.now()>x:!1}var gc=Kl(Jl(),1),Rt="[device-master]",tn={debug:(A,...x)=>console.debug(Rt,A,...x),info:(A,...x)=>console.info(Rt,A,...x),warn:(A,...x)=>console.warn(Rt,A,...x),error:(A,...x)=>console.error(Rt,A,...x)},bs={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},yc=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function AF(A,x=0){let e=~~x^-1;for(let r=0;r<A.length;r++)e=e>>>8^yc[(e^A[r])&255];return(e^-1)>>>0}var uo=Date.UTC(1999,11,31,0,0,0);function po(A,x,e=" "){let r=""+A,t=Math.max(0,Math.abs(x)-r.length),s=e.repeat(t);return x<0?r+s:s+r}function Me(A,x){return("0000000000000000"+A.toString(16)).substr(-x)}function bo(A){if(A instanceof Uint8Array)return A;if(A instanceof ArrayBuffer)return new Uint8Array(A);if(A&&Object.hasOwn(A,"type")&&A.type==="Buffer"&&Object.hasOwn(A,"data")&&A.data instanceof Array)return Uint8Array.from(A.data);if(A.buffer)return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("can not convert value to Uint8Array")}var np=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),sp=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);var kc=[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376],_c=new Map(kc.map((A,x)=>[A,128+x]));function wc(A){return A<=127||A>=160&&A<=255?A:_c.get(A)??63}var it="uto_script.dat",eF="uto_fw.dat",Ps=(A=>(A[A.RESULT=0]="RESULT",A[A.QUERY=1]="QUERY",A[A.DELETE=2]="DELETE",A[A.DATA=3]="DATA",A[A.UNS_DATA=4]="UNS_DATA",A[A.LIVE_DATA=5]="LIVE_DATA",A[A.FILE_LIST=7]="FILE_LIST",A[A.FILE_RETR=8]="FILE_RETR",A[A.FILE_STOR=9]="FILE_STOR",A[A.FILE_DELE=10]="FILE_DELE",A[A.SET_VALUE=11]="SET_VALUE",A))(Ps||{});var be=(A=>(A[A.DEVINFO=0]="DEVINFO",A[A.STAMPS=1]="STAMPS",A[A.LIC_QUERY=2]="LIC_QUERY",A[A.FILEMAP=3]="FILEMAP",A[A.MNTCFG=4]="MNTCFG",A[A.MDNCFG=5]="MDNCFG",A[A.CONTEXT=128]="CONTEXT",A[A.ALERTS=4294901767]="ALERTS",A[A.HISTDATA0=26368]="HISTDATA0",A[A.LOG=26375]="LOG",A[A.SYSCFG=26378]="SYSCFG",A[A.STATE=26389]="STATE",A[A.LOCALS=26402]="LOCALS",A[A.POS=26404]="POS",A[A.CTRLAMX=26405]="CTRLAMX",A[A.DYNPOS__=26406]="DYNPOS__",A[A.CONFIG0=26416]="CONFIG0",A[A.CONFIG1=26417]="CONFIG1",A[A.CONFIG2=26418]="CONFIG2",A[A.CONFIG3=26419]="CONFIG3",A[A.CONFIG4=26420]="CONFIG4",A[A.CONFIG5=26421]="CONFIG5",A[A.CONFIG6=26422]="CONFIG6",A[A.CONFIG7=26423]="CONFIG7",A[A.CONFIG8=26424]="CONFIG8",A[A.CONFIG9=26425]="CONFIG9",A[A.SYSOTP=26432]="SYSOTP",A[A.SYSFLASH=26433]="SYSFLASH",A[A.APPOTP=26434]="APPOTP",A[A.APPFLASH=26435]="APPFLASH",A[A.APPSTATE=26436]="APPSTATE",A[A.SYSINFO=26437]="SYSINFO",A[A.APPINFO=26438]="APPINFO",A[A.SYSSTATE=26439]="SYSSTATE",A[A.HISTDATA1=26528]="HISTDATA1",A[A.HISTDATA2=26529]="HISTDATA2",A[A.HISTDATA3=26530]="HISTDATA3",A[A.HISTDATA4=26531]="HISTDATA4",A[A.HISTDATA5=26532]="HISTDATA5",A[A.HISTDATA6=26533]="HISTDATA6",A[A.HISTDATA7=26534]="HISTDATA7",A[A.HISTDATA8=26535]="HISTDATA8",A[A.HISTDATA9=26536]="HISTDATA9",A[A.HISTDATA_RAW=26623]="HISTDATA_RAW",A[A.CONFIGA=4294928218]="CONFIGA",A[A.CONFIGB=4294928219]="CONFIGB",A[A.CONFIGC=4294928220]="CONFIGC",A))(be||{});var Ts=(A=>(A[A.off=0]="off",A[A.pawn=2]="pawn",A))(Ts||{});var Sc=97;function ms(A){return A&Sc}var mo={config0:26416,config1:26417,config2:26418,config3:26419,config4:26420,config5:26421,config6:26422,config7:26423,config8:26424,config9:26425,histdata0:26368,histdata1:26528,histdata2:26529,histdata3:26530,histdata4:26531,histdata5:26532,histdata6:26533,histdata7:26534,histdata8:26535,histdata9:26536},$c=class{constructor(){}resultToString(A){A|=0;let x=A&256?"+DISC":"";switch(A&255){case 0:return"OK"+x;case 1:return"E_TAG"+x;case 2:return"E_DLEN"+x;case 3:return"E_DATA"+x;case 4:return"E_STAMP"+x;case 5:return"E_EOD"+x;case 6:return"E_CMD"+x;case 7:return"E_CMDDENIED"+x;case 8:return"E_FULL"+x;case 9:return"E_NOTSUPPORTED"+x;case 10:return"E_OLDDATA"+x;case 11:return"E_STORAGE"+x;case 12:return"E_STORAGE"+x}return"E_0x"+Me(A,4)+x}commandToString(A){switch(A|=0,A){case 0:return"COMMAND_RESULT";case 1:return"COMMAND_QUERY";case 2:return"COMMAND_DEL";case 3:return"COMMAND_DATA";case 4:return"COMMAND_UNS_DATA";case 5:return"COMMAND_LIVE_DATA";case 7:return"COMMAND_FILE_LIST";case 8:return"COMMAND_FILE_RETR";case 9:return"COMMAND_FILE_STOR";case 10:return"COMMAND_FILE_DELE";case 11:return"COMMAND_SET_VALUE"}return"COMMAND_0x"+Me(A,2)}tagToString(A){A|=0;let x=Object.entries(be).find(([,e])=>e===A);return x?"TAG_"+x[0]:"TAG_0x"+Me(A,4)}containerIdToTag(A,x){let e=mo[A]||null;return e&&x&&A.startsWith("histdata")?26623:e}containerIdOf(A){let x=Object.entries(mo).find(([,e])=>e===A.wTag);if(x)return x[0];if(A.wTag===26623){if(!A.data||!A.data.byteLength)return null;let e=A.data.getUint8(0);return e===32?"alerts":e>=0&&e<=9?`histdata${e}`:null}return null}formatSerialNumber(A,x="-"){return A?A.substr(0,4)+x+A.substr(4,4)+x+A.substr(8,4)+x+A.substr(12):"(none)"}decodeUplinkState(A){let x={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},e=!!(A&x.WAKEUPABLE),r=[];A&x.POSUPDATE_ACTIVE?r=["locating",!1]:A&x.RETRY?r=["retry",!1]:A&x.STARTED?r=["dialing",!1]:A&x.ACTIVE?r=["active",!1]:A&x.FAILED?r=["failed",e]:A&x.DISABLED?r=["disabled",!1]:r=["offline",e];let t=x.WAKEUPABLE|x.RETRY|x.STARTED|x.ACTIVE|x.POSUPDATE_ACTIVE|x.FAILED|x.DISABLED|x.EXTSIM;return{signal:r[0],wakeupAble:r[1],path:A&x.EXTSIM?"xsim ":"isim ",txStateUnknown:A&~t}}stamp40ToMS(A){let x=Math.trunc(A/256),e=A&255;return Math.round(x*1e3+1e3*e/256)+uo}msToStamp40(A){let x=(A-uo)/1e3,e=Math.trunc(x),r=Math.round((x-e)*256);return e*256+r}stamp40ToDate(A){return new Date(this.stamp40ToMS(A))}utf8Unpack(A,x,e){let r=new TextDecoder("utf-8"),t=0;for(;t<e&&A.getUint8(x+t);)t++;let s=new Uint8Array(A.buffer,x,t);return r.decode(s)}ansiUnpack(A,x,e,r){try{let t=bo(A),s=new TextDecoder(r),n=0;for(;n<e&&t[x+n];)n++;return s.decode(t.slice(x,x+n))}catch(t){return console.log("?"+t.message,t),`ERR-unknown codepage "${r}"`}}cp1252Unpack(A,x,e){return this.ansiUnpack(A,x,e,"cp1252")}ansiPack(A,x,e,r){let t=bo(A);t.fill(0,x,x+e);for(let s=0;s<e&&s<r.length;s++)t[x+s]=wc(r.charCodeAt(s))}cp1252Pack(A,x,e,r){return this.ansiPack(A,x,e,r)}dataFrameNotNull(A){if(!A.data)throw new Error("UtoFrame does not have any data!")}decode_DEVINFO(A){this.dataFrameNotNull(A);let x=A.data,e=x.getUint16(0),r=x.getUint16(2),t=x.getUint16(4),s=x.getUint32(6),n=(Me(s,8)+Me(A.dwDevSN,8)).toUpperCase(),F=[];for(let f=0;f<(x.byteLength-10)/5;f++){let c=x.getUint8(10+f*5+2),D=x.getUint16(10+f*5);F.push({wTag:D,sTag:this.tagToString(D),size:x.getUint16(10+f*5+3),flags:{historic:!!(c&1),single:!(c&1),up:!!(c&2),down:!!(c&4),variableLength:!!(c&8),setValue:!!(c&16)}})}return{serialNumber:n,class:Me(e,4),firmwareVersion:`${po(t>>8,2)}v${po(t&255,3,"0")}`,flags:Me(r,4),utos:F}}decode_STAMPS(A){this.dataFrameNotNull(A);let x=A.data,e={contextId:x.getBigUint64(0,!0).toString(16).toUpperCase(),stamps:[]};for(let r=0;r<(x.byteLength-8)/5;r++)e.stamps.push(x.getUint32(8+r*5+0)*256+x.getUint8(8+r*5+4));return e}decode_CONTEXT(A){this.dataFrameNotNull(A);let x=A.data;return{id:x.getBigUint64(0,!0).toString(16).toUpperCase(),name:this.cp1252Unpack(x,8,50)}}encode_CONTEXT(A){let x=new Uint8Array(58),e=new DataView(x.buffer);return e.setBigUint64(0,BigInt("0x"+A.id),!0),this.cp1252Pack(e,8,50,A.name),x}decode_FILEMAP(A){this.dataFrameNotNull(A);let x=A.data,e=x.getUint16(13,!1),r={stamp:x.getUint32(0,!1)*256+x.getUint8(4),size:x.getUint32(5,!1),crc32:x.getUint32(9,!1),flags:{read:!!(e&1),write:!!(e&2),node:!!(e&4),system:!!(e&8),extra:e&-16},_flags:e,name:this.cp1252Unpack(x,15,x.byteLength-15)};if(r.flags?.extra)throw new Error("?UTO.decode_FILEMAP.unknown-file-flags."+r.flags.extra);return r}encode_FILEMAP(A){if(A.flags){let r=0;A.flags.extra&&(r|=A.flags.extra|0),A.flags.read&&(r|=1),A.flags.write&&(r|=2),A.flags.node&&(r|=4),A.flags.system&&(r|=8),A._flags=r}let x=new Uint8Array(15+A.name.length+1),e=new DataView(x.buffer);return e.setUint32(0,Math.trunc(A.stamp/256),!1),e.setUint8(4,A.stamp&255),e.setUint32(5,A.size,!1),e.setUint32(9,A.crc32,!1),e.setUint16(13,A._flags,!1),this.cp1252Pack(e,15,256,A.name),x}decode_RM2M_STATE(A){this.dataFrameNotNull(A);let x=A.data;return{rssi:x.getInt8(0),uplinkMode:x.getUint8(1),imei:this.cp1252Unpack(x,61,15),hardwareId:this.cp1252Unpack(x,96,50),sim:{id:this.cp1252Unpack(x,2,15),apn:this.cp1252Unpack(x,17,40),iccId:this.cp1252Unpack(x,76,20)},network:{mcc:x.getUint16(57),mnc:x.getUint16(59)}}}},V0=new $c,gr={nowMs:()=>Date.now()},rF=class{constructor(A="(unnamed)"){E0(this,"name"),E0(this,"_locked"),E0(this,"_chain"),this.name=A,this._locked=0,this._chain=[]}get islocked(){return!!this._locked}requestLock(){if(++this._locked!==1)return new Promise(A=>{this._chain.push(A)})}unlock(){--this._locked,this._chain.length&&this._chain.shift()()}async runExclusive(A){await this.requestLock();try{return await A()}finally{this.unlock()}}},jo=new WeakMap;function qc(A,x){let r=(jo.get(A)??Promise.resolve()).then(()=>Pc(A,x));return jo.set(A,r.catch(()=>{})),r}async function Pc(A,x){A.interface&&A.interface==="ble"?await Tc(async e=>{await A.write(e)},x,A.mtuSize??23):await A.write(x)}async function Tc(A,x,e=23){let r=new Uint8Array(x),t=e-3;for(let s=0;s<r.byteLength;s+=t){let n=r.slice(s,s+t);await A(n.buffer)}}var ho=15e3,Nc=500,Ic=3,Mc=1024;function go(A){return A?.utos.find(e=>e.wTag===3)?.size||Mc}var Ns=class Kt extends xF.EventEmitter{constructor(x,e,r=gr){super(),E0(this,"mdnComInterface"),E0(this,"receiveUto"),E0(this,"sendUto"),E0(this,"rxUto"),E0(this,"txStream"),E0(this,"SendUtoCmdExt"),E0(this,"utoPortLock"),E0(this,"transport"),E0(this,"logger"),E0(this,"ecsHandshakeResolver",null),E0(this,"disposeTransportListener",null),E0(this,"encrypted",!1),E0(this,"lastTxWrite",Promise.resolve()),E0(this,"timeSource"),E0(this,"fileChunkSize",go(null)),this.mdnComInterface=null,this.receiveUto=null,this.sendUto=null,this.rxUto=null,this.txStream=null,this.SendUtoCmdExt=null,this.utoPortLock=new rF("UTO-Port"),this.transport=x,this.logger=e??tn,this.timeSource=r}async init(){if(this.mdnComInterface!==null)return;this.mdnComInterface=await(0,gc.default)({print:s=>{this.logger.info(`[mdnCom] ${s}`),this.emit("mdnCom",s)},printErr:s=>{this.logger.error(`[mdnCom] ${s}`),this.emit("mdnComError",s)}});let x=this.mdnComInterface.MdnCom_Init;this.receiveUto=this.mdnComInterface.MdnCom_RawRx,this.sendUto=this.mdnComInterface.MdnCom_SendUtoQuery,this.rxUto=this.mdnComInterface.MdnCom_GetRxUto,this.txStream=this.mdnComInterface.MdnCom_GetTxStream,this.SendUtoCmdExt=this.mdnComInterface.MdnCom_SendUtoCmdExt;let e=this.mdnComInterface.addFunction(()=>{if(this.txStream){let s=this.txStream();this.lastTxWrite=qc(this.transport,s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength))}},"v"),r=this.mdnComInterface.addFunction(()=>{if(this.rxUto){let s=this.rxUto(),n=this.parseUtoFrame(s);this.emit("utoFrame",n)}},"v");await x(e,r);let t=this.mdnComInterface.addFunction(s=>{if(this.logger.info(`[ecs] handshake event from WASM: result=${s} resolverPresent=${this.ecsHandshakeResolver!==null}`),this.ecsHandshakeResolver){let n=this.ecsHandshakeResolver;this.ecsHandshakeResolver=null,n({success:s===0,resultCode:s})}else this.logger.warn("[ecs] handshake event fired but no resolver registered \u2014 Promise will hang")},"vi");this.logger.info(`[ecs] registering handshake callback fn=${t}`),this.mdnComInterface.MdnCom_RegisterEcsHandshakeCallback(t),this.disposeTransportListener=this.transport.onData(async s=>{this.receiveUto&&await this.receiveUto(new Uint8Array(s))}),await this.requestDeviceInfo().catch()}async dispose(x){if(this.logger.info("[dispose] starting dispose"),this.encrypted){if(!x){let e=new Error("[dispose] encrypted session active but no AtCommandHandler provided \u2014 cannot send connection close");throw this.logger.error(e.message),e}try{this.logger.info("[dispose] requesting context for encrypted close");let e=await this.requestContext();e?(this.logger.info("[dispose] writing context back to device"),await this.writeContext(e)):this.logger.warn("[dispose] requestContext returned null \u2014 skipping writeContext")}catch(e){this.logger.error(`[dispose] error during context round trip: ${e}`)}try{this.logger.info("[dispose] sending connection close"),await x.sendConnectionClose(),this.logger.info("[dispose] connection close acknowledged")}catch(e){this.logger.error(`[dispose] error sending connection close: ${e}`)}finally{this.encrypted=!1,this.logger.info("[dispose] encrypted flag cleared")}}if(this.disposeTransportListener&&(this.logger.info("[dispose] removing transport data listener"),this.disposeTransportListener(),this.disposeTransportListener=null),this.mdnComInterface){this.logger.info("[dispose] resetting WASM ECS state");try{this.mdnComInterface.MdnCom_ResetEcs()}catch(e){this.logger.error(`[dispose] error resetting WASM ECS state: ${e}`)}this.ecsHandshakeResolver=null}this.logger.info("[dispose] dispose complete")}isInitialized(){if(!this.mdnComInterface)throw new Error('utoMaster not initialized. Have you called "init()"?')}parseUtoFrame(x){return{dwDevSN:x.vDevID_u32,bCmd:x.vCmd_u8,stamp:x.vStamp_s.u32SysTime*256+x.vStamp_s.u8SysTime,wTag:x.vTag_u16&255,wTagFull:x.vTag_u16,sTag:V0.resultToString(x.vTag_u16),_dbg:x.vDevID_u32.toString(16),bVersion:1,_dlen:x.vDLen_u16,bRes:x.vRes_u8,bSeq:x.vSeq_u8,data:x.vData_pu8.length?new DataView(x.vData_pu8.buffer,x.vData_pu8.byteOffset,x.vData_pu8.length):null}}get utoStampNow(){return{u32SysTime:Math.floor(this.timeSource.nowMs()/1e3)-946598400,u8SysTime:0}}get utoStampNow40(){return this.utoStampNow.u32SysTime*256}async requestUto(x,e=0){await this.utoPortLock.requestLock();try{if(!this.sendUto)return null;let r=Math.trunc(e/256),t=e&255;return await this.sendWithRetry((s,n,F)=>{if(s.bCmd===0){let f=this.resultVerdict(s);f===5||f===0||f===4?n(null):F(s);return}if(s.wTagFull!==x)return F(s);n(s)},async()=>{this.sendUto(x,{u32SysTime:r,u8SysTime:t}),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] requestUto: no response from device for tag=0x${x.toString(16)}`})}finally{this.utoPortLock.unlock()}}copyDataView(x){return new Uint8Array(x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength))}static resultCode(x){return{verdict:x.wTagFull&-257,disc:(x.wTagFull&256)!==0}}resultVerdict(x){let{verdict:e,disc:r}=Kt.resultCode(x);return r&&(this.logger.warn(`[UtoMaster] device requested disconnect (RESULT 0x${x.wTagFull.toString(16).padStart(4,"0")})`),this.emit("deviceDisconnectRequested",x.wTagFull)),e}static concatChunks(x){let e=x.reduce((s,n)=>s+n.length,0),r=new Uint8Array(e),t=0;for(let s of x)r.set(s,t),t+=s.length;return r}sendWithRetry(x,e,r){let t=r?.timeoutMs??Nc,s=r?.maxRetries??Ic;return new Promise((n,F)=>{let f=0,c=!1,D=()=>{},p,j={resolve:k=>{c=!0,clearTimeout(p),this.removeListener("utoFrame",D),n(k)},reject:k=>{c=!0,clearTimeout(p),this.removeListener("utoFrame",D),F(k)}},_=async()=>{D=k=>x(k,j.resolve,j.reject),this.once("utoFrame",D);try{await e()}catch(k){if(c)return;this.removeListener("utoFrame",D),F(k);return}c||(p=setTimeout(()=>{if(this.removeListener("utoFrame",D),f>=s){F(new Error(r?.timeoutMessage??`[UtoMaster] no response from device after ${s} retries`));return}f++,this.logger.warn(`[UtoMaster] no response within ${t}ms, retrying (${f}/${s})`),_()},t))};_()})}createFrameIdleGuard(x,e,r){let t,s=()=>{t!==void 0&&(clearTimeout(t),t=void 0)};return{arm:()=>{s(),t=setTimeout(()=>{t=void 0,this.removeListener("utoFrame",x),r()},e)},clear:s}}async requestHistoricUtos(x,e,r,t=ho,s=0,n){return await this.utoPortLock.requestLock(),new Promise((F,f)=>{if(!this.sendUto)return F([]);let c=[],D=0,p=Promise.resolve(),j=P=>{if(_.arm(),P.bCmd===0){_.clear(),this.settleHistoricTransfer(P,c,n,p,F,f);return}if(P.wTagFull===x&&P.data&&(c.push({stamp40:P.stamp,data:this.copyDataView(P.data)}),r?.(++D),n&&s>0&&c.length>=s)){let N=c.splice(0);p=p.then(()=>n(N))}this.once("utoFrame",j)},_=this.createFrameIdleGuard(j,t,()=>f(new Error(`[UtoMaster] requestHistoricUtos timed out after ${t}ms (tag=0x${x.toString(16)}, ${D} records received)`)));this.once("utoFrame",j),_.arm();let k=Math.trunc(e/256),S=e&255;this.sendUto(x,{u32SysTime:k,u8SysTime:S})}).finally(()=>{this.utoPortLock.unlock()})}settleHistoricTransfer(x,e,r,t,s,n){let F=this.resultVerdict(x);if(!(F===5||F===0||F===4)){t.then(()=>n(x)).catch(n);return}let c=r&&e.length>0?e.splice(0):null;(c?t.then(()=>r(c)):t).then(()=>s(r?[]:e)).catch(n)}async requestFile(x,e,r=ho){return await this.utoPortLock.requestLock(),new Promise((t,s)=>{if(!this.SendUtoCmdExt)return t(new Uint8Array(0));let n=[],F=0,f=p=>{if(c.arm(),p.bCmd===0){c.clear();let j=this.resultVerdict(p);j===5||j===0?t(Kt.concatChunks(n)):s(p);return}if(p.bCmd===3&&p.data){let j=this.copyDataView(p.data);n.push(j),F+=j.byteLength,e?.(F)}this.once("utoFrame",f)},c=this.createFrameIdleGuard(f,r,()=>s(new Error(`[UtoMaster] requestFile timed out after ${r}ms (file="${x}", ${F} bytes received)`)));this.once("utoFrame",f),c.arm();let D=new Uint8Array(x.length+1);for(let p=0;p<x.length;p++)D[p]=x.charCodeAt(p)&255;this.SendUtoCmdExt(8,3,{u32SysTime:0,u8SysTime:0},D)}).finally(()=>{this.utoPortLock.unlock()})}async deleteFile(x){let e=new Uint8Array(x.length+1);for(let r=0;r<x.length;r++)e[r]=x.charCodeAt(r)&255;await this.sendUTOCmdExt(10,3,e,0)}async sendSetValue(x,e,r){this.isInitialized();let t=new Uint8Array(e.length);V0.cp1252Pack(t,0,e.length,e);try{return await this.sendUTOCmdExt(11,x,t,r),{outcome:"ok",resultCode:0}}catch(s){let n=s;if(n&&n.bCmd===0&&typeof n.wTagFull=="number"){let{verdict:F}=Kt.resultCode(n),f=n.wTagFull;return F===4?{outcome:"stamp",resultCode:f}:F===7||F===9?{outcome:"denied",resultCode:f}:{outcome:"error",resultCode:f}}return this.logger.error(`[UtoMaster] sendSetValue transport error tag=0x${x.toString(16)}: ${s}`),{outcome:"error"}}}async requestDeviceInfo(){let x=await this.requestUto(0,this.utoStampNow40),e=x?V0.decode_DEVINFO(x):null;return e&&(this.fileChunkSize=go(e)),e}get fileTransferChunkSize(){return this.fileChunkSize}async requestContext(){let x=await this.requestUto(128,this.utoStampNow40);return x?V0.decode_CONTEXT(x):null}async writeContext(x){await this.sendUTOCmdExt(3,128,V0.encode_CONTEXT(x))}async requestFileList(x){return await this.utoPortLock.requestLock(),new Promise((e,r)=>{if(!this.SendUtoCmdExt)return e({});let t={},s=n=>this.handleFileListFrame(n,t,x,e,r,s);this.once("utoFrame",s),this.SendUtoCmdExt(7,3,{u32SysTime:0,u8SysTime:0},new Uint8Array(0))}).finally(()=>{this.utoPortLock.unlock()})}handleFileListFrame(x,e,r,t,s,n){if(x.bCmd===0){let F=this.resultVerdict(x);F===5||F===0?t(r?e[r]?{[r]:e[r]}:{}:e):s(x);return}try{let F=V0.decode_FILEMAP(x);e[F.name]=F}catch(F){s(F);return}this.once("utoFrame",n)}async requestStamps(){let x=await this.requestUto(1,this.utoStampNow40);return x?V0.decode_STAMPS(x):null}async sendFile(x,e,r,t){let s=e;x===2&&(s=new Uint8Array(e.length+1),s.set(new Uint8Array(e),1),s[0]=x);let n={name:t??it,stamp:r===0?0:V0.msToStamp40(r??this.timeSource.nowMs()),size:s.length,_flags:11,crc32:AF(s)},F=V0.encode_FILEMAP(n);if(!await this.sendUTOCmdExt(9,3,F,0)){let c=this.fileChunkSize;for(let D=0;D<s.length;D+=c){let p=Math.min(c,s.byteLength-D),j=new Uint8Array(s.buffer,s.byteOffset+D,p);await this.sendUTOCmdExt(3,3,j,D*256);let k=(D+p)/s.byteLength*100;this.emit("installing",k.toFixed(0))}}this.emit("installing",null)}async sendUTOCmdExt(x,e,r,t){await this.utoPortLock.requestLock();try{if(!this.SendUtoCmdExt)return null;let s=t??this.utoStampNow40,n=Math.trunc(s/256),F=s&255;return await this.sendWithRetry((f,c,D)=>{if(f.bCmd!==0){D(f);return}this.resultVerdict(f)===0?c(null):D(f)},async()=>{this.SendUtoCmdExt(x,e,{u32SysTime:n,u8SysTime:F},r),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] sendUTOCmdExt: no response from device for cmd=${x} tag=0x${e.toString(16)}`})}finally{this.utoPortLock.unlock()}}async sendUTOData(x,e,r){return this.sendUTOCmdExt(3,x,e,r)}packOtpFlashString(x){let e=new Uint8Array(1024);return V0.cp1252Pack(e,0,1024,x),e}async writeAppOtp(x){await this.sendUTOData(26434,this.packOtpFlashString(x))}async writeAppFlash(x){await this.sendUTOData(26435,this.packOtpFlashString(x))}async writeSysOtp(x){await this.sendUTOData(26432,this.packOtpFlashString(x))}async writeSysFlash(x){await this.sendUTOData(26433,this.packOtpFlashString(x))}async initiateEcsHandshake(x){if(this.isInitialized(),x.companionPublicKey.length!==32)throw new Error(`companionPublicKey must be 32 bytes, got ${x.companionPublicKey.length}`);if(x.companionPrivateKey.length!==32&&x.companionPrivateKey.length!==64)throw new Error(`companionPrivateKey must be 32 bytes (seed) or 64 bytes (seed||public), got ${x.companionPrivateKey.length}`);let e=x.companionPublicKey.slice(0,32),r=x.companionPrivateKey.slice(0,32);this.logger.info(`[ecs] initiateEcsHandshake: pub.len=${e.length} seed.len=${r.length} state(pre)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`);let t=this.mdnComInterface.MdnCom_SetCompanionKeypair(e,r);return this.logger.info(`[ecs] MdnCom_SetCompanionKeypair returned ${t}`),t<0?{success:!1,resultCode:t}:new Promise((s,n)=>{if(x.signal?.aborted){n(new Error("Operation aborted"));return}let F=()=>{this.ecsHandshakeResolver&&(this.logger.warn("[ecs] abort signal fired \u2014 resetting WASM state"),this.ecsHandshakeResolver=null,this.mdnComInterface.MdnCom_ResetEcs(),n(new Error("Operation aborted")))};x.signal?.addEventListener("abort",F,{once:!0}),this.ecsHandshakeResolver=c=>{this.logger.info(`[ecs] resolver invoked: result=${JSON.stringify(c)}`),x.signal?.removeEventListener("abort",F),c.success&&(this.encrypted=!0),s(c)},this.logger.info("[ecs] calling MdnCom_InitiateEcsHandshake()");let f=this.mdnComInterface.MdnCom_InitiateEcsHandshake();this.logger.info(`[ecs] MdnCom_InitiateEcsHandshake returned ${f} state(post)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`),f<0?(this.ecsHandshakeResolver=null,x.signal?.removeEventListener("abort",F),s({success:!1,resultCode:f})):this.logger.info("[ecs] awaiting device INIT response via MdnCom_RawRx ...")})}resetEcs(){this.isInitialized(),this.mdnComInterface.MdnCom_ResetEcs(),this.ecsHandshakeResolver=null}},nn=(A=>(A[A.error=0]="error",A[A.warn=1]="warn",A[A.debug=2]="debug",A[A.info=3]="info",A))(nn||{}),Lc=5e3,Rc=5e3,nF=class extends tF.EventEmitter{constructor(A,x){super(),E0(this,"atHandler"),E0(this,"debugCache",null),E0(this,"logger"),E0(this,"dataHandler"),this.atHandler=A,this.logger=x??tn,this.dataHandler=e=>{this.processIncomingDebugData(e)},this.atHandler.on("data",this.dataHandler)}initDebugCache(){return this.debugCache?this.debugCache:this.debugCache={debugStamp:Date.now(),f00:"",f00Start:0,f01LastSee:-1,f11:[]}}processIncomingDebugData(A){let x=this.initDebugCache();this.processDebugChunk(x,A)}async sendDebugCommand(A){await this.atHandler.sendRaw(A)}formatConsoleLine(A){if(!A.length)return;let x=A;A[0]===""&&(x=A.substring(1));try{let[e,r,,t]=x.split(" "),s={sequenceId:e?.substring(1),lineNumber:Number.isNaN(r)?void 0:Number(r),message:"",level:3},n=`${t.substring(1)}`,F=t.substring(0,1);"$!?~$".includes(F)&&(s.level=this.logLevelFromPrefix(F)),s.message=n,this.emitMessageEvent(s)}catch{this.emitMessageEvent({level:2,message:x})}}logLevelFromPrefix(A){switch(A){case"!":return 0;case"?":return 1;case"~":return 2;default:return 3}}emitMessageEvent(A){this.emit("message",A)}processDebugChunk({f00:A,f00Start:x,f01LastSee:e,f11:r},t){for(let s of t){s==="\xFF"&&(s="%");let n=String.fromCharCode(...r.map(F=>F.tag));if(s===""){switch(n){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:1,buf:s,start:Date.now()})}else if(s===""){switch(n){case"":case"":break;case"":case"":continue;case"":r.pop();break;default:}let F=r.pop().buf+s;F==="****^reset****"?e=0:this.process_x01(F,e)}else if(s===""){switch(n){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:16,buf:s,start:Date.now()})}else if(r.length){let F=r[r.length-1];if(F.tag===16&&s==="\r")continue;F.buf+=s,F.tag===16&&s===`
|
|
2332
|
-
`&&r.pop()}else{if(
|
|
2333
|
-
`)))continue;
|
|
2334
|
-
`).forEach(f=>{this.onConsole(f)}),
|
|
2192
|
+
}`;var W0=new Function(Object.keys(e0),u0)(...Object.values(e0)),V0=`methodCaller<(${Q.map(Y0=>Y0.name)}) => ${P.name}>`;return M(qe(V0,W0))},h0=l=>(l=L0(l),D0.toHandle(n[l])),Ex=(l,B)=>(l=D0.toValue(l),B=D0.toValue(B),D0.toHandle(l[B])),kx=l=>{l>9&&(V[l+1]+=1)},Ux=(l,B,h,q,P)=>w[l](B,h,q,P),Wx=l=>D0.toHandle(L0(l)),Xx=l=>{var B=D0.toValue(l);$A(B),o0(l)},Me=()=>2147483648,nA=(l,B)=>(g(B,"alignment argument is required"),Math.ceil(l/B)*B),de=l=>{var B=wt.buffer.byteLength,h=(l-B+65535)/65536|0;try{return wt.grow(h),vx(),1}catch(q){O(`growMemory: Attempted to grow heap from ${B} bytes to ${l} bytes, but got error: ${q}`)}},mx=l=>{var B=px.length;l>>>=0,g(l>B);var h=Me();if(l>h)return O(`Cannot enlarge memory, requested ${l} bytes, but the limit is ${h} bytes!`),!1;for(var q=1;q<=4;q*=2){var P=B*(1+.2/q);P=Math.min(P,l+100663296);var Q=Math.min(h,nA(Math.max(l,P),65536)),X=de(Q);if(X)return!0}return O(`Failed to grow the heap from ${B} bytes to ${Q} bytes, not enough memory!`),!1},$v=l=>{ax("fd_close called without SYSCALLS_REQUIRE_FILESYSTEM")},qv=9007199254740992,Tv=-9007199254740992,Pv=l=>l<Tv||l>qv?NaN:Number(l);function Nv(l,B,h,q){return B=Pv(B),70}var Ln=[null,[],[]],Rn=(l,B)=>{var h=Ln[l];g(h),B===0||B===10?((l===1?L:O)(yt(h)),h.length=0):h.push(B)},A7=()=>{Oi(0),Ln[1].length&&Rn(1,10),Ln[2].length&&Rn(2,10)},Mv=(l,B,h,q)=>{for(var P=0,Q=0;Q<h;Q++){var X=g0[B>>2],x0=g0[B+4>>2];B+=8;for(var e0=0;e0<x0;e0++)Rn(l,px[X+e0]);P+=x0}return g0[q>>2]=P,0},Iv=()=>{if(C){var l=require("crypto");return B=>l.randomFillSync(B)}return B=>(crypto.getRandomValues(B),0)},Mi=l=>(Mi=Iv())(l),Lv=(l,B)=>Mi(px.subarray(l,l+B)),Rv=(l,B)=>{if(Ie)for(var h=l;h<l+B;h++){var q=Te(h);q&&Ie.set(q,h)}},Ie,Ov=l=>(Ie||(Ie=new WeakMap,Rv(0,Le.length)),Ie.get(l)||0),On=[],Gv=()=>{if(On.length)return On.pop();try{return Le.grow(1)}catch(l){if(!(l instanceof RangeError))throw l;ax("Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.")}},Gn=(l,B)=>{Le.set(l,B),QA[l]=Le.get(l)},Ii=l=>{let B=l.length;return g(B<16384),[B%128|128,B>>7,...l]},Uv={i:127,p:127,j:126,f:125,d:124,e:111},Li=l=>Ii(Array.from(l,B=>{var h=Uv[B];return g(h,`invalid signature char: ${B}`),h})),Hv=(l,B)=>{var h=Uint8Array.of(0,97,115,109,1,0,0,0,1,...Ii([1,96,...Li(B.slice(1)),...Li(B[0]==="v"?"":B[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),q=new WebAssembly.Module(h),P=new WebAssembly.Instance(q,{e:{f:l}}),Q=P.exports.f;return Q},Kv=(l,B)=>{g(typeof l<"u");var h=Ov(l);if(h)return h;var q=Gv();try{Gn(q,l)}catch(Q){if(!(Q instanceof TypeError))throw Q;g(typeof B<"u","Missing signature argument to addFunction: "+l);var P=Hv(l,B);Gn(q,P)}return Ie.set(l,q),q},zv=l=>{Ie.delete(Te(l)),Gn(l,null),On.push(l)};Kr(),vr(),g(V.length===10);{if(n.noExitRuntime&&(ke=n.noExitRuntime),n.print&&(L=n.print),n.printErr&&(O=n.printErr),n.wasmBinary&&(i0=n.wasmBinary),n.FS_createDataFile=xA.createDataFile,n.FS_createPreloadedFile=xA.createPreloadedFile,Wv(),n.arguments&&(p=n.arguments),n.thisProgram&&(j=n.thisProgram),g(typeof n.memoryInitializerPrefixURL>"u","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),g(typeof n.pthreadMainPrefixURL>"u","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),g(typeof n.cdInitializerPrefixURL>"u","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),g(typeof n.filePackagePrefixURL>"u","Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),g(typeof n.read>"u","Module.read option was removed"),g(typeof n.readAsync>"u","Module.readAsync option was removed (modify readAsync in JS)"),g(typeof n.readBinary>"u","Module.readBinary option was removed (modify readBinary in JS)"),g(typeof n.setWindowTitle>"u","Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)"),g(typeof n.TOTAL_MEMORY>"u","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"),g(typeof n.ENVIRONMENT>"u","Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)"),g(typeof n.STACK_SIZE>"u","STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time"),g(typeof n.wasmMemory>"u","Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally"),g(typeof n.INITIAL_MEMORY>"u","Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically"),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();t0("preInit")}n.addFunction=Kv,n.removeFunction=zv;var Jv=["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","stackAlloc","getTempRet0","setTempRet0","zeroMemory","exitJS","withStackSave","strError","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","readEmAsmArgs","jstoi_q","getExecutableName","autoResumeAudioContext","getDynCaller","dynCall","handleException","keepRuntimeAlive","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","asyncLoad","asmjsMangle","mmapAlloc","HandleAllocator","getUniqueRunDependency","addRunDependency","removeRunDependency","addOnInit","addOnPostCtor","addOnPreMain","addOnExit","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","ccall","cwrap","intArrayFromString","intArrayToString","stringToAscii","stringToNewUTF8","stringToUTF8OnStack","writeArrayToMemory","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","jsStackTrace","getCallstack","convertPCtoSourceLocation","getEnvStrings","checkWasiClock","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","safeSetTimeout","setImmediateWrapped","safeRequestAnimationFrame","clearImmediateWrapped","registerPostMainLoop","registerPreMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","findMatchingCatch","incrementUncaughtExceptionCount","decrementUncaughtExceptionCount","Browser_asyncPrepareDataCounter","isLeapYear","ydayFromDate","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_createPreloadedFile","FS_preloadFile","FS_modeStringToFlags","FS_getMode","FS_fileDataToTypedArray","FS_stdin_getChar","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","runAndAbortIfError","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","allocateUTF8","allocateUTF8OnStack","demangle","stackTrace","getNativeTypeSize","getFunctionArgsName","createJsInvokerSignature","getEnumValueType","PureVirtualError","registerInheritedInstance","unregisterInheritedInstance","getInheritedInstanceCount","getLiveInheritedInstances","enumReadValueFromPointer","installIndexedIterator","setDelayFunction","count_emval_handles"];Jv.forEach(v0);var Vv=["run","out","err","callMain","abort","wasmExports","writeStackCookie","checkStackCookie","INT53_MAX","INT53_MIN","bigintToI53Checked","HEAP8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAPF32","HEAPF64","HEAP64","HEAPU64","stackSave","stackRestore","createNamedFunction","ptrToString","getHeapMax","growMemory","ENV","ERRNO_CODES","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","alignMemory","wasmTable","wasmMemory","noExitRuntime","addOnPreRun","addOnPostRun","convertJsFunctionToWasm","freeTableIndexes","functionsInTableMap","getEmptyTableSlot","updateTableMap","getFunctionAddress","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","AsciiToString","UTF16Decoder","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","UNWIND_CACHE","ExitStatus","flush_NO_FILESYSTEM","initRandomFill","randomFill","emSetImmediate","emClearImmediate_deps","emClearImmediate","promiseMap","uncaughtExceptionCount","exceptionCaught","ExceptionInfo","Browser","requestFullscreen","requestFullScreen","setCanvasSize","getUserMedia","createContext","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","SYSCALLS","preloadPlugins","FS_stdin_getChar_buffer","FS_unlink","FS_createPath","FS_createDevice","FS_readFile","FS","FS_root","FS_mounts","FS_devices","FS_streams","FS_nextInode","FS_nameTable","FS_currentPath","FS_initialized","FS_ignorePermissions","FS_filesystems","FS_syncFSRequests","FS_lookupPath","FS_getPath","FS_hashName","FS_hashAddNode","FS_hashRemoveNode","FS_lookupNode","FS_createNode","FS_destroyNode","FS_isRoot","FS_isMountpoint","FS_isFile","FS_isDir","FS_isLink","FS_isChrdev","FS_isBlkdev","FS_isFIFO","FS_isSocket","FS_flagsToPermissionString","FS_nodePermissions","FS_mayLookup","FS_mayCreate","FS_mayDelete","FS_mayOpen","FS_checkOpExists","FS_nextfd","FS_getStreamChecked","FS_getStream","FS_createStream","FS_closeStream","FS_dupStream","FS_doSetAttr","FS_chrdev_stream_ops","FS_major","FS_minor","FS_makedev","FS_registerDevice","FS_getDevice","FS_getMounts","FS_syncfs","FS_mount","FS_unmount","FS_lookup","FS_mknod","FS_statfs","FS_statfsStream","FS_statfsNode","FS_create","FS_mkdir","FS_mkdev","FS_symlink","FS_rename","FS_rmdir","FS_readdir","FS_readlink","FS_stat","FS_fstat","FS_lstat","FS_doChmod","FS_chmod","FS_lchmod","FS_fchmod","FS_doChown","FS_chown","FS_lchown","FS_fchown","FS_doTruncate","FS_truncate","FS_ftruncate","FS_utime","FS_open","FS_close","FS_isClosed","FS_llseek","FS_read","FS_write","FS_mmap","FS_msync","FS_ioctl","FS_writeFile","FS_cwd","FS_chdir","FS_createDefaultDirectories","FS_createDefaultDevices","FS_createSpecialDirectories","FS_createStandardStreams","FS_staticInit","FS_init","FS_quit","FS_findObject","FS_analyzePath","FS_createFile","FS_createDataFile","FS_forceLoadFile","FS_createLazyFile","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","SDL","SDL_gfx","print","printErr","jstoi_s","InternalError","BindingError","throwInternalError","throwBindingError","registeredTypes","awaitingDependencies","typeDependencies","tupleRegistrations","structRegistrations","sharedRegisterType","whenDependentTypesAreResolved","getTypeName","getFunctionName","heap32VectorToArray","requireRegisteredType","usesDestructorStack","checkArgCount","getRequiredArgCount","createJsInvoker","UnboundTypeError","EmValType","EmValOptionalType","throwUnboundTypeError","ensureOverloadTable","exposePublicSymbol","replacePublicSymbol","embindRepr","registeredInstances","getBasestPointer","getInheritedInstance","registeredPointers","registerType","integerReadValueFromPointer","floatReadValueFromPointer","assertIntegerRange","readPointer","runDestructors","craftInvokerFunction","embind__requireFunction","genericPointerToWireType","constNoSmartPtrRawPointerToWireType","nonConstNoSmartPtrRawPointerToWireType","init_RegisteredPointer","RegisteredPointer","RegisteredPointer_fromWireType","runDestructor","releaseClassHandle","finalizationRegistry","detachFinalizer_deps","detachFinalizer","attachFinalizer","makeClassHandle","init_ClassHandle","ClassHandle","throwInstanceAlreadyDeleted","deletionQueue","flushPendingDeletes","delayFunction","RegisteredClass","shallowCopyInternalPointer","downcastPointer","upcastPointer","validateThis","char_0","char_9","makeLegalFunctionName","emval_freelist","emval_handles","emval_symbols","getStringOrSymbol","Emval","emval_returnValue","emval_lookupTypes","emval_methodCallers","emval_addMethodCaller"];Vv.forEach(f0);function Wv(){s0("fetchSettings"),s0("logReadFiles"),s0("loadSplitModule"),s0("onMalloc"),s0("onRealloc"),s0("onFree"),s0("onSbrkGrow")}var Ri=Z("___getTypeName"),Un=Z("_malloc"),ee=Z("_free"),Xv=n._MdnCom_ESCHandler=Z("_MdnCom_ESCHandler"),Yv=n._MdnCom_Free=Z("_MdnCom_Free"),Qv=n._MdnCom_RawRx=Z("_MdnCom_RawRx"),Zv=n._MdnCom_CryptoSelfTest=Z("_MdnCom_CryptoSelfTest"),xf=n._MdnCom_SetCompanionKeypair=Z("_MdnCom_SetCompanionKeypair"),Af=n._MdnCom_InitiateEcsHandshake=Z("_MdnCom_InitiateEcsHandshake"),ef=n._MdnCom_SetSecDebug=Z("_MdnCom_SetSecDebug"),rf=n._MdnCom_GetEcsState=Z("_MdnCom_GetEcsState"),tf=n._MdnCom_ResetEcs=Z("_MdnCom_ResetEcs"),nf=n._MdnCom_RegisterEcsHandshakeCallback=Z("_MdnCom_RegisterEcsHandshakeCallback"),sf=n._MdnCom_Init=Z("_MdnCom_Init"),af=n._SendUtoQuery=Z("_SendUtoQuery"),of=n._SendUtoCmdExt=Z("_SendUtoCmdExt"),Oi=Z("_fflush"),Hn=Z("_emscripten_stack_get_end"),Ff=Z("_emscripten_stack_get_base"),vf=Z("_strerror"),Gi=Z("_emscripten_stack_init"),ff=Z("_emscripten_stack_get_free"),Ef=Z("__emscripten_stack_restore"),lf=Z("__emscripten_stack_alloc"),cf=Z("_emscripten_stack_get_current"),Bf=Z("memory"),Cf=Z("__indirect_function_table"),wt=Z("wasmMemory"),Le=Z("wasmTable");function df(l){g(typeof l.__getTypeName<"u","missing Wasm export: __getTypeName"),g(typeof l.malloc<"u","missing Wasm export: malloc"),g(typeof l.free<"u","missing Wasm export: free"),g(typeof l.MdnCom_ESCHandler<"u","missing Wasm export: MdnCom_ESCHandler"),g(typeof l.MdnCom_Free<"u","missing Wasm export: MdnCom_Free"),g(typeof l.MdnCom_RawRx<"u","missing Wasm export: MdnCom_RawRx"),g(typeof l.MdnCom_CryptoSelfTest<"u","missing Wasm export: MdnCom_CryptoSelfTest"),g(typeof l.MdnCom_SetCompanionKeypair<"u","missing Wasm export: MdnCom_SetCompanionKeypair"),g(typeof l.MdnCom_InitiateEcsHandshake<"u","missing Wasm export: MdnCom_InitiateEcsHandshake"),g(typeof l.MdnCom_SetSecDebug<"u","missing Wasm export: MdnCom_SetSecDebug"),g(typeof l.MdnCom_GetEcsState<"u","missing Wasm export: MdnCom_GetEcsState"),g(typeof l.MdnCom_ResetEcs<"u","missing Wasm export: MdnCom_ResetEcs"),g(typeof l.MdnCom_RegisterEcsHandshakeCallback<"u","missing Wasm export: MdnCom_RegisterEcsHandshakeCallback"),g(typeof l.MdnCom_Init<"u","missing Wasm export: MdnCom_Init"),g(typeof l.SendUtoQuery<"u","missing Wasm export: SendUtoQuery"),g(typeof l.SendUtoCmdExt<"u","missing Wasm export: SendUtoCmdExt"),g(typeof l.fflush<"u","missing Wasm export: fflush"),g(typeof l.emscripten_stack_get_end<"u","missing Wasm export: emscripten_stack_get_end"),g(typeof l.emscripten_stack_get_base<"u","missing Wasm export: emscripten_stack_get_base"),g(typeof l.strerror<"u","missing Wasm export: strerror"),g(typeof l.emscripten_stack_init<"u","missing Wasm export: emscripten_stack_init"),g(typeof l.emscripten_stack_get_free<"u","missing Wasm export: emscripten_stack_get_free"),g(typeof l._emscripten_stack_restore<"u","missing Wasm export: _emscripten_stack_restore"),g(typeof l._emscripten_stack_alloc<"u","missing Wasm export: _emscripten_stack_alloc"),g(typeof l.emscripten_stack_get_current<"u","missing Wasm export: emscripten_stack_get_current"),g(typeof l.memory<"u","missing Wasm export: memory"),g(typeof l.__indirect_function_table<"u","missing Wasm export: __indirect_function_table"),Ri=K0("__getTypeName",1),Un=K0("malloc",1),ee=K0("free",1),Xv=n._MdnCom_ESCHandler=K0("MdnCom_ESCHandler",1),Yv=n._MdnCom_Free=K0("MdnCom_Free",1),Qv=n._MdnCom_RawRx=K0("MdnCom_RawRx",1),Zv=n._MdnCom_CryptoSelfTest=K0("MdnCom_CryptoSelfTest",0),xf=n._MdnCom_SetCompanionKeypair=K0("MdnCom_SetCompanionKeypair",2),Af=n._MdnCom_InitiateEcsHandshake=K0("MdnCom_InitiateEcsHandshake",0),ef=n._MdnCom_SetSecDebug=K0("MdnCom_SetSecDebug",1),rf=n._MdnCom_GetEcsState=K0("MdnCom_GetEcsState",0),tf=n._MdnCom_ResetEcs=K0("MdnCom_ResetEcs",0),nf=n._MdnCom_RegisterEcsHandshakeCallback=K0("MdnCom_RegisterEcsHandshakeCallback",1),sf=n._MdnCom_Init=K0("MdnCom_Init",2),af=n._SendUtoQuery=K0("SendUtoQuery",2),of=n._SendUtoCmdExt=K0("SendUtoCmdExt",4),Oi=K0("fflush",1),Hn=l.emscripten_stack_get_end,Ff=l.emscripten_stack_get_base,vf=K0("strerror",1),Gi=l.emscripten_stack_init,ff=l.emscripten_stack_get_free,Ef=l._emscripten_stack_restore,lf=l._emscripten_stack_alloc,cf=l.emscripten_stack_get_current,Bf=wt=l.memory,Cf=Le=l.__indirect_function_table}var Ui={__cxa_throw:VA,_abort_js:Ir,_embind_finalize_value_object:we,_embind_register_bigint:Lr,_embind_register_bool:o,_embind_register_class:Pe,_embind_register_class_constructor:b,_embind_register_class_property:$,_embind_register_emval:N0,_embind_register_float:m0,_embind_register_function:bx,_embind_register_integer:Tx,_embind_register_memory_view:Ix,_embind_register_std_string:Nn,_embind_register_std_wstring:v,_embind_register_value_object:c,_embind_register_value_object_field:u,_embind_register_void:m,_emval_create_invoker:P0,_emval_decref:o0,_emval_get_module_property:h0,_emval_get_property:Ex,_emval_incref:kx,_emval_invoke:Ux,_emval_new_cstring:Wx,_emval_run_destructors:Xx,emscripten_resize_heap:mx,fd_close:$v,fd_seek:Nv,fd_write:Mv,random_get:Lv},Hi;function Df(){Gi(),Y()}function uf(){Df(),zx();function l(){g(!Hi),Hi=!0,n.calledRun=!0,!R&&(yA(),d0?.(n),n.onRuntimeInitialized?.(),t0("onRuntimeInitialized"),g(!n._main,'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'),kA())}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),l()},1)):l(),W()}var Er;Er=await Nr(),uf(),I0?s=n:s=new Promise((l,B)=>{d0=l,q0=B});for(let l of Object.keys(n))l in t||Object.defineProperty(t,l,{configurable:!0,get(){ax(`Access to module property ('${l}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}});return s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),iF={};qc(iF,{API_STAMP_UNBOUNDED:()=>RF,AT_COMMANDS:()=>yx,AT_COMMAND_TIMEOUT_MS:()=>Hx,ApiBadRequestError:()=>w0,ApiForbiddenError:()=>un,ApiMethodNotAllowedError:()=>ci,ApiNotFoundError:()=>lA,AtCommandHandler:()=>sd,AtDeviceError:()=>li,AtHandlerDisposedError:()=>Rx,BACKFILL_PENDING_HEADER:()=>N8,BACKFILL_PENDING_VALUE:()=>M8,BLE_CONFIGURATION:()=>kd,BLE_SCAN_TIMEOUT_MS:()=>wd,COMPANION_AUTH_ERROR_I18N_KEYS:()=>od,COMPANION_CERT_PATH:()=>qs,COMPANION_PRIVATE_KEY_SIZE:()=>CF,COMPANION_PUBLIC_KEY_SIZE:()=>BF,CertApiError:()=>ct,CompanionAuthErrorKind:()=>c8,CompanionAuthManager:()=>ad,CompanionCertError:()=>E8,DDE_FIELD_UNUSED_INDEX:()=>MF,DEFAULT_CERT_VALIDITY_MARGIN_MS:()=>uF,DEFAULT_RECONNECT_OPTIONS:()=>j8,DLO_FILENAME:()=>kr,DdeMapper:()=>GC,DdeUnknownAliasError:()=>ri,DdeUnknownContainerError:()=>ge,DdeUnknownFieldError:()=>fi,DdeWriteForbiddenError:()=>dt,DebugLogLevel:()=>TF,DebugMaster:()=>_B,DebugSync:()=>o8,DeviceManager:()=>gd,DeviceState:()=>m8,FW_FILENAME:()=>Qs,LIC_API_BASE_URL:()=>n8,LOCAL_API_LIFECYCLE_FLAGS:()=>We,LOCAL_API_SITE_MASK:()=>zs,LOCAL_API_SITE_MASTER_KEYS:()=>jt,LegacySync:()=>i8,LocalDataManager:()=>D8,MANUFACTURER_CODE:()=>_d,MS_1999_12_31:()=>Ts,MemoryStorage:()=>SB,Mutex:()=>xi,OfflineSyncManager:()=>YC,RAW_TERMINAL_PATTERN:()=>v8,RESPONSE_PATTERNS:()=>U0,Rm2mStateManager:()=>md,SYNC_LOGIC_MASK:()=>_F,SyncManager:()=>td,TRIGGER_MEASUREMENT_TIMEOUT_MS:()=>F8,USB_CONFIGURATION:()=>yd,UplinkMode:()=>SF,UtoCommand:()=>bF,UtoESC:()=>wF,UtoFileFlag:()=>yF,UtoFileFlagInt:()=>kF,UtoFileType:()=>hF,UtoFlag:()=>gF,UtoMaster:()=>qF,UtoResult:()=>mF,UtoSplitTag:()=>jF,UtoTag:()=>Zs,WebSocketBridge:()=>Ei,applyBlueprintNames:()=>r8,applyDecpl:()=>aC,assertValidRequestStamps:()=>$r,base64ToBytes:()=>$s,base64UrlToBytes:()=>aB,buildBlueprintNameMap:()=>Us,bytesToBase64:()=>sn,bytesToBase64Url:()=>Ws,checkDeviceCapabilities:()=>Ed,computeDisplayValue:()=>d8,computeDisplayValues:()=>Ks,consoleLogger:()=>zA,convertToString:()=>Ps,crc16Modbus:()=>lB,crc32Ethernet:()=>Ys,createDebugBufferState:()=>f8,createLocalApiHandler:()=>RD,createLocalApiSession:()=>Ci,createSiteInfoFromDde:()=>VD,dbStampToStamp40:()=>KA,decodeContainer:()=>Rs,decodeFloatm16:()=>WF,decodeLifecycleFlags:()=>k8,decodeRm2mStateResponse:()=>b8,decodeUplinkState:()=>u8,deriveDeviceLifecycleMirror:()=>_8,encodeContainer:()=>Gs,encodeFloatm16:()=>XF,encodeLifecycleFlags:()=>Di,encodeNulPaddedJson:()=>g8,encodeSerialNumber:()=>cB,extractBits:()=>vn,formatApiStamp:()=>_r,generateCompanionKeypair:()=>Ss,getDeviceAssignment:()=>s8,isCertValid:()=>Xs,isDevicePushableTag:()=>IF,isUnusedField:()=>oe,isValidStamp:()=>Bi,mapLocalApiError:()=>X8,nullLogger:()=>an,parseApiStamp:()=>Sr,parseBlueprint:()=>HC,parseDde:()=>tC,parseMetadataResponse:()=>B8,parseNulPaddedJson:()=>mt,parseRm2mStateParams:()=>p8,parseSerialNumberFromDataView:()=>BB,parseValuesResponse:()=>C8,requestCompanionCert:()=>pF,resolveAuthErrorKind:()=>Fd,resolveBlueprintNameMap:()=>bt,resolveContainerTag:()=>Fn,resolveTagForContainer:()=>Et,resolveTagInModel:()=>TB,routeLocalApiRequest:()=>V8,spreadBits:()=>GF,stamp40ToDbHex:()=>EA,syncLogic:()=>on,systemTimeSource:()=>pt,toHex:()=>he,toUint8Array:()=>Ns,utoStack:()=>H0});Y8.exports=Pc(iF);var aF=Object.freeze({p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n}),{p:rn,n:An,Gx:Po,Gy:No,a:ls,d:cs,h:Mc}=aF,lt=32,Ic=(...x)=>{"captureStackTrace"in Error&&typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(...x)},Sx=(x="")=>{let A=new Error(x);throw Ic(A,Sx),A},Lc=x=>typeof x=="bigint",Rc=x=>typeof x=="string",Oc=x=>x instanceof Uint8Array||ArrayBuffer.isView(x)&&x.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in x&&x.BYTES_PER_ELEMENT===1,Xe=(x,A,e="")=>{let r=Oc(x),t=x?.length,s=A!==void 0;if(!r||s&&t!==A){let n=e&&`"${e}" `,F=s?` of length ${A}`:"",f=r?`length=${t}`:`type=${typeof x}`,C=n+"expected Uint8Array"+F+", got "+f;throw r?new RangeError(C):new TypeError(C)}return x},Cn=x=>new Uint8Array(x),Js=x=>Uint8Array.from(x),oF=(x,A)=>x.toString(16).padStart(A,"0"),FF=x=>Array.from(Xe(x)).map(A=>oF(A,2)).join(""),ae={_0:48,_9:57,A:65,F:70,a:97,f:102},Mo=x=>{if(x>=ae._0&&x<=ae._9)return x-ae._0;if(x>=ae.A&&x<=ae.F)return x-(ae.A-10);if(x>=ae.a&&x<=ae.f)return x-(ae.a-10)},vF=x=>{let A="hex invalid";if(!Rc(x))return Sx(A);let e=x.length,r=e/2;if(e%2)return Sx(A);let t=Cn(r);for(let s=0,n=0;s<r;s++,n+=2){let F=Mo(x.charCodeAt(n)),f=Mo(x.charCodeAt(n+1));if(F===void 0||f===void 0)return Sx(A);t[s]=F*16+f}return t},fF=()=>globalThis?.crypto,Gc=()=>fF()?.subtle??Sx("crypto.subtle must be defined, consider polyfill"),EF=(...x)=>{let A=0;for(let t of x)A+=Xe(t).length;let e=Cn(A),r=0;return x.forEach(t=>{e.set(t,r),r+=t.length}),e},Uc=(x=lt)=>fF().getRandomValues(Cn(x)),tn=BigInt,He=(x,A,e,r="bad number: out of range")=>{if(!Lc(x))throw new TypeError(r);if(A<=x&&x<e)return x;throw new RangeError(r)},sx=(x,A=rn)=>{let e=x%A;return e>=0n?e:A+e},Io=(1n<<255n)-1n,C0=x=>{x<0n&&Sx("negative coordinate");let A=(x>>255n)*19n+(x&Io);return A=(A>>255n)*19n+(A&Io),A%rn},Hc=x=>sx(x,An),Kc=(x,A)=>{(x===0n||A<=0n)&&Sx("no inverse n="+x+" mod="+A);let e=sx(x,A),r=A,t=0n,s=1n,n=1n,F=0n;for(;e!==0n;){let f=r/e,C=r%e,D=t-n*f,p=s-F*f;r=e,e=C,t=n,s=F,n=D,F=p}return r===1n?sx(t,A):Sx("no inverse")},zc=x=>{let A=eB[x];return typeof A!="function"&&Sx("hashes."+x+" not set"),A},Jc=x=>Xe(x,64,"digest"),Bs=x=>x instanceof ut?x:Sx("Point expected"),_s=2n**256n,Vs=class Ke{constructor(A,e,r,t){A0(this,"X"),A0(this,"Y"),A0(this,"Z"),A0(this,"T");let s=_s;this.X=He(A,0n,s),this.Y=He(e,0n,s),this.Z=He(r,1n,s),this.T=He(t,0n,s),Object.freeze(this)}static CURVE(){return aF}static fromAffine(A){return new Ke(A.x,A.y,1n,C0(A.x*A.y))}static fromBytes(A,e=!1){let r=cs,t=Js(Xe(A,lt)),s=A[31];t[31]=s&-129;let n=lF(t);He(n,0n,e?_s:rn);let f=C0(n*n),C=sx(f-1n),D=C0(r*f+1n),{isValid:p,value:j}=Xc(C,D);p||Sx("bad point: y not sqrt");let _=(j&1n)===1n,k=(s&128)!==0;return!e&&j===0n&&k&&Sx("bad point: x==0, isLastByteOdd"),k!==_&&(j=sx(-j)),new Ke(j,n,1n,C0(j*n))}static fromHex(A,e){return Ke.fromBytes(vF(A),e)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){let A=ls,e=cs,r=this;if(r.is0())return Sx("bad point: ZERO");let{X:t,Y:s,Z:n,T:F}=r,f=C0(t*t),C=C0(s*s),D=C0(n*n),p=C0(D*D),j=C0(f*A),_=C0(D*(j+C)),k=sx(p+C0(e*C0(f*C)));if(_!==k)return Sx("bad point: equation left != right (1)");let S=C0(t*s),T=C0(n*F);return S!==T?Sx("bad point: equation left != right (2)"):this}equals(A){let{X:e,Y:r,Z:t}=this,{X:s,Y:n,Z:F}=Bs(A),f=C0(e*F),C=C0(s*t),D=C0(r*F),p=C0(n*t);return f===C&&D===p}is0(){return this.equals(Je)}negate(){return new Ke(sx(-this.X),this.Y,this.Z,sx(-this.T))}double(){let{X:A,Y:e,Z:r}=this,t=ls,s=C0(A*A),n=C0(e*e),F=C0(2n*r*r),f=C0(t*s),C=sx(A+e),D=sx(C0(C*C)-s-n),p=sx(f+n),j=sx(p-F),_=sx(f-n),k=C0(D*j),S=C0(p*_),T=C0(D*_),N=C0(j*p);return new Ke(k,S,N,T)}add(A){let{X:e,Y:r,Z:t,T:s}=this,{X:n,Y:F,Z:f,T:C}=Bs(A),D=ls,p=cs,j=C0(e*n),_=C0(r*F),k=C0(C0(s*p)*C),S=C0(t*f),T=sx(C0(sx(e+r)*sx(n+F))-j-_),N=sx(S-k),L=sx(S+k),O=sx(_-C0(D*j)),i0=C0(T*N),R=C0(L*O),g=C0(T*O),I=C0(N*L);return new Ke(i0,R,I,g)}subtract(A){return this.add(Bs(A).negate())}multiply(A,e=!0){if(!e&&A===0n||(He(A,1n,An),!e&&this.is0()))return Je;if(A===1n)return this;if(this.equals(wr))return iB(A).p;let r=Je,t=wr;for(let s=this;A>0n;s=s.double(),A>>=1n)A&1n?r=r.add(s):e&&(t=t.add(s));return r}multiplyUnsafe(A){return this.multiply(A,!1)}toAffine(){let{X:A,Y:e,Z:r}=this;if(this.equals(Je))return{x:0n,y:1n};let t=Kc(r,rn);C0(r*t)!==1n&&Sx("invalid inverse");let s=C0(A*t),n=C0(e*t);return{x:s,y:n}}toBytes(){let{x:A,y:e}=this.toAffine(),r=Vc(e);return r[31]|=A&1n?128:0,r}toHex(){return FF(this.toBytes())}clearCofactor(){return this.multiply(tn(Mc),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let A=this.multiply(An/2n,!1).double();return An%2n&&(A=A.add(this)),A.is0()}};A0(Vs,"BASE");A0(Vs,"ZERO");var ut=Vs,wr=new ut(Po,No,1n,sx(Po*No)),Je=new ut(0n,1n,1n,0n);ut.BASE=wr;ut.ZERO=Je;var Vc=x=>vF(oF(He(x,0n,_s),64)).reverse(),lF=x=>tn("0x"+FF(Js(Xe(x)).reverse())),HA=(x,A)=>{let e=x;for(;A-- >0n;)e=C0(e*e);return e},Wc=x=>{let A=C0(x*x),e=C0(A*x),r=C0(HA(e,2n)*e),t=C0(HA(r,1n)*x),s=C0(HA(t,5n)*t),n=C0(HA(s,10n)*s),F=C0(HA(n,20n)*n),f=C0(HA(F,40n)*F),C=C0(HA(f,80n)*f),D=C0(HA(C,80n)*f),p=C0(HA(D,10n)*s);return{pow_p_5_8:C0(HA(p,2n)*x),b2:e}},Lo=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,Xc=(x,A)=>{let e=C0(A*C0(A*A)),r=C0(C0(e*e)*A),t=Wc(C0(x*r)).pow_p_5_8,s=C0(x*C0(e*t)),n=C0(A*C0(s*s)),F=s,f=C0(s*Lo),C=n===x,D=n===sx(-x),p=n===sx(-x*Lo);return C&&(s=F),(D||p)&&(s=f),(sx(s)&1n)===1n&&(s=sx(-s)),{isValid:C||D,value:s}},Yc=x=>Hc(lF(x)),Qc=(...x)=>Promise.resolve(zc("sha512Async")(EF(...x))).then(Jc),Zc=x=>{let A=Js(x),e=A.slice(0,32);e[0]&=248,e[31]&=127,e[31]|=64;let r=A.slice(32,64),t=Yc(e),s=wr.multiply(t),n=s.toBytes();return{head:e,prefix:r,scalar:t,point:s,pointBytes:n}},xB=x=>Qc(Xe(x,lt)).then(Zc),AB=x=>xB(x).then(A=>A.pointBytes),eB={sha512Async:async x=>{let A=Gc(),e=EF(x);return Cn(await A.digest("SHA-512",e.buffer))},sha512:void 0},rB=x=>(x=x===void 0?Uc(lt):x,Xe(x,lt)),tB=async x=>{let A=rB(x),e=await AB(A);return{secretKey:A,publicKey:e}},nn=8,nB=256,cF=Math.ceil(nB/nn)+1,ws=2**(nn-1),sB=()=>{let x=[],A=wr,e=A;for(let r=0;r<cF;r++){e=A,x.push(e);for(let t=1;t<ws;t++)e=e.add(A),x.push(e);A=e.double()}return x},Ro=void 0,Oo=(x,A)=>{let e=A.negate();return x?e:A},iB=x=>{let A=Ro||(Ro=sB()),e=Je,r=wr,t=2**nn,s=t,n=tn(t-1),F=tn(nn);for(let f=0;f<cF;f++){let C=Number(x&n);x>>=F,C>ws&&(C-=s,x+=1n);let D=f*ws,p=D,j=D+Math.abs(C)-1,_=f%2!==0,k=C<0;C===0?r=r.add(Oo(_,A[p])):e=e.add(Oo(k,A[j]))}return x!==0n&&Sx("invalid wnaf"),{p:e,f:r}},BF=32,CF=64;async function Ss(){let{secretKey:x,publicKey:A}=await tB(),e=new Uint8Array(CF);return e.set(x,0),e.set(A,BF),{publicKey:A,privateKey:e}}function sn(x){let A="";for(let e of x)A+=String.fromCharCode(e);return btoa(A)}function $s(x,A="base64 value"){return DF(dF(x,A))}function dF(x,A){try{return atob(x)}catch{throw new Error(`malformed ${A}: not valid base64`)}}function Ws(x){return sn(x).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function aB(x,A="base64url value"){let e=(4-x.length%4)%4,r=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat(e);return DF(dF(r,A))}function DF(x){let A=new Uint8Array(x.length);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A}var ct=class extends Error{constructor(x,A,e){super(e),A0(this,"httpStatus",x),A0(this,"code",A),this.name="CertApiError"}},qs="/api/1/companion/cert",uF=10080*60*1e3,Go=typeof __COMPANION_AUTH_DEV_PROXY__<"u"&&__COMPANION_AUTH_DEV_PROXY__;async function pF(x,A){let e=x.apiHost.replace(/\/+$/,""),r=Go?qs:e+qs,t={Authorization:`Bearer ${x.accessToken}`,"Content-Type":"application/json",Accept:"application/json"};Go&&e&&(t["x-target-host"]=e);let s=await fetch(r,{method:"POST",headers:t,body:JSON.stringify({publicKey:Ws(A.publicKey),subject:A.subject})});if(!s.ok){let F="unknown_error",f=s.statusText||`Cert API request failed (${s.status})`;try{let C=await s.json();C.code&&(F=C.code),C.message&&(f=C.message)}catch{}throw new ct(s.status,F,f)}let n=await s.json();if(!n.certificate||!n.notAfter)throw new ct(s.status,"invalid_response","Cert API response missing certificate or notAfter");return{certificateBase64Url:n.certificate,notAfter:n.notAfter}}function Xs(x,A=uF){let e=Date.parse(x);return Number.isFinite(e)?e-Date.now()>A:!1}var oB=require("events"),FB=Tc(Nc(),1),Xt="[device-master]",zA={debug:(x,...A)=>console.debug(Xt,x,...A),info:(x,...A)=>console.info(Xt,x,...A),warn:(x,...A)=>console.warn(Xt,x,...A),error:(x,...A)=>console.error(Xt,x,...A)},an={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},vB=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function Ys(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^vB[(e^x[r])&255];return(e^-1)>>>0}var Ts=Date.UTC(1999,11,31,0,0,0);function Ps(x,A,e=" "){let r=""+x,t=Math.max(0,Math.abs(A)-r.length),s=e.repeat(t);return A<0?r+s:s+r}function he(x,A){return("0000000000000000"+x.toString(16)).substr(-A)}function Ns(x){if(x instanceof Uint8Array)return x;if(x instanceof ArrayBuffer)return new Uint8Array(x);if(x&&Object.hasOwn(x,"type")&&x.type==="Buffer"&&Object.hasOwn(x,"data")&&x.data instanceof Array)return Uint8Array.from(x.data);if(x.buffer)return new Uint8Array(x.buffer,x.byteOffset,x.byteLength);throw new Error("can not convert value to Uint8Array")}var fB=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),EB=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);function lB(x){let A=x.length,e=255,r=255;for(let t=0;t<A;t++){let s=(r^x[t])&255;r=(e^fB[s])&255,e=EB[s]}return 256*e|r}function cB(x){if(x.length!==16)throw new Error("Serial number hex must be exactly 16 characters long.");let A=new ArrayBuffer(8),e=new DataView(A),r=x.substring(8,16),t=x.substring(0,8),s=parseInt(r,16),n=parseInt(t,16);return e.setUint32(0,s,!0),e.setUint32(4,n,!0),e}function BB(x){let A=("0000000"+x.getUint32(4,!0).toString(16)).slice(-8),e=("0000000"+x.getUint32(0,!0).toString(16)).slice(-8),r=`${A}${e}`.toUpperCase();return r.startsWith("0000")||e.startsWith("0000")?null:r}var CB=[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376],dB=new Map(CB.map((x,A)=>[x,128+A]));function DB(x){return x<=127||x>=160&&x<=255?x:dB.get(x)??63}var kr="uto_script.dat",Qs="uto_fw.dat",bF=(x=>(x[x.RESULT=0]="RESULT",x[x.QUERY=1]="QUERY",x[x.DELETE=2]="DELETE",x[x.DATA=3]="DATA",x[x.UNS_DATA=4]="UNS_DATA",x[x.LIVE_DATA=5]="LIVE_DATA",x[x.FILE_LIST=7]="FILE_LIST",x[x.FILE_RETR=8]="FILE_RETR",x[x.FILE_STOR=9]="FILE_STOR",x[x.FILE_DELE=10]="FILE_DELE",x[x.SET_VALUE=11]="SET_VALUE",x))(bF||{}),mF=(x=>(x[x.OK=0]="OK",x[x.TAG=1]="TAG",x[x.DLEN=2]="DLEN",x[x.DATA=3]="DATA",x[x.STAMP=4]="STAMP",x[x.EOD=5]="EOD",x[x.COMMAND=6]="COMMAND",x[x.COMMAND_DENIED=7]="COMMAND_DENIED",x[x.FULL=8]="FULL",x[x.NOTSUPPORTED=9]="NOTSUPPORTED",x[x.OLDDATA=10]="OLDDATA",x[x.STORAGE=11]="STORAGE",x[x.BUSY=12]="BUSY",x[x.DISC=256]="DISC",x))(mF||{}),Zs=(x=>(x[x.DEVINFO=0]="DEVINFO",x[x.STAMPS=1]="STAMPS",x[x.LIC_QUERY=2]="LIC_QUERY",x[x.FILEMAP=3]="FILEMAP",x[x.MNTCFG=4]="MNTCFG",x[x.MDNCFG=5]="MDNCFG",x[x.CONTEXT=128]="CONTEXT",x[x.ALERTS=4294901767]="ALERTS",x[x.HISTDATA0=26368]="HISTDATA0",x[x.LOG=26375]="LOG",x[x.SYSCFG=26378]="SYSCFG",x[x.STATE=26389]="STATE",x[x.LOCALS=26402]="LOCALS",x[x.POS=26404]="POS",x[x.CTRLAMX=26405]="CTRLAMX",x[x.DYNPOS__=26406]="DYNPOS__",x[x.CONFIG0=26416]="CONFIG0",x[x.CONFIG1=26417]="CONFIG1",x[x.CONFIG2=26418]="CONFIG2",x[x.CONFIG3=26419]="CONFIG3",x[x.CONFIG4=26420]="CONFIG4",x[x.CONFIG5=26421]="CONFIG5",x[x.CONFIG6=26422]="CONFIG6",x[x.CONFIG7=26423]="CONFIG7",x[x.CONFIG8=26424]="CONFIG8",x[x.CONFIG9=26425]="CONFIG9",x[x.SYSOTP=26432]="SYSOTP",x[x.SYSFLASH=26433]="SYSFLASH",x[x.APPOTP=26434]="APPOTP",x[x.APPFLASH=26435]="APPFLASH",x[x.APPSTATE=26436]="APPSTATE",x[x.SYSINFO=26437]="SYSINFO",x[x.APPINFO=26438]="APPINFO",x[x.SYSSTATE=26439]="SYSSTATE",x[x.HISTDATA1=26528]="HISTDATA1",x[x.HISTDATA2=26529]="HISTDATA2",x[x.HISTDATA3=26530]="HISTDATA3",x[x.HISTDATA4=26531]="HISTDATA4",x[x.HISTDATA5=26532]="HISTDATA5",x[x.HISTDATA6=26533]="HISTDATA6",x[x.HISTDATA7=26534]="HISTDATA7",x[x.HISTDATA8=26535]="HISTDATA8",x[x.HISTDATA9=26536]="HISTDATA9",x[x.HISTDATA_RAW=26623]="HISTDATA_RAW",x[x.CONFIGA=4294928218]="CONFIGA",x[x.CONFIGB=4294928219]="CONFIGB",x[x.CONFIGC=4294928220]="CONFIGC",x))(Zs||{}),jF=(x=>(x[x.HISTDATA0=0]="HISTDATA0",x[x.HISTDATA1=1]="HISTDATA1",x[x.HISTDATA2=2]="HISTDATA2",x[x.HISTDATA3=3]="HISTDATA3",x[x.HISTDATA4=4]="HISTDATA4",x[x.HISTDATA5=5]="HISTDATA5",x[x.HISTDATA6=6]="HISTDATA6",x[x.HISTDATA7=7]="HISTDATA7",x[x.HISTDATA8=8]="HISTDATA8",x[x.HISTDATA9=9]="HISTDATA9",x[x.ALERTS=32]="ALERTS",x[x.APPLOG=40]="APPLOG",x))(jF||{}),hF=(x=>(x[x.off=0]="off",x[x.pawn=2]="pawn",x))(hF||{}),gF=(x=>(x[x.HISTORIC=1]="HISTORIC",x[x.UP=2]="UP",x[x.DOWN=4]="DOWN",x[x.DLEN_VAR=8]="DLEN_VAR",x[x.SET_VALUE=16]="SET_VALUE",x))(gF||{}),yF=(x=>(x[x.READ=1]="READ",x[x.WRITE=2]="WRITE",x[x.NODE=4]="NODE",x[x.SYSTEM=8]="SYSTEM",x))(yF||{}),kF=(x=>(x[x.CRC_STAMP=1]="CRC_STAMP",x[x.FORCE_DNLD=2]="FORCE_DNLD",x[x.FORCE_UPLD=4]="FORCE_UPLD",x[x.DEL=8]="DEL",x[x.CREATOR=16]="CREATOR",x[x.SYNCONLYDOWN=33]="SYNCONLYDOWN",x[x.SYNCONLYUP=65]="SYNCONLYUP",x[x.STAMP_ONLY=97]="STAMP_ONLY",x[x.TAKEFROMTPL=128]="TAKEFROMTPL",x[x.EXISTSONDEV=256]="EXISTSONDEV",x))(kF||{}),_F=97;function on(x){return x&_F}var wF=(x=>(x[x.KEEPALIVE=1]="KEEPALIVE",x[x.NEWDATA=2]="NEWDATA",x[x.DISC=3]="DISC",x[x.LIVE_ON=4]="LIVE_ON",x[x.LIVE_OFF=5]="LIVE_OFF",x[x.NO_GPRS=6]="NO_GPRS",x[x.ZLIB=7]="ZLIB",x[x.WAKEUP=8]="WAKEUP",x[x.SECURITY=9]="SECURITY",x[x.CAP_00=192]="CAP_00",x[x.CAP_01=193]="CAP_01",x[x.CAP_02=194]="CAP_02",x[x.CAP_03=195]="CAP_03",x[x.CAP_04=196]="CAP_04",x[x.CAP_05=197]="CAP_05",x[x.CAP_06=198]="CAP_06",x[x.CAP_07=199]="CAP_07",x[x.CAP_08=200]="CAP_08",x[x.CAP_09=201]="CAP_09",x[x.CAP_0a=202]="CAP_0a",x[x.CAP_0b=203]="CAP_0b",x[x.CAP_0c=204]="CAP_0c",x[x.CAP_0d=205]="CAP_0d",x[x.CAP_0e=206]="CAP_0e",x[x.CAP_0f=207]="CAP_0f",x))(wF||{}),SF=(x=>(x[x.Triggered=0]="Triggered",x[x.Wakeup=1]="Wakeup",x[x.Online=2]="Online",x))(SF||{}),Uo={config0:26416,config1:26417,config2:26418,config3:26419,config4:26420,config5:26421,config6:26422,config7:26423,config8:26424,config9:26425,histdata0:26368,histdata1:26528,histdata2:26529,histdata3:26530,histdata4:26531,histdata5:26532,histdata6:26533,histdata7:26534,histdata8:26535,histdata9:26536},uB=class{constructor(){}resultToString(x){x|=0;let A=x&256?"+DISC":"";switch(x&255){case 0:return"OK"+A;case 1:return"E_TAG"+A;case 2:return"E_DLEN"+A;case 3:return"E_DATA"+A;case 4:return"E_STAMP"+A;case 5:return"E_EOD"+A;case 6:return"E_CMD"+A;case 7:return"E_CMDDENIED"+A;case 8:return"E_FULL"+A;case 9:return"E_NOTSUPPORTED"+A;case 10:return"E_OLDDATA"+A;case 11:return"E_STORAGE"+A;case 12:return"E_STORAGE"+A}return"E_0x"+he(x,4)+A}commandToString(x){switch(x|=0,x){case 0:return"COMMAND_RESULT";case 1:return"COMMAND_QUERY";case 2:return"COMMAND_DEL";case 3:return"COMMAND_DATA";case 4:return"COMMAND_UNS_DATA";case 5:return"COMMAND_LIVE_DATA";case 7:return"COMMAND_FILE_LIST";case 8:return"COMMAND_FILE_RETR";case 9:return"COMMAND_FILE_STOR";case 10:return"COMMAND_FILE_DELE";case 11:return"COMMAND_SET_VALUE"}return"COMMAND_0x"+he(x,2)}tagToString(x){x|=0;let A=Object.entries(Zs).find(([,e])=>e===x);return A?"TAG_"+A[0]:"TAG_0x"+he(x,4)}containerIdToTag(x,A){let e=Uo[x]||null;return e&&A&&x.startsWith("histdata")?26623:e}containerIdOf(x){let A=Object.entries(Uo).find(([,e])=>e===x.wTag);if(A)return A[0];if(x.wTag===26623){if(!x.data||!x.data.byteLength)return null;let e=x.data.getUint8(0);return e===32?"alerts":e>=0&&e<=9?`histdata${e}`:null}return null}formatSerialNumber(x,A="-"){return x?x.substr(0,4)+A+x.substr(4,4)+A+x.substr(8,4)+A+x.substr(12):"(none)"}decodeUplinkState(x){let A={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},e=!!(x&A.WAKEUPABLE),r=[];x&A.POSUPDATE_ACTIVE?r=["locating",!1]:x&A.RETRY?r=["retry",!1]:x&A.STARTED?r=["dialing",!1]:x&A.ACTIVE?r=["active",!1]:x&A.FAILED?r=["failed",e]:x&A.DISABLED?r=["disabled",!1]:r=["offline",e];let t=A.WAKEUPABLE|A.RETRY|A.STARTED|A.ACTIVE|A.POSUPDATE_ACTIVE|A.FAILED|A.DISABLED|A.EXTSIM;return{signal:r[0],wakeupAble:r[1],path:x&A.EXTSIM?"xsim ":"isim ",txStateUnknown:x&~t}}stamp40ToMS(x){let A=Math.trunc(x/256),e=x&255;return Math.round(A*1e3+1e3*e/256)+Ts}msToStamp40(x){let A=(x-Ts)/1e3,e=Math.trunc(A),r=Math.round((A-e)*256);return e*256+r}stamp40ToDate(x){return new Date(this.stamp40ToMS(x))}utf8Unpack(x,A,e){let r=new TextDecoder("utf-8"),t=0;for(;t<e&&x.getUint8(A+t);)t++;let s=new Uint8Array(x.buffer,A,t);return r.decode(s)}ansiUnpack(x,A,e,r){try{let t=Ns(x),s=new TextDecoder(r),n=0;for(;n<e&&t[A+n];)n++;return s.decode(t.slice(A,A+n))}catch(t){return console.log("?"+t.message,t),`ERR-unknown codepage "${r}"`}}cp1252Unpack(x,A,e){return this.ansiUnpack(x,A,e,"cp1252")}ansiPack(x,A,e,r){let t=Ns(x);t.fill(0,A,A+e);for(let s=0;s<e&&s<r.length;s++)t[A+s]=DB(r.charCodeAt(s))}cp1252Pack(x,A,e,r){return this.ansiPack(x,A,e,r)}dataFrameNotNull(x){if(!x.data)throw new Error("UtoFrame does not have any data!")}decode_DEVINFO(x){this.dataFrameNotNull(x);let A=x.data,e=A.getUint16(0),r=A.getUint16(2),t=A.getUint16(4),s=A.getUint32(6),n=(he(s,8)+he(x.dwDevSN,8)).toUpperCase(),F=[];for(let f=0;f<(A.byteLength-10)/5;f++){let C=A.getUint8(10+f*5+2),D=A.getUint16(10+f*5);F.push({wTag:D,sTag:this.tagToString(D),size:A.getUint16(10+f*5+3),flags:{historic:!!(C&1),single:!(C&1),up:!!(C&2),down:!!(C&4),variableLength:!!(C&8),setValue:!!(C&16)}})}return{serialNumber:n,class:he(e,4),firmwareVersion:`${Ps(t>>8,2)}v${Ps(t&255,3,"0")}`,flags:he(r,4),utos:F}}decode_STAMPS(x){this.dataFrameNotNull(x);let A=x.data,e={contextId:A.getBigUint64(0,!0).toString(16).toUpperCase(),stamps:[]};for(let r=0;r<(A.byteLength-8)/5;r++)e.stamps.push(A.getUint32(8+r*5+0)*256+A.getUint8(8+r*5+4));return e}decode_CONTEXT(x){this.dataFrameNotNull(x);let A=x.data;return{id:A.getBigUint64(0,!0).toString(16).toUpperCase(),name:this.cp1252Unpack(A,8,50)}}encode_CONTEXT(x){let A=new Uint8Array(58),e=new DataView(A.buffer);return e.setBigUint64(0,BigInt("0x"+x.id),!0),this.cp1252Pack(e,8,50,x.name),A}decode_FILEMAP(x){this.dataFrameNotNull(x);let A=x.data,e=A.getUint16(13,!1),r={stamp:A.getUint32(0,!1)*256+A.getUint8(4),size:A.getUint32(5,!1),crc32:A.getUint32(9,!1),flags:{read:!!(e&1),write:!!(e&2),node:!!(e&4),system:!!(e&8),extra:e&-16},_flags:e,name:this.cp1252Unpack(A,15,A.byteLength-15)};if(r.flags?.extra)throw new Error("?UTO.decode_FILEMAP.unknown-file-flags."+r.flags.extra);return r}encode_FILEMAP(x){if(x.flags){let r=0;x.flags.extra&&(r|=x.flags.extra|0),x.flags.read&&(r|=1),x.flags.write&&(r|=2),x.flags.node&&(r|=4),x.flags.system&&(r|=8),x._flags=r}let A=new Uint8Array(15+x.name.length+1),e=new DataView(A.buffer);return e.setUint32(0,Math.trunc(x.stamp/256),!1),e.setUint8(4,x.stamp&255),e.setUint32(5,x.size,!1),e.setUint32(9,x.crc32,!1),e.setUint16(13,x._flags,!1),this.cp1252Pack(e,15,256,x.name),A}decode_RM2M_STATE(x){this.dataFrameNotNull(x);let A=x.data;return{rssi:A.getInt8(0),uplinkMode:A.getUint8(1),imei:this.cp1252Unpack(A,61,15),hardwareId:this.cp1252Unpack(A,96,50),sim:{id:this.cp1252Unpack(A,2,15),apn:this.cp1252Unpack(A,17,40),iccId:this.cp1252Unpack(A,76,20)},network:{mcc:A.getUint16(57),mnc:A.getUint16(59)}}}},H0=new uB,pt={nowMs:()=>Date.now()},xi=class{constructor(x="(unnamed)"){A0(this,"name"),A0(this,"_locked"),A0(this,"_chain"),this.name=x,this._locked=0,this._chain=[]}get islocked(){return!!this._locked}requestLock(){if(++this._locked!==1)return new Promise(x=>{this._chain.push(x)})}unlock(){--this._locked,this._chain.length&&this._chain.shift()()}async runExclusive(x){await this.requestLock();try{return await x()}finally{this.unlock()}}},Ho=new WeakMap;function $F(x,A){let r=(Ho.get(x)??Promise.resolve()).then(()=>pB(x,A));return Ho.set(x,r.catch(()=>{})),r}async function pB(x,A){x.interface&&x.interface==="ble"?await bB(async e=>{await x.write(e)},A,x.mtuSize??23):await x.write(A)}async function bB(x,A,e=23){let r=new Uint8Array(A),t=e-3;for(let s=0;s<r.byteLength;s+=t){let n=r.slice(s,s+t);await x(n.buffer)}}var Ko=15e3,mB=500,jB=3,hB=1024;function zo(x){return x?.utos.find(e=>e.wTag===3)?.size||hB}var qF=class en extends oB.EventEmitter{constructor(A,e,r=pt){super(),A0(this,"mdnComInterface"),A0(this,"receiveUto"),A0(this,"sendUto"),A0(this,"rxUto"),A0(this,"txStream"),A0(this,"SendUtoCmdExt"),A0(this,"utoPortLock"),A0(this,"transport"),A0(this,"logger"),A0(this,"ecsHandshakeResolver",null),A0(this,"disposeTransportListener",null),A0(this,"encrypted",!1),A0(this,"lastTxWrite",Promise.resolve()),A0(this,"timeSource"),A0(this,"fileChunkSize",zo(null)),this.mdnComInterface=null,this.receiveUto=null,this.sendUto=null,this.rxUto=null,this.txStream=null,this.SendUtoCmdExt=null,this.utoPortLock=new xi("UTO-Port"),this.transport=A,this.logger=e??zA,this.timeSource=r}async init(){if(this.mdnComInterface!==null)return;this.mdnComInterface=await(0,FB.default)({print:s=>{this.logger.info(`[mdnCom] ${s}`),this.emit("mdnCom",s)},printErr:s=>{this.logger.error(`[mdnCom] ${s}`),this.emit("mdnComError",s)}});let A=this.mdnComInterface.MdnCom_Init;this.receiveUto=this.mdnComInterface.MdnCom_RawRx,this.sendUto=this.mdnComInterface.MdnCom_SendUtoQuery,this.rxUto=this.mdnComInterface.MdnCom_GetRxUto,this.txStream=this.mdnComInterface.MdnCom_GetTxStream,this.SendUtoCmdExt=this.mdnComInterface.MdnCom_SendUtoCmdExt;let e=this.mdnComInterface.addFunction(()=>{if(this.txStream){let s=this.txStream();this.lastTxWrite=$F(this.transport,s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength))}},"v"),r=this.mdnComInterface.addFunction(()=>{if(this.rxUto){let s=this.rxUto(),n=this.parseUtoFrame(s);this.emit("utoFrame",n)}},"v");await A(e,r);let t=this.mdnComInterface.addFunction(s=>{if(this.logger.info(`[ecs] handshake event from WASM: result=${s} resolverPresent=${this.ecsHandshakeResolver!==null}`),this.ecsHandshakeResolver){let n=this.ecsHandshakeResolver;this.ecsHandshakeResolver=null,n({success:s===0,resultCode:s})}else this.logger.warn("[ecs] handshake event fired but no resolver registered \u2014 Promise will hang")},"vi");this.logger.info(`[ecs] registering handshake callback fn=${t}`),this.mdnComInterface.MdnCom_RegisterEcsHandshakeCallback(t),this.disposeTransportListener=this.transport.onData(async s=>{this.receiveUto&&await this.receiveUto(new Uint8Array(s))}),await this.requestDeviceInfo().catch()}async dispose(A){if(this.logger.info("[dispose] starting dispose"),this.encrypted){if(!A){let e=new Error("[dispose] encrypted session active but no AtCommandHandler provided \u2014 cannot send connection close");throw this.logger.error(e.message),e}try{this.logger.info("[dispose] requesting context for encrypted close");let e=await this.requestContext();e?(this.logger.info("[dispose] writing context back to device"),await this.writeContext(e)):this.logger.warn("[dispose] requestContext returned null \u2014 skipping writeContext")}catch(e){this.logger.error(`[dispose] error during context round trip: ${e}`)}try{this.logger.info("[dispose] sending connection close"),await A.sendConnectionClose(),this.logger.info("[dispose] connection close acknowledged")}catch(e){this.logger.error(`[dispose] error sending connection close: ${e}`)}finally{this.encrypted=!1,this.logger.info("[dispose] encrypted flag cleared")}}if(this.disposeTransportListener&&(this.logger.info("[dispose] removing transport data listener"),this.disposeTransportListener(),this.disposeTransportListener=null),this.mdnComInterface){this.logger.info("[dispose] resetting WASM ECS state");try{this.mdnComInterface.MdnCom_ResetEcs()}catch(e){this.logger.error(`[dispose] error resetting WASM ECS state: ${e}`)}this.ecsHandshakeResolver=null}this.logger.info("[dispose] dispose complete")}isInitialized(){if(!this.mdnComInterface)throw new Error('utoMaster not initialized. Have you called "init()"?')}parseUtoFrame(A){return{dwDevSN:A.vDevID_u32,bCmd:A.vCmd_u8,stamp:A.vStamp_s.u32SysTime*256+A.vStamp_s.u8SysTime,wTag:A.vTag_u16&255,wTagFull:A.vTag_u16,sTag:H0.resultToString(A.vTag_u16),_dbg:A.vDevID_u32.toString(16),bVersion:1,_dlen:A.vDLen_u16,bRes:A.vRes_u8,bSeq:A.vSeq_u8,data:A.vData_pu8.length?new DataView(A.vData_pu8.buffer,A.vData_pu8.byteOffset,A.vData_pu8.length):null}}get utoStampNow(){return{u32SysTime:Math.floor(this.timeSource.nowMs()/1e3)-946598400,u8SysTime:0}}get utoStampNow40(){return this.utoStampNow.u32SysTime*256}async requestUto(A,e=0){await this.utoPortLock.requestLock();try{if(!this.sendUto)return null;let r=Math.trunc(e/256),t=e&255;return await this.sendWithRetry((s,n,F)=>{if(s.bCmd===0){let f=this.resultVerdict(s);f===5||f===0||f===4?n(null):F(s);return}if(s.wTagFull!==A)return F(s);n(s)},async()=>{this.sendUto(A,{u32SysTime:r,u8SysTime:t}),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] requestUto: no response from device for tag=0x${A.toString(16)}`})}finally{this.utoPortLock.unlock()}}copyDataView(A){return new Uint8Array(A.buffer.slice(A.byteOffset,A.byteOffset+A.byteLength))}static resultCode(A){return{verdict:A.wTagFull&-257,disc:(A.wTagFull&256)!==0}}resultVerdict(A){let{verdict:e,disc:r}=en.resultCode(A);return r&&(this.logger.warn(`[UtoMaster] device requested disconnect (RESULT 0x${A.wTagFull.toString(16).padStart(4,"0")})`),this.emit("deviceDisconnectRequested",A.wTagFull)),e}static concatChunks(A){let e=A.reduce((s,n)=>s+n.length,0),r=new Uint8Array(e),t=0;for(let s of A)r.set(s,t),t+=s.length;return r}sendWithRetry(A,e,r){let t=r?.timeoutMs??mB,s=r?.maxRetries??jB;return new Promise((n,F)=>{let f=0,C=!1,D=()=>{},p,j={resolve:k=>{C=!0,clearTimeout(p),this.removeListener("utoFrame",D),n(k)},reject:k=>{C=!0,clearTimeout(p),this.removeListener("utoFrame",D),F(k)}},_=async()=>{D=k=>A(k,j.resolve,j.reject),this.once("utoFrame",D);try{await e()}catch(k){if(C)return;this.removeListener("utoFrame",D),F(k);return}C||(p=setTimeout(()=>{if(this.removeListener("utoFrame",D),f>=s){F(new Error(r?.timeoutMessage??`[UtoMaster] no response from device after ${s} retries`));return}f++,this.logger.warn(`[UtoMaster] no response within ${t}ms, retrying (${f}/${s})`),_()},t))};_()})}createFrameIdleGuard(A,e,r){let t,s=()=>{t!==void 0&&(clearTimeout(t),t=void 0)};return{arm:()=>{s(),t=setTimeout(()=>{t=void 0,this.removeListener("utoFrame",A),r()},e)},clear:s}}async requestHistoricUtos(A,e,r,t=Ko,s=0,n){return await this.utoPortLock.requestLock(),new Promise((F,f)=>{if(!this.sendUto)return F([]);let C=[],D=0,p=Promise.resolve(),j=T=>{if(_.arm(),T.bCmd===0){_.clear(),this.settleHistoricTransfer(T,C,n,p,F,f);return}if(T.wTagFull===A&&T.data&&(C.push({stamp40:T.stamp,data:this.copyDataView(T.data)}),r?.(++D),n&&s>0&&C.length>=s)){let N=C.splice(0);p=p.then(()=>n(N))}this.once("utoFrame",j)},_=this.createFrameIdleGuard(j,t,()=>f(new Error(`[UtoMaster] requestHistoricUtos timed out after ${t}ms (tag=0x${A.toString(16)}, ${D} records received)`)));this.once("utoFrame",j),_.arm();let k=Math.trunc(e/256),S=e&255;this.sendUto(A,{u32SysTime:k,u8SysTime:S})}).finally(()=>{this.utoPortLock.unlock()})}settleHistoricTransfer(A,e,r,t,s,n){let F=this.resultVerdict(A);if(!(F===5||F===0||F===4)){t.then(()=>n(A)).catch(n);return}let C=r&&e.length>0?e.splice(0):null;(C?t.then(()=>r(C)):t).then(()=>s(r?[]:e)).catch(n)}async requestFile(A,e,r=Ko){return await this.utoPortLock.requestLock(),new Promise((t,s)=>{if(!this.SendUtoCmdExt)return t(new Uint8Array(0));let n=[],F=0,f=p=>{if(C.arm(),p.bCmd===0){C.clear();let j=this.resultVerdict(p);j===5||j===0?t(en.concatChunks(n)):s(p);return}if(p.bCmd===3&&p.data){let j=this.copyDataView(p.data);n.push(j),F+=j.byteLength,e?.(F)}this.once("utoFrame",f)},C=this.createFrameIdleGuard(f,r,()=>s(new Error(`[UtoMaster] requestFile timed out after ${r}ms (file="${A}", ${F} bytes received)`)));this.once("utoFrame",f),C.arm();let D=new Uint8Array(A.length+1);for(let p=0;p<A.length;p++)D[p]=A.charCodeAt(p)&255;this.SendUtoCmdExt(8,3,{u32SysTime:0,u8SysTime:0},D)}).finally(()=>{this.utoPortLock.unlock()})}async deleteFile(A){let e=new Uint8Array(A.length+1);for(let r=0;r<A.length;r++)e[r]=A.charCodeAt(r)&255;await this.sendUTOCmdExt(10,3,e,0)}async sendSetValue(A,e,r){this.isInitialized();let t=new Uint8Array(e.length);H0.cp1252Pack(t,0,e.length,e);try{return await this.sendUTOCmdExt(11,A,t,r),{outcome:"ok",resultCode:0}}catch(s){let n=s;if(n&&n.bCmd===0&&typeof n.wTagFull=="number"){let{verdict:F}=en.resultCode(n),f=n.wTagFull;return F===4?{outcome:"stamp",resultCode:f}:F===7||F===9?{outcome:"denied",resultCode:f}:{outcome:"error",resultCode:f}}return this.logger.error(`[UtoMaster] sendSetValue transport error tag=0x${A.toString(16)}: ${s}`),{outcome:"error"}}}async requestDeviceInfo(){let A=await this.requestUto(0,this.utoStampNow40),e=A?H0.decode_DEVINFO(A):null;return e&&(this.fileChunkSize=zo(e)),e}get fileTransferChunkSize(){return this.fileChunkSize}async requestContext(){let A=await this.requestUto(128,this.utoStampNow40);return A?H0.decode_CONTEXT(A):null}async writeContext(A){await this.sendUTOCmdExt(3,128,H0.encode_CONTEXT(A))}async requestFileList(A){return await this.utoPortLock.requestLock(),new Promise((e,r)=>{if(!this.SendUtoCmdExt)return e({});let t={},s=n=>this.handleFileListFrame(n,t,A,e,r,s);this.once("utoFrame",s),this.SendUtoCmdExt(7,3,{u32SysTime:0,u8SysTime:0},new Uint8Array(0))}).finally(()=>{this.utoPortLock.unlock()})}handleFileListFrame(A,e,r,t,s,n){if(A.bCmd===0){let F=this.resultVerdict(A);F===5||F===0?t(r?e[r]?{[r]:e[r]}:{}:e):s(A);return}try{let F=H0.decode_FILEMAP(A);e[F.name]=F}catch(F){s(F);return}this.once("utoFrame",n)}async requestStamps(){let A=await this.requestUto(1,this.utoStampNow40);return A?H0.decode_STAMPS(A):null}async sendFile(A,e,r,t){let s=e;A===2&&(s=new Uint8Array(e.length+1),s.set(new Uint8Array(e),1),s[0]=A);let n={name:t??kr,stamp:r===0?0:H0.msToStamp40(r??this.timeSource.nowMs()),size:s.length,_flags:11,crc32:Ys(s)},F=H0.encode_FILEMAP(n);if(!await this.sendUTOCmdExt(9,3,F,0)){let C=this.fileChunkSize;for(let D=0;D<s.length;D+=C){let p=Math.min(C,s.byteLength-D),j=new Uint8Array(s.buffer,s.byteOffset+D,p);await this.sendUTOCmdExt(3,3,j,D*256);let k=(D+p)/s.byteLength*100;this.emit("installing",k.toFixed(0))}}this.emit("installing",null)}async sendUTOCmdExt(A,e,r,t){await this.utoPortLock.requestLock();try{if(!this.SendUtoCmdExt)return null;let s=t??this.utoStampNow40,n=Math.trunc(s/256),F=s&255;return await this.sendWithRetry((f,C,D)=>{if(f.bCmd!==0){D(f);return}this.resultVerdict(f)===0?C(null):D(f)},async()=>{this.SendUtoCmdExt(A,e,{u32SysTime:n,u8SysTime:F},r),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] sendUTOCmdExt: no response from device for cmd=${A} tag=0x${e.toString(16)}`})}finally{this.utoPortLock.unlock()}}async sendUTOData(A,e,r){return this.sendUTOCmdExt(3,A,e,r)}packOtpFlashString(A){let e=new Uint8Array(1024);return H0.cp1252Pack(e,0,1024,A),e}async writeAppOtp(A){await this.sendUTOData(26434,this.packOtpFlashString(A))}async writeAppFlash(A){await this.sendUTOData(26435,this.packOtpFlashString(A))}async writeSysOtp(A){await this.sendUTOData(26432,this.packOtpFlashString(A))}async writeSysFlash(A){await this.sendUTOData(26433,this.packOtpFlashString(A))}async initiateEcsHandshake(A){if(this.isInitialized(),A.companionPublicKey.length!==32)throw new Error(`companionPublicKey must be 32 bytes, got ${A.companionPublicKey.length}`);if(A.companionPrivateKey.length!==32&&A.companionPrivateKey.length!==64)throw new Error(`companionPrivateKey must be 32 bytes (seed) or 64 bytes (seed||public), got ${A.companionPrivateKey.length}`);let e=A.companionPublicKey.slice(0,32),r=A.companionPrivateKey.slice(0,32);this.logger.info(`[ecs] initiateEcsHandshake: pub.len=${e.length} seed.len=${r.length} state(pre)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`);let t=this.mdnComInterface.MdnCom_SetCompanionKeypair(e,r);return this.logger.info(`[ecs] MdnCom_SetCompanionKeypair returned ${t}`),t<0?{success:!1,resultCode:t}:new Promise((s,n)=>{if(A.signal?.aborted){n(new Error("Operation aborted"));return}let F=()=>{this.ecsHandshakeResolver&&(this.logger.warn("[ecs] abort signal fired \u2014 resetting WASM state"),this.ecsHandshakeResolver=null,this.mdnComInterface.MdnCom_ResetEcs(),n(new Error("Operation aborted")))};A.signal?.addEventListener("abort",F,{once:!0}),this.ecsHandshakeResolver=C=>{this.logger.info(`[ecs] resolver invoked: result=${JSON.stringify(C)}`),A.signal?.removeEventListener("abort",F),C.success&&(this.encrypted=!0),s(C)},this.logger.info("[ecs] calling MdnCom_InitiateEcsHandshake()");let f=this.mdnComInterface.MdnCom_InitiateEcsHandshake();this.logger.info(`[ecs] MdnCom_InitiateEcsHandshake returned ${f} state(post)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`),f<0?(this.ecsHandshakeResolver=null,A.signal?.removeEventListener("abort",F),s({success:!1,resultCode:f})):this.logger.info("[ecs] awaiting device INIT response via MdnCom_RawRx ...")})}resetEcs(){this.isInitialized(),this.mdnComInterface.MdnCom_ResetEcs(),this.ecsHandshakeResolver=null}},gB=require("events"),TF=(x=>(x[x.error=0]="error",x[x.warn=1]="warn",x[x.debug=2]="debug",x[x.info=3]="info",x))(TF||{}),yB=5e3,kB=5e3,_B=class extends gB.EventEmitter{constructor(x,A){super(),A0(this,"atHandler"),A0(this,"debugCache",null),A0(this,"logger"),A0(this,"dataHandler"),this.atHandler=x,this.logger=A??zA,this.dataHandler=e=>{this.processIncomingDebugData(e)},this.atHandler.on("data",this.dataHandler)}initDebugCache(){return this.debugCache?this.debugCache:this.debugCache={debugStamp:Date.now(),f00:"",f00Start:0,f01LastSee:-1,f11:[]}}processIncomingDebugData(x){let A=this.initDebugCache();this.processDebugChunk(A,x)}async sendDebugCommand(x){await this.atHandler.sendRaw(x)}formatConsoleLine(x){if(!x.length)return;let A=x;x[0]===""&&(A=x.substring(1));try{let[e,r,,t]=A.split(" "),s={sequenceId:e?.substring(1),lineNumber:Number.isNaN(r)?void 0:Number(r),message:"",level:3},n=`${t.substring(1)}`,F=t.substring(0,1);"$!?~$".includes(F)&&(s.level=this.logLevelFromPrefix(F)),s.message=n,this.emitMessageEvent(s)}catch{this.emitMessageEvent({level:2,message:A})}}logLevelFromPrefix(x){switch(x){case"!":return 0;case"?":return 1;case"~":return 2;default:return 3}}emitMessageEvent(x){this.emit("message",x)}processDebugChunk({f00:x,f00Start:A,f01LastSee:e,f11:r},t){for(let s of t){s==="\xFF"&&(s="%");let n=String.fromCharCode(...r.map(F=>F.tag));if(s===""){switch(n){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:1,buf:s,start:Date.now()})}else if(s===""){switch(n){case"":case"":break;case"":case"":continue;case"":r.pop();break;default:}let F=r.pop().buf+s;F==="****^reset****"?e=0:this.process_x01(F,e)}else if(s===""){switch(n){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:16,buf:s,start:Date.now()})}else if(r.length){let F=r[r.length-1];if(F.tag===16&&s==="\r")continue;F.buf+=s,F.tag===16&&s===`
|
|
2193
|
+
`&&r.pop()}else{if(x||(A=Date.now()),s==="\r"||(x+=s,!(Date.now()>A+kB||s===`
|
|
2194
|
+
`)))continue;x.slice(0,-1).split(`
|
|
2195
|
+
`).forEach(f=>{this.onConsole(f)}),x=""}for(let F=r.length-1;F>=0;F--)Date.now()>r[F].start+yB&&r.splice(F,1)}}isHex(x){return/^[a-fA-F0-9]*$/.test(x)}onConsole(x){if(!(x[0]===""&&x[1]==="#"&&x.length<10)){if(x[0]===""&&x[1]==="."&&x.length<10050){let[A,e]=x.substr(2).split("=");if(A.length>1&&A.length<50){["~~","~h","~g","~i","~r","~s"].includes(A)||(this.emit("#watch",{key:A,value:e,date:new Date}),this.logger.debug(`#watch ${A} = ${e}`));return}}this.formatConsoleLine(x)}}process_x01(x,A){if(x.length<11)return;let e=x.substr(1,4);if(!this.isHex(e))return;let r=x.substr(-5,4);if(!this.isHex(r))return;let t=parseInt(e,16),s=parseInt(r,16),n=65535&(A<0?0:t-A),F=65535&s-t-x.length;if(n&&this.onConsole(`?console - x01 ${n} characters lost`),A=s,F){this.onConsole(`?console - x01 ${F} characters lost (dropped "${x}")`);return}this.onConsole(x[0]+x.slice(5,-5))}dispose(){this.atHandler.off("data",this.dataHandler),this.removeAllListeners()}};function KA(x){return parseInt(x.slice(6),16)}function EA(x){return"400000"+x.toString(16).toUpperCase().padStart(10,"0")}function PF(x){return x?new Uint8Array(x):null}function Yt(x){return{...x,data:PF(x.data)}}function Cs(x){return{...x,data:PF(x.data)}}var wB=/^400000[0-9A-F]{10}$/;function Jo(x,A){if(!wB.test(A))throw new Error(`MemoryStorage: uto_data row for tag ${x} has non-canonical stamp "${A}"; expected 16-char uppercase hex output of stamp40ToDbHex ("400000" + 10 hex digits)`)}var SB=class NF{constructor(){A0(this,"metadata",new Map),A0(this,"utoData",new Map),A0(this,"changeRequests",[]),A0(this,"files",new Map)}async getMetadataValue(A){return this.metadata.get(A)??null}async setMetadataValue(A,e){this.metadata.set(A,e)}async deleteMetadataValue(A){this.metadata.delete(A)}async getUtoDataTags(){return[...this.utoData.keys()]}async getLatestStampForTag(A){let e=this.utoData.get(A);return!e||e.size===0?null:[...e.keys()].sort().at(-1)}async getRowForTag(A){let e=await this.getLatestStampForTag(A);return e===null?null:Yt(this.utoData.get(A).get(e))}async replaceUtoRow(A){Jo(A.tag,A.stamp),this.utoData.set(A.tag,new Map([[A.stamp,Yt(A)]]))}async insertHistoricRows(A){for(let e of A){Jo(e.tag,e.stamp);let r=this.utoData.get(e.tag);r||(r=new Map,this.utoData.set(e.tag,r)),r.has(e.stamp)||r.set(e.stamp,Yt(e))}}async getHistoricRows(A,e){let r=this.utoData.get(A);if(!r)return[];let t=[...r.values()];if(e.fromStamp!==void 0){let n=e.fromStamp;t=t.filter(F=>F.stamp>=n)}if(e.untilStamp!==void 0){let n=e.untilStamp;t=t.filter(F=>F.stamp<=n)}t.sort((n,F)=>e.order==="desc"?F.stamp.localeCompare(n.stamp):n.stamp.localeCompare(F.stamp));let s=e.offset??0;return t.slice(s,s+e.limit).map(Yt)}async getUtoChangeRequests(){return[...this.changeRequests].sort((A,e)=>A.tag-e.tag||A.stamp.localeCompare(e.stamp)).map(A=>({...A}))}async insertUtoChangeRequests(A){for(let e of A)this.changeRequests.push({tag:e.tag,stamp:EA(e.stamp40),user:e.user??"",json:e.json})}async clearUtoChangeRequests(){this.changeRequests=[]}async getFiles(){return[...this.files.values()].map(Cs)}async getFile(A){let e=this.files.get(A);return e?Cs(e):null}async upsertFile(A){this.files.set(A.filename,Cs(A))}async deleteFile(A){this.files.delete(A)}toJSON(){let A=[];for(let e of this.utoData.values())for(let r of e.values())A.push({tag:r.tag,stamp:r.stamp,flags:r.flags,site_related:r.site_related,data:r.data?sn(r.data):null});return{metadata:Object.fromEntries(this.metadata),utoData:A,changeRequests:this.changeRequests.map(e=>({...e})),files:[...this.files.values()].map(e=>({filename:e.filename,stamp:e.stamp,crc:e.crc,size:e.size,flags:e.flags,flags_int:e.flags_int,data:e.data?sn(e.data):null}))}}static fromJSON(A){let e=new NF;for(let[r,t]of Object.entries(A.metadata??{}))e.metadata.set(r,t);for(let r of A.utoData??[]){let t=e.utoData.get(r.tag);t||(t=new Map,e.utoData.set(r.tag,t)),t.set(r.stamp,{tag:r.tag,stamp:r.stamp,flags:r.flags,site_related:r.site_related,data:r.data?$s(r.data,`uto_data.data of tag ${r.tag}`):null})}e.changeRequests=(A.changeRequests??[]).map(r=>({...r}));for(let r of A.files??[])e.files.set(r.filename,{filename:r.filename,stamp:r.stamp,crc:r.crc,size:r.size,flags:r.flags,flags_int:r.flags_int,data:r.data?$s(r.data,`files.data of "${r.filename}"`):null});return e}},$B=new Set(["link","unknown"]);function Bt(x){return $B.has(x)}var MF=-2;function oe(x){return x.index===MF}var qB=65535,Vo={configa:4294928218,configb:4294928219,configc:4294928220};function Ai(x){let A=x.toLowerCase();if(A==="histdata"||A==="histdata0")return"histdata0";let e=/^rm2mconfig([0-9a-c])$/.exec(A);return e?`config${e[1]}`:x}function Fn(x){let A=Ai(x.trim()).toLowerCase();return Object.prototype.hasOwnProperty.call(Vo,A)?Vo[A]:H0.containerIdToTag(A,!1)}function Et(x){return Fn(x.name)}function TB(x,A){let e=x.byNameOrAlias(A);return Fn(e?e.name:A)}function IF(x){return Number.isInteger(x)&&x>=0&&x<=qB}var PB={u8:"u8",s8:"s8",u16:"u16",s16:"s16",u32:"u32",s32:"s32",s64:"s64",f32:"f32",f64:"f64",floatm16:"floatm16",stamp4:"stamp4",stamp:"stamp",stamp8:"stamp8",datetime:"datetime",ufm8:"ufm8",link:"link",string:"string",float:"f32",float32:"f32",float64:"f64",char:"string",bint:"s8",wint:"s16",dint:"s32",qint:"s64",byte:"u8",word:"u16",dword:"u32",time_span:"s64"};function NB(x){return x===void 0?"unknown":PB[x.toLowerCase()]??"unknown"}var MB={u8:1,s8:1,u16:2,s16:2,floatm16:2,u32:4,s32:4,f32:4,stamp4:4,stamp:5,stamp8:8,datetime:8,ufm8:1,link:0,unknown:0,s64:8,f64:8},IB=new Set(["name","alias","title","index","byteofs","type","max","decpl","vscale","vofs","units","editmask","view","edit","default","bitmask"]),ei="name",LB="type";function RB(x){let A=x.indexOf("=");return{key:x.slice(0,A).trim().toLowerCase(),value:x.slice(A+1).trim()}}function OB(x){return/^config[0-9]$/.test(x)||/^config[A-C]$/i.test(x)?"config":/^histdata[0-9]$/.test(x)?"histdata":"other"}function ze(x,A){let e=x.get(A);if(e===void 0)return;let r=parseInt(e,10);return Number.isNaN(r)?void 0:r}function GB(x){let A=x.get("bitmask");if(A===void 0)return;let e=A.startsWith("$")?A.slice(1):A,r=parseInt(e,16);return Number.isNaN(r)?void 0:r}var UB=/^(.*?)%(config[0-9a-fA-F])%(.+)$/;function LF(x){let A=UB.exec(x);if(!A)return{};let e=A[1],r=e===""?NaN:Number(e);return{ref:{container:A[2],field:A[3]},prefixValue:Number.isFinite(r)?r:void 0}}function HB(x){let A=x.get("vscale");if(A===void 0)return{value:1};let e=LF(A);if(e.ref)return{value:e.prefixValue??1,ref:e.ref};let r=Number(A);return Number.isFinite(r)?{value:r}:{value:1}}function KB(x){let A=x.get("vofs");if(A===void 0)return{value:0};let e=LF(A);if(e.ref)return{value:e.prefixValue??0,ref:e.ref};let r=Number(A);return Number.isFinite(r)?{value:r}:{value:0}}function zB(x,A){return x==="string"?A??0:MB[x]}function JB(x){let A={};for(let[e,r]of x)IB.has(e)||(A[e]=r);return A}function VB(x,A,e){let r=NB(x.get(LB)),t=ze(x,"max"),s=zB(r,t),n=A.fields[A.fields.length-1],f=ze(x,"byteofs")??(n?n.byteofs+n.size:A.kind==="histdata"?1:0),C=A.fields.length,D=x.get(ei)??(A.kind==="histdata"?`ch${C}`:`field${C}`),p=HB(x),j=KB(x),_=ze(x,"index");return{name:D,alias:x.get("alias"),title:x.get("title"),index:_,sortIndex:_??e,byteofs:f,type:r,size:s,max:t,decpl:ze(x,"decpl"),vscale:p.value,vofs:j.value,vscaleRef:p.ref,vofsRef:j.ref,units:x.get("units"),editmask:x.get("editmask"),view:ze(x,"view"),edit:ze(x,"edit"),default:x.get("default"),bitmask:GB(x),attrs:JB(x)}}function WB(){return{name:"",kind:"other",fields:[],recordSize:0}}function XB(x,A,e){switch(A){case ei:{let r=Ai(e);x.name=r,x.kind=OB(r);break}case"alias":x.alias=e;break;case"title":x.title=e;break;case"upload":x.upload=parseInt(e,10);break;case"download":x.download=parseInt(e,10);break;case"edit":x.edit=parseInt(e,10);break;default:break}}function YB(x){if(!x.name)throw new Error("?dde.table-without-name");x.recordSize=x.fields.filter(A=>!Bt(A.type)).reduce((A,e)=>Math.max(A,e.byteofs+e.size),0),x.fields.sort((A,e)=>A.sortIndex-e.sortIndex)}function QB(x){if(x==="*")return{keyBytes:[],matchAll:!0};let A=x.slice(0,2).toLowerCase()==="0x"?x.slice(2):x;A.length%2!==0&&(A=`0${A}`);let e=[];for(let r=0;r<A.length;r+=2){let t=parseInt(A.slice(r,r+2),16);e.push(Number.isNaN(t)?0:t)}return{keyBytes:e,matchAll:!1}}function ZB(x){return x.toLowerCase()==="histdata28"?"applog0":Ai(x)}function xC(x){let{keyBytes:A,matchAll:e}=QB(x.get("key")??"00");return{source:x.get("source")??"",target:ZB(x.get("target")??""),key:A[0]??0,keyBytes:A,matchAll:e,keepraw:ze(x,"keepraw")}}function AC(x,A){return{containers:x,splits:A,byNameOrAlias(e){let r=e.toLowerCase();return x.find(t=>t.name.toLowerCase()===r||(t.alias??"").toLowerCase()===r)??null}}}function eC(x,A){switch(A){case"<table>":return x.container=WB(),x.expectName=!0,!0;case"</table>":return x.container&&(YB(x.container),x.containers.push(x.container)),x.container=null,!0;case"<field>":return x.field=new Map,!0;case"</field>":return x.container&&x.field&&x.container.fields.push(VB(x.field,x.container,x.line)),x.field=null,!0;case"<split>":return x.split=new Map,!0;case"</split>":return x.split&&x.splits.push(xC(x.split)),x.split=null,!0;default:return!1}}function rC(x,A){let{key:e,value:r}=RB(A);if(x.split)x.split.set(e,r);else if(x.field)x.field.set(e,r);else if(x.container){if(x.expectName&&e!==ei)throw new Error(`?dde.first-table-attr-not-name."${e}"`);x.expectName=!1,XB(x.container,e,r)}}function tC(x){let A={containers:[],splits:[],container:null,field:null,split:null,expectName:!1,line:0};for(let[e,r]of x.replace(/\r\n/g,`
|
|
2335
2196
|
`).replace(/\r/g,`
|
|
2336
2197
|
`).split(`
|
|
2337
|
-
`).entries()){x.line=e;let t=r.trim();t===""||t.startsWith("//")||fB(x,t)||t.includes("=")&&EB(x,t)}return vB(x.containers,x.splits)}var lB=null,cB=4;function at(A){let x=new Date(A),e=(r,t)=>r.toString().padStart(t,"0");return e(x.getUTCFullYear(),4)+e(x.getUTCMonth()+1,2)+e(x.getUTCDate(),2)+e(x.getUTCHours(),2)+e(x.getUTCMinutes(),2)+e(x.getUTCSeconds(),2)+e(x.getUTCMilliseconds(),3)}function Et(A){let x=A.trim();if(x==="*")return lB;if(!/^\d{4,17}$/.test(x))throw new Error(`?apiStamp.invalid-input."${A}"`);let e=(D,p,j)=>{let _=x.slice(D,D+p);return parseInt(_.length?_.padEnd(p,"0"):j,10)},r=parseInt(x.slice(0,cB),10),t=x.length>=6?e(4,2,"01"):1,s=x.length>=8?e(6,2,"01"):1,n=e(8,2,"00"),F=e(10,2,"00"),f=e(12,2,"00"),c=e(14,3,"000");return Date.UTC(r,t-1,s,n,F,f,c)}var vt="NAN",BB="%HEX%",CB=65535,FF=class extends Error{constructor(A){super(`?ddeCodec.unknown-alias."${A}"`),E0(this,"alias",A),this.name="DdeUnknownAliasError"}};function an(A){return(A.alias??A.name).toLowerCase()}function on(A){return A==="string"}function Os(A){return A==="stamp"||A==="stamp4"||A==="stamp8"||A==="datetime"}function vF(A){return(A.editmask??"").toUpperCase()===BB}function fF(A,x){if(!Number.isFinite(A))return A;let e=10**x;return Math.sign(A)*Math.round(Math.abs(A)*e)/e}function dB(A,x){if(!Number.isFinite(A)||A===0)return A;let e=Math.abs(A),r=Math.floor(Math.log10(e));return 10**(r+1)<=e?r+=1:10**r>e&&(r-=1),fF(A,x-1-r)}function DB(A){return A==="floatm16"||A==="f32"||A==="f64"}function uB(A,x){if(!Number.isFinite(x))return x;let e=A.decpl??(DB(A.type)?9:0),r=fF(x,e),t=A.type==="floatm16"?3:A.type==="f32"?7:15;return dB(r,t)}function hs(A,x){let e=BigInt.asUintN(64,BigInt(Math.trunc(A))),r=BigInt.asUintN(64,BigInt(Math.trunc(x))),t=0n,s=1n;for(;r!==0n;)r&1n&&(e&1n&&(t|=s),s<<=1n),e>>=1n,r>>=1n;return Number(t)}function pB(A,x,e){let r=BigInt.asUintN(64,BigInt(Math.trunc(A))),t=BigInt.asUintN(64,BigInt(Math.trunc(x))),s=BigInt.asUintN(64,BigInt(Math.trunc(e))),n=1n;for(;s!==0n;)s&1n&&(r=t&1n?r|n:r&~n,t>>=1n),s>>=1n,n<<=1n;return Number(r)}var bB=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function Yt(A){return!!A.bitmask&&bB.has(A.type)}var EF=255,lF=254,cF=253,BF=252,CF=251,mB=207,Gs=65535,Qt=65534,Us=65533,Hs=65532,zs=65531;function jB(A){switch(A){case EF:return Gs;case lF:return Qt;case cF:return Us;case BF:return Hs;case CF:return zs;default:return A<=31?A:A>mB?Qt:(A&15|16)<<(A>>4)-1}}function hB(A){switch(A){case Gs:return EF;case Qt:return lF;case Us:return cF;case Hs:return BF;case zs:return CF;default:{if(A<=31)return A;let x=1,e=A;for(;(e&65504)>0;)e>>=1,x++;return x<<4|e&15}}}var Zt=1023,gs=31,dF=127,os=8388607,gB=255,ys=15,yB=-14,_o=15;function kB(A){let x=(A&Zt)<<13,e=(A&31744)>>10;if(e===gs)return DF(1024-(A&Zt));e!==0&&(e=e-ys+4+dF);let r=(x|e<<23)>>>0;A&32768&&(r=(r|2147483648)>>>0);let t=new DataView(new ArrayBuffer(4));return t.setUint32(0,r),t.getFloat32(0)}function _B(A){if(typeof A=="string"||Number.isNaN(A))return CB;let x=new DataView(new ArrayBuffer(4));x.setFloat32(0,A);let e=x.getUint32(0),r=e>>>16&32768,t=(e&os)+4096,s=(t>os?1:0)+(e>>>23&gB),n=(t&os)>>>13;return s!==0&&(s=s-dF-4,s<yB?(n=0,s=0):s>_o?(n=Zt,s=_o+ys):s=s+ys),r|s<<10|n}var wB=["OF","UF","OL","SC"],ks={u8:{NAN:255,OF:254,UF:253,OL:252,SC:251},u16:{NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},u32:{NAN:4294967295,OF:4294967294,UF:4294967293,OL:4294967292,SC:4294967291},s8:{NAN:127,OF:126,UF:-126,OL:-127,SC:-128},s16:{NAN:32767,OF:32766,UF:-32766,OL:-32767,SC:-32768},s32:{NAN:2147483647,OF:2147483646,UF:-2147483646,OL:-2147483647,SC:-2147483648},s64:{NAN:0x7fffffffffffffffn,OF:0x7ffffffffffffffen,UF:-0x7ffffffffffffffen,OL:-0x7fffffffffffffffn,SC:-0x8000000000000000n},ufm8:{NAN:Gs,OF:Qt,UF:Us,OL:Hs,SC:zs}},SB={NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},Ux={NAN:1,OF:2,UF:3,OL:4,SC:5},$B=new Set(["u8","u16","u32","ufm8"]);function qB(A){let x=Math.floor(A),e=A-x;return e<.5?x:e>.5?x+1:x%2===0?x:x+1}function Ks(A){let x=A.replace(/,/g,"").trim();if(!/^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/.test(x))return null;let e=Number(x);return Number.isFinite(e)?e:null}function Js(A,x,e){switch(A){case"u8":return x.getUint8(e);case"s8":return x.getInt8(e);case"u16":return x.getUint16(e,!1);case"s16":return x.getInt16(e,!1);case"u32":return x.getUint32(e,!1);case"s32":return x.getInt32(e,!1);case"s64":return Number(x.getBigInt64(e,!1));case"f32":return x.getFloat32(e,!1);case"f64":return x.getFloat64(e,!1);case"floatm16":return kB(x.getUint16(e,!1));case"ufm8":return jB(x.getUint8(e));default:throw new Error(`?ddeCodec.non-numeric-type."${A}"`)}}function DF(A){switch(A){case Ux.OF:return"OF";case Ux.UF:return"UF";case Ux.OL:return"OL";case Ux.SC:return"SC";default:return vt}}var wo=[["NAN",Ux.NAN],["OF",Ux.OF],["UF",Ux.UF],["OL",Ux.OL],["SC",Ux.SC]];function PB(A,x){let e=A.getUint32(x,!1);if((e&2139095040)!==2139095040)return 0;let r=e&8388607;return r===0?Ux.NAN:(r=r&4194304?8388608-r:r&255,r===0?Ux.NAN:r)}function TB(A,x){let e=A.getBigUint64(x,!1);if((e&0x7ff0000000000000n)!==0x7ff0000000000000n)return 0;let r=Number(e&0xffn);return r===0?Ux.NAN:r}function NB(A,x){if(A.type==="s64"){let t=x.getBigInt64(A.byteofs,!1);Yt(A)&&(t=BigInt(hs(Number(t),A.bitmask)));let s=ks.s64;return wo.find(([n])=>t===BigInt(s[n]))?.[1]??0}let e=ks[A.type];if(!e)return 0;let r=Js(A.type,x,A.byteofs);return Yt(A)&&(r=hs(r,A.bitmask)),wo.find(([t])=>r===e[t])?.[1]??0}function uF(A,x){switch(A.type){case"floatm16":{let e=x.getUint16(A.byteofs,!1);return(e>>10&gs)===gs?1024-(e&Zt):0}case"f32":return PB(x,A.byteofs);case"f64":return TB(x,A.byteofs);default:return NB(A,x)}}function pF(A,x){let e=Js(A.type,x,A.byteofs);return typeof e=="string"||Number.isNaN(e)?NaN:(Yt(A)&&(e=hs(e,A.bitmask)),e*A.vscale+A.vofs)}function IB(A,x){let e=uF(A,x);if(e!==0)return DF(e);let r=pF(A,x);return Number.isNaN(r)?vt:uB(A,r)}function MB(A,x){if(A.byteofs+A.size>x.byteLength)return null;if(on(A.type)||Os(A.type))return NaN;let e=new DataView(x.buffer,x.byteOffset,x.byteLength);return uF(A,e)!==0?NaN:pF(A,e)}function LB(A,x){if(vF(A)){let e="";for(let r=0;r<A.size;r++)e+=x.getUint8(A.byteofs+r).toString(16).padStart(2,"0");return e.toUpperCase()}return V0.cp1252Unpack(x,A.byteofs,A.size)}var bF=25569,mF=864e5;function RB(A){return(A-bF)*mF}function OB(A){return A/mF+bF}function GB(A,x){if(A.type==="datetime")return at(RB(x.getFloat64(A.byteofs,!1)));if(A.type==="stamp8"){let r=x.getBigUint64(A.byteofs,!1),t=Number(r&0xffffffffffn);return at(V0.stamp40ToMS(t))}let e=x.getUint32(A.byteofs,!1)*256;return A.size>=5&&(e+=x.getUint8(A.byteofs+4)),at(V0.stamp40ToMS(e))}var UB=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function HB(A,x){return/^[+-]?\d+$/.test(A)?parseInt(A,10):/^\$[0-9a-fA-F]+$/.test(A)?parseInt(A.slice(1),16):x}function zB(A){let x=A.default;if(x===void 0)return;if(on(A.type))return x;let e=x.trim();if(e===""||e.toUpperCase()===vt)return vt;if(UB.has(A.type))return HB(e,0);let r=Ks(e);return r!==null?r:x}function KB(A,x,e){return A.byteofs+A.size>e?zB(A):on(A.type)?LB(A,x):Os(A.type)?GB(A,x):IB(A,x)}function So(A,x){let e=new DataView(x.buffer,x.byteOffset,x.byteLength),r={};for(let t of A.fields)pe(t)||Ft(t.type)||(r[an(t)]=KB(t,e,x.byteLength));return r}function JB(A,x){if(typeof x=="number")return Number.isFinite(x)?{kind:"value",physical:x}:{kind:"sentinel",state:"NAN"};if(typeof x=="string"){if(x.toUpperCase()===vt||x==="")return{kind:"sentinel",state:"NAN"};let e=wB.find(t=>t===x);if(e)return{kind:"sentinel",state:e};if("OUS".includes(x[0]))return{kind:"skip"};let r=Ks(x);return r!==null?{kind:"value",physical:r}:$o(A)}return $o(A)}function $o(A){let x=A.default;return x!==void 0&&x.startsWith("%")?{kind:"sentinel",state:"NAN"}:{kind:"value",physical:(x!==void 0?Ks(x):null)??0}}function _s(A,x,e){switch(A.type){case"floatm16":return x.setUint16(A.byteofs,SB[e],!1);case"f32":return x.setUint32(A.byteofs,(2139095040|Ux[e])>>>0,!1);case"f64":return x.setBigUint64(A.byteofs,0x7ff0000000000000n|BigInt(Ux[e]),!1);default:break}let r=ks[A.type]?.[e];if(r===void 0)throw new Error(`?ddeCodec.non-numeric-type."${A.type}"`);if(A.type==="s64")return x.setBigInt64(A.byteofs,BigInt(r),!1);jF(A,x,Number(r))}function VB(A,x,e){if(A.vscale===0)return;let r=(e-A.vofs)/A.vscale;switch(A.type){case"f32":return x.setFloat32(A.byteofs,r,!1);case"f64":return x.setFloat64(A.byteofs,r,!1);case"floatm16":return x.setUint16(A.byteofs,_B(r),!1);default:break}if(Number.isNaN(r))return _s(A,x,"NAN");if(!Number.isFinite(r))return _s(A,x,"OF");let t=r;$B.has(A.type)&&t<0&&(t=0),jF(A,x,qB(t))}function jF(A,x,e){if(Yt(A)){let r=Js(A.type,x,A.byteofs);e=pB(r,e,A.bitmask)}WB(A.type,x,A.byteofs,e)}function WB(A,x,e,r){switch(A){case"u8":return x.setUint8(e,r);case"s8":return x.setInt8(e,r);case"u16":return x.setUint16(e,r,!1);case"s16":return x.setInt16(e,r,!1);case"u32":return x.setUint32(e,r,!1);case"s32":return x.setInt32(e,r,!1);case"s64":return x.setBigInt64(e,BigInt(r),!1);case"ufm8":return x.setUint8(e,hB(r));default:throw new Error(`?ddeCodec.non-numeric-type."${A}"`)}}function XB(A,x,e){let r=String(e);if(vF(A)){let t=r.trim();if(t.length%2!==0||t.length>A.size*2)throw new Error(`?ddeCodec.invalid-hex."${an(A)}"`);for(let s=0;s<A.size;s++){let n=s*2<t.length?parseInt(t.substr(s*2,2),16):0;x.setUint8(A.byteofs+s,n)}return}V0.cp1252Pack(x,A.byteofs,A.size,r)}function YB(A,x,e){let r=Et(String(e));if(r===null)throw new Error(`?ddeCodec.unbounded-stamp."${an(A)}"`);if(A.type==="datetime"){x.setFloat64(A.byteofs,OB(r),!1);return}let t=V0.msToStamp40(r);if(A.type==="stamp8"){x.setBigUint64(A.byteofs,BigInt(t),!1);return}x.setUint32(A.byteofs,Math.trunc(t/256),!1),A.size>=5&&x.setUint8(A.byteofs+4,t&255)}function QB(A,x,e){if(on(A.type))return XB(A,x,e);if(Os(A.type))return YB(A,x,e);let r=JB(A,e);switch(r.kind){case"skip":return;case"sentinel":return _s(A,x,r.state);case"value":return VB(A,x,r.physical)}}function qo(A,x,e){let r=e?new Uint8Array(e):new Uint8Array(A.recordSize),t=new DataView(r.buffer,r.byteOffset,r.byteLength),s=new Map(A.fields.filter(n=>!pe(n)&&!Ft(n.type)).map(n=>[an(n),n]));for(let[n,F]of Object.entries(x)){let f=s.get(n.toLowerCase());if(!f)throw new FF(n);QB(f,t,F)}return r}var Po=99,ZB=256,He=class extends Error{constructor(A){super(`?ddeMapper.unknown-container."${A}"`),E0(this,"container",A),this.name="DdeUnknownContainerError"}},xn=class extends Error{constructor(A,x){let e=x?`${A}.${x}`:A;super(`?ddeMapper.write-forbidden."${e}"`),E0(this,"container",A),E0(this,"field",x),this.name="DdeWriteForbiddenError"}},hF=class extends Error{constructor(A){super(`?ddeMapper.unknown-field."${A}"`),E0(this,"field",A),this.name="DdeUnknownFieldError"}};function Fs(A){return(A.alias??A.name).toLowerCase()}var gF=class{constructor(A,x,e=gr){E0(this,"model",A),E0(this,"storage",x),E0(this,"timeSource",e)}async readContainer(A){let x=this.model.byNameOrAlias(A);if(!x)return null;let e=mr(x);if(e===null)return null;let r=await this.storage.getRowForTag(e);if(!r||!r.data)return null;let t=So(await this.resolveScaleRefs(x),r.data);return delete t.stamp,{stamp:this.rowStamp(r),...t}}async writeContainer(A,x){let e=this.model.byNameOrAlias(A);if(!e)throw new He(A);let r=mr(e);if(r===null)throw new He(A);if(e.edit===Po)throw new xn(e.name);let{stamp:t,...s}=x;this.assertFieldsWritable(e,s);let n=await this.storage.getRowForTag(r),F=qo(await this.resolveScaleRefs(e),s,n?.data??null),f=V0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs()),c=Gx(f);return await this.storage.replaceUtoRow({tag:r,stamp:c,flags:n?.flags??0,site_related:n?.site_related??0,data:F}),{tag:r,stampHex:c,stamp40:f,data:F,devicePushable:Ls(r)&&e.download!==0,upload:e.upload,download:e.download}}async seedContainer(A,x){let e=this.model.byNameOrAlias(A);if(!e)throw new He(A);let r=mr(e);if(r===null)throw new He(A);let{stamp:t,...s}=x,n=qo(await this.resolveScaleRefs(e),s,null),F=V0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs());await this.storage.replaceUtoRow({tag:r,stamp:Gx(F),flags:0,site_related:0,data:n})}recordStampMs(A){if(typeof A!="string")return null;try{return Et(A)}catch{return null}}async readTimeseries(A,x){let e=this.model.byNameOrAlias(A);if(!e)throw new He(A);let r=this.model.splits.find(c=>c.target.toLowerCase()===e.name.toLowerCase());if(!r)throw new He(A);let t=Math.abs(x.count),s=x.offset??0,n=this.buildSelectSet(e,x.select),F=await this.resolveScaleRefs(e);return(await this.collectMatched(F,r,s+t,{fromStamp:this.boundHex(x.fromMs),untilStamp:this.boundHex(x.untilMs),order:x.count<0?"desc":"asc",selectSet:n})).slice(s,s+t)}matchesSplit(A,x){return A.length===0?!1:x.matchAll?!0:A.length<x.keyBytes.length?!1:x.keyBytes.every((e,r)=>A[r]===e)}async collectMatched(A,x,e,r){let t=[];if(e<=0)return t;let s=Math.max(e,ZB);for(let n=0;;n+=s){let F=await this.storage.getHistoricRows(26623,{fromStamp:r.fromStamp,untilStamp:r.untilStamp,order:r.order,limit:s,offset:n});for(let f of F)if(f.data&&this.matchesSplit(f.data,x)&&(t.push(this.recordFromRow(A,f,r.selectSet)),t.length>=e))return t;if(F.length<s)return t}}async readTimeseriesEdge(A,x,e){return(await this.readTimeseries(A,{count:x==="youngest"?-1:1,select:e}))[0]??null}recordFromRow(A,x,e){let r=So(A,x.data),t={stamp:this.rowStamp(x)};for(let[s,n]of Object.entries(r))s!=="stamp"&&(!e||e.has(s))&&(t[s]=n);return t}rowStamp(A){return at(V0.stamp40ToMS(Zx(A.stamp)))}boundHex(A){if(A!=null)return Gx(V0.msToStamp40(A))}async resolveScaleRefs(A){if(!A.fields.some(r=>r.vscaleRef||r.vofsRef))return A;let x=new Map,e=[];for(let r of A.fields){if(!r.vscaleRef&&!r.vofsRef){e.push(r);continue}e.push({...r,vscale:r.vscaleRef?await this.resolveRef(r.vscaleRef,x,r.vscale):r.vscale,vofs:r.vofsRef?await this.resolveRef(r.vofsRef,x,r.vofs):r.vofs})}return{...A,fields:e}}async resolveRef(A,x,e){if(!/^config[0-9a-f]$/i.test(A.container))return e;let r=this.referencedField(A);if(!r)return e;let t=A.container.toLowerCase();x.has(t)||x.set(t,await this.referencedRecordData(A.container));let s=x.get(t);if(!s)return e;let n=MB(r,s);return n===null?e:n}referencedField(A){let x=A.field.toLowerCase();return this.model.byNameOrAlias(A.container)?.fields.find(r=>Fs(r)===x||r.name.toLowerCase()===x)??null}async referencedRecordData(A){let x=this.model.byNameOrAlias(A);if(!x)return null;let e=mr(x);return e===null?null:(await this.storage.getRowForTag(e))?.data??null}assertFieldsWritable(A,x){let e=new Map(A.fields.filter(r=>!pe(r)&&!Ft(r.type)).map(r=>[Fs(r),r]));for(let r of Object.keys(x)){let t=e.get(r.toLowerCase());if(t&&t.edit===Po)throw new xn(A.name,t.name)}}buildSelectSet(A,x){if(!x||x.length===0)return null;let e=new Set(A.fields.filter(t=>!pe(t)&&!Ft(t.type)).map(t=>Fs(t))),r=new Set;for(let t of x){let s=t.toLowerCase();if(s!=="stamp"){if(!e.has(s))throw new hF(t);r.add(s)}}return r}},xC=new Set(["$titles","$meta"]);function To(A,x){let e=x.toLowerCase();if(xC.has(e))return null;let r=A[e];if(typeof r!="object"||r===null)return null;let t=new Map;for(let[s,n]of Object.entries(r)){if(typeof n!="object"||n===null)continue;let F=n.alias;typeof F=="string"&&F.length>0&&t.set(s.toLowerCase(),F)}return t}function AC(A,x){let e={};for(let[r,t]of Object.entries(A)){if(r==="stamp"){e[r]=t;continue}let s=x?.get(r.toLowerCase());e[s??r]=t}return e}function Fn(A,x){if(!A)return null;let e=To(A,x.name);return e||(x.alias?To(A,x.alias):null)}var G0="[OfflineSyncManager]",eC=500,rC="site_info",tC=new Set(["local-data-interface.json"]);function Nx(A){if(A?.aborted)throw A.reason??new DOMException("The operation was aborted.","AbortError")}function nC(A){let x=ms(A);return!!(A&2)||x!==0&&x!==65}function No(A){return A.filter(x=>(x.filename===it||x.filename===eF)&&x.outcome==="download").map(x=>x.filename)}var Le="skip-equal",br="skip-device-readonly",vs="delete",ue="error",fs="upload",Es="uploading-utos",Io="downloading-utos",Gt="fetching-device-state",ls="uploading-files",Ut="downloading-files",Mo="executing-change-requests",Lo="executed",sC="error",cs="skip-old-stamp",kF=class extends yF.EventEmitter{constructor(A,x,e){super(),E0(this,"utoMaster",A),E0(this,"storage",x),E0(this,"logger",e)}emitProgress(A,x,e,r,t){let s={phase:A,item:x,completed:e,total:r,...t};this.emit("progress",s)}async uploadHistoricTag(A,x,e,r,t){try{let s=await this.storage.getRowForTag(A),n=0,F=async f=>{let c=f.filter(D=>D.stamp40>e).map(D=>({tag:A,stamp:Gx(D.stamp40),flags:s?.flags??0,site_related:s?.site_related??0,data:D.data}));await this.storage.insertHistoricRows(c),n+=c.length};return await this.utoMaster.requestHistoricUtos(A,e,t,void 0,eC,F),this.logger?.info(`${G0} historic upload tag=0x${A.toString(16)} +${n} records`),{tag:A,sTag:x.sTag,historic:!0,outcome:"upload",dbStamp40:e,deviceStamp40:r,recordsAppended:n}}catch(s){return this.logger?.error(`${G0} historic upload error tag=0x${A.toString(16)}: ${s}`),{tag:A,sTag:x.sTag,historic:!0,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadSingleTag(A,x,e,r){try{let t=await this.utoMaster.requestUto(A,0);if(!t)return this.logger?.info(`${G0} single upload tag=0x${A.toString(16)} \u2014 device returned no data (skip)`),{tag:A,sTag:x.sTag,historic:!1,outcome:Le,dbStamp40:e,deviceStamp40:r};let s=await this.storage.getRowForTag(A);return await this.storage.replaceUtoRow({tag:A,stamp:Gx(t.stamp),flags:s?.flags??0,site_related:s?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null}),this.logger?.info(`${G0} single upload tag=0x${A.toString(16)}`),{tag:A,sTag:x.sTag,historic:!1,outcome:"upload",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${G0} single upload error tag=0x${A.toString(16)}: ${JSON.stringify(t)}`),{tag:A,sTag:x.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadUtoTags(A,x,e,r){let t=A.length;this.emitProgress(Es,null,0,t);let s=0;for(let n of A){Nx(r);let F=x.get(n),{tagInfo:f,dbStamp40:c,deviceStamp40:D}=F;if(this.emitProgress(Es,f?.sTag??`0x${n.toString(16)}`,s,t),!f||D===null)e.set(n,{tag:n,sTag:"?",historic:!1,outcome:"unknown-tag",dbStamp40:c,deviceStamp40:D});else if(!(!f.flags.up||D<=c)){let p=f.sTag,j=s,_=f.historic?await this.uploadHistoricTag(n,f,c,D,k=>{this.emitProgress(Es,p,j,t,{recordsReceived:k})}):await this.uploadSingleTag(n,f,c,D);e.set(n,_)}++s}}async pullFileFromDevice(A,x,e,r,t,s){let n=x.stamp;try{let F=await this.utoMaster.requestFile(A,c=>{this.emitProgress(ls,A,s,t,{bytesTransferred:c})}),f=AF(F);if(f!==x.crc32)throw new Error(`crc32 mismatch: expected 0x${x.crc32.toString(16)}, got 0x${f.toString(16)}`);return await this.storage.upsertFile({filename:A,stamp:Gx(n),crc:x.crc32,size:F.byteLength,flags:x._flags,flags_int:r,data:F}),{filename:A,outcome:fs,dbStamp40:e,deviceStamp40:n}}catch(F){return this.logger?.error(`${G0} file upload error ${A}: ${JSON.stringify(F)}`),{filename:A,outcome:ue,dbStamp40:e,deviceStamp40:n}}}async autoSyncUploadFile(A,x,e,r,t,s,n,F){let f=x.stamp;if(f>r)return this.fileContentMatches(x,e)?this.convergeFileStamp(A,x,e,r):s?this.pullFileFromDevice(A,x,r,t,n,F):void 0;if(f===r&&this.fileContentMatches(x,e))return{filename:A,outcome:Le,dbStamp40:r,deviceStamp40:f}}async convergeFileStamp(A,x,e,r){let t=x.stamp;try{return await this.storage.upsertFile({filename:A,stamp:Gx(t),crc:x.crc32,size:x.size,flags:x._flags,flags_int:e.flags_int,data:e.data}),{filename:A,outcome:Le,dbStamp40:r,deviceStamp40:t}}catch(s){return this.logger?.error(`${G0} file upload error ${A}: ${JSON.stringify(s)}`),{filename:A,outcome:ue,dbStamp40:r,deviceStamp40:t}}}async mirrorUploadFile(A,x,e,r,t,s,n){let F=x.stamp;if(F!==r||!this.fileContentMatches(x,e))return t?this.pullFileFromDevice(A,x,r,e.flags_int,s,n):{filename:A,outcome:br,dbStamp40:r,deviceStamp40:F}}async decideFileUpload(A,x,e,r){let t=await this.storage.getFile(A),s=!!(x._flags&1);if(!t)return s?this.pullFileFromDevice(A,x,0,16,e,r):void 0;let n=Zx(t.stamp);return x._flags&8?this.autoSyncUploadFile(A,x,t,n,t.flags_int,s,e,r):this.decideNonSystemUpload(A,x,t,n,s,e,r)}pullIfReadable(A,x,e,r,t,s,n){return A?this.pullFileFromDevice(x,e,r,t,s,n):void 0}async decideNonSystemUpload(A,x,e,r,t,s,n){let F=e.flags_int;if(!(F&2))return F&4?this.pullIfReadable(t,A,x,r,F,s,n):this.decideUploadBySyncLogic(A,x,e,r,t,s,n)}async decideUploadBySyncLogic(A,x,e,r,t,s,n){let F=e.flags_int,f=ms(F);if(f===65)return this.fileContentMatches(x,e)?this.convergeFileStamp(A,x,e,r):this.pullIfReadable(t,A,x,r,F,s,n);if(f===1)return this.autoSyncUploadFile(A,x,e,r,F,t,s,n);if(f===97)return x.stamp>r?this.pullIfReadable(t,A,x,r,F,s,n):void 0;if(f!==33)return this.mirrorUploadFile(A,x,e,r,t,s,n)}async uploadFiles(A,x,e,r){let t=Object.entries(A),s=t.length;this.emitProgress(ls,null,0,s);let n=0;for(let[F,f]of t){if(Nx(r),!(F===eF||F===it&&!e)){let D=await this.decideFileUpload(F,f,s,n);D&&x.set(F,D)}this.emitProgress(ls,F,++n,s)}}fileContentMatches(A,x){return x!==null&&A.crc32===x.crc&&A.size===x.size}async downloadSingleTag(A,x,e,r){try{let t=await this.storage.getRowForTag(A);return t?.data&&await this.utoMaster.sendUTOCmdExt(3,A,t.data,e),{tag:A,sTag:x.sTag,historic:!1,outcome:"download",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${G0} download error tag=0x${A.toString(16)}: ${t}`),{tag:A,sTag:x.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async processDownloadTag(A,x,e,r,t){if(e===r&&!t.has(A)){let s=x.flags.up?Le:"skip-db-readonly";t.set(A,{tag:A,sTag:x.sTag,historic:!1,outcome:s,dbStamp40:e,deviceStamp40:r});return}if(e>r){let s=x.flags.down?await this.downloadSingleTag(A,x,e,r):{tag:A,sTag:x.sTag,historic:!1,outcome:br,dbStamp40:e,deviceStamp40:r};t.set(A,s)}}async downloadUtoTags(A,x,e,r){let t=A.length;this.emitProgress(Io,null,0,t);let s=0;for(let n of A){Nx(r);let{tagInfo:F,dbStamp40:f,deviceStamp40:c}=x.get(n);F&&c!==null&&!F.historic&&await this.processDownloadTag(n,F,f,c,e),this.emitProgress(Io,F?.sTag??`0x${n.toString(16)}`,++s,t)}}async sendFileToDevice(A,x,e,r,t){let s=A.data.byteLength,n=F=>{if(F!==null){let f=Math.round(s*parseInt(F,10)/100);this.emitProgress(Ut,A.filename,t,r,{bytesTransferred:f,bytesTotal:s})}};this.utoMaster.on("installing",n);try{return await this.utoMaster.sendFile(0,A.data,V0.stamp40ToMS(x),A.filename),{filename:A.filename,outcome:"download",dbStamp40:x,deviceStamp40:e}}catch(F){return this.logger?.error(`${G0} file download error ${A.filename}: ${F}`),{filename:A.filename,outcome:"error",dbStamp40:x,deviceStamp40:e}}finally{this.utoMaster.removeListener("installing",n)}}async processDownloadFile(A,x,e,r,t=!1){if(!A.data)return;let s=x?.stamp??0,n=Zx(A.stamp);if(x!==void 0&&this.fileContentMatches(x,A))return n===s?void 0:{filename:A.filename,outcome:Le,dbStamp40:n,deviceStamp40:s};if(!(!t&&n<s))return!t&&x!==void 0&&!(x._flags&2)?{filename:A.filename,outcome:br,dbStamp40:n,deviceStamp40:s}:this.sendFileToDevice(A,n,s,e,r)}async isAppInDevPhase(){let A=await this.storage.getMetadataValue(rC);if(!A)return!1;try{return JSON.parse(A).app?.phase==="dev"}catch(x){return this.logger?.error(`${G0} corrupt site_info metadata: ${x}`),!1}}async downloadFiles(A,x,e,r){let t=await this.storage.getFiles(),s=t.filter(p=>p.flags&8),n=t.filter(p=>!(p.flags&8)),F=[...s,...n].filter(p=>p.filename),f=Object.entries(A).filter(([,p])=>p._flags&4).map(([p])=>p),c=F.length;this.emitProgress(Ut,null,0,c);let D=0;for(let p of F){if(Nx(r),e&&p.filename===it){this.emitProgress(Ut,p.filename,++D,c);continue}let j=p.filename===it&&!e,_=await this.decideFileDownload(p,A[p.filename],x.get(p.filename),f,j,c,D);_&&x.set(p.filename,_),this.emitProgress(Ut,p.filename,++D,c)}}async decideFileDownload(A,x,e,r,t,s,n){return x!==void 0?this.decideDownloadExisting(A,x,e,t,s,n):this.decideDownloadMissing(A,r,s,n)}async decideDownloadExisting(A,x,e,r,t,s){if(x._flags&4)return;if(A.flags&8)return e?void 0:this.processDownloadFile(A,x,t,s,r);let n=A.flags_int;if(n&8)return this.handleDeviceDelete(A,x,e);if(!e&&!(n&4))return this.pushToDevice(A,x,t,s)}async pushToDevice(A,x,e,r){let t=x.stamp,s=Zx(A.stamp),n=this.wantDownloadPush(A,x,s,t);if(n==="match")return{filename:A.filename,outcome:Le,dbStamp40:s,deviceStamp40:t};if(n!=="none"&&!(s===0||!A.data||A.data.byteLength===0))return x._flags&2?this.sendFileToDevice(A,s,t,e,r):{filename:A.filename,outcome:br,dbStamp40:s,deviceStamp40:t}}wantDownloadPush(A,x,e,r){let t=A.flags_int;if(t&2)return"push";let s=this.fileContentMatches(x,A),n=ms(t);return n===33||n===1&&e>=r?s?"match":"push":n===97&&e>r?"push":"none"}async handleDeviceDelete(A,x,e){let r=x.stamp,t=Zx(A.stamp);if(!(e&&(e.outcome===fs||e.outcome===ue))){if(!(x._flags&2))return{filename:A.filename,outcome:br,dbStamp40:t,deviceStamp40:r};try{return await this.utoMaster.deleteFile(A.filename),await this.storage.deleteFile(A.filename),{filename:A.filename,outcome:vs,dbStamp40:t,deviceStamp40:r}}catch(s){return this.logger?.error(`${G0} file delete error ${A.filename}: ${JSON.stringify(s)}`),{filename:A.filename,outcome:ue,dbStamp40:t,deviceStamp40:r}}}}async decideDownloadMissing(A,x,e,r){let t=A.flags_int,s=Zx(A.stamp);if(t&8)try{return await this.storage.deleteFile(A.filename),{filename:A.filename,outcome:vs,dbStamp40:s,deviceStamp40:null}}catch(n){return this.logger?.error(`${G0} file delete error ${A.filename}: ${JSON.stringify(n)}`),{filename:A.filename,outcome:ue,dbStamp40:s,deviceStamp40:null}}if(!(A.flags&12)&&nC(t)&&A.flags&2&&this.hasMatchingNode(A.filename,x)&&A.data)return this.sendFileToDevice(A,s,0,e,r)}hasMatchingNode(A,x){return x.some(e=>e.slice(0,-1)===A.slice(0,e.length-1))}async reconcileFileState(A){try{await this.reconcileFileStateUnguarded(A)}catch(x){if(A?.aborted)throw x;this.logger?.error(`${G0} file-state reconciliation failed: ${JSON.stringify(x)}`)}}async reconcileFileStateUnguarded(A){let x=await this.utoMaster.requestFileList(),e=new Set(Object.keys(x)),r=await this.storage.getFiles(),t=new Map(r.map(s=>[s.filename,s]));for(let[s,n]of Object.entries(x))Nx(A),await this.reconcileDeviceFile(s,n,t.get(s)??null);for(let s of r)Nx(A),e.has(s.filename)||await this.dropRowMissingFromDevice(s)}async reconcileDeviceFile(A,x,e){let r=!!((x._flags|(e?.flags??0))&8);if(e?.data&&!this.fileContentMatches(x,e)){this.logger?.info(`${G0} reconcile keep ${A}: row holds undeployed content`);return}if(!e?.data&&!r)return;let t={filename:A,stamp:Gx(x.stamp),crc:x.crc32,size:x.size,flags:x._flags,flags_int:e?.flags_int??16,data:this.keepBlob(A,r)?e?.data??null:null};e&&this.fileRowMatches(e,t)||await this.storage.upsertFile(t)}keepBlob(A,x){return!x||tC.has(A)}fileRowMatches(A,x){return A.stamp===x.stamp&&A.crc===x.crc&&A.size===x.size&&A.flags===x.flags&&A.flags_int===x.flags_int&&(A.data??null)===x.data}async dropRowMissingFromDevice(A){try{await this.storage.deleteFile(A.filename)}catch(x){this.logger?.error(`${G0} reconcile delete error ${A.filename}: ${JSON.stringify(x)}`)}}async validateDevice(A){Nx(A),this.emitProgress("validating",null,0,1);let x=await this.utoMaster.requestDeviceInfo();if(!x)throw new Error(`${G0} requestDeviceInfo returned null`);let e=await this.storage.getMetadataValue("device_id");if(e===null)throw new Error(`${G0} DB metadata missing device_id`);if(e.toUpperCase()!==x.serialNumber.toUpperCase())throw new Error(`${G0} DB device_id "${e}" does not match connected device "${x.serialNumber}"`);return this.emitProgress("validating",null,1,1),x}buildTagMap(A){let x=new Map;for(let e=0;e<A.utos.length;e++){let r=A.utos[e];x.set(r.wTag,{index:e,flags:{up:r.flags.up,down:r.flags.down,setValue:!!r.flags.setValue},historic:r.flags.historic,sTag:r.sTag})}return x}async resolveDbTags(A){let x=await this.storage.getUtoDataTags(),e=new Set(x);for(let[r,t]of A)t.historic&&!e.has(r)&&x.push(r);return x}async buildTagStampCache(A,x,e){let r=new Map;for(let t of A){let s=x.get(t),n=await this.storage.getLatestStampForTag(t),F=n?Zx(n):0,f=s&&s.index<e.stamps.length?e.stamps[s.index]:null;r.set(t,{dbStamp40:F,deviceStamp40:f,tagInfo:s})}return r}async executeChangeRequests(A,x,e,r,t,s){let n=await this.storage.getUtoChangeRequests(),F=this.groupChangeRequests(n),f=F.size;if(this.emitProgress(Mo,null,0,f),f===0)return;let c=new Set,D=0;for(let[p,j]of F){Nx(s);let _=A.get(p),k=_?.sTag??`0x${p.toString(16)}`;this.emitProgress(Mo,k,D,f),await this.executeChangeRequestTag(p,k,_,j,x,r,t,c),++D}c.size>0&&await this.repullExecutedTags(c,A,e,s)}groupChangeRequests(A){let x=new Map;for(let e of A){let r=x.get(e.tag)??[];r.push({stamp40:Zx(e.stamp),user:e.user,json:e.json}),x.set(e.tag,r)}return x}async executeChangeRequestTag(A,x,e,r,t,s,n,F){if(!e){this.pushChangeResults(n,A,x,r,"unknown-tag");return}if(!e.flags.setValue){this.pushChangeResults(n,A,x,r,"skip-unsupported");return}let f=e.index<t.stamps.length?t.stamps[e.index]:0,c=r.filter(p=>p.stamp40<=f),D=r.filter(p=>p.stamp40>f);this.pushChangeResults(n,A,x,c,cs),D.length>0&&await this.coalesceAndSend(A,x,e,D,s,n,F)}async coalesceAndSend(A,x,e,r,t,s,n){let F=await this.storage.getRowForTag(A);if(t.get(A)?.outcome===ue||!F||!F.data){this.pushChangeResults(s,A,x,r,"error");return}let f=this.resolveSetObject(F.data,r,x);if(f===null){this.pushChangeResults(s,A,x,r,"error");return}if(Object.keys(f).length===0){this.pushChangeResults(s,A,x,r,"skip-no-change");return}let c=r[r.length-1].stamp40,D=await this.utoMaster.sendSetValue(A,JSON.stringify(f),c);D.outcome==="ok"||D.outcome==="stamp"?(n.add(A),this.pushChangeResults(s,A,x,r,Lo,D.resultCode)):D.outcome==="denied"?(this.logger?.warn(`${G0} change-request denied ${x} (result=${D.resultCode}) \u2014 server will retry`),this.pushChangeResults(s,A,x,r,"denied",D.resultCode)):(this.logger?.error(`${G0} change-request error ${x} (result=${D.resultCode})`),this.pushChangeResults(s,A,x,r,"error",D.resultCode))}resolveSetObject(A,x,e){try{let r=JSON.parse(V0.cp1252Unpack(A,0,A.byteLength));return this.buildSetObject(r,x,e)}catch(r){return this.logger?.error(`${G0} change-request unparseable uto_data ${e}: ${r}`),null}}buildSetObject(A,x,e){let r={};for(let t of x){let s=JSON.parse(t.json);if(!this.isPlainRecord(s))throw new Error(`change-request JSON is not an object on ${e}`);for(let[n,F]of Object.entries(s)){let f=this.resolveChangeField(A[n],F,n,e);f.apply&&(r[n]=f.value,A[n]=f.value)}}return r}resolveChangeField(A,x,e,r){if(this.isBitwiseOp(x)){let{op:t,val:s}=x;return this.resolveBitwiseOp(A,t,s,e,r)}return A===x?{apply:!1}:{apply:!0,value:x}}resolveBitwiseOp(A,x,e,r,t){return x!=="|"&&x!=="&"?(this.logger?.warn(`${G0} change-request unknown op "${x}" on ${t}.${r} \u2014 skipped`),{apply:!1}):typeof e!="number"?(this.logger?.warn(`${G0} change-request op "${x}" with non-number val on ${t}.${r} \u2014 skipped`),{apply:!1}):A===void 0?x==="|"?{apply:!0,value:e}:{apply:!1}:typeof A!="number"?(this.logger?.warn(`${G0} change-request op "${x}" on non-number ${t}.${r} \u2014 skipped`),{apply:!1}):{apply:!0,value:x==="|"?A|e:A&e}}isBitwiseOp(A){return this.isPlainRecord(A)&&"op"in A}isPlainRecord(A){return typeof A=="object"&&A!==null&&!Array.isArray(A)}pushChangeResults(A,x,e,r,t,s){for(let n of r)A.push({tag:x,sTag:e,stamp40:n.stamp40,user:n.user,outcome:t,resultCode:s})}async repullExecutedTags(A,x,e,r){let t=null;try{t=await this.utoMaster.requestStamps()}catch(s){this.logger?.warn(`${G0} change-request STAMPS re-fetch failed \u2014 using per-tag stamps: ${s}`)}for(let s of A)Nx(r),await this.repullExecutedTag(s,x,t,e)}async repullExecutedTag(A,x,e,r){try{let t=await this.utoMaster.requestUto(A,0);if(!t){this.logger?.info(`${G0} change-request re-pull tag=0x${A.toString(16)} \u2014 device returned no data (E_EOD), DB row unchanged`);return}let s=await this.storage.getRowForTag(A),n=t.stamp;await this.storage.replaceUtoRow({tag:A,stamp:Gx(n),flags:s?.flags??0,site_related:s?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null});let F=r.get(A);if(F){let f=x.get(A),c=e&&f&&f.index<e.stamps.length?e.stamps[f.index]:n;F.dbStamp40=n,F.deviceStamp40=c}this.logger?.info(`${G0} change-request re-pull tag=0x${A.toString(16)} \u2192 stamp ${n}`)}catch(t){this.logger?.error(`${G0} change-request re-pull error tag=0x${A.toString(16)}: ${t}`)}}aggregateResult(A,x,e){let r=[...A.values()],t=[...x.values()],s=No(t);return{tags:r,files:t,changeRequests:e,requiresReconnectSync:s.length>0,rebootFilesDeployed:s,totalTagsUploaded:r.filter(n=>n.outcome==="upload"&&!n.historic).length,totalTagsDownloaded:r.filter(n=>n.outcome==="download").length,totalTagsSkipped:r.filter(n=>n.outcome===Le||n.outcome==="skip-db-readonly"||n.outcome===br).length,totalHistoricRecordsAppended:r.reduce((n,F)=>n+(F.recordsAppended??0),0),totalFilesUploaded:t.filter(n=>n.outcome===fs).length,totalFilesDownloaded:t.filter(n=>n.outcome==="download").length,totalFilesDeleted:t.filter(n=>n.outcome===vs).length,totalChangeRequestsExecuted:e.filter(n=>n.outcome===Lo).length,totalErrors:r.filter(n=>n.outcome===ue).length+t.filter(n=>n.outcome===ue).length+e.filter(n=>n.outcome===sC).length}}async sync(A){let{signal:x}=A??{},e=await this.validateDevice(x);Nx(x),this.emitProgress(Gt,null,0,3);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${G0} requestStamps returned null`);this.emitProgress(Gt,"stamps",1,3);let s=await this.utoMaster.requestFileList();this.emitProgress(Gt,"file-list",2,3);let n=await this.resolveDbTags(r);this.emitProgress(Gt,"db-tags",3,3);let F=await this.buildTagStampCache(n,r,t),f=new Map,c=new Map,D=[],p=await this.isAppInDevPhase();return Nx(x),await this.uploadUtoTags(n,F,f,x),Nx(x),await this.uploadFiles(s,c,p,x),Nx(x),await this.executeChangeRequests(r,t,F,f,D,x),Nx(x),await this.downloadUtoTags(n,F,f,x),Nx(x),await this.downloadFiles(s,c,p,x),Nx(x),No([...c.values()]).length===0&&await this.reconcileFileState(x),this.emitProgress("complete",null,0,0),this.aggregateResult(f,c,D)}async executeAdHocChangeRequest(A,x){let e=await this.utoMaster.requestDeviceInfo();if(!e)throw new Error(`${G0} requestDeviceInfo returned null`);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${G0} requestStamps returned null`);let s=r.get(A),n=s?.sTag??`0x${A.toString(16)}`,F=x.map(j=>({stamp40:j.stamp40,user:"",json:j.json})).sort((j,_)=>j.stamp40-_.stamp40),f=new Map,c=[],D=new Set;return await this.executeChangeRequestTag(A,n,s,F,t,f,c,D),D.size>0&&await this.repullExecutedTags(D,r,new Map,void 0),c.find(j=>j.outcome!==cs)?.outcome??cs}};var kx={MNT_CFG:"at+mntcfg?",MDN_CFG:"at+mdncfg?",MNT_SYNC:"at+mntsync",MDN_SYNC:"at+mdnsync",CON_CLOSE:"at+conclose",APP_GET_METADATA:"AT+APP=GETMETADATA",APP_GET_DATAVALUE:"AT+APP=GETDATAVALUE",APP_TRIG_MEASURE:"AT+APP=TRIGMEASURE",APP_TRIG_MEASURE_TEST:"AT+APP=TRIGMEASURE=?",ATI:"ati",RM2M_STATE:"at+rm2mstate?",TX:"at+tx",TX_MAINTENANCE:"at+tx=4",TX_GSM_POSITION:"at+tx=1",TX_MODE_TRIGGERED:"at+txmode=0",TX_MODE_WAKEUP:"at+txmode=1",TX_MODE_ONLINE:"at+txmode=2",COMPANION_CERT:"AT+COMPCERT",COMPANION_CERT_TEST:"AT+COMPCERT=?"},J0={OK:"OK",ERROR:"ERROR",SYNC_START:"+SYNC START",MEASURED:"+MEASURED",CON_CLOSE:"+CONCLOSE",MNT_CFG_PREFIX:"+MNTCFG",MDN_CFG_PREFIX:"+MDNCFG",RM2M_STATE:"+RM2MSTATE",ERROR_PIN_REQUIRED:"ERROR PIN REQUIRED",ERROR_NO_DATA:"ERROR NO DATA",COMPCERT_ERROR:/\+COMPCERT ERROR:\s*(\d+)/},Yx=1e4,iC=9e4,aC=/(?:ERROR PIN REQUIRED|ERROR NO DATA|ERROR|OK)\r\n/;function oC(){return{buffer:"",closedByDevice:!1,reset(){this.buffer="",this.closedByDevice=!1}}}var Re="Operation aborted",Qx=class extends Error{constructor(A="AT command handler was disposed"){super(A),this.name="AtHandlerDisposedError"}},wF=class extends Error{constructor(A="Device returned ERROR response"){super(A),this.name="AtDeviceError"}},SF=class extends _F.EventEmitter{constructor(A,x=tn){super(),E0(this,"transport",A),E0(this,"logger",x),E0(this,"mutex",new rF("AtCommandHandler")),E0(this,"bufferState",oC()),E0(this,"responseCallback",null),E0(this,"decoder",new TextDecoder),E0(this,"dataHandler"),E0(this,"disposeTransportListener"),E0(this,"isDisposed",!1),E0(this,"activeAbort",null),E0(this,"session"),this.dataHandler=e=>this.handleIncomingData(e),this.disposeTransportListener=this.transport.onData(this.dataHandler),this.session={sendAndWait:(e,r,t=Yx,s)=>this.executeSendAndWait(e,r,t,s),sendRaw:(e,r=Yx)=>this.executeSendRaw(e,r),queryMntServerConfig:e=>this.executeQueryConfig(kx.MNT_CFG,J0.MNT_CFG_PREFIX,e),queryMdnServerConfig:e=>this.executeQueryConfig(kx.MDN_CFG,J0.MDN_CFG_PREFIX,e),initiateMntSync:e=>this.executeInitiateMntSync(e),initiateMdnSync:e=>this.executeInitiateMdnSync(e),sendCompanionCert:(e,r)=>this.executeSendCompanionCert(e,r),queryCompanionCertSupport:e=>this.executeQueryCompanionCertSupport(e),sendConnectionClose:e=>this.executeSendConnectionClose(e)}}get isBusy(){return this.mutex.islocked}get disposed(){return this.isDisposed}async withAtLock(A){await this.mutex.requestLock();try{if(this.isDisposed)throw new Qx;return await A(this.session)}finally{this.mutex.unlock()}}handleIncomingData(A){let x=this.decoder.decode(A);this.bufferState.buffer+=x,this.emit("data",x),this.responseCallback&&this.responseCallback(this.bufferState.buffer),!this.responseCallback&&this.bufferState.buffer.length>1e3&&(this.bufferState.buffer=this.bufferState.buffer.slice(-500))}encodeCommand(A){let x=new Uint8Array(A.length+2);for(let e=0;e<A.length;e++)x[e]=A.charCodeAt(e);return x[A.length]=10,x[A.length+1]=13,x.buffer}makeCleanup(A,x,e){return()=>{this.responseCallback=null,this.activeAbort=null,clearTimeout(A),x&&e&&x.removeEventListener("abort",e)}}makeResponseChecker(A,x,e,r){let t=A instanceof RegExp;return s=>{if(A!==J0.ERROR&&s.includes(J0.ERROR)){x(),r(new wF);return}let n=!1,F=s;if(t){let f=s.match(A);f&&(n=!0,F=f[0])}else n=s.includes(A);if(n){x(),e(F);return}s.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))}}executeSendAndWait(A,x,e,r){return new Promise((t,s)=>{if(this.isDisposed){s(new Qx);return}if(r?.aborted){s(new Error(Re));return}A&&(this.bufferState.buffer="");let F=x instanceof RegExp?x.source:x,f={cleanup:()=>{}},c=setTimeout(()=>{f.cleanup(),s(new Error(`Timeout waiting for response: ${F}`))},e),D=()=>{f.cleanup(),s(new Error(Re))};f.cleanup=this.makeCleanup(c,r,D),r&&r.addEventListener("abort",D);let p=this.makeResponseChecker(x,f.cleanup,t,s);this.responseCallback=p,this.activeAbort=()=>{f.cleanup(),s(new Qx)},!A&&this.bufferState.buffer&&p(this.bufferState.buffer),A&&(this.logger.info("TX: "+A),this.transport.write(this.encodeCommand(A)).catch(j=>{f.cleanup(),s(j)}))})}executeSendRaw(A,x){return new Promise((e,r)=>{if(this.isDisposed){r(new Qx);return}this.bufferState.buffer="";let t=setTimeout(()=>{s(),r(new Error(`Timeout waiting for raw AT response to: ${A}`))},x),s=this.makeCleanup(t);this.activeAbort=()=>{s(),r(new Qx)},this.responseCallback=n=>{aC.test(n)&&(s(),this.logger.info("RX: "+n.trim()),e(n))},this.logger.info("TX: "+A),this.transport.write(this.encodeCommand(A)).catch(n=>{s(),r(n)})})}executeQueryConfig(A,x,e){return new Promise((r,t)=>{if(this.isDisposed){t(new Qx);return}if(e?.aborted){t(new Error(Re));return}this.bufferState.buffer="";let s={cleanup:()=>{}},n=setTimeout(()=>{s.cleanup(),this.logger.error(`Timeout waiting for ${x} server config`),t(new Error(`Timeout waiting for ${x} response \u2014 server configuration not available`))},Yx),F=()=>{s.cleanup(),t(new Error(Re))};s.cleanup=this.makeCleanup(n,e,F),e&&e.addEventListener("abort",F);let f=new RegExp(`\\${x}:\\s*<?([^,>\\s]+)>?`);this.activeAbort=()=>{s.cleanup(),t(new Qx)},this.responseCallback=c=>{let D=c.match(f);if(D){s.cleanup();let p=D[1].trim();this.logger.info(`Server config ${x}: ${p}`),r(p);return}c.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))},this.logger.info("TX: "+A),this.transport.write(this.encodeCommand(A)).catch(c=>{s.cleanup(),this.logger.error(`Failed to send ${x} command: `+(c instanceof Error?c.message:String(c))),t(c)})})}async sendAndWait(A,x,e=Yx,r){return this.withAtLock(t=>t.sendAndWait(A,x,e,r))}async sendRaw(A,x=Yx){return this.withAtLock(e=>e.sendRaw(A,x))}async queryMntServerConfig(A){return this.withAtLock(x=>x.queryMntServerConfig(A))}async queryMdnServerConfig(A){return this.withAtLock(x=>x.queryMdnServerConfig(A))}async initiateMntSync(A){return this.withAtLock(x=>x.initiateMntSync(A))}async initiateMdnSync(A){return this.withAtLock(x=>x.initiateMdnSync(A))}async sendCompanionCert(A,x){return this.withAtLock(e=>e.sendCompanionCert(A,x))}async executeInitiateMntSync(A){this.logger.info("Initiating MNT sync"),await this.executeSendAndWait(kx.MNT_SYNC,J0.OK,Yx,A)}async executeInitiateMdnSync(A){this.logger.info("Initiating MDN sync");try{await this.executeSendAndWait(kx.MDN_SYNC,J0.OK,Yx,A),await this.executeSendAndWait(null,J0.SYNC_START,Yx,A)}catch(x){this.logger.error("Failed to initiate MDN sync: "+(x instanceof Error?x.message:String(x)))}}async executeSendCompanionCert(A,x){if(this.isDisposed)throw new Qx;if(x?.aborted)throw new Error(Re);let e=A.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-A.length%4)%4),r=e.length,t=await this.executeSendAndWait(`${kx.COMPANION_CERT}=${r}`,J0.OK,Yx,x),s=parseInt(t.match(/(\d+)/)[1],10),n=0;for(;n<r;){let F=Math.min(s,r-n),f=e.slice(n,n+F);await this.executeSendAndWait(`${kx.COMPANION_CERT}=${F},${n},${f}`,J0.OK,Yx,x),n+=F}return this.executeCompanionCertFinalize(r,x)}executeCompanionCertFinalize(A,x){return new Promise((e,r)=>{if(this.isDisposed){r(new Qx);return}if(x?.aborted){r(new Error(Re));return}this.bufferState.buffer="";let t={cleanup:()=>{}},s=setTimeout(()=>{t.cleanup(),r(new Error("Timeout waiting for AT+COMPCERT finalize response"))},Yx),n=()=>{t.cleanup(),r(new Error(Re))};t.cleanup=this.makeCleanup(s,x,n),x&&x.addEventListener("abort",n),this.activeAbort=()=>{t.cleanup(),r(new Qx)},this.responseCallback=f=>{let c=f.match(J0.COMPCERT_ERROR);if(c){t.cleanup(),e({success:!1,errorCode:parseInt(c[1],10)});return}if(f.includes(J0.OK)){t.cleanup(),e({success:!0});return}f.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))};let F=`${kx.COMPANION_CERT}=0,${A}`;this.logger.info("TX: "+F),this.transport.write(this.encodeCommand(F)).catch(f=>{t.cleanup(),r(f)})})}async queryCompanionCertSupport(A){return this.withAtLock(x=>x.queryCompanionCertSupport(A))}async executeQueryCompanionCertSupport(A){try{return await this.executeSendAndWait(kx.COMPANION_CERT_TEST,J0.OK,Yx,A),!0}catch(x){if(x instanceof Qx)throw x;return!1}}async sendConnectionClose(A){return this.withAtLock(x=>x.sendConnectionClose(A))}async executeSendConnectionClose(A){try{await this.executeSendAndWait(kx.CON_CLOSE,J0.CON_CLOSE,Yx,A)}catch(x){this.logger.error("Failed to receive +CONCLOSE response: "+(x instanceof Error?x.message:String(x)))}}createConCloseMonitor(A){let x="",e=r=>{x+=r,x.includes(J0.CON_CLOSE)&&(x="",this.bufferState.closedByDevice=!0,A()),x.length>1e3&&(x=x.slice(-500))};return this.on("data",e),()=>{this.off("data",e)}}dispose(){this.isDisposed||(this.isDisposed=!0,this.activeAbort?.(),this.disposeTransportListener(),this.responseCallback=null,this.activeAbort=null,this.removeAllListeners())}};var Bs="requesting-cert",Cs="cert-revoked",FC=class ws extends $F.EventEmitter{constructor(){super(...arguments),E0(this,"utoMaster",null)}async authenticate(x){let e=x.logger??bs,{signal:r,atHandler:t}=x,s=()=>{if(r?.aborted)throw new Error("Operation aborted")};try{this.emitPhase("checking-cert"),s();let n=await this.loadOrGenerateKeypair(x.storage),F=await x.storage.getCertificate(x.apiConfig.apiHost);(F===null||!hc(F.notAfter))&&(e.info("Companion cert missing or near expiry \u2014 requesting new cert"),this.emitPhase(Bs),s(),F=await this.requestAndStoreCert(n,x)),this.utoMaster=new Ns(x.utoTransport,e,x.timeSource),this.emitPhase("cert-presenting"),s();let f=F;F=await t.withAtLock(async p=>{let j=await this.presentCertWithRefresh(p,f,n,x);return await p.initiateMdnSync(r),j}),this.emitPhase("ecs-handshake"),s(),await this.utoMaster.init();let c=await this.utoMaster.initiateEcsHandshake({companionPublicKey:n.publicKey,companionPrivateKey:n.privateKey,signal:r});if(!c.success)return this.fail("ecs-handshake",`ECS handshake failed (code ${c.resultCode})`);this.emitPhase("connected");let D=this.utoMaster;return this.utoMaster=null,{success:!0,utoMaster:D}}catch(n){return this.handleError(n)}}dispose(){this.utoMaster=null,this.removeAllListeners()}async loadOrGenerateKeypair(x){let e=await x.getKeypair();if(e!==null)return e;let r=await co();return await x.saveKeypair(r),r}static async fetchCertOrThrowRevoked(x,e){try{return await jc(e.apiConfig,{publicKey:x.publicKey,subject:e.subject})}catch(r){throw r instanceof Xt&&(r.httpStatus===401||r.httpStatus===404)?(await e.storage.clearCertificate(e.apiConfig.apiHost),new ds(Cs,`Companion cert revoked or session expired (HTTP ${r.httpStatus})`,{httpStatus:r.httpStatus,apiCode:r.code})):r}}async requestAndStoreCert(x,e){let r=await ws.fetchCertOrThrowRevoked(x,e),t={base64Url:r.certificateBase64Url,notAfter:r.notAfter};return await e.storage.saveCertificate(t,e.apiConfig.apiHost),t}static async refreshCertificate(x){let e=await x.storage.getKeypair(),r=e!==null?e:await(async()=>{let n=await co();return await x.storage.saveKeypair(n),n})(),t=await ws.fetchCertOrThrowRevoked(r,x),s={base64Url:t.certificateBase64Url,notAfter:t.notAfter};return await x.storage.saveCertificate(s,x.apiConfig.apiHost),s}static async clearCredentials(x,e){await x.clearCertificate(e)}async presentCertWithRefresh(x,e,r,t){let s=await x.sendCompanionCert(e.base64Url,t.signal);if(s.success||s.errorCode===3&&((t.logger??bs).info("Device reported EXPIRED \u2014 refreshing cert and retrying"),this.emitPhase(Bs),e=await this.requestAndStoreCert(r,t),s=await x.sendCompanionCert(e.base64Url,t.signal),s.success))return e;throw new ds("cert-presenting",`AT+COMPCERT rejected (code ${s.errorCode??"?"})`,{certErrorCode:s.errorCode})}emitPhase(x){this.emit("phase",x)}fail(x,e){return this.emit("phase","error"),{success:!1,phase:x,error:e}}handleError(x){return x instanceof ds?(this.emit("phase",x.phase===Cs?Cs:"error"),{success:!1,phase:x.phase,error:x.message,certErrorCode:x.certErrorCode,httpStatus:x.httpStatus,apiCode:x.apiCode}):(this.emit("phase","error"),x instanceof Xt?{success:!1,phase:Bs,error:x.message,httpStatus:x.httpStatus,apiCode:x.code}:{success:!1,phase:"error",error:x instanceof Error?x.message:String(x)})}};E0(FC,"encodePublicKeyBase64Url",Zo);var ds=class extends Error{constructor(A,x,e={}){super(x),E0(this,"phase",A),E0(this,"extra",e),this.name="AuthError"}get certErrorCode(){return this.extra.certErrorCode}get httpStatus(){return this.extra.httpStatus}get apiCode(){return this.extra.apiCode}};function vC(A){let x=A.replace(/\r\nOK\r\n$/,"").trim();return x?x.split("\f").map(e=>{let r=e.split(" ");return r.length<4?null:{name:r[0],scale:parseFloat(r[1]),offset:parseFloat(r[2]),unit:r[3]}}).filter(e=>e!==null):[]}function fC(A){let x=A.replace(/^\+[^\r\n]*\r\n/gm,"").replace(/\r\nOK\r\n$/,"").trim();return x?x.split("\f"):[]}function EC(A,x,e){let r=parseFloat(A);return isNaN(r)?A:parseFloat(Number(r*x+e).toFixed(3)).toString()}function Ro(A,x){return A.map((e,r)=>({name:e.name,displayValue:EC(x[r]??"",e.scale,e.offset),unit:e.unit}))}var lC=2e3,PF=class extends qF.EventEmitter{constructor(A,x=tn){super(),E0(this,"atHandler",A),E0(this,"logger",x),E0(this,"datapoints",[]),E0(this,"values",[]),E0(this,"polling",!1),E0(this,"pollTimer",null),E0(this,"fetchInProgress",!1),E0(this,"fetchPromise",null)}async checkSupport(){this.logger.info("Checking local data support");let A=await this.atHandler.sendRaw(kx.APP_GET_METADATA),x=A.includes(J0.OK)?{supported:!0,pinRequired:!1}:A.includes(J0.ERROR_PIN_REQUIRED)?{supported:!0,pinRequired:!0}:A.includes(J0.ERROR_NO_DATA)?{supported:!1,pinRequired:!1}:A.includes(J0.ERROR)?{supported:!1,pinRequired:!1}:{supported:!1,pinRequired:!1};return this.logger.info("Local data support: "+JSON.stringify(x)),x}async fetchMetadata(A){this.logger.info("Fetching metadata"+(A?" (with PIN)":""));let x=A?`${kx.APP_GET_METADATA}=${A}`:kx.APP_GET_METADATA,e=await this.atHandler.sendRaw(x);if(this.logger.debug("Metadata response: "+e),e.includes(J0.ERROR_PIN_REQUIRED))return this.logger.warn("PIN required/invalid for metadata"),null;if(e.includes(J0.ERROR_NO_DATA))return this.logger.warn("No data available from device"),this.datapoints=[],this.values=[],this.emit("metadata",[]),this.emit("error","No local data available from device"),[];if(e.includes(J0.OK)){let r=vC(e);return this.logger.info("Parsed "+r.length+" datapoints"),this.datapoints=r,this.values=new Array(r.length).fill(""),this.emit("metadata",r),r}return e.includes(J0.ERROR)?(this.logger.error("Metadata fetch error: "+e),this.emit("error","Device returned error during metadata fetch"),[]):[]}async fetchValues(A){return this.readValues(x=>this.atHandler.sendRaw(x),A)}async readValues(A,x){try{this.logger.debug("Fetching values");let e=x?`${kx.APP_GET_DATAVALUE}=${x}`:kx.APP_GET_DATAVALUE,r=await A(e);if(r.includes(J0.OK)){let t=fC(r);return this.logger.debug("Values: "+t.join(", ")),this.values=t,this.emit("values",t),this.emit("displayValues",Ro(this.datapoints,t)),t}return[]}catch(e){return this.logger.warn("Value fetch error: "+(e instanceof Error?e.message:String(e))),[]}}async checkMeasurementTriggerSupport(){this.logger.info("Checking measurement trigger support");try{let x=(await this.atHandler.sendRaw(kx.APP_TRIG_MEASURE_TEST)).includes(J0.OK);return this.logger.info("Measurement trigger support: "+x),x}catch(A){if(A instanceof Qx)throw A;return this.logger.warn("Measurement trigger probe failed: "+(A instanceof Error?A.message:String(A))),!1}}async triggerMeasurement(A={}){let{pin:x,timeoutMs:e=iC,signal:r}=A;return this.logger.info("Triggering measurement"),this.atHandler.withAtLock(async t=>{let s=await t.sendRaw(kx.APP_TRIG_MEASURE);if(this.logger.debug("Trigger measurement response: "+s),!s.includes(J0.OK))return this.logger.warn("Measurement trigger rejected: "+s.trim()),{outcome:"rejected",values:[],response:s};this.emit("measurementTriggered");try{let n=await t.sendAndWait(null,J0.MEASURED,e,r);return this.emit("measurementCompleted"),{outcome:"measured",values:await this.readValues(f=>t.sendRaw(f),x),response:n}}catch(n){if(n instanceof Qx)throw n;let F="timeout";return n instanceof wF?F="error":r?.aborted&&(F="aborted"),this.logger.warn(`Measurement ${F} while waiting for ${J0.MEASURED}: `+(n instanceof Error?n.message:String(n))),this.emit("measurementFailed",F),{outcome:F,values:[],response:s}}})}async startPolling(A,x=lC){if(this.polling){this.logger.warn("Polling already active \u2014 ignoring startPolling call");return}this.logger.info("Starting polling every "+x+" ms"),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.fetchPromise=this.fetchValues(A),await this.fetchPromise,this.fetchPromise=null,this.polling&&(this.pollTimer=setInterval(()=>{this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchValues(A).finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))},x))}async stopPolling(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null),this.polling&&(this.logger.info("Polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getSnapshot(){return{datapoints:[...this.datapoints],values:[...this.values],isPolling:this.polling}}getDisplayValues(){return Ro(this.datapoints,this.values)}dispose(){this.stopPolling(),this.datapoints=[],this.values=[],this.removeAllListeners()}};var cC={0:"trigger",1:"wakeup",2:"online"},BC={0:["2G","","GSM"],1:["2G","Compact","GSM-COMPACT"],2:["3G","","UTRAN"],3:["2G","EDGE","GSM-EGPRS"],4:["3G","HSDPA","UTRAN-HSDPA"],5:["3G","HSUPA","UTRAN-HSUPA"],6:["3G","HSPA+","UTRAN-HSXPA"],7:["4G","","EUTRAN"],8:["4G","LTE-M","LTE-CATM1"],9:["4G","NB-IoT","LTE-CATNB1"],100:["WiFi","","WIFI"],101:["LAN","Ethernet","ETHERNET"],102:["Local","Wireless","WIRELESS"],103:["Local","Wired","WIRED"]},CC={"NO SCRIPT":"none","SCRIPT ERROR":"error","SCRIPT OK":"ok"},_x={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},dC=_x.FAILED|_x.ACTIVE|_x.STARTED|_x.RETRY|_x.WAKEUPABLE|_x.EXTSIM|_x.DISABLED|_x.WAKEUP|_x.POSUPDATE_ACTIVE,Oo=`${J0.RM2M_STATE}: `;function DC(A=0){let x=(A&_x.WAKEUPABLE)!==0,e="offline",r=x;return A&_x.POSUPDATE_ACTIVE?(e="locating",r=!1):A&_x.RETRY?(e="retry",r=!1):A&_x.STARTED?(e="dialing",r=!1):A&_x.ACTIVE?(e="active",r=!1):A&_x.FAILED?(e="failed",r=x):A&_x.DISABLED&&(e="disabled",r=!1),{signal:e,simType:(A&_x.EXTSIM)!==0?"external":"internal",wakeupable:r,unknownFlags:A&~dC}}function uC(A){if(A===void 0)return null;let x=parseInt(A,10);return isNaN(x)?A:cC[x]??A}function pC(A){if(A===void 0)return null;let x=parseInt(A,10);return isNaN(x)?null:BC[x]??["unknown",`itf#${A}`,`itf#${A}`]}function bC(A){if(A.length===0)return null;let x=A.join(",");return CC[x]??x}function mC(A){let x=A.split(","),[e,r,t,s,...n]=x;if(!e||!/^-?\d+$/.test(e)||!r||!/^\d+$/.test(r))return null;let F=parseInt(r,10),f=pC(s),c=s!==void 0?parseInt(s,10):NaN;return{stamp:new Date,rssi:c>=101?null:parseInt(e,10),state:F,uplinkState:DC(F),uplinkMode:uC(t),uplinkInterface:f?f[0]:null,uplinkInterfaceExtended:f?f[1]:null,uplinkInterfaceTechnical:f?f[2]:null,scriptState:bC(n)}}function jC(A){let x=A.indexOf(Oo);if(x===-1)return null;let e=A.substring(x+Oo.length),r=e.search(/\r?\n/);if(r===-1)return null;let t=e.substring(0,r).trim();return t?mC(t):null}var hC=5e3,NF=class extends TF.EventEmitter{constructor(A,x=bs){super(),E0(this,"atHandler"),E0(this,"logger"),E0(this,"lastState",null),E0(this,"pollingTimer",null),E0(this,"polling",!1),E0(this,"fetchInProgress",!1),E0(this,"fetchPromise",null),this.atHandler=A,this.logger=x}async fetchState(){try{let A=await this.atHandler.sendRaw(kx.RM2M_STATE),x=jC(A);return x?(this.lastState=x,this.emit("state",x),this.logger.debug("RM2M state fetched successfully")):this.logger.warn("Failed to parse RM2M state response"),x}catch(A){let x=A instanceof Error?A.message:String(A);return this.logger.error(`Failed to fetch RM2M state: ${x}`),this.emit("error",x),null}}startPolling(A=hC){if(this.polling){this.logger.debug("Polling already active, ignoring startPolling call");return}this.logger.info(`Starting RM2M state polling every ${A}ms`),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.runGuardedFetch(),this.pollingTimer=setInterval(()=>this.runGuardedFetch(),A)}runGuardedFetch(){this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchState().finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))}async stopPolling(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null),this.polling&&(this.logger.info("RM2M state polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getLastState(){return this.lastState?{...this.lastState,uplinkState:{...this.lastState.uplinkState}}:null}get isPolling(){return this.polling}dispose(){this.stopPolling(),this.lastState=null,this.removeAllListeners()}};var ne={configurationNumber:1,utoInterface:0,utoEndpoint:1,utoSize:64*1024,debugInterface:1,debugEndpoint:2,debugSize:1024};var w0=class extends Error{constructor(A){super(A),this.name="ApiBadRequestError"}},jA=class extends Error{constructor(A){super(A),this.name="ApiNotFoundError"}},Vs=class extends Error{constructor(A){super(A),this.name="ApiForbiddenError"}},IF=class extends Error{constructor(A){super(A),this.name="ApiMethodNotAllowedError"}};function EA(A){try{return decodeURIComponent(A)}catch{throw new w0("malformed url encoding")}}var gC=2e3,yC=2136;function MF(A){if(A.length===0)return!0;if(!/^\d{4,17}$/.test(A))return!1;let x=Number(A.slice(0,4));return x>=gC&&x<=yC}function lt(A){if(A)for(let x of["stamp","from","until"]){let e=A[x];if(typeof e=="string"&&!(x==="until"&&e==="*")&&!(x!=="stamp"&&e.trim().length===0)&&!MF(e))throw new w0(`attribute '${x}' is not valid`)}}function kC(A){return typeof A.setMetadataValue=="function"?A:null}function _C(A){return typeof A.insertUtoChangeRequests=="function"?A:null}function LF(){return{lastIssuedStamp40:0,tagMutexTails:new Map}}async function wC(A){return{status:200,body:A.ctx.siteInfo}}async function SC(A){let{blueprint:x}=A.ctx;if(!x)throw new jA("blueprint unavailable");return{status:200,body:x}}async function $C(A){let{me:x}=A.ctx;if(x==null)throw new jA("no profile stored");return{status:200,body:x}}function RF(A,x,e,r){let t=A.push;t&&(async()=>{try{await t.container(x,e,r)}catch(s){A.logger?.error(`[localApi] device push for tag ${x} failed:`,s)}})()}async function qC(A,x,e){let r=A.push;if(!r)return null;try{return await r.adHocChangeRequest(x,e)}catch(t){return A.logger?.error(`[localApi] change request for tag ${x} failed:`,t),null}}var PC=1024;function vn(A){let x=A.indexOf(0),e=x<0?A:A.subarray(0,x);try{let r=new TextDecoder("utf-8").decode(e),t=JSON.parse(r);return typeof t!="object"||t===null||Array.isArray(t)?null:t}catch{return null}}function TC(A,x=0){let e=new TextEncoder().encode(A),r=Math.max(PC,x,e.length+1),t=new Uint8Array(r);return t.set(e,0),t}var Ws=26432,hr={aberrant:1,service:2,standby:4,commissioned:8,offline:16,commissioning:65536,online:131072},OF=Object.keys(hr),fn=["standby","commissioned","offline","commissioning","online"],Go=fn.reduce((A,x)=>A|hr[x],0)>>>0;function NC(A){let x=0;for(let e of OF)A[e]===!0&&(x|=hr[e]);return x>>>0}function GF(A,x){let e={};for(let r of OF)A&hr[r]?e[r]=!0:typeof x?.[r]=="boolean"&&(e[r]=!1);return e}async function IC(A,x){let e=x.device;if(!e)return!1;let r=await A.getRowForTag(Ws);if(!r?.data)return!1;let t=vn(r.data);if(!t)return!1;let s=!1;if(typeof t.lifecycleFlags=="number"){let n=GF(t.lifecycleFlags,e.lifecycle_flags);JSON.stringify(e.lifecycle_flags)!==JSON.stringify(n)&&(e.lifecycle_flags=n,s=!0)}return typeof t.lifecycleState=="string"&&e.lifecycle_state!==t.lifecycleState&&(e.lifecycle_state=t.lifecycleState,s=!0),s}var MC=new Set([...fn,"service","lifecycle_state"]);function LC(A,x){let e=Math.max(V0.msToStamp40((A.timeSource??gr).nowMs()),x.lastIssuedStamp40+1);return x.lastIssuedStamp40=e+1,e}async function RC(A){let x=HC(A.request.body??null);if(!x)throw new w0("invalid or missing request body");OC(x);let e=A.ctx,r=e.siteInfo.lifecycle_flags;if(!UC(r))throw new w0("this site does not support lifecycle flags!");let t=NC(r),s=t;for(let c of fn){let D=x[c];typeof D=="boolean"&&(s=D?s|hr[c]:s&~hr[c])}if(s>>>=0,s===t)return{status:204,body:""};let n=LC(e,A.session),F=[{json:JSON.stringify({lifecycleFlags:{op:"&",val:~Go>>>0}}),stamp40:n},{json:JSON.stringify({lifecycleFlags:{op:"|",val:s&Go}}),stamp40:n+1}],f=_C(e.storage);return f&&await f.insertUtoChangeRequests(F.map(c=>({tag:Ws,stamp40:c.stamp40,json:c.json}))),e.siteInfo.lifecycle_flags=GF(s,r),await UF(e),GC(e,F),{status:204,body:""}}function OC(A){let x=[];for(let[e,r]of Object.entries(A))MC.has(e)?(e==="lifecycle_state"?typeof r!="string":typeof r!="boolean")&&x.push(`"${e}" is not valid`):x.push(`"${e}" is not an allowed lifecycle property`);if(x.length>0)throw new w0(`validation errors: ${x.join(", ")}`);if(Object.keys(A).some(e=>!fn.includes(e)))throw new w0("invalid parameters")}async function GC(A,x){try{let e=await qC(A,Ws,x);e==="executed"?await IC(A.storage,A.siteInfo)&&await UF(A):e!==null&&A.logger?.warn(`[localApi] lifecycle change request not applied by the device (outcome=${e})`)}catch(e){A.logger?.error("[localApi] lifecycle device-mirror refresh failed:",e)}}async function UF(A){await kC(A.storage)?.setMetadataValue("site_info",JSON.stringify(A.siteInfo))}function UC(A){return typeof A=="object"&&A!==null&&!Array.isArray(A)}function HC(A){if(!A)return null;let x;try{x=JSON.parse(A)}catch{return null}return typeof x!="object"||x===null||Array.isArray(x)?null:x}function HF(A){if(A!=null){if(Array.isArray(A)&&A.every(x=>typeof x=="string"))return A;throw new w0('"select" must be an array')}}function zC(A){if(A!=null){if(Array.isArray(A)&&A.every(x=>typeof x=="string"))return A;throw new w0("invalid parameter, select must be an array")}}function KC(A,x){let e=new Map;if(x){for(let[r,t]of x)e.set(t,r);return e}for(let r of A?.fields??[]){if(pe(r))continue;let t=r.alias??r.name;e.set(t,t.toLowerCase())}return e}function JC(A){let x=new Map;for(let e of A.fields){if(pe(e))continue;let r=(e.alias??e.name).toLowerCase();x.set(e.name,r),e.alias&&x.set(e.alias,r)}return x}function VC(A){let x=new Set;for(let e of A.fields)pe(e)||x.add((e.alias??e.name).toLowerCase());return x.add("stamp"),x}function WC(A,x,e){if(!e)return null;let r=KC(A,x),t=new Set,s=[];for(let n of e){if(n==="stamp")continue;let F=r.get(n);F?t.add(F):s.push(n)}if(s.length>0)throw zF(s);return t}function XC(A,x){let e=JC(A),r=[],t=[],s=!1;for(let n of x){if(n==="stamp"){s=!0,r.push("stamp");continue}let F=e.get(n);F?r.push(F):t.push(n)}if(t.length>0)throw zF(t);return s||r.unshift("stamp"),r}function YC(A,x){if(x===void 0)return;let e=VC(A),r=x.map(s=>s.toLowerCase()),t=r.filter(s=>!e.has(s));if(t.length>0)throw new w0(`unknown field name(s): ${t.join(",")}`);return r.includes("stamp")?r:["stamp",...r]}function QC(A,x){if(!x)return A;let e={};for(let[r,t]of Object.entries(A))(r==="stamp"||x.has(r))&&(e[r]=t);return e}function Xs(A,x){if(!x)return A;let e={};for(let r of x)e[r]=r in A?A[r]:null;return e}function zF(A){return new w0(`Fields [\`${A.join("`, `")}\`] do not exist in this container`)}function En(A,x){return A.containers.find(e=>e.name===x||e.alias===x)??null}async function ZC(A){let x=A.ctx,e=EA(A.params[1]),r=En(x.model,e);if(!r)throw new w0("container does not exist");let t=await x.mapper.readContainer(e);if(!t)throw new jA(`no data for container "${e}"`);let s=Ad(x,r,t,xd(A));return{status:200,body:KF(x,e,s)}}function xd(A){let x=A.query.json??{};return HF(x.select)}function Ad(A,x,e,r){let t=WC(x,Fn(A.blueprint??null,x),r);return QC(e,t)}function KF(A,x,e){let r=A.model.byNameOrAlias(x);return r?AC(e,Fn(A.blueprint??null,r)):e}async function ed(A){let x=A.ctx,e=EA(A.params[1]),r=x.model.byNameOrAlias(e);if(!r)throw new jA(`unknown container "${e}"`);let t=await x.mapper.readContainer(e);if(!t)throw new jA(`unknown container "${e}"`);let s=A.query.json??{},n=zC(s.select),F=YC(r,n);return{status:200,body:Xs(t,F)}}async function rd(A){let x=EA(A.params[1]);return JF(A,x,"canonical")}async function td(A){let x=EA(A.params[1]);if(!A.ctx.model.byNameOrAlias(x))throw new jA(`unknown container "${x}"`);return JF(A,x,"legacy")}async function JF(A,x,e){let r=Fd(A);if(!r)throw new w0("invalid or missing request body");lt(r);let{stamp:t,...s}=r;if(e==="canonical"&&t!==void 0&&typeof t!="string")throw new w0("value(s) of field(s) stamp are not valid");let n=A.ctx;if(e==="canonical"&&!En(n.model,x))throw new w0("container does not exist");let F=n.model.byNameOrAlias(x);if(F?.kind==="histdata")throw new jA(`unknown container "${x}"`);let f=e==="canonical"?id(n,F,s):ad(F,s);try{let c=e==="canonical"&&t!==void 0?{...f,stamp:t}:f,D=await n.mapper.writeContainer(x,c);return D.devicePushable&&RF(n,D.tag,D.data,D.stamp40),{status:204,body:""}}catch(c){throw nd(c,x,e,n,F)}}function nd(A,x,e,r,t){if(A instanceof xn){let s=A.field?sd(r,t,A.field,e):void 0;return e==="canonical"?s?new w0(`no permission to modify container field \`${s}\``):new w0(`no permission to modify container \`${x}\``):s?new Vs(`unknown field name(s): ${s}`):new IF(`no permission to modify '${x}'`)}return A}function sd(A,x,e,r){if(!x)return e;let t=x.fields.find(n=>n.name===e||n.name.toLowerCase()===e||(n.alias??n.name).toLowerCase()===e);return t?r==="legacy"?(t.alias??t.name).toLowerCase():Fn(A.blueprint??null,x)?.get(e)??t.alias??t.name:e}function id(A,x,e){if(!x)return e;let r=Fn(A.blueprint??null,x),t=new Map;if(r)for(let[s,n]of r)t.set(n,s);else for(let s of x.fields)t.set(s.alias??s.name,(s.alias??s.name).toLowerCase());return VF(x,t,e,s=>new w0(`unknown field name(s): ${s}`))}function ad(A,x){if(!A)return x;let e=new Map;for(let r of A.fields){let t=r.alias??r.name;e.set(t.toLowerCase(),t.toLowerCase()),e.set(t,t.toLowerCase())}return VF(A,e,x,r=>new Vs(`unknown field name(s): ${r}`))}var od=new Set(["stamp","stamp4","stamp8","datetime"]);function VF(A,x,e,r){let t=new Map(A.fields.map(f=>[(f.alias??f.name).toLowerCase(),f])),s={},n=[],F=[];for(let[f,c]of Object.entries(e)){let D=x.get(f);if(!D){n.push(f);continue}let p=t.get(D);if(p&&od.has(p.type)&&!(typeof c=="string"&&MF(c))){F.push(f);continue}s[D]=c}if(n.length>0)throw r(n.join(","));if(F.length>0)throw new w0(`value(s) of field(s) ${F.join(",")} are not valid`);return s}function Fd(A){let x=A.query.json,e=x!=null&&typeof x=="object"&&!Array.isArray(x)?x:void 0,r=A.request.body;if(!r)return e?{...e}:null;let t=vd(r);if(t===void 0)throw new w0("request supplied data which is not json formatted");return typeof t!="object"||t===null||Array.isArray(t)?null:{...e,...t}}function vd(A){try{return JSON.parse(A)}catch{return}}var fd="x-mt-backfill",Ed="pending";async function Ys(A,x,e){let r=A.push?.backfill;if(!(!r||x===void 0||x===null||e===null))try{return await r.call(A.push,{fromMs:e})==="pending"?{[fd]:Ed}:void 0}catch(t){A.logger?.error("[localApi] historic backfill check failed:",t);return}}var ld=1e3,Ht=1e3,WF="20000101",XF="*";async function cd(A){let x=A.query.json??{};e8(x,["from","until","count","offset","select"]),lt(x);let e=A.ctx,r=EA(A.params[1]),{mapperSelect:t,order:s}=QF(e,r,x.select);ZF(e,r);let n=An(x.from,WF,"from"),F=An(x.until,XF,"until");x8(n,F),F!==null&&(F=Cd(F));let f=dd(x.count),c=A8(x.offset),D=await Ys(e,x.from,n);return{status:200,body:(await e.mapper.readTimeseries(r,{fromMs:n,untilMs:F,count:f,offset:c,select:t})).map(j=>YF(A,e,r,Xs(j,s))),headers:D}}async function Bd(A){let x=A.query.json??{};e8(x,["from","until","offset","select"]),lt(x);let e=A.ctx,r=EA(A.params[1]),t=A.params[2],{mapperSelect:s,order:n}=QF(e,r,x.select);ZF(e,r);let F=An(x.from,WF,"from"),f=An(x.until,XF,"until");x8(F,f);let c=A8(x.offset),D=await Ys(e,x.from,F),j=(await e.mapper.readTimeseries(r,{fromMs:F,untilMs:f,count:t==="youngest"?-1:1,offset:c,select:s}))[0];return j?{status:200,body:YF(A,e,r,Xs(j,n)),headers:D}:{status:204,body:JSON.stringify("no timeseries recordData found"),headers:D}}function YF(A,x,e,r){return A.apiVersion==="1"?r:KF(x,e,r)}function QF(A,x,e){let r=HF(e);if(!r)return{mapperSelect:void 0,order:null};let t=En(A.model,x);if(!t)return{mapperSelect:r,order:null};let s=XC(t,r),n=s.filter(F=>F!=="stamp");return{mapperSelect:n.length>0?n:void 0,order:s}}function ZF(A,x){if(!En(A.model,x))throw new w0("timeseries does not exist")}function An(A,x,e){let t=A==null||typeof A=="string"&&A.trim()===""?x:String(A);if(t==="*")return null;try{return Et(t)}catch{throw new w0(`attribute '${e}' is not valid`)}}function x8(A,x){if(A!==null&&x!==null&&A>x)throw new w0('E_BAD_REQUEST "from" value must be older than "until"')}function Cd(A){let x=V0.msToStamp40(A);return V0.stamp40ToMS(x)>=A&&(x-=1),V0.stamp40ToMS(x)}function dd(A){if(A==null||A==="")return ld;let x=Number(A);if(!Number.isInteger(x))throw new w0('"count" must be an integer');if(x===0)throw new w0("`count` cannot be 0");if(x<-Ht)throw new w0(`"count" must be greater than or equal to -${Ht}`);if(x>Ht)throw new w0(`"count" must be less than or equal to ${Ht}`);return x}function A8(A){if(A==null||A==="")return 0;let x=Number(A);if(!Number.isInteger(x))throw new w0('"offset" must be an integer');if(x<0)throw new w0('"offset" must be greater than or equal to 0');return x}function e8(A,x){for(let e of Object.keys(A))if(!x.includes(e))throw new w0(`"${e}" is not allowed`)}var Dd=1e5,ud="20000101",pd="*";async function bd(A){let e=`histdata${A.params[1]?Number(A.params[1]):0}`,r=A.ctx,t=r.model.byNameOrAlias(e);if(!t)throw new jA(`unknown container "${e}"`);let s=A.query.json??{};lt(s);let{fromMs:n,untilMs:F}=hd(s);gd(n,F);let f=yd(s),c=kd(s),D=r8(t,s.select)??["stamp"],p=en(s.from)?await Ys(r,s.from,n):void 0,j=D.filter(S=>S!=="stamp");return{status:200,body:(await r.mapper.readTimeseries(e,{fromMs:n,untilMs:F,count:f,offset:c,select:j.length>0?j:void 0})).map(S=>D.map(P=>P==="stamp"?S.stamp:S[P]??null)),headers:p}}async function md(A){let e=`histdata${A.params[1]?Number(A.params[1]):0}`,r=A.params[2],t=A.ctx,s=t.model.byNameOrAlias(e);if(!s)throw new jA(`unknown container "${e}"`);let n=A.query.json??{};lt(n);let F=r8(s,n.select)??["stamp"],f=jd(n),c=F.filter(j=>j!=="stamp"),p=(await t.mapper.readTimeseries(e,{fromMs:null,untilMs:f??null,count:f!==void 0||r==="youngest"?-1:1,select:c.length>0?c:void 0}))[0];return p?{status:200,body:[F.map(j=>j==="stamp"?p.stamp:p[j]??null)]}:{status:200,body:[]}}function jd(A){if(!(!en(A.until)||A.until==="*"))try{return Et(String(A.until))??void 0}catch{throw new w0("from or until value invalid")}}function hd(A){let x=en(A.from),e=en(A.until);if((!x||!e)&&!Qs(A.count))throw new w0("missing or invalid parameters (from and until and/or count)");return{fromMs:Uo(x?A.from:ud),untilMs:Uo(e?A.until:pd)}}function gd(A,x){if(A!==null&&x!==null&&A>x)throw new w0('"from" value must be older than "until"')}function Uo(A){let x=String(A);try{return Et(x)}catch{throw new w0(`invalid stamp "${x}"`)}}function yd(A){if(!Qs(A.count))return Dd;if(typeof A.count!="number")throw new w0("invalid parameter count");return A.count}function kd(A){let x=A.offset;if(x==null||x==="")return 0;if(typeof x!="number"||x<0)throw new w0("invalid parameter offset");return x}function r8(A,x){if(x==null)return;if(!Array.isArray(x))throw new w0("invalid parameter, select must be an array");let e=x.map(F=>String(F).toLowerCase()),r=e.filter(F=>F.includes(" "));if(r.length>0)throw new w0(`aggregation suffix not allowed: ${r.join(",")}`);let t=e.includes("stamp")?e:["stamp",...e],s=new Set(A.fields.filter(F=>!pe(F)).map(F=>(F.alias??F.name).toLowerCase()));s.add("stamp");let n=t.filter(F=>!s.has(F));if(n.length>0)throw new w0(`invalid channel(s) ${n.join(",")}`);return t}function Qs(A){return!!A}function en(A){return typeof A=="string"?A.trim().length>0:Qs(A)}var _d="device_id";function wd(A){return async x=>(await ln(x),{status:200,body:await $d(x.ctx,A)})}async function ln(A){let x=EA(A.params[0]),e=await Sd(A.ctx);if(!e||e.toLowerCase()!==x.toLowerCase())throw new jA(`unknown device "${x}"`)}async function Sd(A){return A.deviceId||A.siteInfo.device?.device_id||A.storage.getMetadataValue(_d)}async function $d(A,x){let e=await A.storage.getRowForTag(x);if(!e||!e.data)return{};let r=vn(e.data);return r?(typeof r.pipAppVer=="number"&&(r.pipAppVer=`${r.pipAppVer}.0.0`),r.stamp=at(V0.stamp40ToMS(Zx(e.stamp))),r):{}}function Zs(A,x,e){let t=(A.tagMutexTails.get(x)??Promise.resolve()).then(e);return A.tagMutexTails.set(x,t.catch(()=>{})),t}function qd(A){return async x=>{await ln(x);let e=Nd(x.request.body??null);if(!e)throw new w0("invalid or missing request body");return Zs(x.session,A,async()=>{let r=await x.ctx.storage.getRowForTag(A),t=r?.data?vn(r.data)??{}:{};return await xi(x.ctx,A,r,{...t,...e}),{status:204,body:""}})}}function Pd(A){return async x=>(await ln(x),Zs(x.session,A,async()=>{let e=await x.ctx.storage.getRowForTag(A);return!e||!e.data?{status:204,body:""}:(await xi(x.ctx,A,e,{}),{status:204,body:""})}))}function Td(A){return async x=>{await ln(x);let e=EA(x.params[1]);return Zs(x.session,A,async()=>{let r=await x.ctx.storage.getRowForTag(A);if(!r||!r.data)return{status:204,body:""};let t=vn(r.data)??{},s=e.toLowerCase();for(let n of Object.keys(t))n.toLowerCase()===s&&delete t[n];return await xi(x.ctx,A,r,t),{status:204,body:""}})}}function Nd(A){if(!A)return null;let x;try{x=JSON.parse(A)}catch{return null}return typeof x!="object"||x===null||Array.isArray(x)?null:x}async function xi(A,x,e,r){let t=TC(JSON.stringify(r),e?.data?.length??0),s=V0.msToStamp40((A.timeSource??gr).nowMs());await A.storage.replaceUtoRow({tag:x,stamp:Gx(s),flags:e?.flags??0,site_related:e?.site_related??0,data:t}),RF(A,x,t,s)}var t8={"content-type":"application/json"},Id=[{method:"GET",pattern:/^\/api\/1\/me$/,handler:$C,checksUid:!1},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)$/,handler:wC,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/blueprint$/,handler:SC,checksUid:!0},{method:"POST",pattern:/^\/api\/1\/sites\/([^/]+)\/cn-set-lifecycle$/,handler:RC,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)\/(oldest|youngest)$/,handler:Bd,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)$/,handler:cd,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:ZC,checksUid:!0},{method:"PUT",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:rd,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?\/(oldest|youngest)$/,handler:md,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?$/,handler:bd,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:ed,checksUid:!0},{method:"PUT",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:td,checksUid:!0},...Md()];function Md(){let A={"sys-otp":26432,"sys-flash":26433,"app-otp":26434,"app-flash":26435,"app-state":26436,"sys-info":26437,"app-info":26438},x={"sys-flash":26433,"app-flash":26435},e=Object.entries(A).map(([t,s])=>({method:"GET",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:wd(s),checksUid:!1})),r=Object.entries(x).flatMap(([t,s])=>[{method:"PUT",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:qd(s),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:Pd(s),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}/([^/]+)$`),handler:Td(s),checksUid:!1}]);return[...e,...r]}var Ld=/^\/api\/([12])\/customers\/([^/]+)\/sites\/(.*)$/;function n8(A){let x=LF();return e=>Rd(A,e,x)}async function Rd(A,x,e=LF()){try{let[r,t]=Ud(x.path),s=Hd(t),n=Gd(r,A);if(n===null)return Ke(404,"E_NOT_FOUND","unknown customer");let F=x.method.toUpperCase();for(let f of Id){if(f.method!==F)continue;let c=f.pattern.exec(n);if(!c)continue;let D=c.slice(1);if(f.checksUid&&!Od(A,D[0]))return Ke(404,"E_NOT_FOUND","unknown site");let p=/^\/api\/([12])\//.exec(n)?.[1]??"1",j=await f.handler({request:x,params:D,query:s,ctx:A,session:e,apiVersion:p});return Jd(j)}return Ke(404,"E_NOT_FOUND","not found")}catch(r){return Vd(r)}}function Od(A,x){return A.allowAnySiteUid===!0||x!==void 0&&EA(x)===A.siteUid}function Gd(A,x){let e=Ld.exec(A);if(!e)return A;let r=EA(e[2]).toLowerCase();return(x.siteInfo.customer_id??"").toLowerCase()===r||(x.siteInfo.customer_uid??"").toLowerCase()===r?`/api/${e[1]}/sites/${e[3]}`:null}function Ud(A){let x=A.indexOf("?");return x<0?[A,""]:[A.slice(0,x),A.slice(x+1)]}function Hd(A){let x={params:{}};if(!A)return x;for(let e of A.split("&"))e&&zd(x,e);return x}function zd(A,x){let e=x.indexOf("="),r=EA(e<0?x:x.slice(0,e)),t=e<0?"":EA(x.slice(e+1));r==="json"?A.json=Kd(t):A.params[r]=t}function Kd(A){try{return JSON.parse(A)}catch{throw new w0("request supplied data which is not json formatted ")}}function Jd(A){let x=typeof A.body=="string"?A.body:JSON.stringify(A.body);return{status:A.status,headers:{...t8,...A.headers},body:x}}function s8(A,x){return{status:A,headers:{...t8},body:JSON.stringify(x)}}function Vd(A){return A instanceof w0||A instanceof hF||A instanceof FF?Ke(400,"E_BAD_REQUEST",A.message):A instanceof Vs||A instanceof xn?Ke(403,"E_FORBIDDEN",A.message):A instanceof IF?Ke(405,"E_METHOD_NOT_ALLOWED",A.message):A instanceof jA||A instanceof He?Ke(404,"E_NOT_FOUND",A.message):s8(500,{err:A instanceof Error?A.message:String(A)})}function Ke(A,x,e){return s8(A,{err:`${x} ${e}`})}function i8(A,x){let e=x.apmId??"local",r=x.version??1;return{uid:x.siteUid,name:x.name??x.siteUid,customer_id:e,customer_uid:e,app:{apmid:e,version:String(r)},device:{device_id:x.deviceId,lifecycle_flags:{}},lifecycle_flags:{},containers:A.containers.map(t=>({name:t.name,alias:t.alias??t.name,kind:t.kind}))}}var o8=require("usb");var a8=2e3;function Wd(A){return new Promise(x=>{setTimeout(x,A).unref?.()})}function Xd(A,x){let e=A.device;try{return e?.interface(x).endpoints.find(t=>t.direction==="in")}catch{return}}var cn=class{interface="usb";#A=new Set;#e;#r;#s;#t;#x=!1;#n;constructor(x,e){this.#e=x;let t=x.configuration.interfaces[e].alternate.endpoints;this.#r=t.find(s=>s.direction==="in"),this.#s=t.find(s=>s.direction==="out"),this.#t=Xd(x,e)}async write(x){await this.#e.transferOut(this.#s.endpointNumber,x)}onData(x){let e={cb:x};return this.#A.add(e),this.#x||this.#i(),()=>{this.#A.delete(e)}}#i(){this.#x=!0;let x=this.#t;if(!x){this.#n=this.#a();return}x.on("data",e=>{if(e.byteLength===0)return;let r=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);for(let t of this.#A)t.cb(r)}),x.on("error",()=>{}),x.startPoll(1,this.#r.packetSize)}async#a(){for(;this.#x&&this.#e.opened;)try{let x=await this.#e.transferIn(this.#r.endpointNumber,this.#r.packetSize);if(x.data&&x.data.byteLength>0)for(let e of this.#A)e.cb(x.data.buffer)}catch{break}}async stop(){if(!this.#x)return;this.#x=!1;let x=this.#t;x?.pollActive?await new Promise(e=>{let r=setTimeout(e,a8);x.stopPoll(()=>{clearTimeout(r),e()})}):this.#n&&await Promise.race([this.#n,Wd(a8)])}},Bn=class extends cn{constructor(x){super(x,ne.utoInterface)}},Cn=class extends cn{constructor(x){super(x,ne.debugInterface)}};var Yd=9540,Qd=new o8.WebUSB({allowedDevices:[{vendorId:Yd}]});async function Zd(A,x){x.info(`Searching for device with serial number: ${A}`);let e=await Qd.getDevices();for(let r of e)if((r.serialNumber||r.productName?.split(" ").pop())?.toLowerCase()===A.toLowerCase())return x.info(`Device found: ${r.productName}`),r;return null}function Ai(A){return`Device not found with serial number: ${A}`}var xD=500;function AD(A){if(A instanceof dn)return!0;let x=A instanceof Error?A.message:String(A);return/LIBUSB_ERROR_(ACCESS|BUSY|NO_DEVICE|NOT_FOUND|IO)/.test(x)||x.startsWith(Ai(""))}var dn=class extends Error{constructor(x,e){super(`${x}: ${e instanceof Error?e.message:String(e)}`),this.name="TransientUsbOpenError"}};function eD(A,x){try{return{uto:new Bn(A),debug:x?new Cn(A):void 0}}catch(e){throw new dn("Device descriptors not ready",e)}}function rD(A){return async(x,e=!0)=>{let r=await Zd(x,A);if(!r)throw new Error(Ai(x));try{await r.open(),await r.selectConfiguration(ne.configurationNumber),await r.claimInterface(ne.utoInterface),e&&await r.claimInterface(ne.debugInterface);let{uto:t,debug:s}=eD(r,e);return{uto:t,debug:s,async close(){await t.stop(),await s?.stop(),r.opened&&(await r.releaseInterface(ne.utoInterface).catch(()=>{}),e&&await r.releaseInterface(ne.debugInterface).catch(()=>{}),await r.close().catch(()=>{}))}}}catch(t){throw r.opened&&await r.close().catch(()=>{}),t}}}function tD(A){return new Promise(x=>setTimeout(x,A))}async function nD(A,x,e,r){let t=Date.now()+r;for(;;)try{return await A(x,e)}catch(s){if(!AD(s)||Date.now()>=t)throw s;await tD(xD)}}function ct(A){return{debug:(x,...e)=>A.debug(x,...e),info:(x,...e)=>A.debug(x,...e),warn:(x,...e)=>A.warn(x,...e),error:(x,...e)=>A.error(x,...e)}}async function ei(A,x={}){let e=x.logger??new re.Logger,r=x.transportFactory??rD(e),t=x.needDebug!==!1,s=await nD(r,A,t,x.retryMs??0),n=t?s.debug:void 0,F=ct(e),f=n?new SF(n,F):void 0,c=new Ns(s.uto,F);return{utoMaster:c,atHandler:f,transports:s,serial:A,close:async()=>{try{await c.dispose(f)}catch{}f?.dispose(),await s.close()}}}async function F8(A,x,e,r,t=!1,s=0){if(!await e.stat(x))return{success:!1,message:`File not found: ${x.fsPath}`};let F=await e.readFile(x),f;try{f=await ei(A,{logger:r,debug:t,needDebug:!1,retryMs:s});let{utoMaster:c}=f;if(t){c.on("mdnCom",p=>{r.debug("mdnCom",p)}),c.on("mdnComError",p=>{r.debug("mdnComError",p)});let D=-1;c.on("installing",p=>{p&&p!==D&&(D=p,r.info(`Upload progress: ${p}%`))})}return await c.init(),await c.requestDeviceInfo(),r.info("Device connected, starting upload..."),await c.sendFile(Ts.pawn,new Uint8Array(F.buffer,F.byteOffset,F.length)),r.done("Upload completed successfully!"),{success:!0,message:"File uploaded successfully"}}catch(c){let D=c instanceof Error?c.message:String(c);return{success:!1,message:D===Ai(A)?D:`Upload failed: ${D}`}}finally{await f?.close()}}var v8=require("vscode-uri");var Dn=class A{constructor(x,e,r,t,s){this.fs=r;this.persist=t;this.logger=s;this.storage=x,this.file=e}fs;persist;logger;storage;file;lastSerialized=null;static async create(x,e,r={}){let t=v8.Utils.joinPath(x,e0.filePaths.studio.dev.mirror),s=new sn;if(r.persist&&await e.stat(t))try{let n=new TextDecoder().decode(await e.readFile(t));s=sn.fromJSON(JSON.parse(n))}catch(n){r.logger?.warn(`Ignoring unreadable dev mirror snapshot: ${n instanceof Error?n.message:n}`),s=new sn}return new A(s,t,e,r.persist===!0,r.logger)}async save(){if(!this.persist)return;let x=JSON.stringify(this.storage.toJSON());if(x!==this.lastSerialized)try{await this.fs.writeFile(this.file,x),this.lastSerialized=x}catch(e){this.logger?.warn(`Could not write dev mirror snapshot: ${e instanceof Error?e.message:e}`)}}};var l8=require("node:events"),pn=require("node:fs/promises"),c8=require("node:path"),B8=cx(require("iconv-lite"));var sD=5e3,f8=500;function E8(A){let x=A.indexOf("\0");return(x>=0?A.slice(0,x):A).trim()}function iD(A){let x=A.level===nn.info?"":`${nn[A.level]}: `,e=A.sequenceId!==void 0&&A.lineNumber!==void 0?` (${A.sequenceId}:${A.lineNumber})`:"";return`${x}${A.message??""}${e}`.trim()}function aD(A){if(A.length===0)return!1;let x=0,e=0;for(let r of A){e++;let t=r.codePointAt(0)??0;(t===9||t===10||t===13||t>=32&&t!==127)&&x++}return x/e>.8}var un=class extends l8.EventEmitter{buffer=[];capacity;logFile;logger;seq=0;disposers=[];writeChain=Promise.resolve();logDirReady=void 0;constructor(x={}){super(),this.capacity=x.capacity??sD,this.logFile=x.logFile,this.logger=x.logger}push(x,e,r){let t={seq:++this.seq,ts:Date.now(),source:x,text:e};return r&&(t.raw=Buffer.from(r).toString("base64")),this.buffer.push(t),this.buffer.length>this.capacity&&this.buffer.splice(0,this.buffer.length-this.capacity),this.emit("record",t),this.appendToFile(t),t}appendToFile(x){let e=this.logFile;e&&(this.logDirReady??=(0,pn.mkdir)((0,c8.dirname)(e),{recursive:!0}).then(()=>{}),this.writeChain=this.writeChain.then(async()=>{await this.logDirReady,await(0,pn.appendFile)(e,`${JSON.stringify(x)}
|
|
2338
|
-
`,"utf8")}).catch(r=>{this.logger?.warn(`Could not append to log file: ${r instanceof Error?r.message:r}`)}))}since(x=0,e=f8){let r=e>0?e:f8;return this.buffer.filter(t=>t.seq>x).slice(-r)}get lastSeq(){return this.seq}attachUtoMaster(x){let e=r=>{if(r.wTagFull!==be.LOG||!r.data)return;let t=new Uint8Array(r.data.buffer.slice(r.data.byteOffset,r.data.byteOffset+r.data.byteLength));this.pushDecoded("rm2mlog",t)};x.on("utoFrame",e),this.disposers.push(()=>x.off("utoFrame",e))}attachAtHandler(x){let e=new nF(x,ct(this.logger??new re.Logger));e.on("message",r=>{let t=iD(r);t&&this.push("at",t)}),this.disposers.push(()=>e.dispose())}pushDecoded(x,e){let t=[E8(B8.default.decode(Buffer.from(e),"win1252")),E8(Buffer.from(e).toString("utf8"))].find(aD);if(t){this.push(x,t);return}let s=Buffer.from(e.subarray(0,32)).toString("hex");this.push(x,`<${e.length} bytes> ${s}${e.length>32?"\u2026":""}`,e)}async dispose(){for(let x of this.disposers)x();this.disposers=[],this.removeAllListeners(),await this.writeChain}};var d8=require("node:events");var oD=1e3,FD=1e4,vD=200,C8=new Set([be.HISTDATA_RAW,be.LOG,be.ALERTS]),bn=class extends d8.EventEmitter{opts;tagMap=new Map;relevantTags=new Set;containerByTag=new Map;deviceStamps=new Map;seenStamps=new Map;timer;paused=!1;stopped=!1;inFlight=!1;backoffMs=0;lastTickAt=null;lastChangeAt=null;errorCount=0;constructor(x){super(),this.opts=x;for(let e of x.model.containers){let r=mr(e);r!==null&&this.containerByTag.set(r,e)}}get utoMaster(){let x=this.opts.utoMaster();if(!x)throw new Error("Device not connected");return x}async refreshTagMap(){let x=await this.utoMaster.requestDeviceInfo();this.tagMap=new Map,this.relevantTags=new Set,this.seenStamps.clear(),this.deviceStamps.clear(),x&&x.utos.forEach((e,r)=>{this.tagMap.set(e.wTag,{index:r,sTag:e.sTag,historic:e.flags.historic}),(this.containerByTag.has(e.wTag)||C8.has(e.wTag))&&this.relevantTags.add(e.wTag)})}start(){this.opts.intervalMs<=0||(this.stopped=!1,this.schedule(this.opts.intervalMs))}stop(){this.stopped=!0,this.clearTimer()}clearTimer(){this.timer&&(clearTimeout(this.timer),this.timer=void 0)}pause(){this.paused=!0}resume(){this.paused=!1}status(){return{intervalMs:this.opts.intervalMs,lastTick:this.lastTickAt,lastChange:this.lastChangeAt,errors:this.errorCount,paused:this.paused}}deviceStamp(x){return this.deviceStamps.get(x)??null}knowsTag(x){return this.tagMap.has(x)}async refreshStamps(){try{let x=await this.utoMaster.requestStamps();if(!x)return;for(let[e,r]of this.tagMap)r.index<x.stamps.length&&this.deviceStamps.set(e,x.stamps[r.index])}catch(x){this.opts.logger?.warn(`Stamp refresh failed: ${x instanceof Error?x.message:String(x)}`)}}schedule(x){this.stopped||(this.clearTimer(),this.timer=setTimeout(()=>{this.tick().then(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs)).catch(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs))},x),this.timer.unref?.())}async tick(){if(this.stopped||this.paused||this.opts.session.busy||this.inFlight)return[];this.inFlight=!0;try{let x=await this.utoMaster.requestStamps();return this.lastTickAt=Date.now(),this.backoffMs=0,x?this.pullAdvancedTags(x.stamps):[]}catch(x){return this.errorCount++,this.backoffMs=Math.min(this.backoffMs>0?this.backoffMs*2:oD,FD),this.opts.logger?.warn(`Stamp poll failed: ${x instanceof Error?x.message:String(x)}`),this.emit("error",x instanceof Error?x:new Error(String(x))),[]}finally{this.inFlight=!1}}async pullAdvancedTags(x){let e=[];for(let r of this.relevantTags){let t=await this.pullIfAdvanced(r,x);t&&e.push(t)}if(e.length>0){this.lastChangeAt=Date.now();for(let r of e)this.emit("container-changed",r)}return e}async pullIfAdvanced(x,e){let r=this.tagMap.get(x);if(!r||r.index>=e.length)return null;let t=e[r.index],s=this.seenStamps.get(x);this.deviceStamps.set(x,t),this.seenStamps.set(x,t);let n=await this.mirrorStamp(x);return(s===void 0?t>n:t!==s)?this.pull(x,r,n,t):null}async pullTags(x){let e=[];for(let r of x){let t=this.tagMap.get(r)??{index:-1,sTag:`0x${r.toString(16)}`,historic:!1},s=await this.mirrorStamp(r),n=await this.pull(r,t,t.historic?s:0,this.deviceStamp(r)??0);n&&(e.push(r),this.emit("container-changed",n))}return e}async mirrorStamp(x){let e=await this.opts.storage.getLatestStampForTag(x);return e?Zx(e):0}async pull(x,e,r,t){return e.historic||C8.has(x)?this.pullHistoric(x,r,t):this.pullSingle(x,t)}async pullSingle(x,e){let r=await this.utoMaster.requestUto(x,0);if(!r)return null;let t=await this.opts.storage.getRowForTag(x);return await this.opts.storage.replaceUtoRow({tag:x,stamp:Gx(r.stamp),flags:t?.flags??0,site_related:t?.site_related??0,data:r.data?fD(r.data):null}),this.describeChange(x,r.stamp||e)}async pullHistoric(x,e,r){let t=await this.opts.storage.getRowForTag(x),s=0,n=e,F=async f=>{let c=f.filter(D=>D.stamp40>e).map(D=>(n=Math.max(n,D.stamp40),{tag:x,stamp:Gx(D.stamp40),flags:t?.flags??0,site_related:t?.site_related??0,data:D.data}));await this.opts.storage.insertHistoricRows(c),s+=c.length};return await this.utoMaster.requestHistoricUtos(x,e,void 0,void 0,vD,F),s===0?null:this.describeChange(x,n||r)}async describeChange(x,e){let r=this.containerByTag.get(x);if(!r)return{tag:x,container:null,stamp:e};let t=null;try{t=await this.opts.mapper.readContainer(r.name)}catch{}return{tag:x,container:r.name,alias:r.alias,stamp:e,decoded:t}}};function fD(A){return new Uint8Array(A.buffer.slice(A.byteOffset,A.byteOffset+A.byteLength))}var jn=(F=>(F[F.Success=0]="Success",F[F.BuildFailed=1]="BuildFailed",F[F.DeviceNotFound=2]="DeviceNotFound",F[F.UsbFailed=3]="UsbFailed",F[F.ModelMissing=7]="ModelMissing",F[F.UnknownContainer=8]="UnknownContainer",F[F.WriteForbidden=9]="WriteForbidden",F))(jn||{}),hx=class extends Error{constructor(e,r){super(e);this.exitCode=r;this.name="DevError"}exitCode},ED=2e3,lD=3e3,cD=3e4,BD=1e4,CD=3e4,dD=1e3,D8="dev",u8="local",mn="Device not connected",ti=class{tail=Promise.resolve();depth=0;get busy(){return this.depth>0}async run(x,e){this.depth++;let r=this.tail,t=()=>{};this.tail=new Promise(s=>{t=s});try{await DD(r,e)}catch(s){throw this.depth--,r.then(t,t),s}try{return await x()}finally{this.depth--,t()}}};function DD(A,x){return new Promise((e,r)=>{let t=setTimeout(()=>r(new hx(`Device busy: waited ${x} ms for the UTO link`,3)),x);t.unref?.(),A.then(()=>{clearTimeout(t),e()})})}var Ve=class extends b8.EventEmitter{logStream;opts;logger;timeSource;device;mirror;model;mapper;apiHandler;poller;stateManager;localData;offlineSync;buildState={running:!1,ok:null,at:null};lastSyncAt=null;firmwareVersion=null;mirrorSaveTimer;stopped=!1;lock=new ti;constructor(x){super(),this.opts=x,this.logger=x.logger,this.timeSource=x.timeSource??gr,this.logStream=new un({logFile:x.logFile,logger:x.logger}),this.logStream.on("record",e=>this.emit("log",e))}get serial(){return this.opts.serial}get connected(){return this.device!==void 0}get busy(){return this.lock.busy}get ddeModel(){if(!this.model)throw new hx("DDE model not loaded",7);return this.model}get storage(){if(!this.mirror)throw new hx("Mirror not initialised",7);return this.mirror.storage}async start(){if(this.opts.build){let x=await this.build();if(x.ok===!1)throw new hx(x.message??"Build failed",1)}if(await this.loadModel(),this.mirror=await Dn.create(this.opts.cwd,this.opts.fs,{persist:this.opts.persistMirror,logger:this.logger}),this.mapper=new gF(this.ddeModel,this.storage,this.timeSource),await this.connect(),this.opts.flash){let x=await this.flash();if(!x.success)throw new hx(x.message,3)}this.buildApiHandler(),await this.startPoller(),this.opts.persistMirror&&(this.mirrorSaveTimer=setInterval(()=>{this.mirror?.save()},5e3),this.mirrorSaveTimer.unref?.())}async loadModel(){let x=ri.Utils.joinPath(this.opts.cwd,e0.filePaths.dist.ddeXmlPath);if(!await this.opts.fs.stat(x))throw new hx(`No DDE model at ${e0.filePaths.dist.ddeXmlPath} \u2014 run \`studio build\` first`,7);let e=new TextDecoder().decode(await this.opts.fs.readFile(x));this.model=oF(e)}async connect(){try{this.device=this.opts.createDevice?await this.opts.createDevice(this.opts.serial):await ei(this.opts.serial,{transportFactory:this.opts.transportFactory,debug:this.opts.debug,logger:this.logger})}catch(t){let s=t instanceof Error?t.message:String(t);throw new hx(`Could not open device ${this.opts.serial}: ${s}`,/not found/i.test(s)?2:3)}let{utoMaster:x,atHandler:e}=this.device;if(!e)throw new hx(`Device ${this.opts.serial} was opened without its debug interface`,3);this.logStream.attachUtoMaster(x),this.logStream.attachAtHandler(e),x.on("utoFrame",t=>this.emit("uto",t));try{await x.init();let t=await x.requestDeviceInfo();this.firmwareVersion=t?.firmwareVersion??null}catch(t){throw await this.closeDevice(),new hx(`UTO handshake failed: ${t instanceof Error?t.message:String(t)}`,3)}let r=ct(this.logger);this.stateManager=new NF(e,r),this.stateManager.on("state",t=>this.emit("state",t)),this.localData=new PF(e,r),this.offlineSync=new kF(x,this.storage,r)}async startPoller(){this.poller=new bn({session:this,utoMaster:()=>this.device?.utoMaster,storage:this.storage,model:this.ddeModel,mapper:this.mapper,intervalMs:this.opts.pollIntervalMs??ED,logger:this.logger}),this.poller.on("container-changed",x=>{this.emit("container-changed",x),this.logStream.push("uto",`${x.alias??x.container??this.tagLabel(x.tag)} changed`)}),this.poller.on("error",x=>this.emit("error",x)),await this.poller.refreshTagMap(),this.poller.start()}tagLabel(x){return`0x${x.toString(16)}`}get utoMaster(){if(!this.device)throw new hx(mn,3);return this.device.utoMaster}get atHandler(){if(!this.device?.atHandler)throw new hx(mn,3);return this.device.atHandler}buildApiHandler(){let x={container:async(r,t,s)=>{await this.withLink(()=>this.utoMaster.sendUTOCmdExt(Ps.DATA,r,t,s))},adHocChangeRequest:async(r,t)=>this.withLink(()=>this.offlineSync.executeAdHocChangeRequest(r,t)),backfill:async()=>(await this.sync(),"ready")},e={siteUid:D8,deviceId:this.opts.serial,model:this.ddeModel,mapper:this.mapper,storage:this.storage,siteInfo:i8(this.ddeModel,{siteUid:D8,deviceId:this.opts.serial,name:`dev-${this.opts.serial}`,apmId:u8}),me:{name:"studio-dev",roles:["developer"]},push:x,logger:this.logger,timeSource:this.timeSource,allowAnySiteUid:!0};this.apiHandler=n8(e)}async handleApi(x){if(!this.apiHandler)throw new hx("Session not started",7);let e=this.writtenTag(x),r=await this.apiHandler(x);if(e===null||r.status>=400)return r;let t=await this.mirrorStamp(e);return await this.awaitDeviceStamp(e,t)||(r.headers={...r.headers,"x-mt-mirror":"stale"}),r}writtenTag(x){let e=x.method.toUpperCase();if(e!=="PUT"&&e!=="POST")return null;let[r,t=""]=x.path.split("?");if(/(^|&)async=1(&|$)/.test(t))return null;let s=/\/sites\/[^/]+\/(?:containers\/)?([^/?]+)$/.exec(r);if(!s)return null;let n=Ms(this.ddeModel,decodeURIComponent(s[1]));return n===null||!Ls(n)||this.poller?.knowsTag(n)===!1?null:n}async awaitDeviceStamp(x,e){let r=this.opts.waitMs??lD,t=this.poller;if(r<=0||!t)return!0;let s=Date.now()+r;for(;;){let F=await this.withLink(()=>t.refreshStamps()).then(()=>!0,()=>!1)?t.deviceStamp(x):null;if(F!==null&&F>=e)return await this.withLink(()=>t.pullTags([x])).catch(()=>{}),!0;if(Date.now()>=s)return!1;await p8(100)}}async build(){this.buildState={running:!0,ok:null,at:null},this.emit("build",this.buildState);try{await J.validateBasicManifest(this.opts.cwd,this.opts.fs,null);let x=await jx.buildAll(this.opts.cwd,this.opts.fs,this.logger,this.opts.env??Bx.ENV.production,this.opts.apiToken??null,this.opts.part??!0,!0);this.buildState={running:!1,ok:!0,at:Date.now(),diagnostics:x}}catch(x){this.buildState={running:!1,ok:!1,at:Date.now(),message:x instanceof Error?x.message:String(x),diagnostics:x instanceof jx.BuildError?x.mergedDiagnostics:void 0}}return this.emit("build",this.buildState),this.buildState}async flash(x){let e=ri.Utils.joinPath(this.opts.cwd,x??e0.filePaths.dist.mainAmxPath);this.poller?.pause();try{return await this.withLink(async()=>{await this.closeDevice();try{return await(this.opts.uploadToDevice??F8)(this.opts.serial,e,this.opts.fs,this.logger,this.opts.debug,BD)}finally{await this.reconnect()}})}finally{this.connected&&await this.poller?.refreshTagMap().catch(()=>{}),this.poller?.resume()}}async reconnect(){let x=Date.now()+CD;for(let e=0;;e++)try{await this.connect(),this.stopped&&await this.closeDevice();return}catch(r){if(await this.closeDevice(),this.stopped||Date.now()>=x){this.reportReconnectFailure(r);return}e===0&&this.logger.info(`Waiting for device ${this.opts.serial} to come back after the flash...`),await p8(dD)}}reportReconnectFailure(x){let e=x instanceof Error?x.message:String(x);this.logger.error(`Could not reopen device ${this.opts.serial} after the flash: ${e}`),this.stopped||this.emit("error",x instanceof Error?x:new Error(e))}async sync(x){let e=await this.withLink(async()=>{this.poller?.pause();try{return x&&x.length>0?await this.poller.pullTags(x):(await this.offlineSync.sync()).tags.filter(s=>s.outcome==="upload").map(s=>s.tag)}finally{this.poller?.resume()}});this.lastSyncAt=Date.now();let r={tags:e,at:this.lastSyncAt};return this.emit("sync",r),r}async at(x){return this.withLink(async()=>(this.logStream.push("at",`> ${x}`),this.atHandler.sendRaw(x)))}async state(){let x=this.stateManager;if(!x)throw new hx(mn,3);return x.getLastState()??await x.fetchState()}localDataSnapshot(){return this.localData?.getSnapshot()??null}async measure(){return this.withLink(async()=>{let x=this.localData;if(!x)throw new hx(mn,3);return x.triggerMeasurement()})}status(){return{serial:this.opts.serial,connected:this.connected,apmId:u8,firmwareVersion:this.firmwareVersion,model:{containers:(this.model?.containers??[]).map(x=>({name:x.name,alias:x.alias,kind:x.kind,tag:Ms(this.ddeModel,x.name)}))},lastSync:this.lastSyncAt,buildState:this.buildState,poll:this.poller?.status()??{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0}}}async tick(){return this.poller?this.poller.tick():[]}async mirrorStamp(x){let e=await this.storage.getLatestStampForTag(x);return e?Zx(e):0}async withLink(x){return this.lock.run(x,this.opts.lockWaitMs??cD)}async closeDevice(){let x=this.device;this.device=void 0,this.stateManager?.dispose(),this.stateManager=void 0,await this.localData?.stopPolling(),this.localData?.dispose(),this.localData=void 0,this.offlineSync=void 0,await x?.close()}async stop(){if(!this.stopped){this.stopped=!0,this.mirrorSaveTimer&&clearInterval(this.mirrorSaveTimer),this.poller?.stop();try{await this.mirror?.save(),await this.logStream.dispose()}finally{await this.closeDevice(),this.removeAllListeners()}}}};function p8(A){return new Promise(x=>setTimeout(x,A))}var y8=cx(require("node:http")),k8=require("vscode-uri"),_8=cx(require("yaml"));var w8=["log","state","sync","build","uto","container-changed","error"],uD=15e3,m8=4*1024*1024,pD="127.0.0.1",bD=8765,S8="no-store",$8="E_NOT_FOUND",j8="E_BAD_REQUEST",mD=2e3,jD=20;function We(A,x){return JSON.stringify({err:`${A} ${x}`})}function se(A,x,e,r={}){A.writeHead(x,{"content-type":"application/json","cache-control":S8,...r}),A.end(e)}function hD(A){let x=A.replace(/^\[|\]$/g,"").toLowerCase();return x==="localhost"||x==="::1"||x===""||/^127\./.test(x)}function gD(A,x){if(!(hD(x)||A.token)){if(!A.allowRemote)throw new Error(`Refusing to bind to ${x} without --bearer: the device API would be reachable from the network. Pass --bearer <token>, or --allow-remote to bind unauthenticated anyway.`);A.logger.warn(`Serving the unauthenticated device API on ${x} \u2014 anyone who can reach this port can write to and flash the device.`)}}function yD(A){try{let{hostname:x}=new URL(A);return x==="localhost"||x==="127.0.0.1"||x==="[::1]"||x==="::1"}catch{return!1}}function kD(A,x){let e=A.headers.origin;typeof e=="string"&&yD(e)&&(x.setHeader("access-control-allow-origin",e),x.setHeader("access-control-allow-credentials","true"),x.setHeader("vary","origin")),x.setHeader("access-control-allow-methods","GET,POST,PUT,DELETE,OPTIONS"),x.setHeader("access-control-allow-headers","authorization,content-type"),x.setHeader("access-control-expose-headers","x-mt-mirror, x-mt-backfill"),x.setHeader("access-control-max-age","600")}function _D(A,x,e){if(!x)return!0;let r=A.headers.authorization,t=typeof r=="string"?r.replace(/^Bearer\s+/i,"").trim():(e??"").trim();if(t==="")return!1;let s=process.env.MYDATANET_TOKEN;return t===x||s!==void 0&&s!==""&&t===s}var me=class extends Error{constructor(e,r,t){super(t);this.status=e;this.code=r}status;code};async function q8(A){let x=[],e=0;for await(let r of A){let t=r;if(e+=t.length,e>m8)throw A.pause(),new me(413,"E_TOO_LARGE",`request body exceeds ${m8} bytes`);x.push(t)}return Buffer.concat(x).toString("utf8")}function P8(A){return A!=="GET"&&A!=="HEAD"}function wD(A){if(!A.trim())return{};let x;try{x=JSON.parse(A)}catch{throw new me(400,j8,"malformed JSON body")}if(typeof x!="object"||x===null)throw new me(400,j8,"JSON body must be an object");return x}function h8(A,x){let e=A[x];return typeof e=="string"&&e.length>0?e:void 0}function SD(A,x){let e=A[x];if(!Array.isArray(e))return;let r=e.map(Number).filter(t=>Number.isFinite(t));return r.length>0?r:void 0}function g8(A,x,e){let r=Number.parseInt(A.get(x)??"",10);return Number.isFinite(r)?r:e}var ni=class{clients=new Set;heartbeat;constructor(){this.heartbeat=setInterval(()=>this.writeAll(`: ping
|
|
2198
|
+
`).entries()){A.line=e;let t=r.trim();t===""||t.startsWith("//")||eC(A,t)||t.includes("=")&&rC(A,t)}return AC(A.containers,A.splits)}var RF=null,nC=4;function _r(x){let A=new Date(x),e=(r,t)=>r.toString().padStart(t,"0");return e(A.getUTCFullYear(),4)+e(A.getUTCMonth()+1,2)+e(A.getUTCDate(),2)+e(A.getUTCHours(),2)+e(A.getUTCMinutes(),2)+e(A.getUTCSeconds(),2)+e(A.getUTCMilliseconds(),3)}function Sr(x){let A=x.trim();if(A==="*")return RF;if(!/^\d{4,17}$/.test(A))throw new Error(`?apiStamp.invalid-input."${x}"`);let e=(D,p,j)=>{let _=A.slice(D,D+p);return parseInt(_.length?_.padEnd(p,"0"):j,10)},r=parseInt(A.slice(0,nC),10),t=A.length>=6?e(4,2,"01"):1,s=A.length>=8?e(6,2,"01"):1,n=e(8,2,"00"),F=e(10,2,"00"),f=e(12,2,"00"),C=e(14,3,"000");return Date.UTC(r,t-1,s,n,F,f,C)}var Ct="NAN",sC="%HEX%",iC=65535,ri=class extends Error{constructor(x){super(`?ddeCodec.unknown-alias."${x}"`),A0(this,"alias",x),this.name="DdeUnknownAliasError"}};function dn(x){return(x.alias??x.name).toLowerCase()}function Dn(x){return x==="string"}function ti(x){return x==="stamp"||x==="stamp4"||x==="stamp8"||x==="datetime"}function OF(x){return(x.editmask??"").toUpperCase()===sC}function aC(x,A){return A===void 0||!Number.isFinite(x)?x:ni(x,A)}function ni(x,A){if(!Number.isFinite(x))return x;let e=10**A;return Math.sign(x)*Math.round(Math.abs(x)*e)/e}function oC(x,A){if(!Number.isFinite(x)||x===0)return x;let e=Math.abs(x),r=Math.floor(Math.log10(e));return 10**(r+1)<=e?r+=1:10**r>e&&(r-=1),ni(x,A-1-r)}function FC(x){return x==="floatm16"||x==="f32"||x==="f64"}function vC(x,A){if(!Number.isFinite(A))return A;let e=x.decpl??(FC(x.type)?9:0),r=ni(A,e),t=x.type==="floatm16"?3:x.type==="f32"?7:15;return oC(r,t)}function vn(x,A){let e=BigInt.asUintN(64,BigInt(Math.trunc(x))),r=BigInt.asUintN(64,BigInt(Math.trunc(A))),t=0n,s=1n;for(;r!==0n;)r&1n&&(e&1n&&(t|=s),s<<=1n),e>>=1n,r>>=1n;return Number(t)}function GF(x,A,e){let r=BigInt.asUintN(64,BigInt(Math.trunc(x))),t=BigInt.asUintN(64,BigInt(Math.trunc(A))),s=BigInt.asUintN(64,BigInt(Math.trunc(e))),n=1n;for(;s!==0n;)s&1n&&(r=t&1n?r|n:r&~n,t>>=1n),s>>=1n,n<<=1n;return Number(r)}var fC=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function fn(x){return!!x.bitmask&&fC.has(x.type)}var UF=255,HF=254,KF=253,zF=252,JF=251,EC=207,si=65535,En=65534,ii=65533,ai=65532,oi=65531;function lC(x){switch(x){case UF:return si;case HF:return En;case KF:return ii;case zF:return ai;case JF:return oi;default:return x<=31?x:x>EC?En:(x&15|16)<<(x>>4)-1}}function cC(x){switch(x){case si:return UF;case En:return HF;case ii:return KF;case ai:return zF;case oi:return JF;default:{if(x<=31)return x;let A=1,e=x;for(;(e&65504)>0;)e>>=1,A++;return A<<4|e&15}}}var ln=1023,Ms=31,VF=127,ds=8388607,BC=255,Is=15,CC=-14,Wo=15;function WF(x){let A=(x&ln)<<13,e=(x&31744)>>10;if(e===Ms)return YF(1024-(x&ln));e!==0&&(e=e-Is+4+VF);let r=(A|e<<23)>>>0;x&32768&&(r=(r|2147483648)>>>0);let t=new DataView(new ArrayBuffer(4));return t.setUint32(0,r),t.getFloat32(0)}function XF(x){if(typeof x=="string"||Number.isNaN(x))return iC;let A=new DataView(new ArrayBuffer(4));A.setFloat32(0,x);let e=A.getUint32(0),r=e>>>16&32768,t=(e&ds)+4096,s=(t>ds?1:0)+(e>>>23&BC),n=(t&ds)>>>13;return s!==0&&(s=s-VF-4,s<CC?(n=0,s=0):s>Wo?(n=ln,s=Wo+Is):s=s+Is),r|s<<10|n}var dC=["OF","UF","OL","SC"],Ls={u8:{NAN:255,OF:254,UF:253,OL:252,SC:251},u16:{NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},u32:{NAN:4294967295,OF:4294967294,UF:4294967293,OL:4294967292,SC:4294967291},s8:{NAN:127,OF:126,UF:-126,OL:-127,SC:-128},s16:{NAN:32767,OF:32766,UF:-32766,OL:-32767,SC:-32768},s32:{NAN:2147483647,OF:2147483646,UF:-2147483646,OL:-2147483647,SC:-2147483648},s64:{NAN:0x7fffffffffffffffn,OF:0x7ffffffffffffffen,UF:-0x7ffffffffffffffen,OL:-0x7fffffffffffffffn,SC:-0x8000000000000000n},ufm8:{NAN:si,OF:En,UF:ii,OL:ai,SC:oi}},DC={NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},Kx={NAN:1,OF:2,UF:3,OL:4,SC:5},uC=new Set(["u8","u16","u32","ufm8"]);function pC(x){let A=Math.floor(x),e=x-A;return e<.5?A:e>.5?A+1:A%2===0?A:A+1}function Fi(x){let A=x.replace(/,/g,"").trim();if(!/^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/.test(A))return null;let e=Number(A);return Number.isFinite(e)?e:null}function vi(x,A,e){switch(x){case"u8":return A.getUint8(e);case"s8":return A.getInt8(e);case"u16":return A.getUint16(e,!1);case"s16":return A.getInt16(e,!1);case"u32":return A.getUint32(e,!1);case"s32":return A.getInt32(e,!1);case"s64":return Number(A.getBigInt64(e,!1));case"f32":return A.getFloat32(e,!1);case"f64":return A.getFloat64(e,!1);case"floatm16":return WF(A.getUint16(e,!1));case"ufm8":return lC(A.getUint8(e));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function YF(x){switch(x){case Kx.OF:return"OF";case Kx.UF:return"UF";case Kx.OL:return"OL";case Kx.SC:return"SC";default:return Ct}}var Xo=[["NAN",Kx.NAN],["OF",Kx.OF],["UF",Kx.UF],["OL",Kx.OL],["SC",Kx.SC]];function bC(x,A){let e=x.getUint32(A,!1);if((e&2139095040)!==2139095040)return 0;let r=e&8388607;return r===0?Kx.NAN:(r=r&4194304?8388608-r:r&255,r===0?Kx.NAN:r)}function mC(x,A){let e=x.getBigUint64(A,!1);if((e&0x7ff0000000000000n)!==0x7ff0000000000000n)return 0;let r=Number(e&0xffn);return r===0?Kx.NAN:r}function jC(x,A){if(x.type==="s64"){let t=A.getBigInt64(x.byteofs,!1);fn(x)&&(t=BigInt(vn(Number(t),x.bitmask)));let s=Ls.s64;return Xo.find(([n])=>t===BigInt(s[n]))?.[1]??0}let e=Ls[x.type];if(!e)return 0;let r=vi(x.type,A,x.byteofs);return fn(x)&&(r=vn(r,x.bitmask)),Xo.find(([t])=>r===e[t])?.[1]??0}function QF(x,A){switch(x.type){case"floatm16":{let e=A.getUint16(x.byteofs,!1);return(e>>10&Ms)===Ms?1024-(e&ln):0}case"f32":return bC(A,x.byteofs);case"f64":return mC(A,x.byteofs);default:return jC(x,A)}}function ZF(x,A){let e=vi(x.type,A,x.byteofs);return typeof e=="string"||Number.isNaN(e)?NaN:(fn(x)&&(e=vn(e,x.bitmask)),e*x.vscale+x.vofs)}function hC(x,A){let e=QF(x,A);if(e!==0)return YF(e);let r=ZF(x,A);return Number.isNaN(r)?Ct:vC(x,r)}function gC(x,A){if(x.byteofs+x.size>A.byteLength)return null;if(Dn(x.type)||ti(x.type))return NaN;let e=new DataView(A.buffer,A.byteOffset,A.byteLength);return QF(x,e)!==0?NaN:ZF(x,e)}function yC(x,A){if(OF(x)){let e="";for(let r=0;r<x.size;r++)e+=A.getUint8(x.byteofs+r).toString(16).padStart(2,"0");return e.toUpperCase()}return H0.cp1252Unpack(A,x.byteofs,x.size)}var x8=25569,A8=864e5;function kC(x){return(x-x8)*A8}function _C(x){return x/A8+x8}function wC(x,A){if(x.type==="datetime")return _r(kC(A.getFloat64(x.byteofs,!1)));if(x.type==="stamp8"){let r=A.getBigUint64(x.byteofs,!1),t=Number(r&0xffffffffffn);return _r(H0.stamp40ToMS(t))}let e=A.getUint32(x.byteofs,!1)*256;return x.size>=5&&(e+=A.getUint8(x.byteofs+4)),_r(H0.stamp40ToMS(e))}var SC=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function $C(x,A){return/^[+-]?\d+$/.test(x)?parseInt(x,10):/^\$[0-9a-fA-F]+$/.test(x)?parseInt(x.slice(1),16):A}function qC(x){let A=x.default;if(A===void 0)return;if(Dn(x.type))return A;let e=A.trim();if(e===""||e.toUpperCase()===Ct)return Ct;if(SC.has(x.type))return $C(e,0);let r=Fi(e);return r!==null?r:A}function TC(x,A,e){return x.byteofs+x.size>e?qC(x):Dn(x.type)?yC(x,A):ti(x.type)?wC(x,A):hC(x,A)}function Rs(x,A){let e=new DataView(A.buffer,A.byteOffset,A.byteLength),r={};for(let t of x.fields)oe(t)||Bt(t.type)||(r[dn(t)]=TC(t,e,A.byteLength));return r}function PC(x,A){if(typeof A=="number")return Number.isFinite(A)?{kind:"value",physical:A}:{kind:"sentinel",state:"NAN"};if(typeof A=="string"){if(A.toUpperCase()===Ct||A==="")return{kind:"sentinel",state:"NAN"};let e=dC.find(t=>t===A);if(e)return{kind:"sentinel",state:e};if("OUS".includes(A[0]))return{kind:"skip"};let r=Fi(A);return r!==null?{kind:"value",physical:r}:Yo(x)}return Yo(x)}function Yo(x){let A=x.default;return A!==void 0&&A.startsWith("%")?{kind:"sentinel",state:"NAN"}:{kind:"value",physical:(A!==void 0?Fi(A):null)??0}}function Os(x,A,e){switch(x.type){case"floatm16":return A.setUint16(x.byteofs,DC[e],!1);case"f32":return A.setUint32(x.byteofs,(2139095040|Kx[e])>>>0,!1);case"f64":return A.setBigUint64(x.byteofs,0x7ff0000000000000n|BigInt(Kx[e]),!1);default:break}let r=Ls[x.type]?.[e];if(r===void 0)throw new Error(`?ddeCodec.non-numeric-type."${x.type}"`);if(x.type==="s64")return A.setBigInt64(x.byteofs,BigInt(r),!1);e8(x,A,Number(r))}function NC(x,A,e){if(x.vscale===0)return;let r=(e-x.vofs)/x.vscale;switch(x.type){case"f32":return A.setFloat32(x.byteofs,r,!1);case"f64":return A.setFloat64(x.byteofs,r,!1);case"floatm16":return A.setUint16(x.byteofs,XF(r),!1);default:break}if(Number.isNaN(r))return Os(x,A,"NAN");if(!Number.isFinite(r))return Os(x,A,"OF");let t=r;uC.has(x.type)&&t<0&&(t=0),e8(x,A,pC(t))}function e8(x,A,e){if(fn(x)){let r=vi(x.type,A,x.byteofs);e=GF(r,e,x.bitmask)}MC(x.type,A,x.byteofs,e)}function MC(x,A,e,r){switch(x){case"u8":return A.setUint8(e,r);case"s8":return A.setInt8(e,r);case"u16":return A.setUint16(e,r,!1);case"s16":return A.setInt16(e,r,!1);case"u32":return A.setUint32(e,r,!1);case"s32":return A.setInt32(e,r,!1);case"s64":return A.setBigInt64(e,BigInt(r),!1);case"ufm8":return A.setUint8(e,cC(r));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function IC(x,A,e){let r=String(e);if(OF(x)){let t=r.trim();if(t.length%2!==0||t.length>x.size*2)throw new Error(`?ddeCodec.invalid-hex."${dn(x)}"`);for(let s=0;s<x.size;s++){let n=s*2<t.length?parseInt(t.substr(s*2,2),16):0;A.setUint8(x.byteofs+s,n)}return}H0.cp1252Pack(A,x.byteofs,x.size,r)}function LC(x,A,e){let r=Sr(String(e));if(r===null)throw new Error(`?ddeCodec.unbounded-stamp."${dn(x)}"`);if(x.type==="datetime"){A.setFloat64(x.byteofs,_C(r),!1);return}let t=H0.msToStamp40(r);if(x.type==="stamp8"){A.setBigUint64(x.byteofs,BigInt(t),!1);return}A.setUint32(x.byteofs,Math.trunc(t/256),!1),x.size>=5&&A.setUint8(x.byteofs+4,t&255)}function RC(x,A,e){if(Dn(x.type))return IC(x,A,e);if(ti(x.type))return LC(x,A,e);let r=PC(x,e);switch(r.kind){case"skip":return;case"sentinel":return Os(x,A,r.state);case"value":return NC(x,A,r.physical)}}function Gs(x,A,e){let r=e?new Uint8Array(e):new Uint8Array(x.recordSize),t=new DataView(r.buffer,r.byteOffset,r.byteLength),s=new Map(x.fields.filter(n=>!oe(n)&&!Bt(n.type)).map(n=>[dn(n),n]));for(let[n,F]of Object.entries(A)){let f=s.get(n.toLowerCase());if(!f)throw new ri(n);RC(f,t,F)}return r}var Qo=99,OC=256,ge=class extends Error{constructor(x){super(`?ddeMapper.unknown-container."${x}"`),A0(this,"container",x),this.name="DdeUnknownContainerError"}},dt=class extends Error{constructor(x,A){let e=A?`${x}.${A}`:x;super(`?ddeMapper.write-forbidden."${e}"`),A0(this,"container",x),A0(this,"field",A),this.name="DdeWriteForbiddenError"}},fi=class extends Error{constructor(x){super(`?ddeMapper.unknown-field."${x}"`),A0(this,"field",x),this.name="DdeUnknownFieldError"}};function Ds(x){return(x.alias??x.name).toLowerCase()}var GC=class{constructor(x,A,e=pt){A0(this,"model",x),A0(this,"storage",A),A0(this,"timeSource",e)}async readContainer(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=Et(A);if(e===null)return null;let r=await this.storage.getRowForTag(e);if(!r||!r.data)return null;let t=Rs(await this.resolveScaleRefs(A),r.data);return delete t.stamp,{stamp:this.rowStamp(r),...t}}async writeContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new ge(x);let r=Et(e);if(r===null)throw new ge(x);if(e.edit===Qo)throw new dt(e.name);let{stamp:t,...s}=A;this.assertFieldsWritable(e,s);let n=await this.storage.getRowForTag(r),F=Gs(await this.resolveScaleRefs(e),s,n?.data??null),f=H0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs()),C=EA(f);return await this.storage.replaceUtoRow({tag:r,stamp:C,flags:n?.flags??0,site_related:n?.site_related??0,data:F}),{tag:r,stampHex:C,stamp40:f,data:F,devicePushable:IF(r)&&e.download!==0,upload:e.upload,download:e.download}}async seedContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new ge(x);let r=Et(e);if(r===null)throw new ge(x);let{stamp:t,...s}=A,n=Gs(await this.resolveScaleRefs(e),s,null),F=H0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs());await this.storage.replaceUtoRow({tag:r,stamp:EA(F),flags:0,site_related:0,data:n})}recordStampMs(x){if(typeof x!="string")return null;try{return Sr(x)}catch{return null}}async readTimeseries(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new ge(x);let r=this.model.splits.find(C=>C.target.toLowerCase()===e.name.toLowerCase());if(!r)throw new ge(x);let t=Math.abs(A.count),s=A.offset??0,n=this.buildSelectSet(e,A.select),F=await this.resolveScaleRefs(e);return(await this.collectMatched(F,r,s+t,{fromStamp:this.boundHex(A.fromMs),untilStamp:this.boundHex(A.untilMs),order:A.count<0?"desc":"asc",selectSet:n})).slice(s,s+t)}matchesSplit(x,A){return x.length===0?!1:A.matchAll?!0:x.length<A.keyBytes.length?!1:A.keyBytes.every((e,r)=>x[r]===e)}async collectMatched(x,A,e,r){let t=[];if(e<=0)return t;let s=Math.max(e,OC);for(let n=0;;n+=s){let F=await this.storage.getHistoricRows(26623,{fromStamp:r.fromStamp,untilStamp:r.untilStamp,order:r.order,limit:s,offset:n});for(let f of F)if(f.data&&this.matchesSplit(f.data,A)&&(t.push(this.recordFromRow(x,f,r.selectSet)),t.length>=e))return t;if(F.length<s)return t}}async readTimeseriesEdge(x,A,e){return(await this.readTimeseries(x,{count:A==="youngest"?-1:1,select:e}))[0]??null}recordFromRow(x,A,e){let r=Rs(x,A.data),t={stamp:this.rowStamp(A)};for(let[s,n]of Object.entries(r))s!=="stamp"&&(!e||e.has(s))&&(t[s]=n);return t}rowStamp(x){return _r(H0.stamp40ToMS(KA(x.stamp)))}boundHex(x){if(x!=null)return EA(H0.msToStamp40(x))}async resolveScaleRefs(x){if(!x.fields.some(r=>r.vscaleRef||r.vofsRef))return x;let A=new Map,e=[];for(let r of x.fields){if(!r.vscaleRef&&!r.vofsRef){e.push(r);continue}e.push({...r,vscale:r.vscaleRef?await this.resolveRef(r.vscaleRef,A,r.vscale):r.vscale,vofs:r.vofsRef?await this.resolveRef(r.vofsRef,A,r.vofs):r.vofs})}return{...x,fields:e}}async resolveRef(x,A,e){if(!/^config[0-9a-f]$/i.test(x.container))return e;let r=this.referencedField(x);if(!r)return e;let t=x.container.toLowerCase();A.has(t)||A.set(t,await this.referencedRecordData(x.container));let s=A.get(t);if(!s)return e;let n=gC(r,s);return n===null?e:n}referencedField(x){let A=x.field.toLowerCase();return this.model.byNameOrAlias(x.container)?.fields.find(r=>Ds(r)===A||r.name.toLowerCase()===A)??null}async referencedRecordData(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=Et(A);return e===null?null:(await this.storage.getRowForTag(e))?.data??null}assertFieldsWritable(x,A){let e=new Map(x.fields.filter(r=>!oe(r)&&!Bt(r.type)).map(r=>[Ds(r),r]));for(let r of Object.keys(A)){let t=e.get(r.toLowerCase());if(t&&t.edit===Qo)throw new dt(x.name,t.name)}}buildSelectSet(x,A){if(!A||A.length===0)return null;let e=new Set(x.fields.filter(t=>!oe(t)&&!Bt(t.type)).map(t=>Ds(t))),r=new Set;for(let t of A){let s=t.toLowerCase();if(s!=="stamp"){if(!e.has(s))throw new fi(t);r.add(s)}}return r}},UC=new Set(["$titles","$meta"]);function HC(x){let A=x;if(typeof x=="string")try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}function Us(x,A){let e=A.toLowerCase();if(UC.has(e))return null;let r=x[e];if(typeof r!="object"||r===null)return null;let t=new Map;for(let[s,n]of Object.entries(r)){if(typeof n!="object"||n===null)continue;let F=n.alias;typeof F=="string"&&F.length>0&&t.set(s.toLowerCase(),F)}return t}function r8(x,A){let e={};for(let[r,t]of Object.entries(x)){if(r==="stamp"){e[r]=t;continue}let s=A?.get(r.toLowerCase());e[s??r]=t}return e}function bt(x,A){if(!x)return null;let e=Us(x,A.name);return e||(A.alias?Us(x,A.alias):null)}var KC=require("events"),G0="[OfflineSyncManager]",zC=500,JC="site_info",VC=new Set(["local-data-interface.json"]);function Mx(x){if(x?.aborted)throw x.reason??new DOMException("The operation was aborted.","AbortError")}function WC(x){let A=on(x);return!!(x&2)||A!==0&&A!==65}function Zo(x){return x.filter(A=>(A.filename===kr||A.filename===Qs)&&A.outcome==="download").map(A=>A.filename)}var Ge="skip-equal",yr="skip-device-readonly",us="delete",je="error",ps="upload",bs="uploading-utos",xF="downloading-utos",Qt="fetching-device-state",ms="uploading-files",Zt="downloading-files",AF="executing-change-requests",eF="executed",XC="error",js="skip-old-stamp",YC=class extends KC.EventEmitter{constructor(x,A,e){super(),A0(this,"utoMaster",x),A0(this,"storage",A),A0(this,"logger",e)}emitProgress(x,A,e,r,t){let s={phase:x,item:A,completed:e,total:r,...t};this.emit("progress",s)}async uploadHistoricTag(x,A,e,r,t){try{let s=await this.storage.getRowForTag(x),n=0,F=async f=>{let C=f.filter(D=>D.stamp40>e).map(D=>({tag:x,stamp:EA(D.stamp40),flags:s?.flags??0,site_related:s?.site_related??0,data:D.data}));await this.storage.insertHistoricRows(C),n+=C.length};return await this.utoMaster.requestHistoricUtos(x,e,t,void 0,zC,F),this.logger?.info(`${G0} historic upload tag=0x${x.toString(16)} +${n} records`),{tag:x,sTag:A.sTag,historic:!0,outcome:"upload",dbStamp40:e,deviceStamp40:r,recordsAppended:n}}catch(s){return this.logger?.error(`${G0} historic upload error tag=0x${x.toString(16)}: ${s}`),{tag:x,sTag:A.sTag,historic:!0,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadSingleTag(x,A,e,r){try{let t=await this.utoMaster.requestUto(x,0);if(!t)return this.logger?.info(`${G0} single upload tag=0x${x.toString(16)} \u2014 device returned no data (skip)`),{tag:x,sTag:A.sTag,historic:!1,outcome:Ge,dbStamp40:e,deviceStamp40:r};let s=await this.storage.getRowForTag(x);return await this.storage.replaceUtoRow({tag:x,stamp:EA(t.stamp),flags:s?.flags??0,site_related:s?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null}),this.logger?.info(`${G0} single upload tag=0x${x.toString(16)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"upload",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${G0} single upload error tag=0x${x.toString(16)}: ${JSON.stringify(t)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(bs,null,0,t);let s=0;for(let n of x){Mx(r);let F=A.get(n),{tagInfo:f,dbStamp40:C,deviceStamp40:D}=F;if(this.emitProgress(bs,f?.sTag??`0x${n.toString(16)}`,s,t),!f||D===null)e.set(n,{tag:n,sTag:"?",historic:!1,outcome:"unknown-tag",dbStamp40:C,deviceStamp40:D});else if(!(!f.flags.up||D<=C)){let p=f.sTag,j=s,_=f.historic?await this.uploadHistoricTag(n,f,C,D,k=>{this.emitProgress(bs,p,j,t,{recordsReceived:k})}):await this.uploadSingleTag(n,f,C,D);e.set(n,_)}++s}}async pullFileFromDevice(x,A,e,r,t,s){let n=A.stamp;try{let F=await this.utoMaster.requestFile(x,C=>{this.emitProgress(ms,x,s,t,{bytesTransferred:C})}),f=Ys(F);if(f!==A.crc32)throw new Error(`crc32 mismatch: expected 0x${A.crc32.toString(16)}, got 0x${f.toString(16)}`);return await this.storage.upsertFile({filename:x,stamp:EA(n),crc:A.crc32,size:F.byteLength,flags:A._flags,flags_int:r,data:F}),{filename:x,outcome:ps,dbStamp40:e,deviceStamp40:n}}catch(F){return this.logger?.error(`${G0} file upload error ${x}: ${JSON.stringify(F)}`),{filename:x,outcome:je,dbStamp40:e,deviceStamp40:n}}}async autoSyncUploadFile(x,A,e,r,t,s,n,F){let f=A.stamp;if(f>r)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):s?this.pullFileFromDevice(x,A,r,t,n,F):void 0;if(f===r&&this.fileContentMatches(A,e))return{filename:x,outcome:Ge,dbStamp40:r,deviceStamp40:f}}async convergeFileStamp(x,A,e,r){let t=A.stamp;try{return await this.storage.upsertFile({filename:x,stamp:EA(t),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e.flags_int,data:e.data}),{filename:x,outcome:Ge,dbStamp40:r,deviceStamp40:t}}catch(s){return this.logger?.error(`${G0} file upload error ${x}: ${JSON.stringify(s)}`),{filename:x,outcome:je,dbStamp40:r,deviceStamp40:t}}}async mirrorUploadFile(x,A,e,r,t,s,n){let F=A.stamp;if(F!==r||!this.fileContentMatches(A,e))return t?this.pullFileFromDevice(x,A,r,e.flags_int,s,n):{filename:x,outcome:yr,dbStamp40:r,deviceStamp40:F}}async decideFileUpload(x,A,e,r){let t=await this.storage.getFile(x),s=!!(A._flags&1);if(!t)return s?this.pullFileFromDevice(x,A,0,16,e,r):void 0;let n=KA(t.stamp);return A._flags&8?this.autoSyncUploadFile(x,A,t,n,t.flags_int,s,e,r):this.decideNonSystemUpload(x,A,t,n,s,e,r)}pullIfReadable(x,A,e,r,t,s,n){return x?this.pullFileFromDevice(A,e,r,t,s,n):void 0}async decideNonSystemUpload(x,A,e,r,t,s,n){let F=e.flags_int;if(!(F&2))return F&4?this.pullIfReadable(t,x,A,r,F,s,n):this.decideUploadBySyncLogic(x,A,e,r,t,s,n)}async decideUploadBySyncLogic(x,A,e,r,t,s,n){let F=e.flags_int,f=on(F);if(f===65)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):this.pullIfReadable(t,x,A,r,F,s,n);if(f===1)return this.autoSyncUploadFile(x,A,e,r,F,t,s,n);if(f===97)return A.stamp>r?this.pullIfReadable(t,x,A,r,F,s,n):void 0;if(f!==33)return this.mirrorUploadFile(x,A,e,r,t,s,n)}async uploadFiles(x,A,e,r){let t=Object.entries(x),s=t.length;this.emitProgress(ms,null,0,s);let n=0;for(let[F,f]of t){if(Mx(r),!(F===Qs||F===kr&&!e)){let D=await this.decideFileUpload(F,f,s,n);D&&A.set(F,D)}this.emitProgress(ms,F,++n,s)}}fileContentMatches(x,A){return A!==null&&x.crc32===A.crc&&x.size===A.size}async downloadSingleTag(x,A,e,r){try{let t=await this.storage.getRowForTag(x);return t?.data&&await this.utoMaster.sendUTOCmdExt(3,x,t.data,e),{tag:x,sTag:A.sTag,historic:!1,outcome:"download",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${G0} download error tag=0x${x.toString(16)}: ${t}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async processDownloadTag(x,A,e,r,t){if(e===r&&!t.has(x)){let s=A.flags.up?Ge:"skip-db-readonly";t.set(x,{tag:x,sTag:A.sTag,historic:!1,outcome:s,dbStamp40:e,deviceStamp40:r});return}if(e>r){let s=A.flags.down?await this.downloadSingleTag(x,A,e,r):{tag:x,sTag:A.sTag,historic:!1,outcome:yr,dbStamp40:e,deviceStamp40:r};t.set(x,s)}}async downloadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(xF,null,0,t);let s=0;for(let n of x){Mx(r);let{tagInfo:F,dbStamp40:f,deviceStamp40:C}=A.get(n);F&&C!==null&&!F.historic&&await this.processDownloadTag(n,F,f,C,e),this.emitProgress(xF,F?.sTag??`0x${n.toString(16)}`,++s,t)}}async sendFileToDevice(x,A,e,r,t){let s=x.data.byteLength,n=F=>{if(F!==null){let f=Math.round(s*parseInt(F,10)/100);this.emitProgress(Zt,x.filename,t,r,{bytesTransferred:f,bytesTotal:s})}};this.utoMaster.on("installing",n);try{return await this.utoMaster.sendFile(0,x.data,H0.stamp40ToMS(A),x.filename),{filename:x.filename,outcome:"download",dbStamp40:A,deviceStamp40:e}}catch(F){return this.logger?.error(`${G0} file download error ${x.filename}: ${F}`),{filename:x.filename,outcome:"error",dbStamp40:A,deviceStamp40:e}}finally{this.utoMaster.removeListener("installing",n)}}async processDownloadFile(x,A,e,r,t=!1){if(!x.data)return;let s=A?.stamp??0,n=KA(x.stamp);if(A!==void 0&&this.fileContentMatches(A,x))return n===s?void 0:{filename:x.filename,outcome:Ge,dbStamp40:n,deviceStamp40:s};if(!(!t&&n<s))return!t&&A!==void 0&&!(A._flags&2)?{filename:x.filename,outcome:yr,dbStamp40:n,deviceStamp40:s}:this.sendFileToDevice(x,n,s,e,r)}async isAppInDevPhase(){let x=await this.storage.getMetadataValue(JC);if(!x)return!1;try{return JSON.parse(x).app?.phase==="dev"}catch(A){return this.logger?.error(`${G0} corrupt site_info metadata: ${A}`),!1}}async downloadFiles(x,A,e,r){let t=await this.storage.getFiles(),s=t.filter(p=>p.flags&8),n=t.filter(p=>!(p.flags&8)),F=[...s,...n].filter(p=>p.filename),f=Object.entries(x).filter(([,p])=>p._flags&4).map(([p])=>p),C=F.length;this.emitProgress(Zt,null,0,C);let D=0;for(let p of F){if(Mx(r),e&&p.filename===kr){this.emitProgress(Zt,p.filename,++D,C);continue}let j=p.filename===kr&&!e,_=await this.decideFileDownload(p,x[p.filename],A.get(p.filename),f,j,C,D);_&&A.set(p.filename,_),this.emitProgress(Zt,p.filename,++D,C)}}async decideFileDownload(x,A,e,r,t,s,n){return A!==void 0?this.decideDownloadExisting(x,A,e,t,s,n):this.decideDownloadMissing(x,r,s,n)}async decideDownloadExisting(x,A,e,r,t,s){if(A._flags&4)return;if(x.flags&8)return e?void 0:this.processDownloadFile(x,A,t,s,r);let n=x.flags_int;if(n&8)return this.handleDeviceDelete(x,A,e);if(!e&&!(n&4))return this.pushToDevice(x,A,t,s)}async pushToDevice(x,A,e,r){let t=A.stamp,s=KA(x.stamp),n=this.wantDownloadPush(x,A,s,t);if(n==="match")return{filename:x.filename,outcome:Ge,dbStamp40:s,deviceStamp40:t};if(n!=="none"&&!(s===0||!x.data||x.data.byteLength===0))return A._flags&2?this.sendFileToDevice(x,s,t,e,r):{filename:x.filename,outcome:yr,dbStamp40:s,deviceStamp40:t}}wantDownloadPush(x,A,e,r){let t=x.flags_int;if(t&2)return"push";let s=this.fileContentMatches(A,x),n=on(t);return n===33||n===1&&e>=r?s?"match":"push":n===97&&e>r?"push":"none"}async handleDeviceDelete(x,A,e){let r=A.stamp,t=KA(x.stamp);if(!(e&&(e.outcome===ps||e.outcome===je))){if(!(A._flags&2))return{filename:x.filename,outcome:yr,dbStamp40:t,deviceStamp40:r};try{return await this.utoMaster.deleteFile(x.filename),await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:us,dbStamp40:t,deviceStamp40:r}}catch(s){return this.logger?.error(`${G0} file delete error ${x.filename}: ${JSON.stringify(s)}`),{filename:x.filename,outcome:je,dbStamp40:t,deviceStamp40:r}}}}async decideDownloadMissing(x,A,e,r){let t=x.flags_int,s=KA(x.stamp);if(t&8)try{return await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:us,dbStamp40:s,deviceStamp40:null}}catch(n){return this.logger?.error(`${G0} file delete error ${x.filename}: ${JSON.stringify(n)}`),{filename:x.filename,outcome:je,dbStamp40:s,deviceStamp40:null}}if(!(x.flags&12)&&WC(t)&&x.flags&2&&this.hasMatchingNode(x.filename,A)&&x.data)return this.sendFileToDevice(x,s,0,e,r)}hasMatchingNode(x,A){return A.some(e=>e.slice(0,-1)===x.slice(0,e.length-1))}async reconcileFileState(x){try{await this.reconcileFileStateUnguarded(x)}catch(A){if(x?.aborted)throw A;this.logger?.error(`${G0} file-state reconciliation failed: ${JSON.stringify(A)}`)}}async reconcileFileStateUnguarded(x){let A=await this.utoMaster.requestFileList(),e=new Set(Object.keys(A)),r=await this.storage.getFiles(),t=new Map(r.map(s=>[s.filename,s]));for(let[s,n]of Object.entries(A))Mx(x),await this.reconcileDeviceFile(s,n,t.get(s)??null);for(let s of r)Mx(x),e.has(s.filename)||await this.dropRowMissingFromDevice(s)}async reconcileDeviceFile(x,A,e){let r=!!((A._flags|(e?.flags??0))&8);if(e?.data&&!this.fileContentMatches(A,e)){this.logger?.info(`${G0} reconcile keep ${x}: row holds undeployed content`);return}if(!e?.data&&!r)return;let t={filename:x,stamp:EA(A.stamp),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e?.flags_int??16,data:this.keepBlob(x,r)?e?.data??null:null};e&&this.fileRowMatches(e,t)||await this.storage.upsertFile(t)}keepBlob(x,A){return!A||VC.has(x)}fileRowMatches(x,A){return x.stamp===A.stamp&&x.crc===A.crc&&x.size===A.size&&x.flags===A.flags&&x.flags_int===A.flags_int&&(x.data??null)===A.data}async dropRowMissingFromDevice(x){try{await this.storage.deleteFile(x.filename)}catch(A){this.logger?.error(`${G0} reconcile delete error ${x.filename}: ${JSON.stringify(A)}`)}}async validateDevice(x){Mx(x),this.emitProgress("validating",null,0,1);let A=await this.utoMaster.requestDeviceInfo();if(!A)throw new Error(`${G0} requestDeviceInfo returned null`);let e=await this.storage.getMetadataValue("device_id");if(e===null)throw new Error(`${G0} DB metadata missing device_id`);if(e.toUpperCase()!==A.serialNumber.toUpperCase())throw new Error(`${G0} DB device_id "${e}" does not match connected device "${A.serialNumber}"`);return this.emitProgress("validating",null,1,1),A}buildTagMap(x){let A=new Map;for(let e=0;e<x.utos.length;e++){let r=x.utos[e];A.set(r.wTag,{index:e,flags:{up:r.flags.up,down:r.flags.down,setValue:!!r.flags.setValue},historic:r.flags.historic,sTag:r.sTag})}return A}async resolveDbTags(x){let A=await this.storage.getUtoDataTags(),e=new Set(A);for(let[r,t]of x)t.historic&&!e.has(r)&&A.push(r);return A}async buildTagStampCache(x,A,e){let r=new Map;for(let t of x){let s=A.get(t),n=await this.storage.getLatestStampForTag(t),F=n?KA(n):0,f=s&&s.index<e.stamps.length?e.stamps[s.index]:null;r.set(t,{dbStamp40:F,deviceStamp40:f,tagInfo:s})}return r}async executeChangeRequests(x,A,e,r,t,s){let n=await this.storage.getUtoChangeRequests(),F=this.groupChangeRequests(n),f=F.size;if(this.emitProgress(AF,null,0,f),f===0)return;let C=new Set,D=0;for(let[p,j]of F){Mx(s);let _=x.get(p),k=_?.sTag??`0x${p.toString(16)}`;this.emitProgress(AF,k,D,f),await this.executeChangeRequestTag(p,k,_,j,A,r,t,C),++D}C.size>0&&await this.repullExecutedTags(C,x,e,s)}groupChangeRequests(x){let A=new Map;for(let e of x){let r=A.get(e.tag)??[];r.push({stamp40:KA(e.stamp),user:e.user,json:e.json}),A.set(e.tag,r)}return A}async executeChangeRequestTag(x,A,e,r,t,s,n,F){if(!e){this.pushChangeResults(n,x,A,r,"unknown-tag");return}if(!e.flags.setValue){this.pushChangeResults(n,x,A,r,"skip-unsupported");return}let f=e.index<t.stamps.length?t.stamps[e.index]:0,C=r.filter(p=>p.stamp40<=f),D=r.filter(p=>p.stamp40>f);this.pushChangeResults(n,x,A,C,js),D.length>0&&await this.coalesceAndSend(x,A,e,D,s,n,F)}async coalesceAndSend(x,A,e,r,t,s,n){let F=await this.storage.getRowForTag(x);if(t.get(x)?.outcome===je||!F||!F.data){this.pushChangeResults(s,x,A,r,"error");return}let f=this.resolveSetObject(F.data,r,A);if(f===null){this.pushChangeResults(s,x,A,r,"error");return}if(Object.keys(f).length===0){this.pushChangeResults(s,x,A,r,"skip-no-change");return}let C=r[r.length-1].stamp40,D=await this.utoMaster.sendSetValue(x,JSON.stringify(f),C);D.outcome==="ok"||D.outcome==="stamp"?(n.add(x),this.pushChangeResults(s,x,A,r,eF,D.resultCode)):D.outcome==="denied"?(this.logger?.warn(`${G0} change-request denied ${A} (result=${D.resultCode}) \u2014 server will retry`),this.pushChangeResults(s,x,A,r,"denied",D.resultCode)):(this.logger?.error(`${G0} change-request error ${A} (result=${D.resultCode})`),this.pushChangeResults(s,x,A,r,"error",D.resultCode))}resolveSetObject(x,A,e){try{let r=JSON.parse(H0.cp1252Unpack(x,0,x.byteLength));return this.buildSetObject(r,A,e)}catch(r){return this.logger?.error(`${G0} change-request unparseable uto_data ${e}: ${r}`),null}}buildSetObject(x,A,e){let r={};for(let t of A){let s=JSON.parse(t.json);if(!this.isPlainRecord(s))throw new Error(`change-request JSON is not an object on ${e}`);for(let[n,F]of Object.entries(s)){let f=this.resolveChangeField(x[n],F,n,e);f.apply&&(r[n]=f.value,x[n]=f.value)}}return r}resolveChangeField(x,A,e,r){if(this.isBitwiseOp(A)){let{op:t,val:s}=A;return this.resolveBitwiseOp(x,t,s,e,r)}return x===A?{apply:!1}:{apply:!0,value:A}}resolveBitwiseOp(x,A,e,r,t){return A!=="|"&&A!=="&"?(this.logger?.warn(`${G0} change-request unknown op "${A}" on ${t}.${r} \u2014 skipped`),{apply:!1}):typeof e!="number"?(this.logger?.warn(`${G0} change-request op "${A}" with non-number val on ${t}.${r} \u2014 skipped`),{apply:!1}):x===void 0?A==="|"?{apply:!0,value:e}:{apply:!1}:typeof x!="number"?(this.logger?.warn(`${G0} change-request op "${A}" on non-number ${t}.${r} \u2014 skipped`),{apply:!1}):{apply:!0,value:A==="|"?x|e:x&e}}isBitwiseOp(x){return this.isPlainRecord(x)&&"op"in x}isPlainRecord(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}pushChangeResults(x,A,e,r,t,s){for(let n of r)x.push({tag:A,sTag:e,stamp40:n.stamp40,user:n.user,outcome:t,resultCode:s})}async repullExecutedTags(x,A,e,r){let t=null;try{t=await this.utoMaster.requestStamps()}catch(s){this.logger?.warn(`${G0} change-request STAMPS re-fetch failed \u2014 using per-tag stamps: ${s}`)}for(let s of x)Mx(r),await this.repullExecutedTag(s,A,t,e)}async repullExecutedTag(x,A,e,r){try{let t=await this.utoMaster.requestUto(x,0);if(!t){this.logger?.info(`${G0} change-request re-pull tag=0x${x.toString(16)} \u2014 device returned no data (E_EOD), DB row unchanged`);return}let s=await this.storage.getRowForTag(x),n=t.stamp;await this.storage.replaceUtoRow({tag:x,stamp:EA(n),flags:s?.flags??0,site_related:s?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null});let F=r.get(x);if(F){let f=A.get(x),C=e&&f&&f.index<e.stamps.length?e.stamps[f.index]:n;F.dbStamp40=n,F.deviceStamp40=C}this.logger?.info(`${G0} change-request re-pull tag=0x${x.toString(16)} \u2192 stamp ${n}`)}catch(t){this.logger?.error(`${G0} change-request re-pull error tag=0x${x.toString(16)}: ${t}`)}}aggregateResult(x,A,e){let r=[...x.values()],t=[...A.values()],s=Zo(t);return{tags:r,files:t,changeRequests:e,requiresReconnectSync:s.length>0,rebootFilesDeployed:s,totalTagsUploaded:r.filter(n=>n.outcome==="upload"&&!n.historic).length,totalTagsDownloaded:r.filter(n=>n.outcome==="download").length,totalTagsSkipped:r.filter(n=>n.outcome===Ge||n.outcome==="skip-db-readonly"||n.outcome===yr).length,totalHistoricRecordsAppended:r.reduce((n,F)=>n+(F.recordsAppended??0),0),totalFilesUploaded:t.filter(n=>n.outcome===ps).length,totalFilesDownloaded:t.filter(n=>n.outcome==="download").length,totalFilesDeleted:t.filter(n=>n.outcome===us).length,totalChangeRequestsExecuted:e.filter(n=>n.outcome===eF).length,totalErrors:r.filter(n=>n.outcome===je).length+t.filter(n=>n.outcome===je).length+e.filter(n=>n.outcome===XC).length}}async sync(x){let{signal:A}=x??{},e=await this.validateDevice(A);Mx(A),this.emitProgress(Qt,null,0,3);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${G0} requestStamps returned null`);this.emitProgress(Qt,"stamps",1,3);let s=await this.utoMaster.requestFileList();this.emitProgress(Qt,"file-list",2,3);let n=await this.resolveDbTags(r);this.emitProgress(Qt,"db-tags",3,3);let F=await this.buildTagStampCache(n,r,t),f=new Map,C=new Map,D=[],p=await this.isAppInDevPhase();return Mx(A),await this.uploadUtoTags(n,F,f,A),Mx(A),await this.uploadFiles(s,C,p,A),Mx(A),await this.executeChangeRequests(r,t,F,f,D,A),Mx(A),await this.downloadUtoTags(n,F,f,A),Mx(A),await this.downloadFiles(s,C,p,A),Mx(A),Zo([...C.values()]).length===0&&await this.reconcileFileState(A),this.emitProgress("complete",null,0,0),this.aggregateResult(f,C,D)}async executeAdHocChangeRequest(x,A){let e=await this.utoMaster.requestDeviceInfo();if(!e)throw new Error(`${G0} requestDeviceInfo returned null`);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${G0} requestStamps returned null`);let s=r.get(x),n=s?.sTag??`0x${x.toString(16)}`,F=A.map(j=>({stamp40:j.stamp40,user:"",json:j.json})).sort((j,_)=>j.stamp40-_.stamp40),f=new Map,C=[],D=new Set;return await this.executeChangeRequestTag(x,n,s,F,t,f,C,D),D.size>0&&await this.repullExecutedTags(D,r,new Map,void 0),C.find(j=>j.outcome!==js)?.outcome??js}},QC=require("events"),ZC=require("events"),xd=require("events"),Ad=5e3,Ei=class t8 extends xd.EventEmitter{constructor(A=zA){super(),A0(this,"logger",A),A0(this,"ws",null),A0(this,"bridgeTransport",null),A0(this,"bridgeSignal"),A0(this,"bridgeResolve",null),A0(this,"bridgeReject",null),A0(this,"serverMessageCount",0),A0(this,"settled",!1),A0(this,"abortHandler",null),A0(this,"connectTimeout"),A0(this,"writeQueue",[]),A0(this,"isProcessingQueue",!1),A0(this,"queueAborted",!1),A0(this,"queueDrainPromise",Promise.resolve()),A0(this,"transportUnsubscribe",null)}static buildSyncUrl(A,e){return`wss://${A}/uto/1/sync/${e}`}resetBridgeState(){this.serverMessageCount=0,this.settled=!1,this.abortHandler=null,this.connectTimeout=void 0,this.writeQueue=[],this.isProcessingQueue=!1,this.queueAborted=!1,this.queueDrainPromise=Promise.resolve(),this.bridgeResolve=null,this.bridgeReject=null,this.bridgeTransport=null,this.bridgeSignal=void 0,this.transportUnsubscribe=null}async processWriteQueue(){if(!this.isProcessingQueue){for(this.isProcessingQueue=!0;this.writeQueue.length>0&&!this.queueAborted;){let A=this.writeQueue.shift();try{await $F(this.bridgeTransport,A)}catch(e){let r=e instanceof Error?e.message:String(e);this.logger.error(`Error writing to transport: ${r}`)}}this.isProcessingQueue=!1}}cleanup(){this.transportUnsubscribe&&(this.transportUnsubscribe(),this.transportUnsubscribe=null),this.abortHandler&&this.bridgeSignal&&(this.bridgeSignal.removeEventListener("abort",this.abortHandler),this.abortHandler=null),this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.ws=null}settle(A,e){this.settled||(this.settled=!0,this.cleanup(),A==="resolve"?this.bridgeResolve?.({serverMessageCount:this.serverMessageCount}):this.bridgeReject?.(e))}attachWebSocketHandlers(A,e){let r=t=>{A.readyState===WebSocket.OPEN&&!this.bridgeSignal?.aborted&&!this.settled&&A.send(t)};this.abortHandler=()=>{this.logger.info("WebSocket bridge aborted"),this.queueAborted=!0,this.writeQueue.length=0,(A.readyState===WebSocket.OPEN||A.readyState===WebSocket.CONNECTING)&&A.close(),this.settle("reject",new Error("Operation aborted"))},this.bridgeSignal&&this.bridgeSignal.addEventListener("abort",this.abortHandler),A.onopen=()=>{this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.logger.info(`WebSocket connected to ${e}`),this.transportUnsubscribe=this.bridgeTransport.onData(r),this.emit("wsConnected")},A.onmessage=t=>{this.serverMessageCount++,this.emit("serverMessage",this.serverMessageCount),!(this.bridgeSignal?.aborted||this.settled)&&(this.writeQueue.push(t.data),this.isProcessingQueue||(this.queueDrainPromise=this.processWriteQueue()))},A.onclose=t=>{this.logger.info(`WebSocket closed (server=${e}, code=${t.code}, messages=${this.serverMessageCount})`),this.emit("wsClosed",t.code,t.reason),this.queueDrainPromise.then(()=>this.settle("resolve")).catch(()=>this.settle("resolve"))},A.onerror=t=>{this.logger.error(`WebSocket error (server=${e})`),this.emit("wsError",t),this.queueAborted=!0,this.writeQueue.length=0,this.settle("reject",new Error("WebSocket error"))}}async bridge(A,e,r,t){return new Promise((s,n)=>{if(t?.aborted){n(new Error("Operation aborted"));return}this.resetBridgeState(),this.bridgeTransport=A,this.bridgeSignal=t,this.bridgeResolve=s,this.bridgeReject=n;let F=t8.buildSyncUrl(e,r);this.logger.info(`Opening WebSocket: ${F}`);let f=new WebSocket(F);f.binaryType="arraybuffer",this.ws=f,this.connectTimeout=setTimeout(()=>{f.readyState===WebSocket.CONNECTING&&(this.logger.error("WebSocket connection timeout"),f.close(),this.settle("reject",new Error("WebSocket connection timeout")))},Ad),this.attachWebSocketHandlers(f,e)})}close(){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.close()}},n8="https://lic.mydatanet.at/api/2/";async function s8(x,A=n8){let e=`${A}devices/${x}/assignment`,r=await fetch(e);if(!r.ok)throw new Error(`Failed to get device assignment: ${r.status} ${r.statusText}`);return r.json()}var i8=class extends ZC.EventEmitter{constructor(x=zA){super(),A0(this,"logger",x)}async execute(x,A,e,r){let t=e;t||(this.logger.info("[LegacySync] No serverUrl provided, resolving via device assignment..."),this.emit("syncPhase",{phase:"resolving-server"}),t=(await s8(A)).server_url,this.logger.info("[LegacySync] Resolved server URL: "+t)),this.logger.info("[LegacySync] Starting legacy sync (server="+t+")");let s=new Ei(this.logger);s.on("wsConnected",()=>this.emit("wsConnected")),s.on("wsClosed",(F,f)=>this.emit("wsClosed",F,f)),s.on("wsError",F=>this.emit("wsError",F)),s.on("serverMessage",F=>this.emit("serverMessage",F));let n=await s.bridge(x,t,A,r);return this.logger.info("[LegacySync] Legacy sync completed (serverMessages="+n.serverMessageCount+")"),{serverMessageCount:n.serverMessageCount}}},ed=require("events"),a8="Operation aborted";function rd(x){return x instanceof Error?x.message:String(x)}function hs(x){if(x?.aborted)throw new Error(a8)}var o8=class extends ed.EventEmitter{constructor(x,A=zA){super(),A0(this,"atHandler",x),A0(this,"logger",A)}async execute(x,A,e,r){this.logger.info("Starting debug-enabled sync");let t=[{name:"mnt",queryServer:n=>this.atHandler.queryMntServerConfig(n),initiateSync:n=>this.atHandler.initiateMntSync(n)},{name:"mdn",queryServer:n=>this.atHandler.queryMdnServerConfig(n),initiateSync:n=>this.atHandler.initiateMdnSync(n)}],s={};for(let n of t)try{s[n.name]=await this.runSyncPhase(n,x,A,r)}catch(F){if(r?.aborted)throw new Error(a8);let f=`${n.name.toUpperCase()} sync phase failed: ${rd(F)}`;throw this.logger.error(f),new Error(f)}return this.logger.info(`Debug sync completed (mntMessages=${s.mnt}, mdnMessages=${s.mdn})`),{mntServerMessageCount:s.mnt,mdnServerMessageCount:s.mdn}}async runSyncPhase(x,A,e,r){hs(r);let t=x.name.toUpperCase();this.emit("syncPhase",{phase:x.name}),this.logger.info(`Phase: Querying ${t} server configuration`);let s=await x.queryServer(r);this.logger.info(`${t} server domain: ${s}`),hs(r),await x.initiateSync(r),hs(r);let n=await this.syncWithServer(A,s,e,r);return this.logger.info(`${t} phase completed (serverMessages=${n.serverMessageCount})`),n.serverMessageCount}async syncWithServer(x,A,e,r){let t=new Ei(this.logger),s=!1;t.on("wsConnected",()=>this.emit("wsConnected"));let n=this.atHandler.createConCloseMonitor(()=>{s=!0,this.logger.info("Device initiated close (+CONCLOSE), closing WebSocket"),t.close()});try{let F=await t.bridge(x,A,e,r);return s?this.logger.info("Connection closed by device (+CONCLOSE)"):(this.logger.info("Connection closed by server, sending +CONCLOSE to device"),await this.atHandler.sendConnectionClose(r)),F}finally{n()}}},td=class extends QC.EventEmitter{constructor(x,A,e=zA){super(),A0(this,"syncTransport",x),A0(this,"logger",e),A0(this,"atHandler"),this.atHandler=A??null}async sync(x){let A=this.atHandler?"debug":"legacy";this.emit("syncStart",{mode:A});try{if(this.atHandler)try{return this.emit("syncPhase",{phase:"debug-sync"}),await this.syncWithDebug(x)}catch(e){return this.logger.warn("[SyncManager] Debug sync failed, falling back to legacy sync: "+(e instanceof Error?e.message:String(e))),this.emit("syncPhase",{phase:"debug-fallback-legacy"}),await this.syncLegacy(x)}return this.emit("syncPhase",{phase:"legacy"}),await this.syncLegacy(x)}catch(e){throw this.emit("syncError",e),e}}async syncLegacy(x){let A=new i8(this.logger);A.on("syncPhase",t=>this.emit("syncPhase",t));let r={mode:"legacy",serverMessageCount:(await A.execute(this.syncTransport,x.serialNumber,x.serverUrl,x.signal)).serverMessageCount};return this.emit("syncComplete",r),r}async syncWithDebug(x){let A=new o8(this.atHandler,this.logger);A.on("syncPhase",t=>this.emit("syncPhase",t));let e=await A.execute(this.syncTransport,x.serialNumber,x.serverUrl??"",x.signal),r={mode:"debug",serverMessageCount:e.mntServerMessageCount+e.mdnServerMessageCount,mntServerMessageCount:e.mntServerMessageCount,mdnServerMessageCount:e.mdnServerMessageCount};return this.emit("syncComplete",r),r}dispose(){}},nd=require("events"),yx={MNT_CFG:"at+mntcfg?",MDN_CFG:"at+mdncfg?",MNT_SYNC:"at+mntsync",MDN_SYNC:"at+mdnsync",CON_CLOSE:"at+conclose",APP_GET_METADATA:"AT+APP=GETMETADATA",APP_GET_DATAVALUE:"AT+APP=GETDATAVALUE",APP_TRIG_MEASURE:"AT+APP=TRIGMEASURE",APP_TRIG_MEASURE_TEST:"AT+APP=TRIGMEASURE=?",ATI:"ati",RM2M_STATE:"at+rm2mstate?",TX:"at+tx",TX_MAINTENANCE:"at+tx=4",TX_GSM_POSITION:"at+tx=1",TX_MODE_TRIGGERED:"at+txmode=0",TX_MODE_WAKEUP:"at+txmode=1",TX_MODE_ONLINE:"at+txmode=2",COMPANION_CERT:"AT+COMPCERT",COMPANION_CERT_TEST:"AT+COMPCERT=?"},U0={OK:"OK",ERROR:"ERROR",SYNC_START:"+SYNC START",MEASURED:"+MEASURED",CON_CLOSE:"+CONCLOSE",MNT_CFG_PREFIX:"+MNTCFG",MDN_CFG_PREFIX:"+MDNCFG",RM2M_STATE:"+RM2MSTATE",ERROR_PIN_REQUIRED:"ERROR PIN REQUIRED",ERROR_NO_DATA:"ERROR NO DATA",COMPCERT_ERROR:/\+COMPCERT ERROR:\s*(\d+)/},Hx=1e4,F8=9e4,v8=/(?:ERROR PIN REQUIRED|ERROR NO DATA|ERROR|OK)\r\n/;function f8(){return{buffer:"",closedByDevice:!1,reset(){this.buffer="",this.closedByDevice=!1}}}var Ue="Operation aborted",Rx=class extends Error{constructor(x="AT command handler was disposed"){super(x),this.name="AtHandlerDisposedError"}},li=class extends Error{constructor(x="Device returned ERROR response"){super(x),this.name="AtDeviceError"}},sd=class extends nd.EventEmitter{constructor(x,A=zA){super(),A0(this,"transport",x),A0(this,"logger",A),A0(this,"mutex",new xi("AtCommandHandler")),A0(this,"bufferState",f8()),A0(this,"responseCallback",null),A0(this,"decoder",new TextDecoder),A0(this,"dataHandler"),A0(this,"disposeTransportListener"),A0(this,"isDisposed",!1),A0(this,"activeAbort",null),A0(this,"session"),this.dataHandler=e=>this.handleIncomingData(e),this.disposeTransportListener=this.transport.onData(this.dataHandler),this.session={sendAndWait:(e,r,t=Hx,s)=>this.executeSendAndWait(e,r,t,s),sendRaw:(e,r=Hx)=>this.executeSendRaw(e,r),queryMntServerConfig:e=>this.executeQueryConfig(yx.MNT_CFG,U0.MNT_CFG_PREFIX,e),queryMdnServerConfig:e=>this.executeQueryConfig(yx.MDN_CFG,U0.MDN_CFG_PREFIX,e),initiateMntSync:e=>this.executeInitiateMntSync(e),initiateMdnSync:e=>this.executeInitiateMdnSync(e),sendCompanionCert:(e,r)=>this.executeSendCompanionCert(e,r),queryCompanionCertSupport:e=>this.executeQueryCompanionCertSupport(e),sendConnectionClose:e=>this.executeSendConnectionClose(e)}}get isBusy(){return this.mutex.islocked}get disposed(){return this.isDisposed}async withAtLock(x){await this.mutex.requestLock();try{if(this.isDisposed)throw new Rx;return await x(this.session)}finally{this.mutex.unlock()}}handleIncomingData(x){let A=this.decoder.decode(x);this.bufferState.buffer+=A,this.emit("data",A),this.responseCallback&&this.responseCallback(this.bufferState.buffer),!this.responseCallback&&this.bufferState.buffer.length>1e3&&(this.bufferState.buffer=this.bufferState.buffer.slice(-500))}encodeCommand(x){let A=new Uint8Array(x.length+2);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A[x.length]=10,A[x.length+1]=13,A.buffer}makeCleanup(x,A,e){return()=>{this.responseCallback=null,this.activeAbort=null,clearTimeout(x),A&&e&&A.removeEventListener("abort",e)}}makeResponseChecker(x,A,e,r){let t=x instanceof RegExp;return s=>{if(x!==U0.ERROR&&s.includes(U0.ERROR)){A(),r(new li);return}let n=!1,F=s;if(t){let f=s.match(x);f&&(n=!0,F=f[0])}else n=s.includes(x);if(n){A(),e(F);return}s.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))}}executeSendAndWait(x,A,e,r){return new Promise((t,s)=>{if(this.isDisposed){s(new Rx);return}if(r?.aborted){s(new Error(Ue));return}x&&(this.bufferState.buffer="");let F=A instanceof RegExp?A.source:A,f={cleanup:()=>{}},C=setTimeout(()=>{f.cleanup(),s(new Error(`Timeout waiting for response: ${F}`))},e),D=()=>{f.cleanup(),s(new Error(Ue))};f.cleanup=this.makeCleanup(C,r,D),r&&r.addEventListener("abort",D);let p=this.makeResponseChecker(A,f.cleanup,t,s);this.responseCallback=p,this.activeAbort=()=>{f.cleanup(),s(new Rx)},!x&&this.bufferState.buffer&&p(this.bufferState.buffer),x&&(this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(j=>{f.cleanup(),s(j)}))})}executeSendRaw(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Rx);return}this.bufferState.buffer="";let t=setTimeout(()=>{s(),r(new Error(`Timeout waiting for raw AT response to: ${x}`))},A),s=this.makeCleanup(t);this.activeAbort=()=>{s(),r(new Rx)},this.responseCallback=n=>{v8.test(n)&&(s(),this.logger.info("RX: "+n.trim()),e(n))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(n=>{s(),r(n)})})}executeQueryConfig(x,A,e){return new Promise((r,t)=>{if(this.isDisposed){t(new Rx);return}if(e?.aborted){t(new Error(Ue));return}this.bufferState.buffer="";let s={cleanup:()=>{}},n=setTimeout(()=>{s.cleanup(),this.logger.error(`Timeout waiting for ${A} server config`),t(new Error(`Timeout waiting for ${A} response \u2014 server configuration not available`))},Hx),F=()=>{s.cleanup(),t(new Error(Ue))};s.cleanup=this.makeCleanup(n,e,F),e&&e.addEventListener("abort",F);let f=new RegExp(`\\${A}:\\s*<?([^,>\\s]+)>?`);this.activeAbort=()=>{s.cleanup(),t(new Rx)},this.responseCallback=C=>{let D=C.match(f);if(D){s.cleanup();let p=D[1].trim();this.logger.info(`Server config ${A}: ${p}`),r(p);return}C.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(C=>{s.cleanup(),this.logger.error(`Failed to send ${A} command: `+(C instanceof Error?C.message:String(C))),t(C)})})}async sendAndWait(x,A,e=Hx,r){return this.withAtLock(t=>t.sendAndWait(x,A,e,r))}async sendRaw(x,A=Hx){return this.withAtLock(e=>e.sendRaw(x,A))}async queryMntServerConfig(x){return this.withAtLock(A=>A.queryMntServerConfig(x))}async queryMdnServerConfig(x){return this.withAtLock(A=>A.queryMdnServerConfig(x))}async initiateMntSync(x){return this.withAtLock(A=>A.initiateMntSync(x))}async initiateMdnSync(x){return this.withAtLock(A=>A.initiateMdnSync(x))}async sendCompanionCert(x,A){return this.withAtLock(e=>e.sendCompanionCert(x,A))}async executeInitiateMntSync(x){this.logger.info("Initiating MNT sync"),await this.executeSendAndWait(yx.MNT_SYNC,U0.OK,Hx,x)}async executeInitiateMdnSync(x){this.logger.info("Initiating MDN sync");try{await this.executeSendAndWait(yx.MDN_SYNC,U0.OK,Hx,x),await this.executeSendAndWait(null,U0.SYNC_START,Hx,x)}catch(A){this.logger.error("Failed to initiate MDN sync: "+(A instanceof Error?A.message:String(A)))}}async executeSendCompanionCert(x,A){if(this.isDisposed)throw new Rx;if(A?.aborted)throw new Error(Ue);let e=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-x.length%4)%4),r=e.length,t=await this.executeSendAndWait(`${yx.COMPANION_CERT}=${r}`,U0.OK,Hx,A),s=parseInt(t.match(/(\d+)/)[1],10),n=0;for(;n<r;){let F=Math.min(s,r-n),f=e.slice(n,n+F);await this.executeSendAndWait(`${yx.COMPANION_CERT}=${F},${n},${f}`,U0.OK,Hx,A),n+=F}return this.executeCompanionCertFinalize(r,A)}executeCompanionCertFinalize(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Rx);return}if(A?.aborted){r(new Error(Ue));return}this.bufferState.buffer="";let t={cleanup:()=>{}},s=setTimeout(()=>{t.cleanup(),r(new Error("Timeout waiting for AT+COMPCERT finalize response"))},Hx),n=()=>{t.cleanup(),r(new Error(Ue))};t.cleanup=this.makeCleanup(s,A,n),A&&A.addEventListener("abort",n),this.activeAbort=()=>{t.cleanup(),r(new Rx)},this.responseCallback=f=>{let C=f.match(U0.COMPCERT_ERROR);if(C){t.cleanup(),e({success:!1,errorCode:parseInt(C[1],10)});return}if(f.includes(U0.OK)){t.cleanup(),e({success:!0});return}f.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))};let F=`${yx.COMPANION_CERT}=0,${x}`;this.logger.info("TX: "+F),this.transport.write(this.encodeCommand(F)).catch(f=>{t.cleanup(),r(f)})})}async queryCompanionCertSupport(x){return this.withAtLock(A=>A.queryCompanionCertSupport(x))}async executeQueryCompanionCertSupport(x){try{return await this.executeSendAndWait(yx.COMPANION_CERT_TEST,U0.OK,Hx,x),!0}catch(A){if(A instanceof Rx)throw A;return!1}}async sendConnectionClose(x){return this.withAtLock(A=>A.sendConnectionClose(x))}async executeSendConnectionClose(x){try{await this.executeSendAndWait(yx.CON_CLOSE,U0.CON_CLOSE,Hx,x)}catch(A){this.logger.error("Failed to receive +CONCLOSE response: "+(A instanceof Error?A.message:String(A)))}}createConCloseMonitor(x){let A="",e=r=>{A+=r,A.includes(U0.CON_CLOSE)&&(A="",this.bufferState.closedByDevice=!0,x()),A.length>1e3&&(A=A.slice(-500))};return this.on("data",e),()=>{this.off("data",e)}}dispose(){this.isDisposed||(this.isDisposed=!0,this.activeAbort?.(),this.disposeTransportListener(),this.responseCallback=null,this.activeAbort=null,this.removeAllListeners())}},E8=(x=>(x[x.FORMAT=1]="FORMAT",x[x.SIGNATURE=2]="SIGNATURE",x[x.EXPIRED=3]="EXPIRED",x[x.NO_MDN_PUBKEY=4]="NO_MDN_PUBKEY",x[x.BUSY=5]="BUSY",x[x.INTERNAL=6]="INTERNAL",x))(E8||{}),id=require("events"),gs="requesting-cert",ys="cert-revoked",l8=class Hs extends id.EventEmitter{constructor(){super(...arguments),A0(this,"utoMaster",null)}async authenticate(A){let e=A.logger??an,{signal:r,atHandler:t}=A,s=()=>{if(r?.aborted)throw new Error("Operation aborted")};try{this.emitPhase("checking-cert"),s();let n=await this.loadOrGenerateKeypair(A.storage),F=await A.storage.getCertificate(A.apiConfig.apiHost);(F===null||!Xs(F.notAfter))&&(e.info("Companion cert missing or near expiry \u2014 requesting new cert"),this.emitPhase(gs),s(),F=await this.requestAndStoreCert(n,A)),this.utoMaster=new qF(A.utoTransport,e,A.timeSource),this.emitPhase("cert-presenting"),s();let f=F;F=await t.withAtLock(async p=>{let j=await this.presentCertWithRefresh(p,f,n,A);return await p.initiateMdnSync(r),j}),this.emitPhase("ecs-handshake"),s(),await this.utoMaster.init();let C=await this.utoMaster.initiateEcsHandshake({companionPublicKey:n.publicKey,companionPrivateKey:n.privateKey,signal:r});if(!C.success)return this.fail("ecs-handshake",`ECS handshake failed (code ${C.resultCode})`);this.emitPhase("connected");let D=this.utoMaster;return this.utoMaster=null,{success:!0,utoMaster:D}}catch(n){return this.handleError(n)}}dispose(){this.utoMaster=null,this.removeAllListeners()}async loadOrGenerateKeypair(A){let e=await A.getKeypair();if(e!==null)return e;let r=await Ss();return await A.saveKeypair(r),r}static async fetchCertOrThrowRevoked(A,e){try{return await pF(e.apiConfig,{publicKey:A.publicKey,subject:e.subject})}catch(r){throw r instanceof ct&&(r.httpStatus===401||r.httpStatus===404)?(await e.storage.clearCertificate(e.apiConfig.apiHost),new ks(ys,`Companion cert revoked or session expired (HTTP ${r.httpStatus})`,{httpStatus:r.httpStatus,apiCode:r.code})):r}}async requestAndStoreCert(A,e){let r=await Hs.fetchCertOrThrowRevoked(A,e),t={base64Url:r.certificateBase64Url,notAfter:r.notAfter};return await e.storage.saveCertificate(t,e.apiConfig.apiHost),t}static async refreshCertificate(A){let e=await A.storage.getKeypair(),r=e!==null?e:await(async()=>{let n=await Ss();return await A.storage.saveKeypair(n),n})(),t=await Hs.fetchCertOrThrowRevoked(r,A),s={base64Url:t.certificateBase64Url,notAfter:t.notAfter};return await A.storage.saveCertificate(s,A.apiConfig.apiHost),s}static async clearCredentials(A,e){await A.clearCertificate(e)}async presentCertWithRefresh(A,e,r,t){let s=await A.sendCompanionCert(e.base64Url,t.signal);if(s.success||s.errorCode===3&&((t.logger??an).info("Device reported EXPIRED \u2014 refreshing cert and retrying"),this.emitPhase(gs),e=await this.requestAndStoreCert(r,t),s=await A.sendCompanionCert(e.base64Url,t.signal),s.success))return e;throw new ks("cert-presenting",`AT+COMPCERT rejected (code ${s.errorCode??"?"})`,{certErrorCode:s.errorCode})}emitPhase(A){this.emit("phase",A)}fail(A,e){return this.emit("phase","error"),{success:!1,phase:A,error:e}}handleError(A){return A instanceof ks?(this.emit("phase",A.phase===ys?ys:"error"),{success:!1,phase:A.phase,error:A.message,certErrorCode:A.certErrorCode,httpStatus:A.httpStatus,apiCode:A.apiCode}):(this.emit("phase","error"),A instanceof ct?{success:!1,phase:gs,error:A.message,httpStatus:A.httpStatus,apiCode:A.code}:{success:!1,phase:"error",error:A instanceof Error?A.message:String(A)})}};A0(l8,"encodePublicKeyBase64Url",Ws);var ad=l8,ks=class extends Error{constructor(x,A,e={}){super(A),A0(this,"phase",x),A0(this,"extra",e),this.name="AuthError"}get certErrorCode(){return this.extra.certErrorCode}get httpStatus(){return this.extra.httpStatus}get apiCode(){return this.extra.apiCode}},c8=(x=>(x.CERT_FORMAT="cert_format",x.CERT_SIGNATURE="cert_signature",x.CERT_EXPIRED="cert_expired",x.NO_MDN_PUBKEY="no_mdn_pubkey",x.DEVICE_BUSY="device_busy",x.DEVICE_INTERNAL="device_internal",x.ECS_FAILURE="ecs_failure",x.CERT_REVOKED="cert_revoked",x.SESSION_EXPIRED="session_expired",x.ABORTED="aborted",x.UNKNOWN="unknown",x))(c8||{}),od={cert_format:"companion_auth.error.cert_format",cert_signature:"companion_auth.error.cert_signature",cert_expired:"companion_auth.error.cert_expired",no_mdn_pubkey:"companion_auth.error.no_mdn_pubkey",device_busy:"companion_auth.error.device_busy",device_internal:"companion_auth.error.device_internal",ecs_failure:"companion_auth.error.ecs_failure",cert_revoked:"companion_auth.error.cert_revoked",session_expired:"companion_auth.error.session_expired",aborted:"companion_auth.error.aborted",unknown:"companion_auth.error.unknown"};function Fd(x){if(x.certErrorCode!==void 0)switch(x.certErrorCode){case 1:return"cert_format";case 2:return"cert_signature";case 3:return"cert_expired";case 4:return"no_mdn_pubkey";case 5:return"device_busy";case 6:return"device_internal"}return x.phase==="cert-revoked"?x.httpStatus===401?"session_expired":"cert_revoked":x.phase==="ecs-handshake"?"ecs_failure":x.error==="Operation aborted"?"aborted":"unknown"}var vd=require("events");function B8(x){let A=x.replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f").map(e=>{let r=e.split(" ");return r.length<4?null:{name:r[0],scale:parseFloat(r[1]),offset:parseFloat(r[2]),unit:r[3]}}).filter(e=>e!==null):[]}function C8(x){let A=x.replace(/^\+[^\r\n]*\r\n/gm,"").replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f"):[]}function d8(x,A,e){let r=parseFloat(x);return isNaN(r)?x:parseFloat(Number(r*A+e).toFixed(3)).toString()}function Ks(x,A){return x.map((e,r)=>({name:e.name,displayValue:d8(A[r]??"",e.scale,e.offset),unit:e.unit}))}var fd=2e3,D8=class extends vd.EventEmitter{constructor(x,A=zA){super(),A0(this,"atHandler",x),A0(this,"logger",A),A0(this,"datapoints",[]),A0(this,"values",[]),A0(this,"polling",!1),A0(this,"pollTimer",null),A0(this,"fetchInProgress",!1),A0(this,"fetchPromise",null)}async checkSupport(){this.logger.info("Checking local data support");let x=await this.atHandler.sendRaw(yx.APP_GET_METADATA),A=x.includes(U0.OK)?{supported:!0,pinRequired:!1}:x.includes(U0.ERROR_PIN_REQUIRED)?{supported:!0,pinRequired:!0}:x.includes(U0.ERROR_NO_DATA)?{supported:!1,pinRequired:!1}:x.includes(U0.ERROR)?{supported:!1,pinRequired:!1}:{supported:!1,pinRequired:!1};return this.logger.info("Local data support: "+JSON.stringify(A)),A}async fetchMetadata(x){this.logger.info("Fetching metadata"+(x?" (with PIN)":""));let A=x?`${yx.APP_GET_METADATA}=${x}`:yx.APP_GET_METADATA,e=await this.atHandler.sendRaw(A);if(this.logger.debug("Metadata response: "+e),e.includes(U0.ERROR_PIN_REQUIRED))return this.logger.warn("PIN required/invalid for metadata"),null;if(e.includes(U0.ERROR_NO_DATA))return this.logger.warn("No data available from device"),this.datapoints=[],this.values=[],this.emit("metadata",[]),this.emit("error","No local data available from device"),[];if(e.includes(U0.OK)){let r=B8(e);return this.logger.info("Parsed "+r.length+" datapoints"),this.datapoints=r,this.values=new Array(r.length).fill(""),this.emit("metadata",r),r}return e.includes(U0.ERROR)?(this.logger.error("Metadata fetch error: "+e),this.emit("error","Device returned error during metadata fetch"),[]):[]}async fetchValues(x){return this.readValues(A=>this.atHandler.sendRaw(A),x)}async readValues(x,A){try{this.logger.debug("Fetching values");let e=A?`${yx.APP_GET_DATAVALUE}=${A}`:yx.APP_GET_DATAVALUE,r=await x(e);if(r.includes(U0.OK)){let t=C8(r);return this.logger.debug("Values: "+t.join(", ")),this.values=t,this.emit("values",t),this.emit("displayValues",Ks(this.datapoints,t)),t}return[]}catch(e){return this.logger.warn("Value fetch error: "+(e instanceof Error?e.message:String(e))),[]}}async checkMeasurementTriggerSupport(){this.logger.info("Checking measurement trigger support");try{let A=(await this.atHandler.sendRaw(yx.APP_TRIG_MEASURE_TEST)).includes(U0.OK);return this.logger.info("Measurement trigger support: "+A),A}catch(x){if(x instanceof Rx)throw x;return this.logger.warn("Measurement trigger probe failed: "+(x instanceof Error?x.message:String(x))),!1}}async triggerMeasurement(x={}){let{pin:A,timeoutMs:e=F8,signal:r}=x;return this.logger.info("Triggering measurement"),this.atHandler.withAtLock(async t=>{let s=await t.sendRaw(yx.APP_TRIG_MEASURE);if(this.logger.debug("Trigger measurement response: "+s),!s.includes(U0.OK))return this.logger.warn("Measurement trigger rejected: "+s.trim()),{outcome:"rejected",values:[],response:s};this.emit("measurementTriggered");try{let n=await t.sendAndWait(null,U0.MEASURED,e,r);return this.emit("measurementCompleted"),{outcome:"measured",values:await this.readValues(f=>t.sendRaw(f),A),response:n}}catch(n){if(n instanceof Rx)throw n;let F="timeout";return n instanceof li?F="error":r?.aborted&&(F="aborted"),this.logger.warn(`Measurement ${F} while waiting for ${U0.MEASURED}: `+(n instanceof Error?n.message:String(n))),this.emit("measurementFailed",F),{outcome:F,values:[],response:s}}})}async startPolling(x,A=fd){if(this.polling){this.logger.warn("Polling already active \u2014 ignoring startPolling call");return}this.logger.info("Starting polling every "+A+" ms"),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.fetchPromise=this.fetchValues(x),await this.fetchPromise,this.fetchPromise=null,this.polling&&(this.pollTimer=setInterval(()=>{this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchValues(x).finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))},A))}async stopPolling(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null),this.polling&&(this.logger.info("Polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getSnapshot(){return{datapoints:[...this.datapoints],values:[...this.values],isPolling:this.polling}}getDisplayValues(){return Ks(this.datapoints,this.values)}dispose(){this.stopPolling(),this.datapoints=[],this.values=[],this.removeAllListeners()}};async function Ed(x,A,e){let r=s=>{if(s instanceof Rx)throw s},t=new D8(x);try{let s=await x.queryMdnServerConfig(e).catch(p=>(r(p),!1)),n=await t.checkSupport().catch(p=>(r(p),{supported:!1,pinRequired:!1})),F=n.supported?await t.checkMeasurementTriggerSupport().catch(p=>(r(p),!1)):!1,f=n.supported?{pinRequired:n.pinRequired,canTriggerMeasurement:F}:!1,C=!1,D=!1;if(s){let[p,j]=await Promise.all([x.queryCompanionCertSupport(e).catch(_=>(r(_),!1)),A?.getCertificate(s)]);C=p,D=j!=null&&Xs(j.notAfter)}return{hostname:s,localData:f,secureConnection:C,validCert:D}}finally{t.dispose()}}var ld=require("events"),cd={0:"trigger",1:"wakeup",2:"online"},Bd={0:["2G","","GSM"],1:["2G","Compact","GSM-COMPACT"],2:["3G","","UTRAN"],3:["2G","EDGE","GSM-EGPRS"],4:["3G","HSDPA","UTRAN-HSDPA"],5:["3G","HSUPA","UTRAN-HSUPA"],6:["3G","HSPA+","UTRAN-HSXPA"],7:["4G","","EUTRAN"],8:["4G","LTE-M","LTE-CATM1"],9:["4G","NB-IoT","LTE-CATNB1"],100:["WiFi","","WIFI"],101:["LAN","Ethernet","ETHERNET"],102:["Local","Wireless","WIRELESS"],103:["Local","Wired","WIRED"]},Cd={"NO SCRIPT":"none","SCRIPT ERROR":"error","SCRIPT OK":"ok"},wx={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},dd=wx.FAILED|wx.ACTIVE|wx.STARTED|wx.RETRY|wx.WAKEUPABLE|wx.EXTSIM|wx.DISABLED|wx.WAKEUP|wx.POSUPDATE_ACTIVE,rF=`${U0.RM2M_STATE}: `;function u8(x=0){let A=(x&wx.WAKEUPABLE)!==0,e="offline",r=A;return x&wx.POSUPDATE_ACTIVE?(e="locating",r=!1):x&wx.RETRY?(e="retry",r=!1):x&wx.STARTED?(e="dialing",r=!1):x&wx.ACTIVE?(e="active",r=!1):x&wx.FAILED?(e="failed",r=A):x&wx.DISABLED&&(e="disabled",r=!1),{signal:e,simType:(x&wx.EXTSIM)!==0?"external":"internal",wakeupable:r,unknownFlags:x&~dd}}function Dd(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?x:cd[A]??x}function ud(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?null:Bd[A]??["unknown",`itf#${x}`,`itf#${x}`]}function pd(x){if(x.length===0)return null;let A=x.join(",");return Cd[A]??A}function p8(x){let A=x.split(","),[e,r,t,s,...n]=A;if(!e||!/^-?\d+$/.test(e)||!r||!/^\d+$/.test(r))return null;let F=parseInt(r,10),f=ud(s),C=s!==void 0?parseInt(s,10):NaN;return{stamp:new Date,rssi:C>=101?null:parseInt(e,10),state:F,uplinkState:u8(F),uplinkMode:Dd(t),uplinkInterface:f?f[0]:null,uplinkInterfaceExtended:f?f[1]:null,uplinkInterfaceTechnical:f?f[2]:null,scriptState:pd(n)}}function b8(x){let A=x.indexOf(rF);if(A===-1)return null;let e=x.substring(A+rF.length),r=e.search(/\r?\n/);if(r===-1)return null;let t=e.substring(0,r).trim();return t?p8(t):null}var bd=5e3,md=class extends ld.EventEmitter{constructor(x,A=an){super(),A0(this,"atHandler"),A0(this,"logger"),A0(this,"lastState",null),A0(this,"pollingTimer",null),A0(this,"polling",!1),A0(this,"fetchInProgress",!1),A0(this,"fetchPromise",null),this.atHandler=x,this.logger=A}async fetchState(){try{let x=await this.atHandler.sendRaw(yx.RM2M_STATE),A=b8(x);return A?(this.lastState=A,this.emit("state",A),this.logger.debug("RM2M state fetched successfully")):this.logger.warn("Failed to parse RM2M state response"),A}catch(x){let A=x instanceof Error?x.message:String(x);return this.logger.error(`Failed to fetch RM2M state: ${A}`),this.emit("error",A),null}}startPolling(x=bd){if(this.polling){this.logger.debug("Polling already active, ignoring startPolling call");return}this.logger.info(`Starting RM2M state polling every ${x}ms`),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.runGuardedFetch(),this.pollingTimer=setInterval(()=>this.runGuardedFetch(),x)}runGuardedFetch(){this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchState().finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))}async stopPolling(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null),this.polling&&(this.logger.info("RM2M state polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getLastState(){return this.lastState?{...this.lastState,uplinkState:{...this.lastState.uplinkState}}:null}get isPolling(){return this.polling}dispose(){this.stopPolling(),this.lastState=null,this.removeAllListeners()}},jd=require("events"),m8=class extends jd.EventEmitter{constructor(){super(...arguments),A0(this,"serialNumber",""),A0(this,"serverUrl",""),A0(this,"deviceId",""),A0(this,"rssi",null),A0(this,"hasDebugSupport",!1),A0(this,"connectionState","disconnected"),A0(this,"connectionError",""),A0(this,"mtuSize",23)}get isConnected(){return this.connectionState==="connected"}setConnected(x){this.serialNumber=x.serialNumber,this.deviceId=x.deviceId,this.serverUrl=x.serverUrl??this.serverUrl,this.hasDebugSupport=x.hasDebugSupport??!1,this.mtuSize=x.mtuSize??23,this.rssi=x.rssi??null,this.connectionState="connected",this.connectionError="",this.emit("connected",this.snapshot()),this.emit("stateChange",this.snapshot())}setDisconnected(){this.connectionState="disconnected",this.rssi=null,this.emit("disconnected"),this.emit("stateChange",this.snapshot())}setError(x){this.connectionError=x,this.connectionState="disconnected",this.emit("error",x),this.emit("stateChange",this.snapshot())}setConnectionState(x){this.connectionState=x,this.emit("stateChange",this.snapshot())}updateRssi(x){this.rssi=x,this.emit("rssiUpdate",x)}reset(){this.serialNumber="",this.serverUrl="",this.deviceId="",this.rssi=null,this.hasDebugSupport=!1,this.connectionState="disconnected",this.connectionError="",this.mtuSize=23,this.emit("reset"),this.emit("stateChange",this.snapshot())}snapshot(){return{serialNumber:this.serialNumber,serverUrl:this.serverUrl,deviceId:this.deviceId,rssi:this.rssi,hasDebugSupport:this.hasDebugSupport,connectionState:this.connectionState,connectionError:this.connectionError,mtuSize:this.mtuSize,isConnected:this.isConnected}}},hd=require("events"),j8={maxDuration:6e4,initialDelay:1e3,maxDelay:1e4,maxGattRetries:3},gd=class extends hd.EventEmitter{constructor(x=zA,A){super(),A0(this,"logger",x),A0(this,"state"),A0(this,"transports",null),A0(this,"transportFactory",null),A0(this,"disconnectFn",null),A0(this,"reconnectOptions"),A0(this,"reconnectAbortController",null),this.state=new m8,this.reconnectOptions={...j8,...A}}async connect(x,A,e){this.transportFactory=x,this.disconnectFn=A,this.state.setConnectionState("connecting");try{return this.transports=await x(),this.state.setConnected(e),this.logger.info(`Connected to device ${e.serialNumber}`),this.transports}catch(r){let t=r instanceof Error?r.message:String(r);throw this.state.setError(t),this.logger.error(`Connection failed: ${t}`),r}}async disconnect(){if(this.stopReconnect(),this.disconnectFn)try{await this.disconnectFn()}catch(x){this.logger.warn(`Disconnect error: ${x}`)}this.transports=null,this.state.setDisconnected(),this.logger.info("Disconnected from device")}async reconnect(){if(!this.transportFactory||!this.disconnectFn)return this.logger.error("Cannot reconnect: no transport factory"),!1;this.state.setConnectionState("reconnecting"),this.reconnectAbortController=new AbortController;let{signal:x}=this.reconnectAbortController,A=Date.now(),e=this.reconnectOptions.initialDelay;for(;Date.now()-A<this.reconnectOptions.maxDuration;){if(x.aborted||(this.logger.info(`Reconnecting in ${e}ms...`),await this.sleep(e,x),x.aborted))return!1;try{return this.transports=await this.transportFactory(),this.state.setConnectionState("connected"),this.state.connectionError="",this.logger.info("Reconnected successfully"),this.emit("reconnected"),!0}catch(r){this.logger.warn(`Reconnect attempt failed: ${r}`),e=Math.min(e*2,this.reconnectOptions.maxDelay)}}return this.state.setError("Reconnect timeout exceeded"),this.logger.error("Reconnect failed: timeout exceeded"),this.emit("reconnectFailed"),!1}stopReconnect(){this.reconnectAbortController?.abort(),this.reconnectAbortController=null}getTransports(){return this.transports}sleep(x,A){return new Promise(e=>{let r=setTimeout(e,x);A?.addEventListener("abort",()=>{clearTimeout(r),e()},{once:!0})})}},yd={configurationNumber:1,utoInterface:0,utoEndpoint:1,utoSize:64*1024,debugInterface:1,debugEndpoint:2,debugSize:1024},kd={service:"BC300000-0FA0-4ED4-860A-CF95434B5A4E",txCharacteristic:"BC30E1FF-0FA0-4ED4-860A-CF95434B5A4E",rxCharacteristic:"BC30E1FE-0FA0-4ED4-860A-CF95434B5A4E",txDebugCharacteristic:"BC30E201-0FA0-4ED4-860A-CF95434B5A4E",rxDebugCharacteristic:"BC30E200-0FA0-4ED4-860A-CF95434B5A4E"},_d=590,wd=3e4,w0=class extends Error{constructor(x){super(x),this.name="ApiBadRequestError"}},lA=class extends Error{constructor(x){super(x),this.name="ApiNotFoundError"}},un=class extends Error{constructor(x){super(x),this.name="ApiForbiddenError"}},ci=class extends Error{constructor(x){super(x),this.name="ApiMethodNotAllowedError"}};function cA(x){try{return decodeURIComponent(x)}catch{throw new w0("malformed url encoding")}}var Sd=2e3,$d=2136;function Bi(x){if(x.length===0)return!0;if(!/^\d{4,17}$/.test(x))return!1;let A=Number(x.slice(0,4));return A>=Sd&&A<=$d}function $r(x){if(x)for(let A of["stamp","from","until"]){let e=x[A];if(typeof e=="string"&&!(A==="until"&&e==="*")&&!(A!=="stamp"&&e.trim().length===0)&&!Bi(e))throw new w0(`attribute '${A}' is not valid`)}}function qd(x){return typeof x.setMetadataValue=="function"?x:null}function Td(x){return typeof x.insertUtoChangeRequests=="function"?x:null}function Ci(){return{lastIssuedStamp40:0,tagMutexTails:new Map}}async function Pd(x){return{status:200,body:x.ctx.siteInfo}}async function Nd(x){let{blueprint:A}=x.ctx;if(!A)throw new lA("blueprint unavailable");return{status:200,body:A}}async function Md(x){let{me:A}=x.ctx;if(A==null)throw new lA("no profile stored");return{status:200,body:A}}function h8(x,A,e,r){let t=x.push;t&&(async()=>{try{await t.container(A,e,r)}catch(s){x.logger?.error(`[localApi] device push for tag ${A} failed:`,s)}})()}async function Id(x,A,e){let r=x.push;if(!r)return null;try{return await r.adHocChangeRequest(A,e)}catch(t){return x.logger?.error(`[localApi] change request for tag ${A} failed:`,t),null}}var Ld=1024;function mt(x){let A=x.indexOf(0),e=A<0?x:x.subarray(0,A);try{let r=new TextDecoder("utf-8").decode(e),t=JSON.parse(r);return typeof t!="object"||t===null||Array.isArray(t)?null:t}catch{return null}}function g8(x,A=0){let e=new TextEncoder().encode(x),r=Math.max(Ld,A,e.length+1),t=new Uint8Array(r);return t.set(e,0),t}var di=26432,We={aberrant:1,service:2,standby:4,commissioned:8,offline:16,commissioning:65536,online:131072},y8=Object.keys(We),jt=["standby","commissioned","offline","commissioning","online"],zs=jt.reduce((x,A)=>x|We[A],0)>>>0;function k8(x){let A=0;for(let e of y8)x[e]===!0&&(A|=We[e]);return A>>>0}function Di(x,A){let e={};for(let r of y8)x&We[r]?e[r]=!0:typeof A?.[r]=="boolean"&&(e[r]=!1);return e}async function _8(x,A){let e=A.device;if(!e)return!1;let r=await x.getRowForTag(di);if(!r?.data)return!1;let t=mt(r.data);if(!t)return!1;let s=!1;if(typeof t.lifecycleFlags=="number"){let n=Di(t.lifecycleFlags,e.lifecycle_flags);JSON.stringify(e.lifecycle_flags)!==JSON.stringify(n)&&(e.lifecycle_flags=n,s=!0)}return typeof t.lifecycleState=="string"&&e.lifecycle_state!==t.lifecycleState&&(e.lifecycle_state=t.lifecycleState,s=!0),s}var Rd=new Set([...jt,"service","lifecycle_state"]);function Od(x,A){let e=Math.max(H0.msToStamp40((x.timeSource??pt).nowMs()),A.lastIssuedStamp40+1);return A.lastIssuedStamp40=e+1,e}async function Gd(x){let A=zd(x.request.body??null);if(!A)throw new w0("invalid or missing request body");Ud(A);let e=x.ctx,r=e.siteInfo.lifecycle_flags;if(!Kd(r))throw new w0("this site does not support lifecycle flags!");let t=k8(r),s=t;for(let C of jt){let D=A[C];typeof D=="boolean"&&(s=D?s|We[C]:s&~We[C])}if(s>>>=0,s===t)return{status:204,body:""};let n=Od(e,x.session),F=[{json:JSON.stringify({lifecycleFlags:{op:"&",val:~zs>>>0}}),stamp40:n},{json:JSON.stringify({lifecycleFlags:{op:"|",val:s&zs}}),stamp40:n+1}],f=Td(e.storage);return f&&await f.insertUtoChangeRequests(F.map(C=>({tag:di,stamp40:C.stamp40,json:C.json}))),e.siteInfo.lifecycle_flags=Di(s,r),await w8(e),Hd(e,F),{status:204,body:""}}function Ud(x){let A=[];for(let[e,r]of Object.entries(x))Rd.has(e)?(e==="lifecycle_state"?typeof r!="string":typeof r!="boolean")&&A.push(`"${e}" is not valid`):A.push(`"${e}" is not an allowed lifecycle property`);if(A.length>0)throw new w0(`validation errors: ${A.join(", ")}`);if(Object.keys(x).some(e=>!jt.includes(e)))throw new w0("invalid parameters")}async function Hd(x,A){try{let e=await Id(x,di,A);e==="executed"?await _8(x.storage,x.siteInfo)&&await w8(x):e!==null&&x.logger?.warn(`[localApi] lifecycle change request not applied by the device (outcome=${e})`)}catch(e){x.logger?.error("[localApi] lifecycle device-mirror refresh failed:",e)}}async function w8(x){await qd(x.storage)?.setMetadataValue("site_info",JSON.stringify(x.siteInfo))}function Kd(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}function zd(x){if(!x)return null;let A;try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}function S8(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new w0('"select" must be an array')}}function Jd(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new w0("invalid parameter, select must be an array")}}function Vd(x,A){let e=new Map;if(A){for(let[r,t]of A)e.set(t,r);return e}for(let r of x?.fields??[]){if(oe(r))continue;let t=r.alias??r.name;e.set(t,t.toLowerCase())}return e}function Wd(x){let A=new Map;for(let e of x.fields){if(oe(e))continue;let r=(e.alias??e.name).toLowerCase();A.set(e.name,r),e.alias&&A.set(e.alias,r)}return A}function Xd(x){let A=new Set;for(let e of x.fields)oe(e)||A.add((e.alias??e.name).toLowerCase());return A.add("stamp"),A}function Yd(x,A,e){if(!e)return null;let r=Vd(x,A),t=new Set,s=[];for(let n of e){if(n==="stamp")continue;let F=r.get(n);F?t.add(F):s.push(n)}if(s.length>0)throw $8(s);return t}function Qd(x,A){let e=Wd(x),r=[],t=[],s=!1;for(let n of A){if(n==="stamp"){s=!0,r.push("stamp");continue}let F=e.get(n);F?r.push(F):t.push(n)}if(t.length>0)throw $8(t);return s||r.unshift("stamp"),r}function Zd(x,A){if(A===void 0)return;let e=Xd(x),r=A.map(s=>s.toLowerCase()),t=r.filter(s=>!e.has(s));if(t.length>0)throw new w0(`unknown field name(s): ${t.join(",")}`);return r.includes("stamp")?r:["stamp",...r]}function xD(x,A){if(!A)return x;let e={};for(let[r,t]of Object.entries(x))(r==="stamp"||A.has(r))&&(e[r]=t);return e}function ui(x,A){if(!A)return x;let e={};for(let r of A)e[r]=r in x?x[r]:null;return e}function $8(x){return new w0(`Fields [\`${x.join("`, `")}\`] do not exist in this container`)}function pn(x,A){return x.containers.find(e=>e.name===A||e.alias===A)??null}async function AD(x){let A=x.ctx,e=cA(x.params[1]),r=pn(A.model,e);if(!r)throw new w0("container does not exist");let t=await A.mapper.readContainer(e);if(!t)throw new lA(`no data for container "${e}"`);let s=rD(A,r,t,eD(x));return{status:200,body:q8(A,e,s)}}function eD(x){let A=x.query.json??{};return S8(A.select)}function rD(x,A,e,r){let t=Yd(A,bt(x.blueprint??null,A),r);return xD(e,t)}function q8(x,A,e){let r=x.model.byNameOrAlias(A);return r?r8(e,bt(x.blueprint??null,r)):e}async function tD(x){let A=x.ctx,e=cA(x.params[1]),r=A.model.byNameOrAlias(e);if(!r)throw new lA(`unknown container "${e}"`);let t=await A.mapper.readContainer(e);if(!t)throw new lA(`unknown container "${e}"`);let s=x.query.json??{},n=Jd(s.select),F=Zd(r,n);return{status:200,body:ui(t,F)}}async function nD(x){let A=cA(x.params[1]);return T8(x,A,"canonical")}async function sD(x){let A=cA(x.params[1]);if(!x.ctx.model.byNameOrAlias(A))throw new lA(`unknown container "${A}"`);return T8(x,A,"legacy")}async function T8(x,A,e){let r=fD(x);if(!r)throw new w0("invalid or missing request body");$r(r);let{stamp:t,...s}=r;if(e==="canonical"&&t!==void 0&&typeof t!="string")throw new w0("value(s) of field(s) stamp are not valid");let n=x.ctx;if(e==="canonical"&&!pn(n.model,A))throw new w0("container does not exist");let F=n.model.byNameOrAlias(A);if(F?.kind==="histdata")throw new lA(`unknown container "${A}"`);let f=e==="canonical"?oD(n,F,s):FD(F,s);try{let C=e==="canonical"&&t!==void 0?{...f,stamp:t}:f,D=await n.mapper.writeContainer(A,C);return D.devicePushable&&h8(n,D.tag,D.data,D.stamp40),{status:204,body:""}}catch(C){throw iD(C,A,e,n,F)}}function iD(x,A,e,r,t){if(x instanceof dt){let s=x.field?aD(r,t,x.field,e):void 0;return e==="canonical"?s?new w0(`no permission to modify container field \`${s}\``):new w0(`no permission to modify container \`${A}\``):s?new un(`unknown field name(s): ${s}`):new ci(`no permission to modify '${A}'`)}return x}function aD(x,A,e,r){if(!A)return e;let t=A.fields.find(n=>n.name===e||n.name.toLowerCase()===e||(n.alias??n.name).toLowerCase()===e);return t?r==="legacy"?(t.alias??t.name).toLowerCase():bt(x.blueprint??null,A)?.get(e)??t.alias??t.name:e}function oD(x,A,e){if(!A)return e;let r=bt(x.blueprint??null,A),t=new Map;if(r)for(let[s,n]of r)t.set(n,s);else for(let s of A.fields)t.set(s.alias??s.name,(s.alias??s.name).toLowerCase());return P8(A,t,e,s=>new w0(`unknown field name(s): ${s}`))}function FD(x,A){if(!x)return A;let e=new Map;for(let r of x.fields){let t=r.alias??r.name;e.set(t.toLowerCase(),t.toLowerCase()),e.set(t,t.toLowerCase())}return P8(x,e,A,r=>new un(`unknown field name(s): ${r}`))}var vD=new Set(["stamp","stamp4","stamp8","datetime"]);function P8(x,A,e,r){let t=new Map(x.fields.map(f=>[(f.alias??f.name).toLowerCase(),f])),s={},n=[],F=[];for(let[f,C]of Object.entries(e)){let D=A.get(f);if(!D){n.push(f);continue}let p=t.get(D);if(p&&vD.has(p.type)&&!(typeof C=="string"&&Bi(C))){F.push(f);continue}s[D]=C}if(n.length>0)throw r(n.join(","));if(F.length>0)throw new w0(`value(s) of field(s) ${F.join(",")} are not valid`);return s}function fD(x){let A=x.query.json,e=A!=null&&typeof A=="object"&&!Array.isArray(A)?A:void 0,r=x.request.body;if(!r)return e?{...e}:null;let t=ED(r);if(t===void 0)throw new w0("request supplied data which is not json formatted");return typeof t!="object"||t===null||Array.isArray(t)?null:{...e,...t}}function ED(x){try{return JSON.parse(x)}catch{return}}var N8="x-mt-backfill",M8="pending";async function pi(x,A,e){let r=x.push?.backfill;if(!(!r||A===void 0||A===null||e===null))try{return await r.call(x.push,{fromMs:e})==="pending"?{[N8]:M8}:void 0}catch(t){x.logger?.error("[localApi] historic backfill check failed:",t);return}}var lD=1e3,xn=1e3,I8="20000101",L8="*";async function cD(x){let A=x.query.json??{};K8(A,["from","until","count","offset","select"]),$r(A);let e=x.ctx,r=cA(x.params[1]),{mapperSelect:t,order:s}=O8(e,r,A.select);G8(e,r);let n=cn(A.from,I8,"from"),F=cn(A.until,L8,"until");U8(n,F),F!==null&&(F=CD(F));let f=dD(A.count),C=H8(A.offset),D=await pi(e,A.from,n);return{status:200,body:(await e.mapper.readTimeseries(r,{fromMs:n,untilMs:F,count:f,offset:C,select:t})).map(j=>R8(x,e,r,ui(j,s))),headers:D}}async function BD(x){let A=x.query.json??{};K8(A,["from","until","offset","select"]),$r(A);let e=x.ctx,r=cA(x.params[1]),t=x.params[2],{mapperSelect:s,order:n}=O8(e,r,A.select);G8(e,r);let F=cn(A.from,I8,"from"),f=cn(A.until,L8,"until");U8(F,f);let C=H8(A.offset),D=await pi(e,A.from,F),j=(await e.mapper.readTimeseries(r,{fromMs:F,untilMs:f,count:t==="youngest"?-1:1,offset:C,select:s}))[0];return j?{status:200,body:R8(x,e,r,ui(j,n)),headers:D}:{status:204,body:JSON.stringify("no timeseries recordData found"),headers:D}}function R8(x,A,e,r){return x.apiVersion==="1"?r:q8(A,e,r)}function O8(x,A,e){let r=S8(e);if(!r)return{mapperSelect:void 0,order:null};let t=pn(x.model,A);if(!t)return{mapperSelect:r,order:null};let s=Qd(t,r),n=s.filter(F=>F!=="stamp");return{mapperSelect:n.length>0?n:void 0,order:s}}function G8(x,A){if(!pn(x.model,A))throw new w0("timeseries does not exist")}function cn(x,A,e){let t=x==null||typeof x=="string"&&x.trim()===""?A:String(x);if(t==="*")return null;try{return Sr(t)}catch{throw new w0(`attribute '${e}' is not valid`)}}function U8(x,A){if(x!==null&&A!==null&&x>A)throw new w0('E_BAD_REQUEST "from" value must be older than "until"')}function CD(x){let A=H0.msToStamp40(x);return H0.stamp40ToMS(A)>=x&&(A-=1),H0.stamp40ToMS(A)}function dD(x){if(x==null||x==="")return lD;let A=Number(x);if(!Number.isInteger(A))throw new w0('"count" must be an integer');if(A===0)throw new w0("`count` cannot be 0");if(A<-xn)throw new w0(`"count" must be greater than or equal to -${xn}`);if(A>xn)throw new w0(`"count" must be less than or equal to ${xn}`);return A}function H8(x){if(x==null||x==="")return 0;let A=Number(x);if(!Number.isInteger(A))throw new w0('"offset" must be an integer');if(A<0)throw new w0('"offset" must be greater than or equal to 0');return A}function K8(x,A){for(let e of Object.keys(x))if(!A.includes(e))throw new w0(`"${e}" is not allowed`)}var DD=1e5,uD="20000101",pD="*";async function bD(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.ctx,t=r.model.byNameOrAlias(e);if(!t)throw new lA(`unknown container "${e}"`);let s=x.query.json??{};$r(s);let{fromMs:n,untilMs:F}=hD(s);gD(n,F);let f=yD(s),C=kD(s),D=z8(t,s.select)??["stamp"],p=Bn(s.from)?await pi(r,s.from,n):void 0,j=D.filter(S=>S!=="stamp");return{status:200,body:(await r.mapper.readTimeseries(e,{fromMs:n,untilMs:F,count:f,offset:C,select:j.length>0?j:void 0})).map(S=>D.map(T=>T==="stamp"?S.stamp:S[T]??null)),headers:p}}async function mD(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.params[2],t=x.ctx,s=t.model.byNameOrAlias(e);if(!s)throw new lA(`unknown container "${e}"`);let n=x.query.json??{};$r(n);let F=z8(s,n.select)??["stamp"],f=jD(n),C=F.filter(j=>j!=="stamp"),p=(await t.mapper.readTimeseries(e,{fromMs:null,untilMs:f??null,count:f!==void 0||r==="youngest"?-1:1,select:C.length>0?C:void 0}))[0];return p?{status:200,body:[F.map(j=>j==="stamp"?p.stamp:p[j]??null)]}:{status:200,body:[]}}function jD(x){if(!(!Bn(x.until)||x.until==="*"))try{return Sr(String(x.until))??void 0}catch{throw new w0("from or until value invalid")}}function hD(x){let A=Bn(x.from),e=Bn(x.until);if((!A||!e)&&!bi(x.count))throw new w0("missing or invalid parameters (from and until and/or count)");return{fromMs:tF(A?x.from:uD),untilMs:tF(e?x.until:pD)}}function gD(x,A){if(x!==null&&A!==null&&x>A)throw new w0('"from" value must be older than "until"')}function tF(x){let A=String(x);try{return Sr(A)}catch{throw new w0(`invalid stamp "${A}"`)}}function yD(x){if(!bi(x.count))return DD;if(typeof x.count!="number")throw new w0("invalid parameter count");return x.count}function kD(x){let A=x.offset;if(A==null||A==="")return 0;if(typeof A!="number"||A<0)throw new w0("invalid parameter offset");return A}function z8(x,A){if(A==null)return;if(!Array.isArray(A))throw new w0("invalid parameter, select must be an array");let e=A.map(F=>String(F).toLowerCase()),r=e.filter(F=>F.includes(" "));if(r.length>0)throw new w0(`aggregation suffix not allowed: ${r.join(",")}`);let t=e.includes("stamp")?e:["stamp",...e],s=new Set(x.fields.filter(F=>!oe(F)).map(F=>(F.alias??F.name).toLowerCase()));s.add("stamp");let n=t.filter(F=>!s.has(F));if(n.length>0)throw new w0(`invalid channel(s) ${n.join(",")}`);return t}function bi(x){return!!x}function Bn(x){return typeof x=="string"?x.trim().length>0:bi(x)}var _D="device_id";function wD(x){return async A=>(await bn(A),{status:200,body:await $D(A.ctx,x)})}async function bn(x){let A=cA(x.params[0]),e=await SD(x.ctx);if(!e||e.toLowerCase()!==A.toLowerCase())throw new lA(`unknown device "${A}"`)}async function SD(x){return x.deviceId||x.siteInfo.device?.device_id||x.storage.getMetadataValue(_D)}async function $D(x,A){let e=await x.storage.getRowForTag(A);if(!e||!e.data)return{};let r=mt(e.data);return r?(typeof r.pipAppVer=="number"&&(r.pipAppVer=`${r.pipAppVer}.0.0`),r.stamp=_r(H0.stamp40ToMS(KA(e.stamp))),r):{}}function mi(x,A,e){let t=(x.tagMutexTails.get(A)??Promise.resolve()).then(e);return x.tagMutexTails.set(A,t.catch(()=>{})),t}function qD(x){return async A=>{await bn(A);let e=ND(A.request.body??null);if(!e)throw new w0("invalid or missing request body");return mi(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x),t=r?.data?mt(r.data)??{}:{};return await ji(A.ctx,x,r,{...t,...e}),{status:204,body:""}})}}function TD(x){return async A=>(await bn(A),mi(A.session,x,async()=>{let e=await A.ctx.storage.getRowForTag(x);return!e||!e.data?{status:204,body:""}:(await ji(A.ctx,x,e,{}),{status:204,body:""})}))}function PD(x){return async A=>{await bn(A);let e=cA(A.params[1]);return mi(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x);if(!r||!r.data)return{status:204,body:""};let t=mt(r.data)??{},s=e.toLowerCase();for(let n of Object.keys(t))n.toLowerCase()===s&&delete t[n];return await ji(A.ctx,x,r,t),{status:204,body:""}})}}function ND(x){if(!x)return null;let A;try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}async function ji(x,A,e,r){let t=g8(JSON.stringify(r),e?.data?.length??0),s=H0.msToStamp40((x.timeSource??pt).nowMs());await x.storage.replaceUtoRow({tag:A,stamp:EA(s),flags:e?.flags??0,site_related:e?.site_related??0,data:t}),h8(x,A,t,s)}var J8={"content-type":"application/json"},MD=[{method:"GET",pattern:/^\/api\/1\/me$/,handler:Md,checksUid:!1},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)$/,handler:Pd,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/blueprint$/,handler:Nd,checksUid:!0},{method:"POST",pattern:/^\/api\/1\/sites\/([^/]+)\/cn-set-lifecycle$/,handler:Gd,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)\/(oldest|youngest)$/,handler:BD,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)$/,handler:cD,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:AD,checksUid:!0},{method:"PUT",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:nD,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?\/(oldest|youngest)$/,handler:mD,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?$/,handler:bD,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:tD,checksUid:!0},{method:"PUT",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:sD,checksUid:!0},...ID()];function ID(){let x={"sys-otp":26432,"sys-flash":26433,"app-otp":26434,"app-flash":26435,"app-state":26436,"sys-info":26437,"app-info":26438},A={"sys-flash":26433,"app-flash":26435},e=Object.entries(x).map(([t,s])=>({method:"GET",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:wD(s),checksUid:!1})),r=Object.entries(A).flatMap(([t,s])=>[{method:"PUT",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:qD(s),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:TD(s),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}/([^/]+)$`),handler:PD(s),checksUid:!1}]);return[...e,...r]}var LD=/^\/api\/([12])\/customers\/([^/]+)\/sites\/(.*)$/;function RD(x){let A=Ci();return e=>V8(x,e,A)}async function V8(x,A,e=Ci()){try{let[r,t]=UD(A.path),s=HD(t),n=GD(r,x);if(n===null)return Ve(404,"E_NOT_FOUND","unknown customer");let F=A.method.toUpperCase();for(let f of MD){if(f.method!==F)continue;let C=f.pattern.exec(n);if(!C)continue;let D=C.slice(1);if(f.checksUid&&!OD(x,D[0]))return Ve(404,"E_NOT_FOUND","unknown site");let p=/^\/api\/([12])\//.exec(n)?.[1]??"1",j=await f.handler({request:A,params:D,query:s,ctx:x,session:e,apiVersion:p});return JD(j)}return Ve(404,"E_NOT_FOUND","not found")}catch(r){return X8(r)}}function OD(x,A){return x.allowAnySiteUid===!0||A!==void 0&&cA(A)===x.siteUid}function GD(x,A){let e=LD.exec(x);if(!e)return x;let r=cA(e[2]).toLowerCase();return(A.siteInfo.customer_id??"").toLowerCase()===r||(A.siteInfo.customer_uid??"").toLowerCase()===r?`/api/${e[1]}/sites/${e[3]}`:null}function UD(x){let A=x.indexOf("?");return A<0?[x,""]:[x.slice(0,A),x.slice(A+1)]}function HD(x){let A={params:{}};if(!x)return A;for(let e of x.split("&"))e&&KD(A,e);return A}function KD(x,A){let e=A.indexOf("="),r=cA(e<0?A:A.slice(0,e)),t=e<0?"":cA(A.slice(e+1));r==="json"?x.json=zD(t):x.params[r]=t}function zD(x){try{return JSON.parse(x)}catch{throw new w0("request supplied data which is not json formatted ")}}function JD(x){let A=typeof x.body=="string"?x.body:JSON.stringify(x.body);return{status:x.status,headers:{...J8,...x.headers},body:A}}function W8(x,A){return{status:x,headers:{...J8},body:JSON.stringify(A)}}function X8(x){return x instanceof w0||x instanceof fi||x instanceof ri?Ve(400,"E_BAD_REQUEST",x.message):x instanceof un||x instanceof dt?Ve(403,"E_FORBIDDEN",x.message):x instanceof ci?Ve(405,"E_METHOD_NOT_ALLOWED",x.message):x instanceof lA||x instanceof ge?Ve(404,"E_NOT_FOUND",x.message):W8(500,{err:x instanceof Error?x.message:String(x)})}function Ve(x,A,e){return W8(x,{err:`${A} ${e}`})}function VD(x,A){let e=A.apmId??"local",r=A.version??1;return{uid:A.siteUid,name:A.name??A.siteUid,customer_id:e,customer_uid:e,app:{apmid:e,version:String(r)},device:{device_id:A.deviceId,lifecycle_flags:{}},lifecycle_flags:{},containers:x.containers.map(t=>({name:t.name,alias:t.alias??t.name,kind:t.kind}))}}});var x7={};yf(x7,{APM:()=>p0,DDE:()=>vA,DDE_Core:()=>R0,DFILES:()=>Ft,DLO:()=>ot,DefaultFiles:()=>r0,Dependencies:()=>Z0,DevError:()=>gx,DevExitCode:()=>qn,DevSession:()=>Ze,DeviceProfiles:()=>Mt,Diagnostics:()=>Zr,ENV:()=>Es,Globals:()=>Cx,Helper:()=>j0,HttpMethod:()=>Pi,Library:()=>Re,Log:()=>ie,Manifest:()=>J,MyDatanetClient:()=>Tn,Package:()=>hx,Registry:()=>tx,build:()=>Xu,buildDevelopmentInstallInfo:()=>Sv,dev:()=>_v,generateDevApmId:()=>Ni,install:()=>Wu,pack:()=>Zu,publish:()=>Qu});module.exports=kf(x7);var ux=require("vscode-uri");var hr=require("vscode-uri");var _f=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function $t(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^_f[(e^x[r])&255];return(e^-1)>>>0}var r7=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),t7=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);var j0;(_=>{function x(k,S){let[T,N]=S,{line:L,col:O}=k.linePos(T);return{line:Number(L)-1,startCharacter:O-1,endCharacter:O+(N-T)}}_.yamlRangeToLineInformation=x;let A=new TextEncoder;function e(k){return $t(A.encode(k)).toString(16)}_.generateHashForLibraryName=e;function r(k){return $t(A.encode(k)).toString(16)}_.generateHashForFilePath=r;function t(k){return $t(k).toString(16).toUpperCase().padStart(8,"0")}_.generateCRC32ForFileContent=t;function s(k){try{let S=null;return k?.type==="Buffer"?S=Uint8Array.from(k.data):S=k,new TextDecoder("utf8").decode(S)}catch{return""}}_.convertBlobToString=s;function n(k=""){return k.replace(/\r\n|\n\r|\r/g,`
|
|
2199
|
+
`)}_.normalizeLF=n;function F(k){try{let S=s(k);return n(S).split(`
|
|
2200
|
+
`)}catch{return[]}}_.convertBlobToStringArray=F,_.isNumeric=k=>!Array.isArray(k)&&k-parseFloat(k)+1>=0;function C(k){let S="",T=k.byteLength;for(let N=0;N<T;N++)S+=String.fromCharCode(k[N]);return btoa(S)}_.bufferToBase64=C;function D(k,S){let T=`${k}`.match(/\{\d*(index)(\+\d*)?}/g);if(T){let N=k;return T.forEach(L=>{let O=L.replace(/\+0$/,""),i0=O.match(/index/)?.[0];if(i0){let R=O.slice(1,-1).split(i0)[1],g=parseInt(R)||0;N=N.replace(L,`${S+g}`)}}),N}else return k}_.patchValueWithArrayInfo=D;let p={};function j(k,S,T){let N=p[k];N&&clearTimeout(N.timer),p[k]={timer:setTimeout(()=>{delete p[k],T()},S),handler:T}}_.defer=j})(j0||={});var mo=require("image-dimensions"),jo=require("file-type-checker");var c7=require("cross-fetch/polyfill"),ta=Q0(require("openapi-fetch"));var De=require("vscode-uri");var Nx="dist/",Xi="dde/",zn="dlo/",Jn=".studio/",Yi="dfiles/",r0;(f=>{f.fileNames={projectSettings:"studio.json",mainAmx:"main.amx",mainAmxReport:"main.xml",ddeXml:"dde.xml",ddeOpenApi:"main.yaml",historyJson:"history.json",mainDDE:"main.dde",autoInc:"auto.inc",defaultInc:"default.inc",autoUplinkInc:"app-uplink.inc",autoDdeInc:"X-dde.inc",mainDdeInc:"main-dde.inc",autoLocalDataInc:"auto-local-data.inc",legacyAutoInc:"legacy-auto.inc",legacyAutoDdeInc:"legacy-auto-dde.inc",legacyAutoUplinkInc:"legacy-auto-uplink.inc",reportTemplate:"mdn_report_template.json",dloCfg:"dlo.cfg",devMirror:"mirror.json",devDeviceLog:"device.jsonl"};let A=`${Jn}auto/`,e=`${Jn}dev/`,r=`${A}dlo/`,t=`${A}dde/`;f.filePaths={studio:{initFile:`${A}.init`,auto:{path:A,dlo:{path:r,autoInc:`${r}${f.fileNames.autoInc}`,defaultInc:`${r}${f.fileNames.defaultInc}`,autoUplinkInc:`${r}${f.fileNames.autoUplinkInc}`,autoLocalDataInc:`${r}${f.fileNames.autoLocalDataInc}`,autoDdeInc:`${r}${f.fileNames.autoDdeInc}`,mainDdeInc:`${r}${f.fileNames.mainDdeInc}`,legacyAutoInc:`${r}${f.fileNames.legacyAutoInc}`,legacyAutoDdeInc:`${r}${f.fileNames.legacyAutoDdeInc}`,legacyAutoUplinkInc:`${r}${f.fileNames.legacyAutoUplinkInc}`,cfg:`${r}${f.fileNames.dloCfg}`},dde:{path:t,historyJson:`${t}${f.fileNames.historyJson}`}},libdeps:`${Jn}libdeps/`,dev:{path:e,mirror:`${e}${f.fileNames.devMirror}`,deviceLog:`${e}${f.fileNames.devDeviceLog}`}},dist:{path:Nx,dloPath:`${Nx}dlo/`,mainAmxPath:`${Nx}dlo/${f.fileNames.mainAmx}`,mainAmxReportPath:`${Nx}dlo/${f.fileNames.mainAmxReport}`,ddeXmlPath:`${Nx}dde/${f.fileNames.ddeXml}`,ddeApiPath:`${Nx}api/`,ddeApi:`${Nx}api/${f.fileNames.ddeOpenApi}`,historyJson:`${Nx}dde/${f.fileNames.historyJson}`,povPath:`${Nx}pov`,povDetailsPath:`${Nx}pov/details`,dfilesPath:`${Nx}dfiles`,dfilesProperties:`${Nx}dfiles/properties.json`,bloPath:`${Nx}blo`,reportTemplate:`${Nx}/${f.fileNames.reportTemplate}`,definesTs:`${Nx}defines.ts`,definesAppTs:`${Nx}defines.app.ts`},dlo:{path:zn,mainDLO:`${zn}main.dlo`,mainINI:`${zn}main.ini`},dde:{path:Xi,mainDDE:`${Xi}main.dde`},dfiles:{path:Yi,mainDFILES:`${Yi}/main.dfiles`},appIni:"app.ini",defaultsIni:"defaults.ini"},f.readme=C=>`# ${C} README
|
|
2201
|
+
|
|
2202
|
+
This is the README for your project "${C}". Write a brief description what this project is about.`,f.changelog=`# Changelog
|
|
2203
|
+
|
|
2204
|
+
All notable changes to this project will be documented in this file.
|
|
2205
|
+
|
|
2206
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).`})(r0||={});var xa=Q0(require("ini"));var wf=j0.convertBlobToString,Sf=r0.filePaths.dlo.path,Cx;(t=>{let x;(f=>(f.lucky="lucky",f.wynni="wynni",f.production="production"))(x=t.ENV||={});async function A(s,n,F){let f=await J.read(s,n),C=await Z0.getAll(f),D={},p={},j={};for(let L in C){let O=Z0.dependencyToPath(s,L),i0=Z0.dependencyIdToName(L),R=De.Utils.joinPath(O,Sf,`${i0}.ini`);await cr(n,R,D,p,j,i0);let g=De.Utils.joinPath(O,r0.filePaths.defaultsIni);await cr(n,g,D,p,j,i0)}if(J.isLibrary(f)){let L=De.Utils.joinPath(s,r0.filePaths.dlo.path,`${f.name}.ini`);F&&await n.stat(L)&&F.warn(`dlo/${f.name}.ini is deprecated. Please migrate your defines to defaults.ini in the project root.`),await cr(n,L,D,p,j,f.name)}let _=f.dlo?.iniFile||r0.filePaths.dlo.mainINI,k=De.Utils.joinPath(s,_);F&&await n.stat(k)&&F.warn(`${_} is deprecated. Please migrate your defines to app.ini in the project root.`);let S=Pf(_);if(await cr(n,k,D,p,j,S),J.isLibrary(f)){let L=De.Utils.joinPath(s,r0.filePaths.defaultsIni);await cr(n,L,D,p,j,"defaults")}let T=$f(f,D,p,j),N=De.Utils.joinPath(s,r0.filePaths.appIni);return await cr(n,N,D,p,j,"app"),{flat:D,sections:p,definesWithSource:j,defaultsOnly:T}}t.read=A;async function e(s,n,F,f){let C=Object.entries(F.flat),D=[];for(let[_,k]of C){let S=F.definesWithSource[_];if(S?.comment){let N=Qi(S.comment);for(let L of N.split(`
|
|
2207
|
+
`))D.push(` ${L}`)}let T=Zi(k)?"number":"string";D.push(` ${_}: ${T};`)}let p=["// Auto-generated by @microtronics/studio-cli \u2014 DO NOT EDIT","declare global {"," interface StudioDefines {",...D," }"," var STUDIO_DEFINES: StudioDefines;","}","","globalThis.STUDIO_DEFINES ??= {} as StudioDefines;",""];for(let[_,k]of C){let S=F.definesWithSource[_];if(S?.comment&&p.push(Qi(S.comment)),Zi(k))p.push(`globalThis.STUDIO_DEFINES['${_}'] = ${Number(k)};`);else{let T=k.replace(/\\/g,"\\\\").replace(/'/g,"\\'");p.push(`globalThis.STUDIO_DEFINES['${_}'] = '${T}';`)}}p.push(""),p.push("export {};"),p.push("");let j=De.Utils.joinPath(s,f??r0.filePaths.dist.definesTs);await n.writeFile(j,p.join(`
|
|
2208
|
+
`))}t.exportDefinesTs=e;function r(s,n){let F=[];return{result:s.replace(/\{\{([^}]+)\}\}/g,(C,D)=>{let p=D.trim();return Object.hasOwn(n,p)?n[p]:(F.push(p),C)}),unresolvedKeys:F}}t.replaceDefineTemplates=r})(Cx||={});function $f(x,A,e,r){if(J.isLibrary(x))return{flat:{...A},sections:structuredClone(e),definesWithSource:{...r}}}function qf(x){if(x==="")return{kind:"empty"};if(x.startsWith("#")||x.startsWith(";"))return{kind:"comment",text:x.replace(/^[#;]\s?/,"")};if(x.startsWith("[")&&x.endsWith("]"))return{kind:"section",name:x.slice(1,-1)};let A=x.indexOf("=");return A>0?{kind:"keyValue",key:x.slice(0,A).trim()}:{kind:"other"}}function Tf(x){let A={},e=x.split(/\r?\n/),r=[],t=null;for(let s of e){let n=qf(s.trim());if(n.kind==="empty"||n.kind==="other"){r=[];continue}if(n.kind==="comment"){r.push(n.text);continue}if(n.kind==="section"){t=n.name;continue}let F=t?`${t}_${n.key}`:n.key;r.length>0&&(A[F]=r.join(`
|
|
2209
|
+
`)),r=[]}return A}function Qi(x){let A=x.split(`
|
|
2210
|
+
`);return A.length===1?`/** ${A[0]} */`:`/**
|
|
2211
|
+
${A.map(r=>` * ${r}`).join(`
|
|
2212
|
+
`)}
|
|
2213
|
+
*/`}function Zi(x){return x!==""&&!isNaN(Number(x))}function Pf(x){return(x.split("/").pop()||x).replace(/\.ini$/i,"")}function Aa(x,A,e){let r=A?`${e}: ${A}`:void 0;return x&&r?`${x}
|
|
2214
|
+
${r}`:r||x}function ea(x,A,e,r,t,s,n){let F=t?`${t}_${r}`:r,f={value:x,sourceUri:A,sourceLine:Mf(e,r,t)};return s[F]&&(f.comment=`${n}: ${s[F]}`),f}function Nf(x,A,e,r,t,s,n,F,f){r[x]||(r[x]={});for(let[C,D]of Object.entries(A)){let p=`${x}_${C}`,j=F[p],_=`${D}`;e[p]=_,r[x][C]=_;let k=ea(_,s,n,C,x,F,f);k.comment=Aa(t[p]?.comment,j,f),t[p]=k}}async function cr(x,A,e,r,t,s){if(!await x.stat(A))return;let n=await x.readFile(A),F=wf(n),f=xa.parse(F),C=A.toString(),D=F.split(/\r?\n/),p=Tf(F);for(let[j,_]of Object.entries(f))if(typeof _=="object"&&_!==null)Nf(j,_,e,r,t,C,D,p,s);else{let k=p[j],S=`${_}`;e[j]=S;let T=ea(S,C,D,j,null,p,s);T.comment=Aa(t[j]?.comment,k,s),t[j]=T}}function Mf(x,A,e){let r=e===null,t=e?`[${e}]`:null,s=new RegExp(`^\\s*${If(A)}\\s*=`);for(let n=0;n<x.length;n++){let F=x[n].trim();if(t&&F===t){r=!0;continue}if(r&&F.startsWith("[")&&F.endsWith("]")&&e!==null){r=!1;continue}if(r&&s.test(x[n]))return n}return 0}function If(x){return x.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var Tt=Q0(require("semver/preload")),{GET:Vn,POST:qt,PUT:ra}=(0,ta.default)();function iA(x){if(x)return{authorization:`Bearer ${x}`}}var tx;(_=>{_.getAPIUrl=k=>{let S="https://api.registry.microtronics.com";return k===Cx.ENV.lucky?S="https://api.registry.lucky.ci.microtronics.com":k===Cx.ENV.wynni&&(S="https://api.registry.wynni.ci.microtronics.com"),{baseUrl:S+"/v1"}};async function A(k,S,T,N){let{data:L,error:O}=await Vn("/publisher/{publisherId}/libraries/{libraryId}",{...(0,_.getAPIUrl)(N),headers:{...iA(k)},params:{path:{publisherId:S,libraryId:T}}});if(O)throw new Error(O.reason);return L}_.getLibraryProfile=A;async function e(k,S,T=!1){let N=await fetch(S,{headers:{...iA(k),...j(!0)}});if(N.status===200)return T?await N.json():await N.arrayBuffer();throw new Error("Failed to fetch the library content")}_.fetchCustomContent=e;async function r(k,S,T){try{let{data:N,error:L}=await Vn("/publisher/{publisherId}",{...(0,_.getAPIUrl)(T),headers:{...iA(k)},params:{path:{publisherId:S}}});return L?(console.error(L),null):N}catch(N){return console.error(N),null}}_.getPublisher=r;async function t(k,S,T,N){try{let{data:L,error:O}=await qt("/packages/{publisherId}/applications",{...(0,_.getAPIUrl)(N),headers:{...iA(k),...j(!0)},params:{path:{publisherId:S}},body:{...T}});if(O)throw new Error(O.reason);return L.id}catch{return null}}_.createNewApplication=t;async function s(k,S,T,N){let{data:L,error:O}=await Vn("/publisher/{publisherId}/applications/{applicationId}",{...(0,_.getAPIUrl)(N),headers:{...iA(k),...j(!0)},params:{path:{publisherId:S,applicationId:T}}});if(O)throw new Error(O.reason);return L}_.getExistingApplication=s;async function n(k,S,T,N,L){try{let{error:O}=await ra("/packages/{publisherId}/applications/{applicationId}",{...(0,_.getAPIUrl)(L),headers:{...iA(k),...j(!0)},params:{path:{publisherId:S,applicationId:T}},body:{...N}});if(O)throw new Error(O.reason);return}catch{return null}}_.updateExistingApplication=n;async function F(k,S,T,N,L,O){let i0=!!Tt.default.valid(N);try{let{error:R}=await ra("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,_.getAPIUrl)(O),headers:{...iA(k),...j(i0)},params:{path:{publisherId:S,applicationId:T,applicationVersion:N}},body:{...L}});if(R)throw new Error(R.reason);return}catch{return null}}_.updateExistingApplicationVersion=F;async function f(k,S,T,N,L,O){let i0=!!Tt.default.valid(N),{data:R,error:g}=await qt("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,_.getAPIUrl)(O),headers:{...iA(k),...j(i0)},params:{path:{publisherId:S,applicationId:T,applicationVersion:N}},body:{},bodySerializer(){return L}});if(g)throw new Error(g.reason||g.err||g);return R}_.publishApplicationVersion=f;let C={"README.md":"text/markdown","CHANGELOG.md":"text/markdown","library.tar.gz":"application/gzip","studio.json":"application/json"};async function D(k,S,T,N,L,O){try{let{error:i0}=await qt("/packages/{publisherId}/libraries/{libraryId}/versions/{libraryVersion}",{...(0,_.getAPIUrl)(O),headers:{...iA(k),...j(!0)},params:{path:{publisherId:S,libraryId:T,libraryVersion:N}},body:{...L},bodySerializer(R){let g=new FormData;for(let[I,Y]of Object.entries(R))Y!==void 0&&g.append(I,new Blob([Y],{type:C[I]}),I);return g}});if(i0)throw new Error(i0.reason)}catch(i0){throw console.error(i0),i0}}_.publishLibraryVersion=D;async function p(k,S,T,N,L,O,i0){let R=!!Tt.default.valid(N),{error:g}=await qt("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}/files/{applicationFileName}",{...(0,_.getAPIUrl)(i0),headers:{...iA(k),...j(R),"Content-Type":"application/octet-stream"},params:{path:{publisherId:S,applicationId:T,applicationVersion:N,applicationFileName:L}},body:{},bodySerializer(){return O}});if(g)throw new Error(g.reason)}_.updateApplicationFile=p;function j(k=!1){return k?{"X-Semver":"true"}:{}}_.injectSemverHeader=j})(tx||={});var ho=Q0(require("semver/preload"));var ne=require("vscode-uri");var Oe=require("vscode-uri");var dx=require("vscode-uri");var ka=Q0(require("ajv")),_a=Q0(require("ajv-formats"));var na={$schema:"http://json-schema.org/draft-07/schema#",title:"Dynamic DDE Schema",description:"Describe your data structure for Microtronics IoT devices",type:"object",additionalProperties:!1,properties:{dde:{type:"string",default:"1.0.0",readOnly:!0,description:"Version of the DDE schema. Do not modify this value.",markdownDescription:`Version of the DDE schema.
|
|
2215
|
+
|
|
2216
|
+
\u26A0\uFE0F **Do not modify this value.**`},cloudProject:{type:"boolean",description:"Indicates whether this is a cloud project.",markdownDescription:"Indicates whether this is a cloud project.\n\nWhen set to `false`, certain containers and top-level custom containers are restricted."},constants:{type:"object",description:"Declare constants that can be used across the YAML file.",markdownDescription:"Declare constants that can be referenced and used across the YAML file."},state:{$ref:"#/$defs/stateContainer"},result:{$ref:"#/$defs/resultContainer"},volatile:{$ref:"#/$defs/volatileContainer"},timeseries:{type:"object",description:"Define time-series data channels for recording measurements.",markdownDescription:"Define time-series data channels for recording measurements.\n\n**Limits:** Maximum 9 fields.\n\n**Naming rules:**\n- Must start with a letter or `_`\n- May contain letters, digits, and `_`\n- Names like `field0`, `ch0`, etc. are **not allowed**\n- Reserved names (`_id`, `id`, `_stamp`, `stamp`, `tag`, `_uid`, `customer_id`, `site_id`, `_rec_flags__`, `applog`) are **not allowed**",additionalProperties:!1,maxProperties:9,errorMessage:{maxProperties:"The timeseries container supports a maximum of 9 fields."},properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a timeseries field."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a timeseries field."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a timeseries field."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a timeseries field."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a timeseries field."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a timeseries field."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a timeseries field."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a timeseries field."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a timeseries field."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a timeseries field."}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{$ref:"#/$defs/timeseriesFields"}}},aloha:{type:"object",description:"Special container to transport live data during put-into-operation procedures.",markdownDescription:`Special container to transport **live data** during put-into-operation procedures.
|
|
2217
|
+
|
|
2218
|
+
Used for real-time data exchange between device and server during commissioning.`,$ref:"#/$defs/alohaContainer"},setting:{$ref:"#/$defs/settingContainer"},command:{$ref:"#/$defs/commandContainer"},storage:{$ref:"#/$defs/serverStorageContainer"},relations:{$ref:"#/$defs/serverRelationsContainer"}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)(?!(dde|cloudProject|constants|state|result|volatile|timeseries|aloha|setting|command|storage|relations))[a-zA-Z_][0-9a-zA-Z_]*$":{type:"object",description:"Custom configuration container. Field names must start with a letter or underscore and may contain letters, digits, and underscores.",$ref:"#/$defs/configurationFields"}},allOf:[{if:{properties:{cloudProject:{const:!1}}},then:{type:"object",additionalProperties:!1,errorMessage:{additionalProperties:"Non-cloud projects only allow standard containers (state, result, volatile, timeseries, aloha, setting, command, storage, relations). Set 'cloudProject' to true to use custom top-level containers."},properties:{dde:{type:"string",default:"1.0.0",readOnly:!0,description:"Version of the DDE schema. Do not modify this value."},cloudProject:{type:"boolean"},constants:{type:"object",description:"Declare constants that can be used across the YAML file."},state:{$ref:"#/$defs/stateContainer"},result:{$ref:"#/$defs/resultContainer"},volatile:{$ref:"#/$defs/volatileContainer"},timeseries:{type:"object",description:"Define time-series data channels for recording measurements.",additionalProperties:!1,maxProperties:9,errorMessage:{maxProperties:"The timeseries container supports a maximum of 9 fields."},properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a timeseries field."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a timeseries field."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a timeseries field."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a timeseries field."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a timeseries field."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a timeseries field."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a timeseries field."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a timeseries field."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a timeseries field."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a timeseries field."}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{$ref:"#/$defs/timeseriesFields"}}},aloha:{type:"object",description:"Special container to transport live data during put-into-operation procedures.",$ref:"#/$defs/alohaContainer"},setting:{$ref:"#/$defs/settingContainer"},command:{$ref:"#/$defs/commandContainer"},storage:{$ref:"#/$defs/serverStorageContainer"},relations:{$ref:"#/$defs/serverRelationsContainer"}}}}],$defs:{stateContainer:{type:"object",title:"state - Transferred from the device",description:"Use this container for low-frequency state changes. Data is transferred from the device to the server.",markdownDescription:`**state** \u2013 Transferred from the device
|
|
2219
|
+
|
|
2220
|
+
Use this container for **low-frequency state changes**.
|
|
2221
|
+
|
|
2222
|
+
Data is transferred from the device to the server.`,$ref:"#/$defs/configurationFields"},resultContainer:{type:"object",title:"result - Transferred from the device",description:"Use this container for higher-frequency changes, e.g. responses to an executed command. Data is transferred from the device to the server.",markdownDescription:`**result** \u2013 Transferred from the device
|
|
2223
|
+
|
|
2224
|
+
Use this container for **higher-frequency changes**, e.g. responses to an executed command.
|
|
2225
|
+
|
|
2226
|
+
Data is transferred from the device to the server.`,$ref:"#/$defs/configurationFields"},volatileContainer:{type:"object",title:"volatile - Transferred from the device",description:"Container is not persisted on the device. Common use case: transaction responses. Use 'DDE_volatile_persist()' to persist this data.",markdownDescription:`**volatile** \u2013 Transferred from the device
|
|
2227
|
+
|
|
2228
|
+
Container is **not persisted** on the device.
|
|
2229
|
+
|
|
2230
|
+
Common use case: transaction responses.
|
|
2231
|
+
|
|
2232
|
+
If you want to persist this data, use \`DDE_volatile_persist()\`.`,$ref:"#/$defs/configurationFields"},alohaContainer:{type:"object",title:"aloha - Transferred from the device",description:"A special container to transport live data during put-into-operation procedures.",markdownDescription:`**aloha** \u2013 Transferred from the device
|
|
2233
|
+
|
|
2234
|
+
A special container to transport **live data** during put-into-operation procedures.`,$ref:"#/$defs/configurationFields"},settingContainer:{type:"object",title:"setting - Transferred to the device",description:"Use this container for low-frequency changes, e.g. application settings like a transfer interval. Data is transferred from the server to the device.",markdownDescription:`**setting** \u2013 Transferred to the device
|
|
2235
|
+
|
|
2236
|
+
Use this container for **low-frequency changes**, e.g. application settings like a transfer interval.
|
|
2237
|
+
|
|
2238
|
+
Data is transferred from the server to the device.`,$ref:"#/$defs/configurationFields"},commandContainer:{type:"object",title:"command - Transferred to the device",description:"Use this container for high-frequency changes, e.g. changing the state of a physical output. Data is transferred from the server to the device.",markdownDescription:`**command** \u2013 Transferred to the device
|
|
2239
|
+
|
|
2240
|
+
Use this container for **high-frequency changes**, e.g. changing the state of a physical output.
|
|
2241
|
+
|
|
2242
|
+
Data is transferred from the server to the device.`,$ref:"#/$defs/configurationFields"},serverStorageContainer:{type:"object",title:"storage - Server only",description:"Use this container to store any POV or BLO related settings. This data is only stored on the server and not transferred to the device.",markdownDescription:`**storage** \u2013 Server only
|
|
2243
|
+
|
|
2244
|
+
Use this container to store any **POV** or **BLO** related settings.
|
|
2245
|
+
|
|
2246
|
+
This data is only stored on the server and **not transferred** to the device.`,$ref:"#/$defs/configurationFields"},serverRelationsContainer:{type:"object",title:"relations - Server only",description:"Use this container to store field-related configuration. This data is only stored on the server.",markdownDescription:`**relations** \u2013 Server only
|
|
2247
|
+
|
|
2248
|
+
Use this container to store **field-related configuration**.
|
|
2249
|
+
|
|
2250
|
+
This data is only stored on the server.`,$ref:"#/$defs/configurationFields"},configurationFields:{type:"object",description:"Fields of the container. Field names must start with a letter or underscore, and may contain letters, digits, and underscores. Names like 'field0', 'ch0', etc. are not allowed.",markdownDescription:"Fields of the container.\n\n**Naming rules:**\n- Must start with a letter or `_`\n- May contain letters, digits, and `_`\n- Names like `field0`, `ch0`, etc. are **not allowed**\n- Reserved names (`_id`, `id`, `_stamp`, `stamp`, `tag`, `_uid`, `customer_id`, `site_id`, `_rec_flags__`, `applog`) are **not allowed**",additionalProperties:!1,errorMessage:{additionalProperties:"Invalid field name. Field names must start with a letter or underscore, may contain letters, digits, and underscores. Names matching 'fieldN' or 'chN' patterns and reserved names (_id, id, _stamp, stamp, tag, _uid, customer_id, site_id, _rec_flags__, applog) are not allowed."},$ref:"#/$defs/reservedNamesFieldNames",properties:{},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{allOf:[{$ref:"#/$defs/defaultFieldProperties"},{$ref:"#/$defs/configArrayDefinition"}]}}},timeseriesFields:{type:"object",description:"Timeseries fields of the container. Supports additional chart and channel properties compared to configuration fields.",markdownDescription:`Timeseries fields of the container.
|
|
2251
|
+
|
|
2252
|
+
Supports additional **chart** and **channel** properties compared to configuration fields.`,additionalProperties:!1,errorMessage:{additionalProperties:"Invalid field name. Field names must start with a letter or underscore, may contain letters, digits, and underscores. Names matching 'fieldN' or 'chN' patterns and reserved names are not allowed."},$ref:"#/$defs/reservedNamesFieldNames",patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{allOf:[{$ref:"#/$defs/defaultFieldProperties"},{type:"object",properties:{channelMode:{type:["string","number"],description:"Defines how values are treated upon aggregation. Applies to numeric fields only.",markdownDescription:"Defines how values are treated upon aggregation.\n\n**Applies to numeric fields only.**\n\nOptions:\n- `digital` \u2013 Treatment as digital value (0 or 1)\n- `day-counter` \u2013 Counter reset once per day\n- `interval-counter` \u2013 Counter reset on each recording\n- `analog` \u2013 (default) Normal measurement value\n- `infinite-counter` \u2013 Counter that is never reset\n- Relation link (`@container.field`)",anyOf:[{const:"digital",description:"Treatment as digital value. The raw value should be 0 or 1."},{const:"day-counter",description:"A counter which is reset once per day"},{const:"interval-counter",description:"A counter which is reset on each recording"},{const:"analog",description:"(default) - A 'normal' measurement value. E.g. temperature"},{const:"infinite-counter",description:"A counter which is never reset, e.g. water- or electricity meter."},{$ref:"#/$defs/relationLinkPattern"}]},chartAlarmLow:{title:"Chart Alarm Low",$ref:"#/$defs/chartAlarmWarn"},chartAlarmHigh:{title:"Chart Alarm High",$ref:"#/$defs/chartAlarmWarn"},chartWarningLow:{title:"Chart Warning Low",$ref:"#/$defs/chartAlarmWarn"},chartWarningHigh:{title:"Chart Warning High",$ref:"#/$defs/chartAlarmWarn"},chartHysteresis:{title:"Chart Hysteresis",type:["number","string"],description:"The server uses this property to show a hysteresis in charts. The value is in %. Requires 'chartWarningX' and/or 'chartAlarmX'.",markdownDescription:"The server uses this property to show a **hysteresis** in charts.\n\nThe value is in **%**.\n\n\u26A0\uFE0F Requires `chartWarningX` and/or `chartAlarmX` to be set.",$ref:"#/$defs/relationLinkPattern"},chartTriggerThreshold:{title:"Chart Trigger Threshold",type:["number","string"],description:"The server uses this property to show a trigger threshold in charts.",markdownDescription:"The server uses this property to show a **trigger threshold** in charts.",$ref:"#/$defs/relationLinkPattern"},chartTriggerRelation:{title:"Chart Trigger Relation",type:["string"],description:"Defines if the 'chartTriggerThreshold' displays as overshoot or undershoot. Requires 'chartTriggerThreshold' to be set.",markdownDescription:"Defines if the `chartTriggerThreshold` displays as **overshoot** or **undershoot**.\n\n\u26A0\uFE0F Requires `chartTriggerThreshold` to be set.",anyOf:[{title:"Greater or equal",description:"Highlights the measurement value if it is greater or equal the 'chartTriggerThreshold'.",const:"greater-or-equal"},{title:"Less or equal",description:"Highlights the measurement value if it is less or equal the 'chartTriggerThreshold'.",const:"less-or-equal"},{$ref:"#/$defs/relationLinkPattern"}]},chartSetPoint:{title:"Chart Set Point",type:["string"],description:"Used to report the actual state of the referenced value. The server will display a pending information if the value is not transmitted yet.",markdownDescription:`Used to report the actual state of the referenced value.
|
|
2253
|
+
|
|
2254
|
+
The server will display a **pending** indicator if the value has not been transmitted yet.`,$ref:"#/$defs/setPointRelationPattern"}},dependencies:{chartTriggerRelation:{required:["chartTriggerThreshold"],errorMessage:"'chartTriggerRelation' requires 'chartTriggerThreshold' to also be defined."}}},{$ref:"#/$defs/timeseriesArrayDefinition"}]}}},reservedNamesFieldNames:{type:"object",properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a field name."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a field name."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a field name."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a field name."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a field name."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a field name."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a field name."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a field name."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a field name."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a field name."}}},defaultFieldProperties:{type:"object",additionalProperties:!1,properties:{type:{$ref:"#/$defs/dataTypes"},title:{type:"string",description:"Title to describe the field's content within the portal.",markdownDescription:"Title to describe the field's content within the portal.\n\nCan also reference a relation using `@container.field` syntax."},description:{type:"string",description:"Description what this field is about."},array:{type:"number",description:"Length of the array. Must be between 1 and 1024.",markdownDescription:`Length of the array.
|
|
2255
|
+
|
|
2256
|
+
**Range:** 1\u20131024`,minimum:1,inclusiveMaximum:1024},unit:{type:"string",description:"Unit information to be shown in the default POV (e.g. 'kg', '\xB0C', 'V').",markdownDescription:"Unit information to be shown in the default POV.\n\n**Examples:** `kg`, `\xB0C`, `V`, `%`\n\nCan also reference a relation using `@container.field` syntax."},hex:{type:"boolean",description:"Server-side processing. Declares if this field should be displayed as HEX string. The API will also process the field as HEX.",markdownDescription:`Server-side processing. Declares if this field should be displayed as **HEX** string.
|
|
2257
|
+
|
|
2258
|
+
The API will also process the field as HEX.`},decimalPlaces:{$ref:"#/$defs/decimalPlaces"},writePermission:{description:"User level required for editing. Applies for down containers only (setting, command).",markdownDescription:"User level required for editing.\n\n**Applies for down containers only** (`setting`, `command`).\n\nSet to `read-only` to prevent editing.",anyOf:[{$ref:"#/$defs/userLevel"},{const:"read-only",title:"Read only",description:"Field can not be edited."}]},readPermission:{description:"User level required for viewing.",markdownDescription:"User level required for viewing this field.",$ref:"#/$defs/userLevel"},bytes:!0,fields:!0,length:!0,defaultValue:!0,channelMode:!0,scale:!0,offset:!0,chartMinimum:!0,chartMaximum:!0,chartAlarmLow:!0,chartAlarmHigh:!0,chartWarningLow:!0,chartWarningHigh:!0,chartHysteresis:!0,chartTriggerThreshold:!0,chartTriggerRelation:!0,chartSetPoint:!0,utilsTransferInterval:!0,shadowFields:{type:"object",deprecated:!0,title:"DEPRECATED",description:"Allows defining multiple fields within the same memory space. This property is deprecated and should not be used in new projects.",markdownDescription:`\u26A0\uFE0F **DEPRECATED**
|
|
2259
|
+
|
|
2260
|
+
Allows defining multiple fields within the same memory space.
|
|
2261
|
+
|
|
2262
|
+
This property is deprecated and should not be used in new projects.`,$ref:"#/$defs/configurationFields"},bitmask:{type:"string",title:"Bitmask",description:"Defines what bits of the according data type are used for storage. Must be a hex (0x...) or binary (0b...) string.",markdownDescription:"Defines what bits of the according data type are used for storage.\n\n**Formats:**\n- Hexadecimal: `0xAB CD` (prefix `0x`, hex digits and spaces)\n- Binary: `0b1010 0101` (prefix `0b`, binary digits and spaces)",anyOf:[{default:'"0x"',pattern:"^0x[0-9A-F ]+$",patternErrorMessage:"Hexadecimal bitmask must start with '0x' followed by uppercase hex digits (0-9, A-F) and optional spaces (e.g. '0xFF' or '0xFF 00').",description:"Bitmask defined as hexadecimal. Defines what bits of the according data type are used for storage."},{default:'"0b"',pattern:"^0b[0-1 ]+$",patternErrorMessage:"Binary bitmask must start with '0b' followed by binary digits (0, 1) and optional spaces (e.g. '0b11110000' or '0b1111 0000').",description:"Bitmask defined as binary. Defines what bits of the according data type are used for storage."}]}},required:["type"],errorMessage:{required:{type:"Every field must have a 'type' property specifying its data type."}},allOf:[{if:{description:"Force the byte amount if datatype is binary",properties:{type:{enum:["binary"]}}},then:{properties:{bytes:{type:"number",description:"Number of bytes for binary data. Required when type is 'binary'.",markdownDescription:"Number of bytes for binary data.\n\n**Required** when type is `binary`."},defaultValue:{type:"string",description:"Default value as hex (e.g. '0xFF 00'). Must start with '0x'.",markdownDescription:"Default value as hex.\n\n**Format:** `0x` followed by uppercase hex digits and optional spaces.\n\n**Example:** `0xFF 00`",pattern:"^0x[0-9A-F ]+$",patternErrorMessage:"Default value for binary type must be a hex string starting with '0x' followed by uppercase hex digits (0-9, A-F) and optional spaces."}},required:["bytes"],errorMessage:{required:{bytes:"The 'bytes' property is required when type is 'binary'. Specify the number of bytes."}}},else:{properties:{bytes:{not:{},errorMessage:"The 'bytes' property is only allowed when type is 'binary'."}}}},{if:{description:"Special handling for string types",properties:{type:{enum:["astring","nstring","cstring","wstring","ustring"]}}},then:{properties:{length:{type:"number",description:"Length of the string. Required for string types. Must be at least 1.",markdownDescription:"Length of the string.\n\n**Required** for string types (`astring`, `nstring`, `cstring`, `wstring`, `ustring`).\n\n**Minimum:** 1",minimum:1},defaultValue:{type:"string",description:"Default string value for this field."}},required:["length"],errorMessage:{required:{length:"The 'length' property is required for string types (astring, nstring, cstring, wstring, ustring). Specify the string length."}}}},{if:{properties:{type:{enum:["int8","int16","int32","int64","uint8","uint16","uint32","float16","float32","float64"]}}},then:{properties:{decimalPlaces:{$ref:"#/$defs/decimalPlaces"},defaultValue:{type:["number","string"],description:"Default value for this field. Use a number or 'NaN'.",markdownDescription:"Default value for this field.\n\nAccepts a **number** or the string `NaN`.",pattern:"^NaN$",patternErrorMessage:"String default values for numeric types must be 'NaN'. Use a number for other default values."},chartMinimum:{type:["number","string"],description:"Disables auto scaling of lower range in POV charts.",markdownDescription:"Disables **auto scaling** of the lower range in POV charts.\n\nAccepts a number or a relation link (`@container.field`).",$ref:"#/$defs/relationLinkPattern"},chartMaximum:{type:["number","string"],description:"Disables auto scaling of higher range in POV charts.",markdownDescription:"Disables **auto scaling** of the higher range in POV charts.\n\nAccepts a number or a relation link (`@container.field`).",$ref:"#/$defs/relationLinkPattern"},scale:{type:["number","string"],title:"Scale the raw value",description:"Server-side processing. Applies to POV and API. Formula: scaled = raw \xD7 scale + offset",markdownDescription:"Server-side processing. Applies to POV and API.\n\n**Formula:** `scaled = raw \xD7 scale + offset`\n\nAccepts a number or a relation link (`@container.field`).",$ref:"#/$defs/relationLinkPattern"},offset:{type:["number","string"],title:"Add an offset to the raw value",description:"Server-side processing. Applies to POV and API. Formula: scaled = raw \xD7 scale + offset",markdownDescription:"Server-side processing. Applies to POV and API.\n\n**Formula:** `scaled = raw \xD7 scale + offset`\n\nAccepts a number or a relation link (`@container.field`).",$ref:"#/$defs/relationLinkPattern"},utilsTransferInterval:{title:"Transfer Interval",type:["boolean"],description:"Indicates the server that this field should be used for the remaining time until next connection. Field value has to be in seconds.",markdownDescription:`Indicates the server that this field should be used for the **remaining time until next connection**.
|
|
2263
|
+
|
|
2264
|
+
Field value has to be in **seconds**.`}}},else:{properties:{decimalPlaces:{not:{},errorMessage:"'decimalPlaces' is only allowed for numeric types (int8, int16, int32, int64, uint8, uint16, uint32, float16, float32, float64)."},chartMinimum:{not:{},errorMessage:"'chartMinimum' is only allowed for numeric types (int8, int16, int32, int64, uint8, uint16, uint32, float16, float32, float64)."},chartMaximum:{not:{},errorMessage:"'chartMaximum' is only allowed for numeric types (int8, int16, int32, int64, uint8, uint16, uint32, float16, float32, float64)."},scale:{not:{},errorMessage:"'scale' is only allowed for numeric types (int8, int16, int32, int64, uint8, uint16, uint32, float16, float32, float64)."},offset:{not:{},errorMessage:"'offset' is only allowed for numeric types (int8, int16, int32, int64, uint8, uint16, uint32, float16, float32, float64)."}}}},{if:{description:"Enable regex relation validation if the string starts with @",properties:{title:{pattern:"^(?=@)"}}},then:{properties:{title:{$ref:"#/$defs/relationLinkPattern"}}}},{if:{description:"Enable regex relation validation if the string starts with @",properties:{unit:{pattern:"^(?=@)"}}},then:{properties:{unit:{$ref:"#/$defs/relationLinkPattern"}}}}]},dataTypes:{type:"string",description:"Data type of the field. Integer types: int8, int16, int32, int64, uint8, uint16, uint32. Float types: float16, float32, float64. Binary: binary. Timestamps: stamp32, stamp40. Strings: astring, nstring, cstring, wstring, ustring. Composite: array.",markdownDescription:"Data type of the field.\n\n**Integer types:** `int8`, `int16`, `int32`, `int64`, `uint8`, `uint16`, `uint32`\n\n**Float types:** `float16`, `float32`, `float64`\n\n**Binary:** `binary`\n\n**Timestamps:** `stamp32`, `stamp40`\n\n**Strings:** `astring`, `nstring`, `cstring`, `wstring`, `ustring`\n\n**Composite:** `array`",anyOf:[{const:"int8",title:"int8",description:`Signed integer 8bit
|
|
2265
|
+
Range: -128 \u2026 127`},{const:"int16",title:"int16",description:`Signed integer 16bit
|
|
2266
|
+
Range: -32768 \u2026 32767`},{const:"int32",title:"int32",description:`Signed integer 32bit
|
|
2267
|
+
Range: -\u202D2147483648 \u2026 \u202D2147483647\u202C`},{const:"int64",title:"int64",description:`Signed integer 64bit
|
|
2268
|
+
Range: -9.223e+15 \u2026 \u202D9.223e+15
|
|
2269
|
+
DLO natively supports s32 (a 'cell') only. Therefore s64
|
|
2270
|
+
- is implemented as binary buffer
|
|
2271
|
+
- u8[8] does not support maths`},{const:"uint8",title:"uint8",description:`Unsigned integer 8bit
|
|
2272
|
+
Range: 0 \u2026 255 (0xff)`},{const:"uint16",title:"uint16",description:`Unsigned integer 16bit
|
|
2273
|
+
Range: 0 \u2026 65535 (0xffff)`},{const:"uint32",title:"uint32",description:`Unsigned integer 32bit
|
|
2274
|
+
Range: 0 \u2026 \u202D4294967295\u202C (0xffffffff)
|
|
2275
|
+
Limited support in DLO due to s32 cell size.`},{const:"float16",title:"float16",description:`Floating point 16bit
|
|
2276
|
+
Range: \xB19.76e-4 \u2026 \xB11.048e+6
|
|
2277
|
+
- half precision
|
|
2278
|
+
- 3 significant digits`},{const:"float32",title:"float32",description:`Floating point 32bit
|
|
2279
|
+
Range: \xB11.18e\u221238 \u2026 \xB13.4e+38
|
|
2280
|
+
- single precision
|
|
2281
|
+
- approx. 7 significant digits`},{const:"float64",title:"float64",description:`Floating point 64bit
|
|
2282
|
+
Range: \xB12.23e\u2212308 \u2026 \xB11.80e+308
|
|
2283
|
+
- double precision
|
|
2284
|
+
- approx. 16 significant digits
|
|
2285
|
+
DLO natively supports f32 (a 'Float:cell') only. Therefore f64
|
|
2286
|
+
- is implemented as binary buffer
|
|
2287
|
+
- u8[8] does not support maths`},{const:"binary",title:"binary",description:`Binary blob.
|
|
2288
|
+
Packs 4 bytes per 'cell'. Uses always a full multiple of 'cells' for storage.`},{const:"stamp32",title:"stamp32",description:`Timestamp UTC.
|
|
2289
|
+
Resolution: 1 second
|
|
2290
|
+
Seconds since 1999-12-31 00:00:00 UTC`},{const:"stamp40",title:"stamp40",description:`Timestamp UTC extended accuracy.
|
|
2291
|
+
Resolution: 1/256 second
|
|
2292
|
+
Seconds since 1999-12-31 00:00:00 UTC`},{const:"array",title:"Array",description:"Array of parameters. Requires 'length' and 'fields' properties."},{const:"astring",title:"astring",description:`ANSI CP-1252 stored as 8bit ANSI.
|
|
2293
|
+
Character codes 0x01 \u2026 0xFF are by default assigned to CP-1252 (0x00 is reserved for terminating zero).
|
|
2294
|
+
Requires the 'length' property.`},{const:"nstring",title:"nstring",description:`Named string type.
|
|
2295
|
+
Requires the 'length' property.`},{const:"cstring",title:"cstring",description:`ANSI with custom codepage stored as binary.
|
|
2296
|
+
Requires the 'length' property.`},{const:"wstring",title:"wstring",description:`Unicode utf-32 stored as utf-8.
|
|
2297
|
+
Use this type only if Unicode is required and your DLO routines insist on utf-32 encoded strings.
|
|
2298
|
+
Requires the 'length' property.`},{const:"ustring",title:"ustring",description:`Unicode utf-8 stored as utf-8.
|
|
2299
|
+
Use this type only if Unicode is required and your DLO routines (such as display drivers) are able to deal with utf-8 encoded strings.
|
|
2300
|
+
Requires the 'length' property.`}]},userLevel:{type:"string",description:"User permission level. Ranges from UL1 (Customer operator) to UL7 (Administrator).",markdownDescription:"User permission level.\n\n| Level | Role |\n|-------|------|\n| `UL1` | Customer operator |\n| `UL2` | Customer administrator |\n| `UL3` | Provider operator |\n| `UL4` | Provider administrator |\n| `UL6` | Rights administrator |\n| `UL7` | Administrator |\n| `UL8+` | Custom levels |",anyOf:[{const:"UL1",title:"UL1 - Customer operator",description:"Customer operator"},{const:"UL2",title:"UL2 - Customer administrator",description:"Customer administrator"},{const:"UL3",title:"UL3 - Provider operator",description:"Provider operator"},{const:"UL4",title:"UL4 - Provider administrator",description:"Provider administrator"},{const:"UL6",title:"UL6 - Rights administrator",description:"Rights administrator"},{const:"UL7",title:"UL7 - Administrator",description:"Administrator"},{pattern:"UL([7-9]|[1-9][0-9])",patternErrorMessage:"Custom user level must match the pattern 'ULN' where N is 7 or higher (e.g. 'UL8', 'UL10').",description:"Custom user level (UL7 or higher)"}]},configArrayDefinition:{if:{description:"Handle array definition",properties:{type:{const:"array"}}},then:{properties:{fields:{$ref:"#/$defs/configurationFields"},length:{type:"number",description:"Size of the array. Must be between 1 and 1024.",markdownDescription:`Size of the array.
|
|
2301
|
+
|
|
2302
|
+
**Range:** 1\u20131024`,minimum:1,inclusiveMaximum:1024},array:{not:{},errorMessage:"The 'array' property is not allowed when type is 'array'. Use 'length' to define the array size."},title:{not:{},errorMessage:"The 'title' property is not allowed when type is 'array'."}},required:["length","fields"],errorMessage:{required:{length:"The 'length' property is required when type is 'array'. Specify the array size.",fields:"The 'fields' property is required when type is 'array'. Define the array's sub-fields."}}},else:{properties:{fields:{not:{},errorMessage:"The 'fields' property is only allowed when type is 'array'."}}}},timeseriesArrayDefinition:{if:{description:"Handle array definition",properties:{type:{const:"array"}}},then:{properties:{fields:{$ref:"#/$defs/timeseriesFields"},length:{type:"number",description:"Size of the array. Must be between 1 and 1024.",markdownDescription:`Size of the array.
|
|
2303
|
+
|
|
2304
|
+
**Range:** 1\u20131024`,minimum:1,inclusiveMaximum:1024},array:{not:{},errorMessage:"The 'array' property is not allowed when type is 'array'. Use 'length' to define the array size."},title:{not:{},errorMessage:"The 'title' property is not allowed when type is 'array'."}},required:["length","fields"],errorMessage:{required:{length:"The 'length' property is required when type is 'array'. Specify the array size.",fields:"The 'fields' property is required when type is 'array'. Define the array's sub-fields."}}},else:{properties:{fields:{not:{},errorMessage:"The 'fields' property is only allowed when type is 'array'."}}}},decimalPlaces:{type:["number","string"],description:"Number of decimal places to show. Applies to POV and API. Only valid for numeric types.",markdownDescription:`Number of decimal places to show.
|
|
2305
|
+
|
|
2306
|
+
Applies to POV and API. Only valid for numeric types.
|
|
2307
|
+
|
|
2308
|
+
Accepts a number (\u2265 0) or a relation link (\`@container.field\`).`,minimum:0,$ref:"#/$defs/relationLinkPattern"},relationLinkPattern:{anyOf:[{pattern:"^(@[a-zA-Z_][a-zA-Z0-9_]*\\.[a-zA-Z_][a-zA-Z0-9_]*(\\[[^\\]]+\\])?(\\.[a-zA-Z_][a-zA-Z0-9_]*)*|lib:[a-zA-Z0-9_-]+@[a-zA-Z_][a-zA-Z0-9_]*\\.[a-zA-Z_][a-zA-Z0-9_]*(\\[[^\\]]+\\])?(\\.[a-zA-Z_][a-zA-Z0-9_]*)*)$",patternErrorMessage:"Relation link must match the format '@container.field' or 'lib:library-name@container.field'. Optional array index '[index]' and nested paths are supported (e.g. '@setting.myField', '@state.data[0].value', 'lib:my-lib@setting.param')."}]},setPointRelationPattern:{anyOf:[{pattern:"^(@[a-zA-Z_][a-zA-Z0-9_]*\\.[a-zA-Z_][a-zA-Z0-9_]*(\\[[^\\]]+\\])?(\\.[a-zA-Z_][a-zA-Z0-9_]*)*|lib:[a-zA-Z0-9_-]+@[a-zA-Z_][a-zA-Z0-9_]*\\.[a-zA-Z_][a-zA-Z0-9_]*(\\[[^\\]]+\\])?(\\.[a-zA-Z_][a-zA-Z0-9_]*)*)$",patternErrorMessage:"Set point relation must match the format '@container.field' or 'lib:library-name@container.field' (e.g. '@setting.targetTemperature')."},{const:'"@setting."',description:"Relation link to container setting",title:"Relation link to container setting"},{const:'"@command."',description:"Relation link to container control",title:"Relation link to container control"}]},chartAlarmWarn:{type:["number","string"],description:"The server uses this property to show the threshold in charts and gauges. Important: This does not activate any alarming. This must be done in the DLO.",markdownDescription:`The server uses this property to show the **threshold** in charts and gauges.
|
|
2309
|
+
|
|
2310
|
+
\u26A0\uFE0F **Important:** This does not activate any alarming. Alarming must be implemented in the DLO.
|
|
2311
|
+
|
|
2312
|
+
Accepts a number or a relation link (\`@container.field\`).`,$ref:"#/$defs/relationLinkPattern"}}};var Kt=require("yaml");var ue=require("yaml");var Zr;(A=>A.CODE={ddeFieldLength:"field_name_length"})(Zr||={});var R0;(H=>{let x;(B0=>(B0.state="state",B0.result="result",B0.aloha="aloha",B0.volatile="volatile",B0.setting="setting",B0.command="command",B0.storage="storage",B0.relations="relations"))(x=H.DDEContainerName||={});let A;(E0=>(E0.configA="configA",E0.configB="configB",E0.configC="configC",E0.config0="config0",E0.config1="config1",E0.config2="config2",E0.config3="config3",E0.config4="config4",E0.config5="config5",E0.config6="config6",E0.config7="config7",E0.config8="config8",E0.config9="config9",E0.histdata0="histdata0",E0.histdata1="histdata1",E0.histdata2="histdata2",E0.histdata3="histdata3",E0.histdata4="histdata4",E0.histdata5="histdata5",E0.histdata6="histdata6",E0.histdata7="histdata7",E0.histdata8="histdata8",E0.histdata9="histdata9",E0.aloha="aloha",E0.alerts="alerts",E0.applog="applog"))(A=H.ContainerName||={});let e;(U=>(U.cx="cx",U.hx="hx",U.cb="cb",U.aloha="aloha",U.applog="applog"))(e=H.ContainerType||={});let r;(q0=>(q0.up="up",q0.down="down",q0.upPlus="up+",q0.downPlus="down+",q0.none="none",q0.backendOnly="backend-only",q0.deviceOnly="device-only",q0.both="both",q0.bothPlus="both+",q0.noneBackend="none-be"))(r=H.TransferDirection||={});function t(K,a0){return K==="cx"&&!["backend-only"].includes(a0)?"DDE_CID_CONFIG":K==="hx"?"DDE_CID_HISTDATA":K==="aloha"?"DDE_CID_ALOHA":null}H.CONTAINER_DEF_DLO_CID_BASE=t;let s=["up","up+","down","down+","both","none","both+","backend-only","device-only"],n=["up","up+","backend-only"];H.CONTAINER_DEFS={configA:{ctype:"cb",cnum:"a",alias:"",flds:"field",xmits:["backend-only"]},configB:{ctype:"cb",cnum:"b",alias:"",flds:"field",xmits:["backend-only"]},configC:{ctype:"cb",cnum:"c",alias:"",flds:"field",xmits:["backend-only"]},config0:{ctype:"cx",cnum:0,alias:"",flds:"field",xmits:s},config1:{ctype:"cx",cnum:1,alias:"",flds:"field",xmits:s},config2:{ctype:"cx",cnum:2,alias:"",flds:"field",xmits:s},config3:{ctype:"cx",cnum:3,alias:"",flds:"field",xmits:s},config4:{ctype:"cx",cnum:4,alias:"",flds:"field",xmits:s},config5:{ctype:"cx",cnum:5,alias:"",flds:"field",xmits:s},config6:{ctype:"cx",cnum:6,alias:"",flds:"field",xmits:s},config7:{ctype:"cx",cnum:7,alias:"",flds:"field",xmits:s},config8:{ctype:"cx",cnum:8,alias:"",flds:"field",xmits:s},config9:{ctype:"cx",cnum:9,alias:"",flds:"field",xmits:s},histdata0:{ctype:"hx",cnum:0,alias:"",flds:"ch",xmits:n},histdata1:{ctype:"hx",cnum:1,alias:"",flds:"ch",xmits:n},histdata2:{ctype:"hx",cnum:2,alias:"",flds:"ch",xmits:n},histdata3:{ctype:"hx",cnum:3,alias:"",flds:"ch",xmits:n},histdata4:{ctype:"hx",cnum:4,alias:"",flds:"ch",xmits:n},histdata5:{ctype:"hx",cnum:5,alias:"",flds:"ch",xmits:n},histdata6:{ctype:"hx",cnum:6,alias:"",flds:"ch",xmits:n},histdata7:{ctype:"hx",cnum:7,alias:"",flds:"ch",xmits:n},histdata8:{ctype:"hx",cnum:8,alias:"",flds:"ch",xmits:n},histdata9:{ctype:"hx",cnum:9,alias:"",flds:"ch",xmits:n},aloha:{ctype:"aloha",cnum:void 0,alias:"aloha",flds:null,xmits:["up","up+"]},alerts:{ctype:void 0,cnum:void 0,alias:"alerts",flds:null,xmits:["up"]},applog:{ctype:"applog",cnum:void 0,alias:"applog",flds:null,xmits:["up+"]}},H.HISTDATA_CONTAINER=["histdata0","histdata1","histdata2","histdata3","histdata4","histdata5","histdata6","histdata7","histdata8","histdata9"],H.CONFIG_CONTAINER=["config0","config1","config2","config3","config4","config5","config6","config7","config8","config9"],H.SERVER_CONTAINER=["configA","configB","configC"],H.regexRelation=/^(@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*|lib:[a-zA-Z0-9_-]+@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*)$/;let j=["astring","nstring","cstring","wstring","ustring"],_=["int8","int16","int32","int64","uint8","uint16","uint32","float16","float32","float64"];H.allowedRelationTypes={title:j,unit:j,chartMinimum:_,chartMaximum:_,scale:_,offset:_,decimalPlaces:["uint8","uint16","uint32","int8","int16","int32","int64"],channelMode:["uint8","uint16","uint32"],chartAlarmLow:_,chartAlarmHigh:_,chartWarningLow:_,chartWarningHigh:_,chartHysteresis:_,chartTriggerThreshold:_,chartTriggerRelation:_,chartSetPoint:_};function S(K,a0,t0){let Z=a0[K];if(Z!==void 0)if(H.regexRelation.exec(`${Z}`)){let s0=K==="chartSetPoint",[U,...v0]=Z.split("."),[,f0]=U.split("@"),B0=Object.values(t0.containers).find(vx=>vx.title===f0),d0=v0.join("."),q0=s0?";":"%",I0=(s0?"":"%")+(B0?.name||f0)+q0;if(I0=I0+`${d0}`,s0){let vx=t0.setPointList[a0.name];I0=I0+`;actual_output_value_${vx}`}return I0}else return Z}H.parseXMLValueWithRelation=S;function T(K){let{bitmask:a0}=K;if(!a0)return;let t0="$",Z=a0.replaceAll(" ","");if(a0.startsWith("0x"))t0+=Z.substring(2);else if(Z.startsWith("0b")){let s0=Z.substring(2).replaceAll(" ","");t0+=parseInt(s0,2).toString(16).toUpperCase()}return t0}H.parseXMLBitmask=T;function N(K){return K.type==="binary"?K.defaultValue.substring(2):K.defaultValue==="NaN"?"NAN":K.defaultValue}H.parseXMLDefaultValue=N,H.TDEF_NUMBER={xmlOut(K,a0,t0){K.decpl=S("decimalPlaces",a0,t0),K.decpl===void 0&&(K.decpl=0),K.vscale=S("scale",a0,t0),K.vofs=S("offset",a0,t0),K.min=S("chartMinimum",a0,t0),K.max=S("chartMaximum",a0,t0)}};let O={isBlob:1,xmlOut(K,a0){K.max=a0.byteSize}},i0={xmlOut(K){K.decpl=-1,K.param0="local",K.units="UTC"}};H.TYPE_DEFS={u8:{dde:"uint8",dim:1,len:1,...H.TDEF_NUMBER,rdef:1,xml:{type:"u8"},pwn:{rwfunc:"u8",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u16:{dde:"uint16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"u16"},pwn:{rwfunc:"u16",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u32:{dde:"uint32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"u32"},pwn:{rwfunc:"u32",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},s8:{dde:"int8",dim:1,len:1,...H.TDEF_NUMBER,rdef:1,xml:{type:"s8"},pwn:{rwfunc:"s8",htype:"s32",printf:"%d"},openApi:{type:"number"}},s16:{dde:"int16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"s16"},pwn:{rwfunc:"s16",htype:"s32",printf:"%d"},openApi:{type:"number"}},s32:{dde:"int32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"s32"},pwn:{rwfunc:"s32",printf:"%d"},openApi:{type:"number"}},s64:{dde:"int64",dim:0,len:8,...H.TDEF_NUMBER,rdef:1,xml:{type:"s64"},pwn:{rwfunc:"s64",rwp:"%n{%l}",htype:"{%l}",printf:"%d"},openApi:{type:"number"}},f16:{dde:"float16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"floatm16"},pwn:{rwfunc:"f16",rwp:"Float:%n",htype:"f32",printf:"%f"},openApi:{type:"number"}},f32:{dde:"float32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"f32"},pwn:{rwfunc:"f32",rwp:"Float:%n",printf:"%f"},openApi:{type:"number"}},f64:{dde:"float64",dim:0,len:8,...H.TDEF_NUMBER,rdef:0,xml:{type:"f64"},pwn:{rwfunc:"f64",rwp:"%n{%l}",htype:"{%l}",printf:"%f"},openApi:{type:"number"}},stamp32:{dde:"stamp32",dim:1,len:4,...i0,rdef:0,xml:{type:"stamp4"},pwn:{rwfunc:"stamp32",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},stamp40:{dde:"stamp40",dim:0,len:5,...i0,rdef:0,xml:{type:"stamp"},pwn:{rwfunc:"stamp40",rwp:"%n{%l}",htype:"{%l}",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},bin:{dde:"binary",dim:0,...O,rdef:0,lenUnits:"byte",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"bin",rwlen:1,rwp:"%n{%l}",htype:"{%l}",printf:null,printfFormat:"memtostr"},openApi:{type:"string",description:"HEX string"}},astr:{dde:"astring",dim:0,...O,rdef:1,lenUnits:"char",xml:{type:"string",param1:"nocodepage"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},nstr:{dde:"nstring",dim:0,...O,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"nstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},wstr:{dde:"wstring",dim:0,...O,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"wstr",rwlen:1,rwp:"%n[%l+1]",htype:"[%l+1]",printf:"%s"},openApi:{type:"string"}},ustr:{dde:"ustring",dim:0,...O,rdef:0,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"ustr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},cstr:{dde:"cstring",dim:0,...O,rdef:1,lenUnits:"char",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"cstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},_siteref:{dim:0,len:80,rdef:0,xml:{type:"string",max:"80",editmask:"%QUERY%all_sites;-name;!id;class;name;%EMPTY%"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}"},js:{rwfunc:"String"}}},H.fieldTypeDefinitions={uint8:H.TYPE_DEFS.u8,uint16:H.TYPE_DEFS.u16,uint32:H.TYPE_DEFS.u32,int8:H.TYPE_DEFS.s8,int16:H.TYPE_DEFS.s16,int32:H.TYPE_DEFS.s32,int64:H.TYPE_DEFS.s64,float16:H.TYPE_DEFS.f16,float32:H.TYPE_DEFS.f32,float64:H.TYPE_DEFS.f64,stamp32:H.TYPE_DEFS.stamp32,stamp40:H.TYPE_DEFS.stamp40,binary:H.TYPE_DEFS.bin,astring:H.TYPE_DEFS.astr,nstring:H.TYPE_DEFS.nstr,wstring:H.TYPE_DEFS.wstr,ustring:H.TYPE_DEFS.ustr,cstring:H.TYPE_DEFS.cstr};let I=["_id","id","_stamp","stamp","tag","_uid","customer_id","site_id","_rec_flags__","applog"];function Y(K){let a0=K.toLowerCase();return I.includes(a0)||/^field\d+$/.test(a0)||/^ch\d+$/.test(a0)}H.checkForReservedFieldName=Y;function W(K){return!!K.fields.find(a0=>a0.library===null&&a0.type!=="shadow")}H.hasContainerAppFields=W})(R0||={});var pe=R0.DDEContainerName,sa=R0.allowedRelationTypes,Rf=R0.regexRelation,Of=R0.ContainerType,Gf=R0.checkForReservedFieldName,Pt=R0.ContainerName,ia=R0.CONTAINER_DEFS,Uf=R0.SERVER_CONTAINER,Hf=R0.HISTDATA_CONTAINER,Kf=R0.CONFIG_CONTAINER,Br=R0.TransferDirection,aa=R0.fieldTypeDefinitions,aA=j0.yamlRangeToLineInformation,Nt;(A=>{class x{constructor(r,t,s){this.manifest=r;this.libraryFiles=t;this.ddeHistory=s}manifest;libraryFiles;ddeHistory;fieldNamesPerContainer={};usedContainerNames={};fileDiagnostics=[];libraryDDE=[];libraryYaml={};parseLibraries(){this.libraryDDE.length=0;let r=[];return this.libraryFiles.forEach(t=>{let{parsedDDE:s,diagnostics:n,parsedYaml:F}=this.parseYamlFile(t.path,t.yaml,t.libraryName);r.push(...n),this.libraryDDE.push(s),this.libraryYaml[t.libraryName]=F}),r}get previousVersion(){return{setPointList:{...this.ddeHistory?.setPointList},containers:{...this.ddeHistory?.containers}}}getContainerOfPreviousVersion(r){let t=this.previousVersion,s=r.startsWith("timeseries_")?r.substring(11):r;return Object.values(t.containers).find(n=>n.title===s)||null}parseMainDDE(r,t){let{parsedDDE:s,diagnostics:n}=this.parseYamlFile(r,t);return n.find(C=>C.level==="error")?{ddeJSON:null,diagnostics:n}:{ddeJSON:this.mergeAndFormat(s),diagnostics:n}}parseYamlFile(r,t,s){this.fileDiagnostics.length=0;let n=new ue.LineCounter,F=(0,ue.parseDocument)(t,{lineCounter:n});if(!F.contents)return{parsedDDE:{containers:{},setPointList:{}},diagnostics:[],parsedYaml:null};let f=F.contents||new ue.YAMLMap;return this.validateContainerDefinition(f.items).forEach(D=>{this.validateAllowedContainer(r,D,n,s),this.validateContainerFields(F,r,D,n)}),{parsedDDE:this.yamlDocToDdeJson(F.toJS({mapAsMap:!0}),s),diagnostics:[...this.fileDiagnostics],parsedYaml:F}}yamlDocToDdeJson(r,t){let s={containers:{},setPointList:{}},n=new Map,F=[...Object.values(pe)];if(r.get("cloudProject")){let C=Object.values(this.previousVersion.containers).map(p=>p.title),D=[...new Set([...F,...C])];F.length=0,F.push(...D)}for(let C of F)r.has(C)&&n.set(C,r.get(C));let f=r.get("timeseries");if(f)for(let[C,D]of f)n.set(C,D);for(let[C,D]of n){let{realContainer:p,transferDirection:j,legacyTitle:_}=this.getRealContainerInformation(C);if(!p)continue;let k=ia[p],S=C.includes("timeseries_")?C.replace("timeseries_",""):C,T={name:p,title:S,previousTitle:_,containerType:k.ctype,volatile:C===pe.volatile,transferDirection:j,fieldCount:D.size,knownNames:[],libraries:[],arrays:{},shadows:{},fields:[],size:0,fieldIndex:0};t&&T.libraries.push(t);for(let[N,L]of D){let O=[],i0=L.get("type"),R=aa[i0];if(!(!R&&i0!=="array")){if(i0==="array"){let g=[],I=L.get("length"),Y=L.get("fields"),W={name:N,length:I,library:t||null,fields:[]};T.arrays[N]=W;for(let H=0;H<I;H++){let K={name:N,index:H};for(let[a0,t0]of Y){let Z=aa[t0.get("type")];if(!Z)continue;W.fields?.find(f0=>f0.name===a0)||W.fields.push({name:a0,type:t0.get("type"),byteSize:Z.len||t0.get("bytes")||t0.get("length")});let s0=`${N}[${H}].${a0}`,{fields:U,shadowInfo:v0}=this.createDDEJsonFields(s0,t,Z,t0);U.forEach(f0=>{f0.arrayRef=K}),v0&&(T.shadows[v0.name]=v0),g.push(...U)}}O.push(...g)}else{let{arrayInfo:g,fields:I,shadowInfo:Y}=this.createDDEJsonFields(N,t,R,L);g&&(T.arrays[g.name]=g),Y&&(T.shadows[Y.name]=Y),O.push(...I)}O.forEach(g=>{g.index=++T.fieldIndex,T.fields.push(g),T.size+=g.byteSize})}}s.containers[p]=T}return s}getRealContainerInformation(r){let t,s,n;if(this.previousVersion){let F=r.startsWith("timeseries_")?r.substring(11):r,{name:f,direction:C,previousTitle:D}=this.findPreviousUsedContainer(F);t=f,s=C,n=D}if(!t){let F=Object.entries(this.usedContainerNames).find(([,f])=>f===r);F&&(t=F[0])}return t||(t=this.findNextFreeContainer(r)),this.usedContainerNames[t]=r,s||(s=[pe.setting,pe.command].includes(r)?Br.down:Br.up),s===Br.up&&t&&ia[t].xmits.includes(Br.upPlus)&&(s=Br.upPlus),t&&[Pt.configA,Pt.configB].includes(t)&&(s=Br.backendOnly),{realContainer:t,transferDirection:s,legacyTitle:n}}findNextFreeContainer(r){if(r===Pt.aloha)return Pt.aloha;let t=Kf;r.startsWith("timeseries_")?t=Hf:[pe.relations,pe.storage].includes(r)&&(t=Uf);let s=this.previousVersion?.containers;return s&&(t=t.filter(n=>!Object.hasOwn(s,n))),t.find(n=>!Object.hasOwn(this.usedContainerNames,n))}findPreviousUsedContainer(r){let t=this.previousVersion.containers,s=Object.values(t).find(n=>n.title===r);return{name:s?.name,direction:s?.transferDirection,previousTitle:s?.previousTitle}}createDDEJsonFields(r,t,s,n){let F=n.get("array"),f=[],C,D;if(F){C={name:r,library:t||null,length:F};for(let p=0;p<F;p++){let j=`${r.toLowerCase()}[${p}]`;f.push(this.buildDDEJsonField(j,n,{name:r,index:p},s,t,null))}}else{let p=this.buildDDEJsonField(r,n,null,s,t,null);f.push(p);let j=n.get("shadowFields");if(j){D={name:p.name,byteSize:p.byteSize,byteOffset:p.byteOffset};for(let[_,k]of j){let S=_;r.includes(".")&&(S=r.split(".")[0]+`.${_}`),f.push(this.buildDDEJsonField(S,k,null,s,t,p.name))}}}return{arrayInfo:C,shadowInfo:D,fields:f}}buildDDEJsonField(r,t,s,n,F,f){return{id:r.toLowerCase(),name:r,index:0,library:F||null,byteOffset:0,byteSize:n.len||t.get("bytes")||t.get("length"),type:t.get("type"),title:t.get("title")||null,arrayRef:s,shadowRef:f,unit:t.get("unit"),hex:t.get("hex"),decimalPlaces:t.get("decimalPlaces"),writePermission:this.parseUserLevel(t.get("writePermission")),readPermission:this.parseUserLevel(t.get("readPermission")),channelMode:this.parseChannelMode(t.get("channelMode")),defaultValue:t.get("defaultValue"),scale:t.get("scale"),offset:t.get("offset"),chartMinimum:t.get("chartMinimum"),description:t.get("description"),chartMaximum:t.get("chartMaximum"),chartAlarmLow:t.get("chartAlarmLow"),chartAlarmHigh:t.get("chartAlarmHigh"),chartWarningLow:t.get("chartWarningLow"),chartWarningHigh:t.get("chartWarningHigh"),chartHysteresis:t.get("chartHysteresis"),chartTriggerThreshold:t.get("chartTriggerThreshold"),chartTriggerRelation:this.parseTriggerUndershoot(t.get("chartTriggerRelation")),chartSetPoint:t.get("chartSetPoint"),utilsTransferInterval:!!t.get("utilsTransferInterval"),bitmask:t.get("bitmask")}}resolvePossibleAlias(r,t){return(0,ue.isAlias)(t)?t.resolve(r).value:t?.value}validateContainerDefinition(r){let t=[];return r.forEach(s=>{let F=s.key.value;F==="timeseries"?s.value.items.forEach(f=>{f.key.value=`timeseries_${f.key}`,t.push(f)}):["dde","cloudProject","constants"].includes(F)||t.push(s)}),t}parseUserLevel(r){if(r==="read-only")return 99;if(r?.startsWith("UL"))return Number(r.substring(2))}parseChannelMode(r){if(r)return{digital:1,"day-counter":2,"interval-counter":3,analog:6,"infinite-counter":12}[r]??r}parseTriggerUndershoot(r){if(r)return{"greater-or-equal":0,"less-or-equal":1}[r]??r}validateAllowedContainer(r,t,s,n){if(!t.value)return;let f=t.key.value;if(n&&(f.startsWith("aloha")||f.startsWith("timeseries"))){let C=f.includes("_")?f.split("_")[1]:f;this.fileDiagnostics.push({file:r,level:"error",message:`"${C}" not allowed within a library`,...aA(s,t.key.range)})}if(J.isAnalytics(this.manifest)&&![pe.relations,pe.storage].includes(f)){let C=f.includes("_")?f.split("_")[1]:f;this.fileDiagnostics.push({file:r,level:"error",message:`"${C}" not allowed within an analytics app. Only "relations" and "storage" are allowed.`,...aA(s,t.key.range)})}}validateContainerFields(r,t,s,n){let F=s.value;if(!F)return;let f=s.key.value;Object.hasOwn(this.fieldNamesPerContainer,f)||(this.fieldNamesPerContainer[f]=[]);let C=this.getContainerOfPreviousVersion(f);F.items.forEach(D=>{let j=D.key.value;this.checkForContainerRelation(D,r,t,n),this.validateFieldName(D,f,t,n),this.checkFieldNameLength(D,f,t,n);let _=C?.fields.find(O=>O.id===j.toLowerCase()),k=D.value,S=k.get("type",!0),T=this.resolvePossibleAlias(r,S),N=k.get("bytes",!0),L=this.resolvePossibleAlias(r,N);_&&(S&&T&&_.type!==T&&this.fileDiagnostics.push({file:t,level:"warning",message:`Field type changed from "${_.type}" to "${T}".
|
|
2313
|
+
Changing the type of an existing field can result in data loss or unexpected behaviour.`,...aA(n,S.range)}),N&&L&&_.byteSize!==L&&this.fileDiagnostics.push({file:t,level:"warning",message:`Byte size changed from '${_.byteSize}' to '${L}'.
|
|
2314
|
+
Changing the size of an existing field can result in data loss or unexpected behaviour.`,...aA(n,N.range)}))})}checkForContainerRelation(r,t,s,n){let F=r.value.get("fields");F&&F.items.forEach(C=>{this.checkForContainerRelation(C,t,s,n)}),r.value.items.forEach(C=>{let D=C.value;if(D?.value&&Rf.exec(`${D.value}`)){let p=C.key.value;if(p){if(!Object.hasOwn(sa,p))return this.fileDiagnostics.push({file:s,level:"error",message:`Property "${p}" does not allow relations.`,...aA(n,D.range)});if(["scale","offset"].includes(p))return this.fileDiagnostics.push({file:s,level:"warning",message:`Container relations for "${p}" are not available within the dlo source.`,...aA(n,D.range)})}return this.validateContainerRelation(p,D,t,s,n)}})}validateFieldName(r,t,s,n){let F=this.fieldNamesPerContainer[t],f=r.key,C=f.value;Gf(C)&&this.fileDiagnostics.push({file:s,level:"error",message:`Reserved property "${C}" is not allowed.`,...aA(n,f.range)});let D=r.value.get("shadowFields");D&&D.items.forEach(p=>{this.validateFieldName(p,t,s,n)}),F.includes(C.toLowerCase())?this.fileDiagnostics.push({file:s,level:"error",message:`Field name "${C}" is already occupied`,...aA(n,f.range)}):F.push(C.toLowerCase())}checkFieldNameLength(r,t,s,n){let F=r.key,f=F.value,D=`DDE_${t.startsWith("timeseries")?t.substring(10):t}_`,p=31-D.length;D.length+f.length>31&&this.fileDiagnostics.push({file:s,level:"error",code:Zr.CODE.ddeFieldLength,message:`Field name "${f}" to long. ${p} characters allowed for this field/container.`,...aA(n,F.range)})}validateContainerRelation(r,t,s,n,F){let[f,C,D]=t.value.split(".",3),[p,j]=f.split("@"),_=p?p.split(":")[1]:null,S=(_&&this.libraryYaml[_]?this.libraryYaml[_]:s).contents?.get(j),T=C.split("[")[0],N=null;if(S){let L=S.get(T);if(L)if(D){let O=L.get("fields");O&&O.get(D)&&(N=O.get(D))}else N=L;else N=this.findRelatedShadowField(S,T)}if(N){let L=sa[r],O=N.get("type");L.includes(O)||this.fileDiagnostics.push({file:n,level:"error",message:`Related field type "${O}" is not allowed for attribute "${r}".`,...aA(F,t.range)})}else _&&!this.libraryYaml[_]?this.fileDiagnostics.push({file:n,level:"error",message:`Related library "${_}" does not exist.`,...aA(F,t.range)}):this.fileDiagnostics.push({file:n,level:"error",message:`Related field "${t.value}" does not exist.`,...aA(F,t.range)})}findRelatedShadowField(r,t){for(let s of r.items){let F=s.value.get("shadowFields");if(!F)continue;let f=F.get(t);if(f)return f}}mergeAndFormat(r){let t={containers:{},setPointList:{}};for(let s of this.libraryDDE)this.combineDDE(t,s);return this.combineDDE(t,r),this.sortContainerFields(t),this.generateSetPointList(t),t}combineDDE(r,t){for(let[s,n]of Object.entries(t.containers)){let F=r.containers[s];F?(F.title=n.title,F.knownNames.unshift(n.title),F.libraries.push(...n.libraries),F.fields.push(...n.fields),F.arrays={...F.arrays,...n.arrays},F.shadows={...F.shadows,...n.shadows}):(F=r.containers[s]=structuredClone(n),F.knownNames.unshift(n.title),F.fieldCount=F.fields.length,F.fieldIndex=0);let f=this.initialContainerByteOffset(F);for(let[C,D]of F.fields.entries()){if(D.shadowRef){let p=F.shadows[D.shadowRef];D.byteOffset=p.byteOffset}else D.byteOffset=f,this.updateShadowFieldInformation(r.containers[s],D),f+=D.byteSize||0;C>F.fieldCount-1&&(D.index+=F.fieldIndex)}F.fieldIndex+=n.fieldIndex,F.knownNames=[...new Set(F.knownNames)],F.libraries=[...new Set(F.libraries)],F.fieldCount=F.fields.length}}initialContainerByteOffset(r){return r.containerType===Of.hx?1:0}updateShadowFieldInformation(r,t){t&&Object.hasOwn(r.shadows,t.name)&&(r.shadows[t.name].byteOffset=t.byteOffset)}sortContainerFields(r){for(let t of Object.values(r.containers)){let{sortedFields:s,containerSize:n}=this.sortFields(t);t.fields=s,t.size=n,t.fieldCount=t.fields.length}}sortFields(r){let t=r.fields.filter(p=>!p.shadowRef),s=r.fields.filter(p=>p.shadowRef),n=[],F=r.name;if(this.previousVersion.containers[F]){let p=this.sortPreviousContainerFields(r,t);n.push(...p)}else n.push(...t);n.forEach(p=>{this.updateShadowFieldInformation(r,p)});let C=n[n.length-1],D=C.byteSize+C.byteOffset;return s.forEach(p=>{p.byteOffset=r.shadows[p.shadowRef].byteOffset,n.push(p)}),{sortedFields:n,containerSize:D}}sortPreviousContainerFields(r,t){let s=r.name,n=this.previousVersion.containers[s],F=[],f=this.initialContainerByteOffset(r);for(let C of n.fields){if(C.shadowRef)continue;let D=t.findIndex(j=>C.id===j.name?.toLowerCase());if(D===-1){f=C.byteOffset+C.byteSize;continue}let p=t[D];if(C.type!==p.type&&C.byteSize!==p.byteSize){f=C.byteOffset+C.byteSize;continue}p.byteOffset=C.byteOffset,t.splice(D,1),F.push(p),f=this.initialContainerByteOffset(r)}if(f>this.initialContainerByteOffset(r)){let C=t.shift();F.push(...this.generatePlaceholderFieldIfNeeded(f,C)),this.updateShadowFieldInformation(r,C)}for(let C of t){if(C.shadowRef)C.byteOffset=r.shadows[C.shadowRef].byteOffset;else{this.updateShadowFieldInformation(r,C);let D=F[F.length-1];D.shadowRef&&(D=r.shadows[D.shadowRef]),C.byteOffset=D.byteOffset+D.byteSize}F.push(C)}return F}generatePlaceholderFieldIfNeeded(r,t){let s=[];if(t)t.byteOffset=r,s.push(t);else{let n={byteOffset:r,byteSize:0,id:"_shadow",library:null,name:"_shadow",type:"shadow",arrayRef:null,shadowRef:null,title:null,index:0};s.push(n)}return s}generateSetPointList(r){r.setPointList={...this.previousVersion.setPointList||{}};for(let t of Object.values(r.containers))for(let s of t.fields)s.chartSetPoint&&(Object.hasOwn(r.setPointList,s.name)||(r.setPointList[s.name]=this.getNextSetpointValue(r.setPointList)))}getNextSetpointValue(r){let t=[...Object.values(r),0];return Math.max(...t)+1}}A.PreCompiler=x})(Nt||={});var Yx=R0.TransferDirection,bA=R0.parseXMLValueWithRelation,zf=R0.parseXMLBitmask,Jf=R0.parseXMLDefaultValue,Vf=R0.fieldTypeDefinitions;function Wn(x,A){let r=[];function t(F,f=!0){if(f){if(Array.isArray(F)){r.push.apply(r,F);return}r.push(""+F)}}function s(F,f){F!=="mergeofs"&&t(`${F}=${f}`)}t("// DDE STRUCTURE created by Microtronics Studio");let n="source=rm2mraw";for(let[F,f]of Object.entries(A.containers)){F.startsWith("histdata")&&f.transferDirection!==Yx.deviceOnly&&(t("<split>"),t(n),t("target="+F),t("key=0"+F.substr(-1,1)),t("</split>")),t("<table>"),s("name",F),s("alias",f.title),s("title",f.title.replace("_"," "));let C={};[Yx.none,Yx.backendOnly,Yx.deviceOnly,Yx.down,Yx.downPlus].includes(f.transferDirection)&&s("upload","0"),[Yx.none,Yx.backendOnly,Yx.deviceOnly,Yx.up,Yx.upPlus].includes(f.transferDirection)&&s("download","0"),(J.isIotApp(x)||J.isLibrary(x))&&[Yx.up,Yx.upPlus].includes(f.transferDirection)&&s("edit","99");for(let D of f.fields){if(D.type==="shadow")continue;let p=Wf(D),j=Vf[p.type],_=bA("title",p,A)||p.name;!_.startsWith("%")&&p.library&&(_=`${p.library}: ${_}`);let k={title:_,alias:p.name,index:D.index,...C};k.byteofs=`${p.byteOffset}`;for(let[S,T]of Object.entries(j.xml))k[S]=T;Object.hasOwn(j,"xmlOut")&&j.xmlOut(k,p,A),k.units=bA("unit",p,A),k.chmode=bA("channelMode",p,A),k.ialarm_high=bA("chartAlarmHigh",p,A),k.ialarm_low=bA("chartAlarmLow",p,A),k.iwarn_high=bA("chartWarningHigh",p,A),k.iwarn_low=bA("chartWarningLow",p,A),k.hysterese=bA("chartHysteresis",p,A),k.itrigger=bA("chartTriggerThreshold",p,A),k.itriggerus=bA("chartTriggerRelation",p,A),k.setpoint=bA("chartSetPoint",p,A),k.bitmask=zf(p),p.hex&&(k.editmask="%HEX%"),p.readPermission&&(k.view=p.readPermission),p.writePermission&&(k.edit=p.writePermission),p.defaultValue!==void 0&&(k.default=Jf(p)),p.utilsTransferInterval===!0&&(k.param0="%FFFF0005%transfer_interval"),t("<field>"),p.library&&t(`// declared by ${p.library} library`,!0);for(let[S,T]of Object.entries(k))T!==void 0&&s(S,`${T}`);t("</field>")}["alerts","applog"].includes(F)||(t("</table>"),t("// "+f.size+" bytes total size"))}return t("<split>"),t(n),t("target=alarm0"),t("key=20"),t("</split>"),t("<split>"),t(n),t("target=applog0"),t("key=28"),t("</split>"),r.join(`
|
|
2315
|
+
`)}function Wf(x){let A=structuredClone(x),e=x.arrayRef?.index;if(e===void 0)return A;for(let[r,t]of Object.entries(A))A[r]=j0.patchValueWithArrayInfo(t,e);return A}var RA=Q0(require("semver"));var jA=Q0(require("semver"));var Cr={DP_registry_sz:1024,DP_config_sz:4e3,DP_histdata_sz:1024,DP_DISPLAY_CNT:0,DP_LED_CNT:0,DP_BUTTON_CNT:0,DP_GPIO_CNT:0,DP_IRQ_CNT:0,DP_DIGOUT_CNT:0,DP_UIN_CNT:0,DP_TEMP_CNT:0,DP_I2C_CNT:0,DP_SPI_CNT:0,DP_UART_CNT:0,DP_RS485_CNT:0,DP_RS232_CNT:0,DP_WIFI_CNT:0,DP_BLE_CNT:0,DP_LORA_CNT:0,DP_NBIOT_CNT:0},Xn={max_size:1e5,max_fields:1e3},LA={max_size:4e3,max_fields:1e3},mA={max_size:1024,max_fields:1e3},dr={configA:Xn,configB:Xn,configC:Xn,config0:LA,config1:LA,config2:LA,config3:LA,config4:LA,config5:LA,config6:LA,config7:LA,config8:LA,config9:LA,histdata0:mA,histdata1:mA,histdata2:mA,histdata3:mA,histdata4:mA,histdata5:mA,histdata6:mA,histdata7:mA,histdata8:mA,histdata9:mA,aloha:{...mA,warn_fields:10},alerts:{max_size:13,max_fields:0,exact_match:!0},applog:{max_size:125,max_fields:0,exact_match:!1}},Mt={m22x:{name:"M22x",dpid:"m22x",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M M2 HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:dr,auto_inc:{...Cr,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:2,DP_WIFI_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m23x:{name:"M23x",dpid:"m23x",interface:{type:"usb",filter:{vendorId:1155},fileChunk:4096},usb_ids:["rapidM2M M23 HW2.0","rapidM2M M23 HW1.0"],alt_ids:[],generation:"M23",prog_mem:8*1024*1024,data_mem:8*1024*1024,total_mem:8*1024*1024,hw_reqd:!1,dde:dr,auto_inc:{...Cr,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:1,DP_WIFI_CNT:1},usbcaps:{dbgItfMayHangFixed:"99v999"},dlo:{compileRestrictions:{}}},nrf91:{name:"NRF91",dpid:"nrf91",interface:{type:"usb",filter:{vendorId:9540},fileChunk:2048},usb_ids:["rapidM2M NRF91 HW1.0","ONE NRF91 HW1.0","rapidM2M Evolve HW1.0"],alt_ids:[],generation:"NRF91",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:dr,auto_inc:{...Cr,DP_LED_CNT:1,DP_GPIO_CNT:32,DP_IRQ_CNT:6,DP_I2C_CNT:2,DP_SPI_CNT:2,DP_UART_CNT:2,DP_AIN_CNT:8,DP_PWM_CNT:3},usbcaps:{}},m2blegw:{name:"BLE Gateway",dpid:"m2blegw",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M BLEGW HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:dr,auto_inc:{...Cr,DP_DISPLAY_CNT:1,DP_DISPLAY_TYPE:"xc",DP_BUTTON_CNT:1,DP_BLE_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyv3:{name:"myDatalogEasy V3",dpid:"m2easyv3",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M Easy HW3.0"],alt_ids:["rapidM2M EasyIoT HW1.0","rapidM2M M220 HW1.0"],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:dr,auto_inc:{...Cr,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyiot:{name:"myDatalogEasy IoT",dpid:"m2easyiot",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M EasyIoT HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:dr,auto_inc:{...Cr,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}}};var Zn=require("vscode-uri");var _x=R0.ContainerType,M0=R0.TransferDirection,xt=R0.regexRelation,Xf=R0.CONFIG_CONTAINER,Qn=R0.CONTAINER_DEF_DLO_CID_BASE,et=R0.CONTAINER_DEFS,Lt=R0.fieldTypeDefinitions,Fa=j0.isNumeric;function oA(x){let A=Lt[x.type];return A.pwn.rwp||(A.pwn.rwp="%n"),A.pwn.htype||(A.pwn.htype=A.pwn.rwfunc),A.pwn}var It="Microtronics/dlo-core";function xs(x){return J.isLibrary(x)&&x.name==="dlo-core"?x.version:x.libraryDependencies&&Object.hasOwn(x.libraryDependencies,It)?Z0.rangeToVersion(x.libraryDependencies[It]):x.libraryDevDependencies&&Object.hasOwn(x.libraryDevDependencies,It)?Z0.rangeToVersion(x.libraryDevDependencies[It]):null}function Yf(x){let A=xs(x);return A===null||jA.gte(A,"0.3.0")?jA.valid(x.version)?x.version:jA.coerce(`${x.version}`):jA.coerce(x.version)?.major}function Yn(x){let A=xs(x);if(A===null)return!1;let e=jA.coerce(A);return jA.gte(e,"1.1.0")}function Qf(x){let A=xs(x);if(A===null)return!1;let e=jA.coerce(A);return jA.gte(e,"1.15.0")}var Zf=["u8","u16","u32","s8","s16","s32","s64","f16","f32","f64"];function xE(x){if(x.type==="ustring")return!1;if(x.defaultValue!=="NaN")return!0;let A=oA(x);return!A||A==="skip"?!1:Zf.includes(`${A.rwfunc}`)}function AE(x,A,e){x("PROJECT META");let{dpid:r,registry:t}=e;if(!r)throw new Error('Setting "dpid" is required to generate dlo files');let{auto_inc:s}=Mt[r];A("APM_DPID",`${r}`),A(`APM_DPID_${r}`,"1"),A(`APM_DPID_${r.toUpperCase()}`,"1"),A("APM_ID",t?.id||"");let n=Yf(e);A("APM_VERSION",`${n}`),A("APM_NAME",`${e.name}`),A("APM_AUTHOR",`${e.publisher}`);for(let[F,f]of Object.entries(s))Fa(f)?A(F,`${f}`):A(F,`"${f}"`)}function eE(x,A,e,r){let t=r.flat,{definesWithSource:s}=r;A("GLOBAL DEFINES");for(let[n,F]of Object.entries(t)){let f=s[n]?.comment;if(f){let D=f.split(`
|
|
2316
|
+
`);if(D.length===1)x(`/** ${D[0]} */`);else{x("/**");for(let p of D)x(` * ${p}`);x(" */")}}let C=Object.hasOwn(t,F);e(n,`${F}`,C)}}function rE(x,A,e,r){let t=parseInt(x.substring(6)),s=1<<t;e[t]=A.size,r.cx_isupm|=[M0.both,M0.none,M0.deviceOnly,M0.up,M0.upPlus].includes(A.transferDirection)?s:0,r.cx_isvolatilem|=A.volatile?s:0,r.cx_isdnm|=[M0.both,M0.none,M0.deviceOnly,M0.down,M0.downPlus].includes(A.transferDirection)?s:0,r.cx_isvlm|=[M0.bothPlus,M0.upPlus,M0.downPlus].includes(A.transferDirection)?s:0}function tE(x,A,e,r){let t=parseInt(x.substring(8));e[t]=A.size,r.hx_isvlm|=[M0.upPlus].includes(A.transferDirection)?1<<t:0}function nE(x){return[M0.upPlus].includes(x.transferDirection)}function sE(x,A,e){let r=0,t=Array(10).fill(0),s={cx_isupm:0,cx_isvolatilem:0,cx_isdnm:0,cx_isvlm:0},n=0,F=Array(10).fill(0),f={hx_isvlm:0},C;for(let[p,j]of Object.entries(e.containers))j.containerType===_x.cx&&j.transferDirection!==M0.backendOnly?(rE(p,j,t,s),r=Math.max(r,j.size)):j.containerType===_x.hx?(tE(p,j,F,f),r=Math.max(r,j.size)):j.containerType===_x.aloha&&(C=nE(j),r=Math.max(r,j.size));A("DDE CORE"),x(`#define _DDE_BUF_BYTES (${r}+10)`),x(""),x("// c0 c1 c2 c3 c4 c5 c6 c7 c8 c9"),x(`stock _DDE_CONFIGS_size[] =[ ${t.join(", ")}];`),x(`#define _DDE_CONFIGS_upm 0b${s.cx_isupm.toString(2)} // ..is tolerant when reading back container with under-length`),x(`#define _DDE_CONFIGS_volatilem 0b${s.cx_isvolatilem.toString(2)} // inits container as volatile`),x(`#define _DDE_CONFIGS_downm 0b${s.cx_isdnm.toString(2)} // reading the container expects strict length`),x(`#define _DDE_CONFIGS_varlenm 0b${s.cx_isvlm.toString(2)} // allow partial write (dde_wxxx)`),x(`#define _DDE_CONFIGS_rdef 0b${n.toString(2)} // ..apply defaults reading a container with under-length`),x(""),x("// h0 h1 h2 h3 h4 h5 h6 h7 h8 h9"),x(`stock _DDE_HISTS_size[] =[ ${F.join(", ")}];`),x(`#define _DDE_HISTS_varlenm 0b${f.hx_isvlm.toString(2)} // allow partial write (dde_wxxx)`);let D=[...F];Object.hasOwn(e,"applog")&&D.push(125),Object.hasOwn(e,"alerts")&&D.push(13),x(`#define _DDE_HISTS_maxsize ${Math.max(...D)}`),x(""),C!==void 0&&(x(`#define _DDE_ALOHA_varlen ${C?1:0}`),x(""))}function iE(x,A,e){for(let[r,t]of Object.entries(e.containers)){if(t.containerType==="applog")continue;A(`${t.title.toUpperCase()} - ${t.transferDirection} via #${r}`);let s=Qn(t.containerType,t.transferDirection);if(!s){x("// ... container not available in DLO");continue}let n=`DDE_${t.containerType===_x.aloha?_x.aloha:t.title}`,F=et[r];x(`// ${n}_id - container identifier required for ${n}_read/_write operations`),x(`#define ${n}_id (${s}+${F.cnum||0})`),x(`// ${n}_sz - [byte] container total size`),x(`#define ${n}_sz ${t.size}`),F.cnum!==void 0&&(x(`// ${n}_idx - 0+ container index number`),x(`#define ${n}_idx ${F.cnum}`))}}function va(x,A,e){let r=[],t=r.push.bind(r);function s(F){t(`
|
|
2317
|
+
// === ${F} ===
|
|
2318
|
+
`)}function n(F,f,C=!1){let D=Fa(f)?"":'"';C&&(D=""),t(`#define ${F} ${D}${f}${D}`)}return AE(s,n,e),eE(t,s,n,A),sE(t,s,x),iE(t,s,x),r.join(`
|
|
2319
|
+
`)}var rt=class{constructor(A,e,r){this.manifest=A;this.ddeMap=e;this.context=r;this.sourceType="pawnSource"}manifest;ddeMap;context;globalVariables=[];pawnGlobalSource=[];pawnHelperSource=[];timeSeriesSource=[];readWriteSource=[];definesSource=[];defaultDefinesSource=[];knownDefines=[];pawnIndent=0;sourceType;pawn(A,e){e&&A==="<"&&this.pawnIndent--,{pawnSource:this.pawnGlobalSource,globalVariables:this.globalVariables,timeseries:this.timeSeriesSource,readWrite:this.readWriteSource,defines:this.definesSource,defaultDefines:this.defaultDefinesSource}[this.sourceType].push(" ".repeat(this.pawnIndent)+(e||A)),e&&A===">"&&this.pawnIndent++}generate(){for(let[A,e]of Object.entries(this.ddeMap.containers))this.context&&!e.libraries.includes(this.context)||!Qn(e.containerType,e.transferDirection)||!e.fields||!this.context&&!R0.hasContainerAppFields(e)||et[A].ctype!==_x.cx&&this.context||(this.generateGlobalVarsForContainer(e),this.generateReadWriteFunctions(e));return this.mergeSourceTypes(),{globals:this.pawnGlobalSource,helper:this.pawnHelperSource}}createGlobalVar(A,e){this.sourceType="globalVariables";let r=e?this.variableNameForPawnDefinition(A,e):A;if(e){let t=this.generateCommentForField(e);t&&(Array.isArray(t)?(this.pawn("/**"),t.forEach(s=>{this.pawn(` * ${s}`)}),this.pawn(" */")):this.pawn(`// ${t}`))}this.pawn(`stock ${r}${e?this.initialiserForGlobalVar(e):""};`)}initialiserForGlobalVar(A){if(A.defaultDloDefine===void 0||A.arrayRef)return"";let e=oA(A);return!e||e==="skip"||`${e.rwp||""}`.includes("%l")?"":` = ${A.defaultDloDefine}`}insertSection(A){this.pawn(""),this.pawn("// ============================================================================="),this.pawn(`// ${A}`),this.pawn("// ============================================================================="),this.pawn("")}mergeSourceTypes(){this.sourceType="pawnSource",this.definesSource.length&&(this.insertSection("Defines"),this.pawnGlobalSource.push(...this.definesSource)),this.defaultDefinesSource.length&&(this.insertSection("Field defaults"),this.pawnGlobalSource.push(...this.defaultDefinesSource)),this.globalVariables.length&&(this.insertSection("Global Variables"),this.pawnGlobalSource.push(...this.globalVariables)),this.readWriteSource.length&&(this.insertSection("Internal read/write calls"),this.pawnHelperSource.push(...this.readWriteSource)),this.pawn("")}generateGlobalVarsForContainer(A){this.sourceType="globalVariables",this.pawn(""),this.pawn(`// Container '${A.title.replace("_"," ")}'`),this.pawn("");let e=`DDE_${A.title}`;this.generateArrayDefines(e,A);for(let r of A.fields){if(r.type==="shadow"||r.shadowRef||r.library!==this.context)continue;if(r.arrayRef!==null){let s=A.arrays[r.arrayRef.name],n=`${e}_${r.arrayRef.name}`;s.fields?.length&&(n+=`_${r.name.split(".")[1]}`),this.createDefaultDefineForField(n,r);continue}let t=this.generateFieldVariableName(e,r);this.createDefaultDefineForField(t,r),this.createGlobalVar(`${t}`,r)}}generateArrayDefines(A,e){for(let r of Object.values(e.arrays)){if(this.context!==r.library)continue;let t=`${A}_${r.name}_dim`;if(this.sourceType="defines",this.pawn(`#define ${t} ${r.length}`),r.fields){for(let F of r.fields)Lt[F.type]?.isBlob&&F.byteSize&&this.addDefine(`${A}_${r.name}_${F.name}_dim`,F.byteSize);let s={...e};s.fields=[],r.fields.forEach(F=>{s.fields.push({arrayRef:null,shadowRef:null,byteOffset:0,byteSize:F.byteSize,id:F.name,library:r.library,name:F.name,type:F.type,title:null,index:0})});let n=`${A}_${r.name}_def`;this.generateTypeDefinitions(s,n),this.createGlobalVar(`${A}_${r.name}[${t}][${n}]`)}else this.createGlobalVar(`${A}_${r.name}[${t}]`)}}generateCommentForField(A){let e=[`@type ${A.type}`];if(A.description&&e.unshift(A.description),A.defaultValue!==void 0){let{value:r,reason:t}=this.parseFieldDefault(A);e.push(`@default ${r} ${t||""}`)}return e}generateFieldVariableName(A,e){let r=`${A}_${e.name}`,t=Object.hasOwn(Lt,e.type)&&Lt[e.type].isBlob,s=e.byteSize;return s&&t&&(this.sourceType="defines",this.pawn(`#define ${A}_${e.name}_dim ${s}`),this.pawn(`#define ${A}_${e.name}_iter() for(new i=0;i<${s};i++)`)),this.sourceType="globalVariables",r}generateTypeDefinitions(A,e){this.sourceType="defines";let r=A.fields;if(!r)return;let t=[];this.pawn(">",`#define ${e} [`);for(let s of r){let n=this.generateFieldTypeDefinition(s,A,t,e);n!==null&&this.pawn(n)}this.pawn("<","]")}handleArrayFieldDedup(A,e,r,t){let s=A.arrayRef;if(s){let f=e.arrays[s.name];if(!r.includes(s.name)&&!f.fields)r.push(s.name);else return null}let n=A.arrayRef?A.arrayRef.name:A.name,F=A.arrayRef?`[${t}_${n}_dim]`:"";return{fieldName:n,fld_dim:F}}generateFieldTypeDefinition(A,e,r,t){if(A.type==="shadow"||A.shadowRef||A.library!==this.context)return null;let s=this.handleArrayFieldDedup(A,e,r,t);if(s===null)return null;let{fieldName:n,fld_dim:F}=s,f="";if(A.type==="struct")f="// ."+n+F;else{let C=oA(A);if(!C)return null;C==="skip"?f=`// skipped - .${n}${F}`:f+=C.rwp.replace("%n",`.${n}${F}`).replace("%l",A.byteSize)}return f+=",",A.library&&(f+=` // declared by ${A.library} library`),f}variableNameForPawnDefinition(A,e){let r=oA(e);return r&&r!=="skip"?r.rwp.replace("%n",`${A}`).replace("%l",e.byteSize):A}createDefaultDefineForField(A,e){if(this.sourceType="defaultDefines",e.scale!==void 0&&this.addDefine(`${A}_scale`,e.scale),e.offset!==void 0&&this.addDefine(`${A}_offset`,e.offset),e.defaultValue!==void 0&&xE(e)){let{value:r,reason:t}=this.parseFieldDefault(e),s=`${A}_default`;this.addDefine(s,r,t)&&(e.defaultDloDefine=s)}}addDefine(A,e,r){return xt.exec(`${e}`)?!1:(this.knownDefines.includes(A)||(r&&this.pawn(`// ${r}`),this.pawn(`#define ${A} ${e}`),this.knownDefines.push(A)),!0)}generateReadWriteFunctions(A){let e=A.name,r=et[e],t=`DDE_${A.containerType===_x.aloha?_x.aloha:A.title}`;[M0.both,M0.bothPlus,M0.none,M0.deviceOnly,M0.up,M0.upPlus].includes(A.transferDirection)&&this.generateWriteMethod(t,A),r.ctype===_x.cx&&this.generateReadMethod(t,A)}generateWriteMethod(A,e){this.sourceType="readWrite";let r=`DDE_${e.title}_id`,t=[_x.hx,_x.aloha].includes(e.containerType),s=e.containerType===_x.hx,n=e.containerType===_x.aloha,F=`_${A}_write`,f=Yn(this.manifest)?", flags":"",C=s?`stamp${f}`:"",D=Yn(this.manifest)?"const stamp=0, const flags=0":"const stamp=0";this.pawn(">",`stock ${F}(${s?D:""}) {`),t&&this.pawn(`dde_wbegin(DDE_${n?_x.aloha:e.title}_id);`),this.generateRWFunctionBody(A,e,"dde_w"),t&&this.pawn(`return dde_wend(${C});`),this.pawn("<","}"),this.pawn(""),this.sourceType="globalVariables";let p=`${A}_transfer`,j=`${A}_persist`,_=this.functionArgumentsForDdeWrite(s,t);if(this.pawn(">",`${this.context?"stock ":""}${p}(${_}) {`),t)this.pawn(`${F}(${C});`);else{let k=e.name.slice(-1);this.pawn(`dde_flush(${k}, immediate);`)}this.pawn("<","}"),this.pawn(""),e.volatile&&(this.pawn(">",`stock ${j}() {`),this.pawn(`return rM2M_CfgFlush(${r});`),this.pawn("<","}"))}functionArgumentsForDdeWrite(A,e){let r=Yn(this.manifest)?", const flags=0":"";return A?`const stamp=0${r}`:e?"":"bool:immediate=false"}generateReadMethod(A,e){this.sourceType="readWrite";let r=`_${A}_read`;this.pawn(">",`stock ${r}() {`),this.generateRWFunctionBody(A,e,"dde_r"),this.pawn("<","}"),this.pawn("")}isFieldSkipped(A){return A.type==="shadow"||!!A.shadowRef||A.library!==this.context}emitFieldRW(A,e,r,t,s,n,F){if(!e.arrayRef)return this.emitSingleField(A,e,r,t,F);let f=e.arrayRef.name,C=s.get(f);return C?n.has(f)?F:(n.add(f),this.emitArrayLoop(A,C,r)):this.emitSingleField(A,e,r,t,F)}generateRWFunctionBody(A,e,r){let t=e.fields,s=this.analyzeArrayGroups(t,A,e),n=new Set,F=-1;for(let f of t){if(this.isFieldSkipped(f))continue;let C=oA(f);!C||C==="skip"||(F=this.emitFieldRW(A,f,r,C,s,n,F))}}defaultArgumentFor(A,e){return A.defaultDloDefine===void 0?"":e==="dde_r"||Qf(this.manifest)?`, ${A.defaultDloDefine}`:""}emitSingleField(A,e,r,t,s){e.byteOffset!==s&&this.pawn(`_dde_idx = ${e.byteOffset};`);let n="";n+=r,n+=t.rwfunc;let F=`${A}_${e.name}`;return n+=`(${F}`,t.rwlen&&(n+=`, ${e.byteSize}`),n+=this.defaultArgumentFor(e,r),this.pawn(n+");"),e.byteOffset+e.byteSize}emitArrayLoop(A,e,r){this.pawn(">",`for (new _i = 0; _i < ${e.dimDefine}; _i++) {`);let t=-1;for(let s of e.templateFields){let n=oA(s);if(!n||n==="skip")continue;let F=s.byteOffset;F!==t&&this.pawn(`_dde_idx = ${F} + (_i * ${e.stride});`),t=F+s.byteSize;let f=`${A}_${s.name.replace(/\[\d+\]/,"[_i]")}`,C=`${r}${n.rwfunc}(${f}`;n.rwlen&&(C+=`, ${s.byteSize}`),C+=this.defaultArgumentFor(s,r),this.pawn(C+");")}return this.pawn("<","}"),-1}analyzeArrayGroups(A,e,r){let t=this.collectArrayFieldsByIndex(A);return this.buildArrayGroups(t,e,r)}collectArrayFieldsByIndex(A){let e=new Map;for(let r of A){if(this.isFieldSkipped(r)||!r.arrayRef)continue;let t=oA(r);if(!t||t==="skip")continue;let{name:s,index:n}=r.arrayRef;e.has(s)||e.set(s,new Map);let F=e.get(s);F.has(n)||F.set(n,[]),F.get(n).push(r)}return e}validateArrayStride(A,e){let r=e[0].byteOffset-A[0].byteOffset;if(r<=0)return null;for(let t=0;t<A.length;t++)if(e[t].byteOffset-A[t].byteOffset!==r)return null;return r}buildArrayGroups(A,e,r){let t=new Map;for(let[s,n]of A){let F=r.arrays[s];if(!F||F.length<2)continue;let f=n.get(0),C=n.get(1);if(!f||!C||f.length===0||C.length===0||f.length!==C.length)continue;let D=this.validateArrayStride(f,C);D!==null&&t.set(s,{arrayName:s,dimDefine:`${e}_${s}_dim`,stride:D,templateFields:f})}return t}parseFieldDefault(A){let e=oA(A),r=A.defaultValue;function t(n,F){return{value:n,reason:F}}switch(A.type){case"astring":case"nstring":case"cstring":return t(`"${r}"`);case"wstring":return t(`''${r}''`);case"ustring":return t(`/* default not supported: ${r} */`);case"binary":{let F=`{ 0x${(r.substring(2).replace(/\s+/g,"").match(/.{1,2}/g)||[]).join(", 0x")} }`;return t(F)}}if(r==="NaN"){let n=e.rwfunc;return t(`${n}_NaN`.toUpperCase())}let s=this.parseFieldScaleOffset(A);return s?t(s.calculated,s.reason):(r!==void 0&&!xt.exec(`${r}`)&&A.type.startsWith("float")&&r%1===0&&(r=r.toFixed(A.decimalPlaces||1)),t(`${r}`))}parseFieldScaleOffset(A){let e=A.defaultValue;if(!(!!xt.exec(`${A.offset}`)||!!xt.exec(`${A.scale}`)||!!xt.exec(`${A.defaultValue}`))&&(A.offset!==void 0||A.scale!==void 0)){let t=A.offset!==void 0?Number(A.offset):0,s=A.scale!==void 0?Number(A.scale):1;if(s===0)return null;let n=(Number(e)-t)/s,F=`(defaultValue - offset) / scale -> (${e} - ${t}) / ${s}`;return A.type.startsWith("float")?n%1===0&&(n=n.toFixed(1)):(n=Math.round(n),F=`Rounded value of: ${F}`),{calculated:n,reason:F}}return null}};function aE(x){return`${`onUplinkApply_${x}()`};`}function fa(x,A,e){A.libraries.forEach(r=>{let t=j0.generateHashForLibraryName(r);x(` #ifdef _${t}${e}_${A.title}`),x(` _${t}${e}_${A.title}(); // ${r}`),x(" #endif")})}function oE(x,A){x("stock _onUplinkEvent(ev, param) {"),A.forEach(e=>{let t=`_${j0.generateHashForLibraryName(e)}UplinkEvent`;x(` #ifdef ${t}`),x(` ${t}(ev, param);`),x(" #endif")}),x(" onUplinkEvent(ev, param);"),x("}")}function FE(x){let A=[],e=[];for(let[r,t]of Object.entries(x.containers))et[r].ctype===_x.cx&&([M0.up,M0.upPlus,M0.deviceOnly].includes(t.transferDirection)&&e.push(t),[M0.bothPlus,M0.both,M0.downPlus,M0.down].includes(t.transferDirection)&&A.push(t));return{containerApply:A,containerRestore:e}}function vE(x,A){A.length&&x("");for(let e of A)e.knownNames.forEach(r=>{x(`forward onUplinkRestore_${r}();`)}),x(""),x(`stock restoreUplink${e.name}() {`),x(` _DDE_${e.name}_read();`),fa(x,e,"Restore"),R0.hasContainerAppFields(e)&&x(` onUplinkRestore_${e.title}();`),x("}");if(x("#pragma warning push"),x("stock _onUplinkRestore(cfgId) {"),A.length){x(" switch(cfgId) {");for(let e of A)x(` case DDE_${e.title}_id: restoreUplink${e.name}(); // ${e.name}`);x(" }")}else x(" #pragma warning disable 203"),x(" // no containers to restore");x("}"),x("#pragma warning pop")}function fE(x,A){A.length&&x("");for(let e of A)e.knownNames.forEach(r=>{x(`forward onUplinkApply_${r}();`)}),x(""),x(`stock applyUplink${e.name}() {`),x(` _DDE_${e.name}_read();`),fa(x,e,"Apply"),R0.hasContainerAppFields(e)&&x(` ${aE(e.title)}`),x(" return(OK);"),x("}");if(x("#pragma warning push"),x("stock _onUplinkApply(cfgId) {"),A.length){x(" switch(cfgId) {");for(let e of A)x(` case DDE_${e.title}_id: return applyUplink${e.name}(); // ${e.name}`);x(" }"),x(" return ERROR;")}else x(" #pragma warning disable 203"),x(" // no containers to apply"),x(" return OK;");x("}"),x("#pragma warning pop")}function Ea(x,A){let e=[],r=e.push.bind(e);oE(r,A);let{containerApply:t,containerRestore:s}=FE(x);return vE(r,s),fE(r,t),e.join(`
|
|
2320
|
+
`)}var EE=Xf.map(x=>`_DDE_${x}_write`);function la(x){let A=[],e=A.push.bind(A),r=[...EE];for(let[t,s]of Object.entries(x.containers)){let n=Qn(s.containerType,s.transferDirection),F=et[t];if(!n||!s.fields||F.ctype!==_x.cx)continue;let f=`DDE_${s.name}`,C=`DDE_${s.title}_id`;if([M0.both,M0.bothPlus,M0.none,M0.deviceOnly,M0.up,M0.upPlus].includes(s.transferDirection)){let D=`_${f}_write`;e(`stock ${D}() {`),e(` dde_wbegin(${C});`),oa(e,s,"write"),e(" return dde_wend();"),e("}"),r.splice(r.indexOf(D),1)}if(F.ctype===_x.cx){let D=`_${f}_read`;e(`stock ${D}() {`),e(` if (dde_rbegin(${C})) return ERROR;`),oa(e,s,"read"),e(" dde_rend();"),e(" return OK;"),e("}")}}if(r.length){e(""),e("// Dummy functions needed by the dde library");for(let t of r)e(`stock ${t}() { return OK; }`)}return A.join(`
|
|
2321
|
+
`)}function oa(x,A,e){A.libraries.forEach(r=>{let t=j0.generateHashForLibraryName(r);x(` #ifdef __${t}${A.title}_${e}`),x(` __${t}${A.title}_${e}();`),x(" #endif")}),R0.hasContainerAppFields(A)&&(x(` #ifdef _DDE_${A.title}_${e}`),x(` _DDE_${A.title}_${e}();`),x(" #endif"))}async function ca(x,A){let e=[],r=await Z0.getApmPartDependencies(x,A,p0.Part.dlo);await At(x,A,e,r0.fileNames.autoInc);let t=await lE(x,A,r);for(let s of r)s.name==="local-data-interface"&&await At(x,A,e,r0.fileNames.autoLocalDataInc),e.push(`#include <${s.name}>`),s.name==="dlo-core"&&(e.push(...t),await At(x,A,e,r0.fileNames.autoDdeInc.replace("X","app")),await At(x,A,e,r0.fileNames.autoDdeInc.replace("X","main")));return r.some(s=>s.name==="dlo-core")&&await At(x,A,e,r0.fileNames.autoUplinkInc),e.join(`
|
|
2322
|
+
`)}async function lE(x,A,e){let r=[];for(let t of e){let s=r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",t.name);await A.stat(Zn.Utils.joinPath(x,s))&&r.push(`#include "${r0.fileNames.autoDdeInc.replace("X",t.name)}"`)}return r}async function At(x,A,e,r){let t=Zn.Utils.joinPath(x,r0.filePaths.studio.auto.dlo.path,r);await A.stat(t)&&e.push(`#include "${r}"`)}var Ca=Q0(require("semver")),da=require("yaml");var FA=R0.ContainerType,Ot=R0.TransferDirection,cE=R0.fieldTypeDefinitions,Dr={$ref:"#/components/parameters/contextId"},BE={$ref:"#/components/parameters/addonId"},CE={$ref:"#/components/parameters/appId"},Ba={$ref:"#/components/schemas/histdataResponse"},dE={$ref:"#/components/schemas/histdataRequest"},Gt={$ref:"#/components/schemas/rapidM2MStamp"},DE={$ref:"#/components/schemas/timeseriesRequestBase"},Rt="rapidM2M Stamp",hA={description:"Successful operation"},Da={parameters:{contextId:{name:"siteUid",in:"path",description:"The site uid",schema:{type:"string"},required:!0},appId:{name:"appUid",in:"path",description:"The app uid",schema:{type:"string"},required:!0}},schemas:{rapidM2MStamp:{type:"string",format:"YYYYMMDDhhmmssSSS",description:'Special format of an UTC timestamp. Important: The trailing 0 are truncated. eg.: "2024-02-10" -> "2024021"'}}},ua={...structuredClone(Da)};Object.assign(ua.schemas,{histdataResponse:{type:"array",description:"Array of histdata records. Array starts with the youngest record",items:{type:"array",description:'First item is always the rapidM2M timestamp of the record. All following values are in the order of the "select" array.',items:{anyOf:[Gt,{type:"string"},{type:"number"}]}}},histdataRequest:{type:"object",additionalProperties:!1,required:["from","until"],properties:{from:{type:"string",format:Rt,description:"items to include must be older or equal, UTC w/o time saving."},until:{type:"string",format:Rt,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until."},count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set."},offset:{type:"integer",description:"skips the given number of records in the result set."}}},timeseriesRequestBase:{type:"object",additionalProperties:!1,properties:{count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set.",minimum:-1e3,maximum:1e3,default:1e3},from:{type:"string",format:Rt,description:"items to include must be older or equal, UTC w/o time saving"},until:{type:"string",format:Rt,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until"},offset:{type:"integer",description:"Skips the given number of records in the result set",minimum:0,default:0}}}});var tt={content:{"application/json":{schema:{type:"object",additionalProperties:!1,properties:{err:{type:"string",description:"Information what went wrong"}}}}}},be={401:{description:"Permission denied",...tt},403:{description:"Forbidden",...tt},404:{description:"Resource not found",...tt},500:{description:"Internal error",...tt}};function As(x,A,e=null){let r=Ca.coerce(A.version)?.version,t={openapi:"3.0.3",info:{description:A.description,title:A.name,version:r||""},tags:[],paths:{},components:{parameters:{},schemas:{}}};e?Object.assign(t.components,structuredClone(Da)):Object.assign(t.components,structuredClone(ua));let s=J.isAddon(A),n=J.isAnalytics(A);s&&(t.components.parameters.addonId={name:"addonUid",in:"path",description:"The addon uid",schema:{type:"string"},required:!0});for(let F of Object.values(x.containers))e&&(!F.libraries.includes(e)||F.containerType===FA.hx)||!e&&!R0.hasContainerAppFields(F)||F.containerType===FA.aloha||(uE(t,F),bE(t,F,e),hE(t,F,s,n),!s&&!n&&(pE(t,F,e),jE(t,F)));return t.tags.push({name:"app-center",description:"App Center related routes"}),(0,da.stringify)(t)}function uE(x,A){x.tags.push({name:Qx(A.title),description:`Transfer direction ${A.transferDirection}`})}function Qx(x){return x.split("_").join(" ")}function pE(x,A,e){let r=`${A.name}`,t={type:"object",description:`Container: "${A.title}"`,additionalProperties:!1,properties:{}},s=[];A.containerType===FA.hx&&(r+="Select",s.push("select"),t.properties.select={type:"array",items:{type:"string",enum:[]}});for(let n of A.fields)n.library!==e||n.type==="shadow"||(A.containerType===FA.hx?t.properties.select.items.enum.push(n.id):(t.properties[n.id]=pa(n),!n.readPermission&&!n.writePermission&&s.push(n.id)));t.required=s.length?s:void 0,x.components.schemas[r]=t}function bE(x,A,e=null){let r=`${A.title}`,t={type:"object",description:`Container: "${A.title}" with device transfer direction "${A.transferDirection}"`,additionalProperties:!1,properties:{}},s=[],n=A.containerType===FA.hx;for(let f of A.fields)f.library!==e||f.type==="shadow"||(t.properties[f.name]=pa(f),!f.readPermission&&!f.writePermission&&s.push(f.name));t.required=s.length?s:void 0,x.components.schemas[r]=t;let F=t.properties;if(n){t.required=t.required?.map(C=>C.toLowerCase());let f={};for(let[C,D]of Object.entries(t.properties))f[C.toLowerCase()]=D;t.properties=f}if(n){let f={type:"object",description:`Request schema of "${A.title}"`,additionalProperties:!1,properties:{select:{type:"array",description:"Optional selection of specific fields of the given container",items:{type:"string",enum:Object.keys(F)}}}};x.components.schemas[`${r}RequestSingle`]=f,x.components.schemas[`${r}Request`]={allOf:[DE,f]},t.properties.stamp=Gt,s.push("stamp")}}function pa(x){let e={...cE[x.type].openApi},r=mE(x);return e.default=r,e.example=r,e.description=x.description,e}function mE(x){return x.defaultValue===void 0?x.defaultValue:x.type==="binary"?`${x.defaultValue.substring(2)}`:x.defaultValue}function jE(x,A){let e=`/api/1/sites/{siteUid}/${A.name}`,r={get:void 0,put:void 0};if([FA.cx,FA.cb].includes(A.containerType))r.get={deprecated:!0,tags:[Qx(A.title)],summary:`Retrieve the data of the "${Qx(A.title)}" container`,parameters:[Dr],responses:{200:{...hA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:Gt}},{$ref:`#/components/schemas/${A.name}`}]}}}},...be}},[Ot.down,Ot.backendOnly].includes(A.transferDirection)&&(r.put={deprecated:!0,tags:[Qx(A.title)],summary:`Modify the data of the "${Qx(A.title)}" container`,parameters:[Dr],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.name}`}}}},responses:{201:{...hA},204:{...hA},...be}});else if(A.containerType===FA.hx){let t=`${e}`;e+="/youngest",r.get={deprecated:!0,tags:[Qx(A.title)],summary:`Retrieve the youngest data of the "${Qx(A.title)}" container`,parameters:[Dr,{name:"json",in:"query",required:!0,schema:{$ref:`#/components/schemas/${A.name}Select`}}],responses:{200:{...hA,content:{"application/json":{schema:Ba}}},...be}},x.paths[t]={get:{deprecated:!0,tags:[Qx(A.title)],summary:`Get the historical data of the "${Qx(A.title)}" container.`,parameters:[Dr,{name:"json",in:"query",required:!0,schema:{allOf:[{$ref:`#/components/schemas/${A.name}Select`},dE]}}],responses:{200:{...hA,content:{"application/json":{schema:Ba}}},...be}}}}x.paths[e]=r}function hE(x,A,e=!1,r=!1){let s=A.containerType===FA.hx?"timeseries":"containers",n=[],F=Qx(A.title);r||n.push({path:`/api/1/sites/{siteUid}/${s}/${A.title}`,params:[Dr],tags:[F]}),e&&(n=[{path:`/api/1/sites/{siteUid}/addons/{addonUid}/${s}/${A.title}`,params:[Dr,BE],tags:[F]}]);let f={path:`/api/1/app-center/apps/{appUid}/${s}/${A.title}`,params:[CE],tags:["app-center"]};r&&f.tags.push(F),n.push(f);let C={get:void 0,put:void 0,post:void 0},D={tags:[],summary:`Retrieve the data of the "${Qx(A.title)}" container`,parameters:[],responses:{200:{...hA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:Gt}},{$ref:`#/components/schemas/${A.title}`}]}}}},...be}};if([FA.cx,FA.cb].includes(A.containerType)&&(C.get=D,[Ot.down,Ot.backendOnly].includes(A.transferDirection)&&(C.put={tags:[],summary:`Modify the data of the "${Qx(A.title)}" container`,parameters:[],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...hA},204:{...hA},...be}}),n.forEach(p=>{let j=structuredClone(C);Object.values(j).forEach(_=>{_?.parameters?.unshift(...p.params),_?.tags?.unshift(...p.tags)}),x.paths[p.path]=j})),A.containerType===FA.hx){C.get={tags:[],summary:`Get the historical data of "${A.title}"`,parameters:[{name:"json",in:"query",required:!1,schema:{$ref:`#/components/schemas/${A.title}Request`}}],responses:{200:{...hA,content:{"application/json":{schema:{type:"array",items:{$ref:`#/components/schemas/${A.title}`}}}}},...be}},e&&(C.post={tags:[],summary:`Insert data into the "${Qx(A.title)}" container`,parameters:[{name:"allow_future_date",in:"query",description:"Allow inserting records with a stamp value in the future",schema:{type:"boolean"}}],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...hA},400:{description:"Bad request",...tt},...be}});let p=n[0],j=structuredClone(C);Object.values(j).forEach(O=>{O?.parameters?.unshift(...p.params),O?.tags?.unshift(...p.tags)}),x.paths[p.path]=j;let _={...hA,content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},k=`${p.path}/youngest`,S={get:structuredClone(j.get)};S.get.summary=`Get the youngest record of "${A.title}" container`,S.get.responses[200]=_;let T=e?2:1;S.get.parameters[T].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[k]=S;let N=`${p.path}/oldest`,L={get:structuredClone(j.get)};L.get.summary=`Get the oldest record of "${A.title}" container`,L.get.responses[200]=_,L.get.parameters[T].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[N]=L}}var ma=R0.TransferDirection,Ut=" new szTemp{64};",Ht=" return strcat(aData, szTemp, sizeof(szTemp));";function ja(x){if(!x.printf&&x.printfFormat==="memtostr")return"bin";if(!x.printf)return null;let A=x.rwp||"%n",e=A.includes("["),t=A.includes("{")||e;if(x.printfFormat==="stampToISOString")return t?null:"stamp";switch(x.printf){case"%d":return t?null:"d";case"%f":return t?null:"f";case"%s":return e?null:"s";default:return null}}function es(x){if(x.type==="shadow"||x.shadowRef)return null;let A=oA(x);return!A||A==="skip"?null:ja(A)}function ha(x){return[R0.ContainerType.hx,R0.ContainerType.cx].includes(x.containerType)&&x.transferDirection!==ma.backendOnly}function gE(x){if(x.type==="shadow"||x.shadowRef)return!1;let A=oA(x);return!!A&&A!=="skip"}function yE(x,A,e){let r=x.name.indexOf("]"),t=r>=0?x.name.substring(r+1):"",s=`${x.arrayRef.name}|${t}|${A}`;e.has(s)||e.set(s,{fields:[],formatType:A}),e.get(s).fields.push(x)}function kE(x){let A=[],e=new Map,r=new Set,t=!1;for(let s of x){if(!gE(s))continue;let n=es(s);s.arrayRef&&n?yE(s,n,e):(A.push(s),n?r.add(n):t=!0)}return{standaloneFields:A,groupMap:e,usedFormats:r,hasInlineFields:t}}function _E(x,A,e){e.sort((C,D)=>C.arrayRef.index-D.arrayRef.index);let r=e.map(C=>C.byteOffset),t=r[1]-r[0];if(!(t>0&&r.every((C,D)=>D===0||C-r[D-1]===t)))return null;let[n,F]=A.split("|"),f=e[0].library?`_${j0.generateHashForLibraryName(e[0].library)}`:"DDE_";return{arrayName:n,subField:F,fields:e,startOffset:r[0],endOffset:r[r.length-1],step:t,formatType:es(e[0]),pawnVarBase:`${f}${x}_${n}`}}function wE(x,A){let{standaloneFields:e,groupMap:r,usedFormats:t,hasInlineFields:s}=kE(A),n=[];for(let[F,f]of r){let{fields:C,formatType:D}=f;if(C.length<2){e.push(...C),t.add(D);continue}let p=_E(x,F,C);p?(t.add(D),n.push(p)):(e.push(...C),t.add(D))}return e.sort((F,f)=>F.byteOffset-f.byteOffset),{arrayGroups:n,standaloneFields:e,usedFormats:t,hasInlineFields:s}}function SE(x){let A=new Set;for(let[,e]of Object.entries(x.containers))if(ha(e))for(let r of e.fields){let t=es(r);t&&A.add(t)}return A}function $E(x,A){A.has("d")&&(x("stock _DDE_fmt_d(aData{}, value) {"),x(Ut),x(' sprintf(szTemp, _, "%d", value);'),x(Ht),x("}")),A.has("f")&&(x(""),x("stock _DDE_fmt_f(aData{}, Float:value) {"),x(Ut),x(' sprintf(szTemp, _, "%.3f", value);'),x(Ht),x("}")),A.has("s")&&(x(""),x("stock _DDE_fmt_s(aData{}, value{}) {"),x(Ut),x(' sprintf(szTemp, _, "%s", value);'),x(Ht),x("}")),A.has("stamp")&&(x(""),x("stock _DDE_fmt_stamp(aData{}, value) {"),x(Ut),x(' sprintf(szTemp, _, "%s", (stampToISOString(value)));'),x(Ht),x("}")),A.has("bin")&&(x(""),x("stock _DDE_fmt_bin(aData{}, mem{}, dim) {"),x(" #pragma warning disable 224"),x(" memtostr(aData, mem, 0, dim);"),x(" #pragma warning disable 224"),x(" return dim;"),x("}"))}function qE(x,A){return A===1?x===0?"idx":`idx - ${x}`:x===0?`idx / ${A}`:`(idx - ${x}) / ${A}`}function TE(x,A,e){let r=`idx >= ${x} && idx <= ${A}`;if(e===1)return r;let t=x===0?`idx % ${e} == 0`:`(idx - ${x}) % ${e} == 0`;return`${r} && ${t}`}function PE(x,A){let{startOffset:e,endOffset:r,step:t,formatType:s,pawnVarBase:n,subField:F}=A,f=qE(e,t),C=TE(e,r,t);if(x(` if (${C}) {`),s==="bin"){let D=`${n}[${f}]${F}`,p=F?F.substring(1):"",j=p?`${n}_${p}_dim`:`${n}_dim`;x(` return _DDE_fmt_bin(aData, ${D}, ${j});`)}else x(` return _DDE_fmt_${s}(aData, ${n}[${f}]${F});`);x(" }")}function NE(x,A,e){if(e.type==="shadow"||e.shadowRef)return;let r=oA(e);if(!r||r==="skip")return;let s=`${e.library?`_${j0.generateHashForLibraryName(e.library)}`:"DDE_"}${A}_${e.name}`,n=ja(r);if(n==="bin")x(` case ${e.byteOffset}: return _DDE_fmt_bin(aData, ${s}, ${s}_dim);`);else if(n)x(` case ${e.byteOffset}: return _DDE_fmt_${n}(aData, ${s});`);else{if(x(` case ${e.byteOffset}: {`),r.printf){let F=s;r.printfFormat&&(F=`(${r.printfFormat}(${F}))`),x(` sprintf(szTemp, _, "${r.printf}", ${F});`),x(" return (strcat(aData, szTemp, sizeof(szTemp)));")}x(" }")}}function ME(x,A,e){x(` case '${A.at(-1)}': {`),x(` return _DDE_local_${e.title}(aData, idx);`),x(" }")}function ba(x,A,e){let r=e===R0.ContainerType.cx?"c":"h",t=e===R0.ContainerType.cx?"config":"histdata";x(` if(cname{0} == '${r}'){`),x(" switch(cname{1}) {");for(let[s,n]of Object.entries(A.containers))e===n.containerType&&s.startsWith(t)&&n.transferDirection!==ma.backendOnly&&ME(x,s,n);x(" default:"),x(" return OK;"),x(" }"),x(" return OK;"),x(" }")}function IE(x,A){let e=wE(A.title,A.fields);x(""),x(`stock _DDE_local_${A.title}(aData{}, idx) {`),e.hasInlineFields&&x(" new szTemp{64};");for(let r of e.arrayGroups)PE(x,r);if(e.standaloneFields.length>0){x(" switch(idx) {");for(let r of e.standaloneFields)NE(x,A.title,r);x(" default:"),x(" return OK;"),x(" }")}x(" return OK;"),x("}")}function LE(x,A){for(let[,e]of Object.entries(A.containers))ha(e)&&IE(x,e)}function ga(x){let A=[],e=A.push.bind(A),r=SE(x);return $E(e,r),r.size>0&&e(""),e("stock DDE_get_local_data(cname{}, aData{}, idx) {"),ba(e,x,R0.ContainerType.cx),ba(e,x,R0.ContainerType.hx),e(" return OK;"),e("}"),LE(e,x),A.join(`
|
|
2323
|
+
`)}var wa=j0.yamlRangeToLineInformation,nt=r0.filePaths.dde.path,vA;(i0=>{let x=R0.DDEJson,A=j0.convertBlobToString;i0.DDE_SCHEMA=na;async function r(R,g){let I=await g.readFile(R);return A(I)}i0.readYamlFile=r;async function t(R,g,I=r0.fileNames.mainDDE,Y){let W=[],H=await J.read(R,g),K=await ya(R,g,H);if(Y)for(let Z of K){let{result:s0,unresolvedKeys:U}=Cx.replaceDefineTemplates(Z.yaml,Y);Z.yaml=s0;for(let v0 of U)W.push({file:Z.path,level:"error",message:`Unresolved define template: {{${v0}}}`,line:0,startCharacter:0,endCharacter:0})}for(let Z of K)W.push(...f(Z.path,Z.yaml));let a0=dx.Utils.joinPath(R,nt,I),t0=await r(a0,g);if(Y){let{result:Z,unresolvedKeys:s0}=Cx.replaceDefineTemplates(t0,Y);t0=Z;for(let U of s0)W.push({file:a0,level:"error",message:`Unresolved define template: {{${U}}}`,line:0,startCharacter:0,endCharacter:0})}return W.push(...f(a0,t0)),{manifest:H,libraryFiles:K,main:{path:a0,yaml:t0},diagnostics:W}}i0.validate=t;async function s(R,g,I,Y=r0.fileNames.mainDDE){let W=await J.read(R,g),H=await Cx.read(R,g,I),K=await t(R,g,Y,H.flat);if(K.diagnostics.filter(B0=>B0.level==="error").length>0)return{ddeJSON:null,diagnostics:K.diagnostics};let t0=await _(R,g,I),Z=new Nt.PreCompiler(W,K.libraryFiles,t0),s0=Z.parseLibraries();if(s0.find(B0=>B0.level==="error"))return{ddeJSON:null,diagnostics:[...K.diagnostics,...s0]};let{ddeJSON:v0,diagnostics:f0}=Z.parseMainDDE(K.main.path,K.main.yaml);return{ddeJSON:v0,diagnostics:[...K.diagnostics,...f0]}}i0.compileDDE=s;let n=new ka.default({strict:!1,allErrors:!0,verbose:!0});(0,_a.default)(n);let F=n.compile(i0.DDE_SCHEMA);function f(R,g){let I=new Kt.LineCounter,Y=(0,Kt.parseDocument)(g,{lineCounter:I,keepSourceTokens:!0}),W=[];for(let a0 of Y.errors){let t0=a0.pos?wa(I,[a0.pos[0],a0.pos[1],a0.pos[1]]):{line:0,startCharacter:0,endCharacter:0};W.push({file:R,level:"error",message:a0.message,...t0})}if(W.length>0)return W;let H=Y.toJSON();if(!F(H)){let t0=(F.errors||[]).filter(s0=>s0.keyword!=="if"),Z=new Set;for(let s0 of t0){let U=GE(s0);if(Z.has(U))continue;Z.add(U);let v0=HE(Y,I,s0);W.push({file:R,level:"error",message:U,...v0})}}return W}i0.validateJsonSchema=f,i0.PreCompiler=(R,g,I)=>new Nt.PreCompiler(R,g,I);function D(R,g){return Wn(R,g)}i0.generateMyDatanetXML=D;async function p(R,g,I,Y){let W=await J.read(R,g),H=Wn(W,Y),K=dx.Utils.joinPath(R,r0.filePaths.dist.ddeXmlPath);await g.writeFile(K,H),I.log("Generated",r0.filePaths.dist.ddeXmlPath)}i0.exportMyDatanetXML=p;async function j(R,g,I,Y,W){let H=dx.Utils.joinPath(R,r0.filePaths.studio.auto.dde.historyJson);await g.rm(H).catch(console.error);let K=await J.read(R,g);if(!J.isApp(K)||!K.registry?.id)return;if(!W){I.warn("Could not fetch dde of previous version: No API token provided.");return}let a0=RA.coerce(K.version);try{let s0=(await tx.getExistingApplication(W,K.publisher,K.registry.id,Y)).versions.find(B0=>!RA.prerelease(B0.version)&&RA.lte(B0.version,a0)),U=s0?.files.find(B0=>B0.name==="dde.json");if(!U){I.warn("Could not find a valid previous released app version to fetch the previous dde from.");return}let v0=await fetch(U.downloadUrl,{headers:{...iA(W),...tx.injectSemverHeader(!0)}});if(v0.status!==200){I.warn(`Could not fetch the dde.json of version "${s0?.version}"`);return}let f0=await v0.text();await g.writeFile(H,f0),I.log(`Saved history.json of previous app version ${s0.version}`)}catch(t0){I.error("Failed to fetch the dde of previous version",t0)}}i0.fetchPreviousHistoryJson=j;async function _(R,g,I){try{let Y=dx.Utils.joinPath(R,r0.filePaths.studio.auto.dde.historyJson);if(await g.stat(Y)){let H=await g.readFile(Y);return JSON.parse(A(H))}let W=dx.Utils.joinPath(R,nt,"history.json");if(await g.stat(W)){I.warn(`"${r0.filePaths.studio.auto.dde.historyJson}" does not exist - fallback to "${nt}history.json"`);let H=await g.readFile(W),K=JSON.parse(A(H)),a0=await J.read(R,g),t0=RA.coerce(a0.version)?.version,Z=Object.keys(K||{}).sort(RA.rcompare).find(U=>U!==t0);if(!Z)return null;let s0=K[Z];return{version:Z,...s0}}}catch(Y){I.error("Failed to read history.json",Y)}return I.warn("history.json does not exist"),null}i0.getHistoryJson=_;function k(R,g){return{version:RA.coerce(g.version)?.version||"1.0.0",...structuredClone(R)}}i0.buildHistoryJson=k;async function S(R,g,I,Y){let W=await J.read(R,g),H=k(Y,W),K=dx.Utils.joinPath(R,r0.filePaths.dist.historyJson);await g.writeFile(K,JSON.stringify(H,null," ")),I.log("Generated",r0.filePaths.dist.historyJson)}i0.exportHistoryJson=S;async function T(R,g){return g.rm(dx.Utils.joinPath(R,r0.filePaths.studio.auto.dlo.path))}i0.clearAutoDloDir=T;async function N(R,g,I,Y){await T(R,g);let W=await J.read(R,g),H=await ya(R,g,W),K=await Cx.read(R,g,I),a0=va(Y,K,W),Z=new rt(W,Y,null).generate();for(let vx of H){let zx=new rt(W,Y,vx.libraryName),{globals:yA,helper:kA}=zx.generate(),ax=[...yA,...kA].join(`\r
|
|
2324
|
+
`),Ax=r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",vx.libraryName),xA=dx.Utils.joinPath(R,Ax);ax.length&&(I.log("Generated",Ax),await g.writeFile(xA,ax))}let s0=la(Y),U=Ea(Y,H.map(vx=>vx.libraryName)),v0=ga(Y),f0=dx.Utils.joinPath(R,r0.filePaths.studio.auto.dlo.autoInc);await g.writeFile(f0,a0),I.log("Generated",r0.filePaths.studio.auto.dlo.autoInc);let B0=dx.Utils.joinPath(R,r0.filePaths.studio.auto.dlo.autoUplinkInc);await g.writeFile(B0,U),I.log("Generated",r0.filePaths.studio.auto.dlo.autoUplinkInc);let d0=dx.Utils.joinPath(R,r0.filePaths.studio.auto.dlo.autoLocalDataInc);await g.writeFile(d0,v0),I.log("Generated",r0.filePaths.studio.auto.dlo.autoLocalDataInc);let q0=dx.Utils.joinPath(R,r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));await g.writeFile(q0,[...Z.globals,...Z.helper].join(`
|
|
2325
|
+
`)),I.log("Generated",r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));let I0=dx.Utils.joinPath(R,r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main"));await g.writeFile(I0,s0),I.log("Generated",r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main")),await O(R,g,I)}i0.exportAutoDloFiles=N;async function L(R,g,I,Y){let W=await J.read(R,g),H=J.isLibrary(W),K=dx.Utils.joinPath(R,r0.filePaths.dist.path,"dde-api.yaml");await g.rm(K).catch(()=>{});let a0=dx.Utils.joinPath(R,r0.filePaths.dist.ddeApi);if(await g.writeFile(a0,As(Y,W)),I.log("Generated",r0.filePaths.dist.ddeApi),H){let t0=dx.Utils.joinPath(R,r0.filePaths.dist.ddeApiPath,`${W.name}.yaml`),Z=As(Y,W,W.name);Z.length&&(await g.writeFile(t0,Z),I.log("Generated",r0.filePaths.dist.ddeApiPath+`${W.name}.yaml`))}}i0.exportOpenApi=L;async function O(R,g,I){let Y=dx.Utils.joinPath(R,r0.filePaths.studio.auto.dlo.defaultInc),W=await ca(R,g);await g.writeFile(Y,W),I.log("Generated",r0.filePaths.studio.auto.dlo.defaultInc)}i0.exportDefaultInc=O})(vA||={});async function ya(x,A,e){let r=[],t=await Z0.getAll(e);for(let s in t){let n=Z0.dependencyToPath(x,s),F=Z0.dependencyIdToName(s),f=dx.Utils.joinPath(n,`${nt}/${F}.dde`);await A.stat(f)&&r.push({libraryName:F,path:f,yaml:await vA.readYamlFile(f,A)})}if(J.isLibrary(e)){let s=dx.Utils.joinPath(x,`/${nt}/${e.name}.dde`);await A.stat(s)&&r.push({libraryName:e.name,path:s,yaml:await vA.readYamlFile(s,A)})}return r}function RE(x,A,e){if(typeof x=="string")return x;if(typeof x!="object"||x===null)return"";let r=x[A];if(typeof r=="string")return r;if(typeof r!="object"||r===null)return"";let t=e?.missingProperty;return t?r[t]??"":""}function OE(x,A,e,r){let s={required:()=>`Missing required property '${A.missingProperty}'.`,additionalProperties:()=>`Unknown property '${A.additionalProperty}' is not allowed.`,type:()=>`Must be of type '${A.type}'.`,enum:()=>`Must be one of the allowed values: ${JSON.stringify(A.allowedValues)}.`,pattern:()=>`Value does not match the required pattern. ${r?.patternErrorMessage??e}`,minimum:()=>`${e}.`,maximum:()=>`${e}.`,exclusiveMinimum:()=>`${e}.`,exclusiveMaximum:()=>`${e}.`,not:()=>`This value is not allowed here. ${r?.description??""}`.trimEnd(),anyOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd(),oneOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd()}[x];return s?s():e}function GE(x){let A=x.instancePath||"/",e=x.parentSchema,r=RE(e?.errorMessage,x.keyword,x.params);if(r)return`${A}: ${r}`;let t=x.message||"unknown validation error";return`${A}: ${OE(x.keyword,x.params,t,e)}`}function UE(x,A){let e=A.split("/").filter(Boolean).map(r=>{let t=Number(r);return Number.isNaN(t)?r:t});for(let r=e.length;r>=0;r--){let t=e.slice(0,r),s=x.getIn(t,!0);if(s?.range)return s.range}return null}function HE(x,A,e){let r=UE(x,e.instancePath||"");return r?wa(A,r):{line:0,startCharacter:0,endCharacter:0}}var rs=require("vscode-uri");var ur=class{dloFileMap={};rootUri=rs.URI.parse("");constructor(){}set workspacePath(A){this.rootUri=A}getSequenceForFile(A){let e=A.substring(this.rootUri.path.length||0);if(this.rootUri.scheme!=="file"){let t=this.rootUri.toString();e=A.substring(t.length+1)}if(Object.hasOwn(this.dloFileMap,e))return this.dloFileMap[e];let r=j0.generateHashForFilePath(e);return this.dloFileMap[e]=r,r}getFilePathForSequence(A){let e=Object.entries(this.dloFileMap).find(([,r])=>r===A);return e?rs.URI.parse(`${this.rootUri.path}${e[0]}`).path:null}};var qa=require("vscode-uri");var KE=/^(?:\s*#options\s+)(.*)(?:\s*)$/,zE=/^(?:\s*#preinclude\s+)(.*)(?:\s*)$/,JE=/^(?:\s*#ifdef\s+)(.*)$/,VE=/^(?:\s*#ifndef\s+)(.*)$/,WE=/^(?:\s*#elseifdef\s+)(.*)$/,XE=/^(?:\s*#elseifndef\s+)(.*)$/,Ta=/^(\s*)(?:#callback\s+)(\w*)(?:\s*\(\s*)(.*?)(?:\s*\)\s*)(\{*){1}(?:\s*)$/,Pa=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Na=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Ma=/^(.*)(^|\s+)(?:assert\s*\(\s*\);*\s*)$/,Ia=/^(.*)(^|\s+)(?:catch\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,YE=/^\s*#include\s*</,QE=/^\s*#endinput\s*/,ZE=/^\s*#pragma\s+dynamic\s+(\S+)\s*(\/\/.*|\/\*.*|)$/,La=/^(.*)(^|\s+)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Ra=/^(.*)(^|\s*)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/;function Sa(x,A=""){let e=" ",r=x;return A.length?e={fatal:"\xA7",alarm:"!",warning:"?",debug:"~",ok:"$"}[A]||null:["!","?","~","$","\xA7"].includes(x.substring(1,1))&&(e=x.substring(1,1),r=`"${x.substring(2,x.length-1)}"`),{priority:`'${e}'`,code:r}}var Oa=/^(.*)(^|\s+)(?:log(|_debug|_info|_warn|_error)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Ga=(t=>(t[t.debug=0]="debug",t[t.info=1]="info",t[t.warn=2]="warn",t[t.error=3]="error",t))(Ga||{}),xl=/^(.*)(^|\s*)DDE_(state|result|aloha|volatile|setting|command)_/,Al=/^(.*)(^|\s*)onUplink(Restore|Apply)_(state|result|aloha|volatile|setting|command)/,el=/^(.*)(^|\s*)onUplinkEvent/,rl=/(?:^|\s)(?:assert|catch|applog(?:_ok|_warning|_alarm|_debug|_fatal)?|log(?:_debug|_info|_warn|_error)?)\s*\(/,tl=/^\s*#callback\s+\w+\s*\(/;function $a(x){let A=0,e=!1,r="";for(let t=0;t<x.length;t++){let s=x[t];if(e){if(s==="\\"){t++;continue}s===r&&(e=!1);continue}if(s==='"'||s==="'"){e=!0,r=s;continue}s==="("?A++:s===")"&&A--}return A}function Ua(x){return Ta.test(x)||Ma.test(x)||Pa.test(x)||Na.test(x)||Ia.test(x)||La.test(x)||Ra.test(x)||Oa.test(x)}function nl(x,A,e){if(!(rl.test(e)||tl.test(e)))return null;let t=$a(e);if(t<=0)return null;let s=t,n=[x[A]],F=[e],f=A+1,C=100;for(;s>0&&f<x.length&&f-A<C;){let j=x[f],_=j.split("//",1)[0];n.push(j),F.push(_),s+=$a(_),f++}if(n.length<=1||s>0)return null;let D=n.map((j,_)=>_===0?j:j.trim()).join(" "),p=F.map((j,_)=>_===0?j:j.trim()).join(" ");return Ua(p)?{joinedOriginal:D,joinedStripped:p,extraLineCount:n.length-1}:null}var pr=class{pragmaDynamic=null;dloFileSequencer=new ur;constructor(){}get pragmaDynamicFlag(){return this.pragmaDynamic?`-S${this.pragmaDynamic}`:null}preCompileDloFile(A,e,r,t,s){this.dloFileSequencer.workspacePath=A;let n=[],F=t.path,f=!1,C=qa.Utils.basename(t);if(F.includes(r0.filePaths.studio.auto.dlo.path)){let k=C.substring(0,C.length-8);!["app","main"].includes(k)&&C.endsWith("-dde.inc")&&(f=j0.generateHashForLibraryName(k))}else if(F.includes(r0.filePaths.studio.libdeps)){let k=F.split("libdeps/")[1],[S]=k.split("/");["dlo-core"].includes(S)||(f=j0.generateHashForLibraryName(S))}else J.isLibrary(r)&&(C.endsWith(".dlo")||F.includes("/dlo/examples/")||F.includes("/dlo/test/")?e.log("Skipping dde mangling for project file",C):f=j0.generateHashForLibraryName(r.name));if(F.endsWith(".auto/default.inc"))return{data:s.join(`
|
|
2326
|
+
`),diagnostics:n};let D=[],p=this.dloFileSequencer.getSequenceForFile(F);D.push(`stock static __file{} = "${p}";`),D.push(`stock static __refid{} = "${p}";`),D.push('stock static __applog_src_id{} = "A\\0\\0\\0\\0\\0\\0\\0";'),D.push("#line 0");let _=0;for(let k=0;k<s.length;k++){let S=s[k],T=S.split("//",1)[0],N=null,L=0;if(!Ua(T)){let O=nl(s,k,T);O&&(S=O.joinedOriginal,T=O.joinedStripped,L=O.extraLineCount)}if(N=KE.exec(T))S="// "+S,n.push({file:t,level:"error",line:k,message:"#options is not supported here. Use the DLO settings instead."});else if(N=zE.exec(T))S="// "+S,n.push({file:t,level:"error",line:k,message:"#preinclude is not supported here. Use the DLO settings instead."});else if(N=ZE.exec(T)){let O=Number(N[1].startsWith("(")?N[1].substring(1,N[1].length-1):N[1]);!Number.isInteger(O)||O<64?n.push({file:t,level:"error",line:k,message:"#pragma dynamic only supports integer values and must be greater than 63"}):(!this.pragmaDynamic||O>this.pragmaDynamic)&&(this.pragmaDynamic=O)}else if(N=JE.exec(T))S=S.replace("#ifdef ","#if defined ");else if(N=VE.exec(T))S=S.replace("#ifndef ","#if !defined ");else if(N=WE.exec(T))S=S.replace("#elseifdef ","#elseif defined ");else if(N=XE.exec(T))S=S.replace("#elseifndef ","#elseif !defined ");else if(N=Ta.exec(T)){let[,O,i0,R,g]=N;S=`${O}#define ${i0} _catch_funcidx( "___${i0}")
|
|
2327
|
+
forward ___${i0}( ${R});
|
|
2328
|
+
#line
|
|
2329
|
+
${_}
|
|
2330
|
+
public ___${i0}( ${R})${g}`}else if(N=Ma.exec(T)){let[,O,i0]=N;S=`${O}${i0}{_log_string="";_assert(__refid,__line);}`}else if(N=Pa.exec(T)){let[,O,i0,R,g]=N;S=`${O}${i0}{ if (!(${R})) { sprintf(_log_string,_,${g.replace(/%%/g,"\xFF")});_assert(__refid,__line); }}`}else if(N=Na.exec(T)){let[,O,i0,R]=N;S=`${O}${i0}{ if (!(${R})) { _log_string="";_assert(__refid,__line); }}`}else if(N=Ia.exec(T)){let[,O,i0,R]=N;S=`${O}${i0}_catch(__refid,__line,${R});`}else if(N=La.exec(T)){let[,O,i0,R,g,I]=N,{priority:Y,code:W}=Sa(g,R.substring(1));Y!==null&&(S=`${O}${i0}{new params_str{DDE_APPLOG_SIZE_PARAMS};sprintf(params_str,_,${I});DDE_applog_write(${Y}, ${W}, params_str, __applog_src_id);}`)}else if(N=Ra.exec(T)){let[,O,i0,R,g]=N,{priority:I,code:Y}=Sa(g,R.substring(1));I!==null&&(S=`${O}${i0}DDE_applog_write(${I}, ${Y}, "", __applog_src_id);`)}else if(N=Oa.exec(T)){let[,O,i0,R,g]=N,I=R.substring(1),Y=Ga[I];S=`${O}${i0}{ if(_log_level <= ${Y}){ sprintf(_log_string,_,${g.replace(/%%/g,"\xFF")}); _log${R}(__refid,__line); }}`}else(N=YE.exec(T))&&!F.includes(r0.filePaths.studio.auto.path)?(F.includes(r0.filePaths.studio.libdeps)||n.push({file:t,level:"warning",line:k,message:"Libraries are included automatically - remove this #include line"}),S="// Libraries are included automatically! - "+T):(N=QE.exec(T))&&(n.push({file:t,level:"error",line:k,message:"#endinput is not supported - use #if/#endif instead"}),S=T);f&&!r.legacyProject&&(xl.exec(T)&&(S=S.replaceAll("DDE_",`_${f}`)),Al.exec(T)&&(S=S.replace("onUplink",`_${f}`)),el.exec(T)&&(S=S.replace("onUplink",`_${f}Uplink`))),D.push(S),_++;for(let O=0;O<L;O++)D.push(""),_++,k++}if(C!=="main.dlo"){let k=C.split(".")[0].replace(/[^a-zA-Z0-9]/g,"_"),S=`_inc_${k}`.substring(0,31),T=`_inc_${k}_inc`.substring(0,31);D.push(`#if defined ${S}`),D.push(`#undef ${S}`),D.push("#endif"),D.push(`#if defined ${T}`),D.push(`#undef ${T}`),D.push("#endif")}return{data:D.join(`
|
|
2331
|
+
`),diagnostics:n}}};var OA=require("vscode-uri");var $0=Q0(require("fs")),nx=require("vscode-uri");var Ja=Q0(require("iconv-lite")),sl=j0.convertBlobToStringArray,Va=16384,Wa=511,ts=Va|Wa,il=32768,al=438,Ha=il|al,ol=new pr,br={};function Xa(){let x=[];for(let A of Object.keys(br))x.push(...br[A].diagnostics);return x}var zt=!!process.env.DLO_PROFILE,re={precompileCount:0,cacheHits:0,precompileMs:0};function Ya(x){zt&&(x.log(`[DLO_PROFILE] precompile: ${re.precompileCount} runs, ${re.cacheHits} cache hits, ${re.precompileMs.toFixed(1)}ms`),re.precompileCount=0,re.cacheHits=0,re.precompileMs=0)}var ns=(x,A,e,r)=>{let t={getattr(n){let F=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n)),f=F.fsPath;if(!$0.existsSync(f))throw new x.ErrnoError(44);let C=za(A,r,e,F),D=$0.statSync(f),p=C?.length||D.size;return{mode:D.isDirectory()?ts:Ha,size:p,atime:D.atime,mtime:D.mtime,ctime:D.ctime}},setattr(n,F){let f=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath;if(!$0.existsSync(f))throw new x.ErrnoError(44);if(typeof F.size=="number"&&$0.truncateSync(f,F.size),typeof F.mode=="number"&&$0.chmodSync(f,F.mode),F.atime||F.mtime){let C=$0.statSync(f);$0.utimesSync(f,F.atime??C.atime,F.mtime??C.mtime)}},lookup(n,F){let C=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;if(!$0.existsSync(C))throw new x.ErrnoError(44);let D=$0.statSync(C),p=x.createNode(n,F,D.isDirectory()?ts:Ha,0);return p.node_ops=n.node_ops,p.stream_ops=n.stream_ops,p},readdir(n){let F=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath;return[".","..",...$0.readdirSync(F)]},mknod(n,F,f,C){let D=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;$0.writeFileSync(D,"");let p=x.createNode(n,F,f,C);return p.node_ops=n.node_ops,p.stream_ops=n.stream_ops,p},unlink(n,F){let f=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;$0.unlinkSync(f)},mkdir(n,F,f){let C=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;$0.mkdirSync(C,{mode:f});let D=x.createNode(n,F,f|ts,0);return D.node_ops=n.node_ops,D.stream_ops=n.stream_ops,D},rmdir(n,F){let f=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;$0.rmdirSync(f)},rename(n,F,f){let C=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath,D=nx.Utils.joinPath(nx.URI.parse(F.mount.opts.root),x.getPath(F),f).fsPath;$0.renameSync(C,D)}},s={open(n){let F=nx.Utils.joinPath(nx.URI.parse(n.node.mount.opts.root),x.getPath(n.node));n.modifiedContent=za(A,r,e,F),n.modifiedContent||(n.nfd=$0.openSync(F.fsPath,Ka(n.flags)))},close(n){n.nfd&&$0.closeSync(n.nfd)},read(n,F,f,C,D){if(!n.modifiedContent)return $0.readSync(n.nfd,F,f,C,D);let p=n.modifiedContent;if(D>=p.length)return 0;let j=p.length-D,_=Math.min(C,j);return Fl(p,F,f,D,D+_),_},write(n,F,f,C,D){return $0.writeSync(n.nfd,F,f,C,D)},flagsToMode:Ka,llseek(n,F,f){let C=F;if(f===1)C+=n.position;else if(f===2){let D=$0.fstatSync(n.nfd);C+=D.size}if(C<0)throw new x.ErrnoError(28);return n.position=C,C}};return{mount(){let n=te(A),F=x.createNode(null,n,Va|Wa,0);return F.node_ops=t,F.stream_ops=s,F},node_ops:t,stream_ops:s}};function Ka(x){let A=x&2097155;if(A===0)return"r";if(A===1)return"r+";if(A===65)return"w";if(A===577)return"w+";if(A===1089)return"a";if(A===1217)return"a+";throw new Error(`Unknown file open flags: ${x}`)}function Fl(x,A,e,r,t){if(Buffer.isBuffer(x)&&Buffer.isBuffer(A))x.copy(A,e,r,t);else{let s=x.subarray(r,t);Buffer.isBuffer(A)?Uint8Array.prototype.set.call(A,s,e):A.set(s,e)}}function za(x,A,e,r){let t=r.fsPath;if(!t.endsWith(".dlo")&&!t.endsWith(".inc"))return;let s=vl(t);if(!s){delete br[t];return}let n=br[t];if(n&&n.mtimeMs===s.mtimeMs&&n.size===s.size)return zt&&re.cacheHits++,n.buffer;let F=zt?performance.now():0,f=fl(x,A,e,r);return zt&&(re.precompileCount++,re.precompileMs+=performance.now()-F),br[t]={buffer:f.buffer,mtimeMs:s.mtimeMs,size:s.size,diagnostics:f.diagnostics},br[t].buffer}function vl(x){try{return $0.statSync(x)}catch{return null}}function fl(x,A,e,r){let t=$0.readFileSync(r.fsPath),s=sl(t),n=ol.preCompileDloFile(x,A,e,r,s);return{buffer:Ja.encode(n.data,"cp1252"),diagnostics:n.diagnostics}}function te(x){return x.fsPath.replace(/\\/g,"/")}function st(x,A){let e=te(x);return te(A).replace(e,"")}var no=to(),at=no.createPawnCC,so=no.createPawnDbg;var mr=class{constructor(A,e,r){this.cwd=A;this.fs=e;this.logger=r;this.dloCC=null}cwd;fs;logger;dloCC;stdout=[];stderr=[];async initDloCC(A=!1){this.stdout.length=0,this.stderr.length=0,this.dloCC=await at({noExitRuntime:A,print:n=>{let F=ss(this.cwd,n);this.logger.log(F?F.message:n),this.stdout.push(n)},printErr:n=>{let F=ss(this.cwd,n);n.includes(": warning")?this.logger.warn(F?F.message:n):this.logger.error(F?F.message:n),this.stderr.push(n),this.stdout.push(n)}});let e=te(this.cwd),[r]=e.split("/"),t=this.dloCC.FS,s=await J.read(this.cwd,this.fs);t.filesystems.NODEFS_TS=ns(t,this.cwd,s,this.logger),t.mkdir(r),t.mount(t.filesystems.NODEFS_TS,{root:"/"},r),t.chdir(te(this.cwd))}async compile(A,e){let r=await J.read(A,e);if(!await J.isApmPartEnabled(A,e,p0.Part.dlo,r))return this.logger.log("DLO not enabled. Skipped."),{code:0,stdout:[],stderr:[],diagnostics:[]};await this.initDloCC(),await e.mkdir(OA.Utils.joinPath(A,"dist/dlo"));let t=OA.Utils.joinPath(A,r.dlo?.mainFile||r0.filePaths.dlo.mainDLO),s=[],n=OA.Utils.joinPath(A,r0.filePaths.studio.auto.dlo.cfg),F=st(A,n);s.push(`-T.${F}`);let f=0;try{let C=`.${st(A,t)}`;f=await this.dloCC.callMain([C,...s])}catch(C){this.logger.error(C)}return{code:f,stdout:this.stdout,stderr:this.stderr,diagnostics:[...Xa(),...is(A,this.stderr,t)]}}async getDloSymbols(A,e){let r=e.map(D=>{let p=D.substring(0,2);return["-D","-e","-i","-o","-p","-r","-T"].includes(p)?`${p}.${D.substring(2)}`:D}),t=!!process.env.DLO_PROFILE,s=t?performance.now():0,{compiler:n,print:F}=await this.getSymbolCompiler(),f=t?performance.now()-s:0,C=t?performance.now():0;try{if(await n.callMain(["."+A,...r,"-R"]))return null}catch(D){if(D.stack?.startsWith("RuntimeError"))return null;throw D}finally{if(t){let D=performance.now()-C;this.logger.log(`[DLO_PROFILE] instantiate: ${f.toFixed(1)}ms, callMain: ${D.toFixed(1)}ms`),Ya(this.logger)}}return[...F.stdout,...F.stderr]}async getSymbolCompiler(){let A={stdout:[],stderr:[]},e=await at({noExitRuntime:!1,print:F=>{A.stdout.push(F)},printErr:F=>{A.stderr.push(F)}}),r=te(this.cwd),[t]=r.split("/"),s=e.FS,n=await J.read(this.cwd,this.fs);return s.filesystems.NODEFS_TS=ns(s,this.cwd,n,this.logger),s.mkdir(t),s.mount(s.filesystems.NODEFS_TS,{root:"/"},t),{compiler:e,print:A}}};function is(x,A,e){let r=[],t=A.filter(s=>!!s.trim());for(let s of t){if((s.includes("Assertion failed:")||s.includes("Compilation aborted."))&&e){r.push({file:e,level:"error",line:0,message:s});continue}let n=ss(x,s);n&&r.push({file:OA.URI.parse(`file:///${n?.posixPath}`),level:n.level,line:Number(n.lineNumber)-1,message:n.msg})}return r}function ss(x,A){let e=A.indexOf(" : "),r=A.indexOf(": ",e+3),t=A.substring(0,e).trim(),s=A.substring(e+3,r).trim(),n=A.substring(r+2).trim();if(!t||!s||!n)return null;let[F,f]=t.split(/[()(-)]/),C=s.split(" "),D=C[C.length-2],j=OA.Utils.joinPath(x,F).fsPath.replace(/\\/g,"/");j.startsWith("/")&&(j=j.substring(1));let _=A.replace(F,j);return{level:D,msg:n,posixPath:j,lineNumber:f,message:_}}async function io(x,A,e){let r=["-M","-v2"],t=OA.Utils.joinPath(x,r0.filePaths.studio.auto.dlo.defaultInc);r.push(`-p.${st(x,t)}`);let s=await Z0.getApmPartDependencies(x,A,p0.Part.dlo);for(let F of s){let f=OA.Utils.dirname(F.path);r.push(`-i.${st(x,f)}`)}let n=e.dlo;return n&&r.push(...n.compileOptions),r.push("-o./dist/dlo/main.amx"),{path:OA.Utils.joinPath(x,r0.filePaths.studio.auto.dlo.cfg),data:r.join(`
|
|
2332
|
+
`)}}var ot;(f=>{f.createPawnCC=at,f.createPawnDbg=so,f.FileSequencer=ur,f.PreCompiler=pr,f.Compiler=mr,f.uriToMemFs=te,f.parseCompilerWarningsAndErrors=is;async function F(C,D,p){let j=await J.read(C,D),_=await io(C,D,j);await D.writeFile(_.path,_.data),p.log("Generated",r0.filePaths.studio.auto.dlo.cfg)}f.exportDloConfig=F})(ot||={});var as=require("vscode-uri");var oo=Q0(require("node:child_process"));var Jt;(e=>{async function x(r,t,s){let n=await J.read(r,t);if(await J.isApmPartEnabled(r,t,p0.Part.pov)){s.info("Executing POV build script",n.pov?.details.buildCommand);let{buildCommand:F,workingPath:f}=n.pov.details,C=as.Utils.joinPath(r,f);try{await ao(C,F,s)}catch(D){throw D.code?new Error(`APM part '${p0.Part.pov}' has errors. Aborted.`):D}}}e.tryBuildPov=x;async function A(r,t,s){let n=await J.read(r,t);if(await J.isApmPartEnabled(r,t,p0.Part.blo,n)){s.info("Executing BLO build script",n.blo?.buildCommand);let{buildCommand:F,workingPath:f}=n.blo,C=as.Utils.joinPath(r,f);try{await ao(C,F,s)}catch(D){throw D.code?new Error(`APM part '${p0.Part.blo}' has errors. Aborted.`):D}}}e.tryBuildBlo=A})(Jt||={});async function ao(x,A,e){return new Promise((r,t)=>{oo.exec(A,{cwd:x.fsPath,env:process.env},(s,n,F)=>{e.log(n),F&&e.error(F),s&&t(s),r(null)})})}var vo=require("vscode-uri");var Fs=require("minimatch");var fo=require("@gera2ld/tarjs"),yl=j0.convertBlobToString,kl=require("pako"),Eo=".studioignore",lo=[".vscodeignore","package-lock.json","npm-debug.log","yarn.lock","yarn-error.log","npm-shrinkwrap.json",".editorconfig",".npmrc",".yarnrc",".gitattributes","*.todo","tslint.yaml",".eslintrc*",".babelrc*",".prettierrc*",".cz-config.js",".commitlintrc*","webpack.config.js","ISSUE_TEMPLATE.md","CONTRIBUTING.md","PULL_REQUEST_TEMPLATE.md","CODE_OF_CONDUCT.md",".github",".travis.yml","appveyor.yml","**/.git","**/.git/**","**/*.vsix","**/.DS_Store","**/*.vsixmanifest","**/.vscode-test/**","**/.vscode-test-web/**"];lo.push("**/.studio/**","**/node_modules/**",Eo,"dist/defines.app.ts");var Fo={dot:!0},Re;(r=>{async function x(t,s){let n=new fo.TarWriter;(await A(t,s)).forEach(C=>{n.addFile(C.name,C.data)});let f=await n.write();return kl.gzip(await f.arrayBuffer())}r.createArchive=x;async function A(t,s){let n=[],{ignore:F,negate:f}=await _l(t,s),D=(await s.findFiles(t,"**/*")).filter(({path:p})=>{let j=p.slice(t.path.length+1);return!F.some(_=>(0,Fs.minimatch)(j,_,Fo))||f.some(_=>(0,Fs.minimatch)(j,_.slice(1),Fo))});for(let p of D){let j=p.path.slice(t.path.length+1),[_,k]=await Promise.all([s.stat(p),s.readFile(p)]);_&&n.push({name:j,data:k,modifyTime:new Date(_.mtime)})}return n}r.getFilesForArchive=A;async function e(t,s,n,F=Cx.ENV.production){let{publisher:f,name:C,version:D}=s,p=await hx.readFilesFromTarGz(n,["CHANGELOG.md","README.md","studio.json"]),j={"CHANGELOG.md":await os(p["CHANGELOG.md"]),"README.md":await os(p["README.md"]),"studio.json":await os(p["studio.json"]),"library.tar.gz":n};return await tx.publishLibraryVersion(t,f,C,D,j,F)}r.publishPackage=e})(Re||={});async function _l(x,A){let e=["!studio.json","!README.md"],t=(await wl(x,A)).split(/[\n\r]/).map(C=>C.trim()).filter(C=>!!C).filter(C=>!/^\s*#/.test(C)),s=[...t,...t.filter(C=>!/(^|\/)[^/]*\*[^/]*$/.test(C)).map(C=>/\/$/.test(C)?`${C}**`:`${C}/**`)],n=[...lo,...s,...e],[F,f]=n.reduce((C,D)=>/^\s*!/.test(D)?[C[0],[...C[1],D]]:[[...C[0],D],C[1]],[[],[]]);return{ignore:F,negate:f}}async function wl(x,A){let e=vo.Utils.joinPath(x,Eo);if(await A.stat(e)){let t=await A.readFile(e);return yl(t)}else return""}async function os(x){return new Uint8Array(await x.arrayBuffer())}var GA=require("vscode-uri");var me=require("yaml");var Sl=j0.convertBlobToString,Vt=j0.yamlRangeToLineInformation,Ft;(n=>{let x;(D=>(D.static="static",D.dynamic="dynamic",D.appDynamic="app-dynamic"))(x=n.Type||={});let A;(p=>(p.crcStamp="crc_stamp",p.stampOnly="stamp_only",p.onlyDown="only_down",p.onlyUp="only_up"))(A=n.SyncLogic||={});let e;(D=>(D.down="down",D.up="up",D.off="off"))(e=n.Force||={});async function r(F,f,C){let{properties:D,diagnostics:p,libraryFiles:j}=await t(F,f),_=GA.Utils.joinPath(F,r0.filePaths.dist.dfilesPath);await f.stat(_)&&await f.rm(_);for(let[k,S]of Object.entries(D))await ql(F,f,k,S,j);return Object.keys(D).length&&(C.done(`${Object.keys(D).length} dfiles processed.`),await f.writeFile(GA.Utils.joinPath(F,r0.filePaths.dist.dfilesProperties),JSON.stringify(D,null," "))),p}n.process=r;async function t(F,f){let C=[],D={},p=await Z0.getApmPartDependencies(F,f,p0.Part.dfiles);for(let k of p){let{properties:S,diagnostics:T}=await s(f,k.path,k.name);Object.assign(D,S),C.push(...T)}let{properties:j,diagnostics:_}=await s(f,GA.Utils.joinPath(F,r0.filePaths.dfiles.mainDFILES),null);return Object.assign(D,j),C.push(..._),{properties:D,diagnostics:C,libraryFiles:p}}n.parseDfile=t;async function s(F,f,C){let D=[],p={};if(!await F.stat(f))return{properties:p,diagnostics:D};let j=await F.readFile(f),_=Sl(j),k=new me.LineCounter,T=(0,me.parseDocument)(_,{lineCounter:k}).contents||new me.YAMLMap;for(let N of T.items){let L=N.key.value,O=(0,me.isMap)(N.value)?N.value:null,i0=Vt(k,N.key.range),R=O?O.has("syncMode"):!1,g=R?O.get("syncMode"):"crc_stamp";if(R){let K=Object.values(n.SyncLogic);if(!K.includes(g)){let a0=O.items.find(Z=>Z.key.value==="syncMode"),t0=Vt(k,a0.key.range);D.push({file:f,code:"",message:`Property syncMode does not match any of "${K.join(", ")}"`,line:t0.line,startCharacter:t0.startCharacter,endCharacter:t0.endCharacter,level:"error"})}}else D.push({file:f,code:"",message:'Property "syncMode" missing',line:i0.line,startCharacter:i0.startCharacter,endCharacter:i0.endCharacter,level:"error"});let I=O?O.has("type"):!1,Y=I?O.get("type"):"static";if(I){let K=Object.values(n.Type);if(!K.includes(Y)){let a0=O.items.find(Z=>Z.key.value==="type"),t0=Vt(k,a0.key.range);D.push({file:f,code:"",message:`Property type does not match any of "${K.join(", ")}"`,line:t0.line,startCharacter:t0.startCharacter,endCharacter:t0.endCharacter,level:"error"})}}L.match(/^[a-z0-9._-]*$/)||D.push({file:f,code:"",message:'Filename does not match pattern "a-z0-9._-"',line:i0.line,startCharacter:i0.startCharacter,endCharacter:i0.endCharacter,level:"error"});let W=GA.Utils.joinPath(GA.Utils.dirname(f),L),H=await $l(F,W);if(H)p[L]={crc:H.crc,force:"off",readable:!1,size:H.size,stamp:H.stamp,sync_logic:g,type:Y,library:C};else{let K=Vt(k,N.key.range);D.push({file:f,code:"",message:`Could not find file "${L}"`,line:K.line,startCharacter:K.startCharacter,endCharacter:K.endCharacter,level:"error"})}}return{properties:p,diagnostics:D}}n.parseYamlFile=s})(Ft||={});async function $l(x,A){let e=await x.stat(A);if(!e)return null;let r=await x.readFile(A);return{size:e.size,stamp:Math.trunc(e.ctime),crc:j0.generateCRC32ForFileContent(r)}}async function ql(x,A,e,r,t){let n=r.library!==null?GA.Utils.dirname(t.find(C=>C.name===r.library).path):GA.Utils.joinPath(x,r0.filePaths.dfiles.path),F=GA.Utils.joinPath(x,r0.filePaths.dist.dfilesPath,e),f=GA.Utils.joinPath(n,e);await A.copy(f,F)}var vs=require("vscode-uri");var co=Q0(require("semver")),Tl="package.json",Pl=["peerDependencies","dependencies","optionalDependencies"],Nl=" ",jr;(r=>{r.PART_DIST_PATHS=[r0.filePaths.dist.bloPath,r0.filePaths.dist.povDetailsPath];async function A(t,s,n,F){let f=vs.Utils.joinPath(t,Tl),C=`${n.name}/${Gl(t)}`;if(!await s.stat(f))return!1;let p=await Ml(s,f,C,F);if(!p)return!1;let j=p.pkg;if(typeof j!="object"||j===null||Array.isArray(j))return F.warn(`"${C}/package.json" does not contain a JSON object - skipped normalizing it.`),!1;if(!co.valid(n.version))return F.warn(`Library manifest version "${n.version}" is not a valid semantic version - skipped normalizing "${C}/package.json".`),!1;Il(j,n,C,F);let _=Ll(j,n.version);j=_.pkg;let k=_.changed;k&&F.warn(`Patched version "${_.oldVersion??"<none>"}" -> "${n.version}" in "${C}/package.json" (studio.json is the source of truth).`);let S=Ol(n);if(Rl(j,S,C,F)&&(k=!0),!k)return!1;let T=Ul(p.raw),N=p.raw.endsWith(`
|
|
2333
|
+
`),L=JSON.stringify(j,null,T)+(N?`
|
|
2334
|
+
`:"");try{await s.writeFile(f,L)}catch(O){return F.warn(`Could not write "${C}/package.json": ${O}`),!1}return!0}r.normalizePartPackageJson=A;async function e(t,s,n,F){for(let f of r.PART_DIST_PATHS){let C=vs.Utils.joinPath(t,f);await A(C,s,n,F)}}r.normalizeLibraryParts=e})(jr||={});async function Ml(x,A,e,r){try{let t=await x.readFile(A),s=j0.convertBlobToString(t),n=JSON.parse(s);return{raw:s,pkg:n}}catch(t){return r.warn(`Could not read/parse "${e}/package.json": ${t}`),null}}function Il(x,A,e,r){x.name!==void 0&&x.name!==A.name&&r.warn(`"${e}/package.json" name "${x.name}" does not match library name "${A.name}".`)}function Ll(x,A){if(x.version===A)return{pkg:x,changed:!1,oldVersion:x.version};let e=x.version;if(x.version===void 0&&Object.hasOwn(x,"name")){let{name:r,...t}=x;x={name:r,version:A,...t}}else x.version=A;return{pkg:x,changed:!0,oldVersion:e}}function Rl(x,A,e,r){let t=!1;for(let s of Pl){let n=x[s];if(!n)continue;let F=!1;for(let f of Object.keys(n)){if(!A.has(f))continue;let C=n[f];if(typeof C!="string"||C.startsWith("npm:")||C.includes("://")){r.warn(`Left "${f}" in ${s} of ${e}/package.json untouched - its value "${C}" does not look like a Studio library reference.`);continue}delete n[f],F=!0,t=!0,r.warn(`Removed "${f}" from ${s} of ${e}/package.json - Studio libraries must be declared in studio.json "libraryDependencies" (npm ranges never match prereleases across minor versions).`)}F&&Object.keys(n).length===0&&delete x[s]}return t}function Ol(x){let A=[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})];return new Set(A.map(e=>e.split("/")[1]))}function Gl(x){let A=x.path.replace(/\\/g,"/");for(let e of jr.PART_DIST_PATHS)if(A===e||A.endsWith(`/${e}`))return e;return A}function Ul(x){let A=x.match(/^\{\r?\n([ \t]+)/);return A?A[1].startsWith(" ")?" ":A[1]:Nl}var vt=require("@gera2ld/tarjs"),Bo=j0.convertBlobToString,fs=require("pako"),hx;(p=>{class x extends Error{_mergedDiagnostics;constructor(_,k){super(_),this.name="BuildError",this._mergedDiagnostics=k}get mergedDiagnostics(){return this._mergedDiagnostics}}p.BuildError=x;async function A(j,_,k,S,T,N=!0,L){N=Hl(k,N),await Kl(j,_,k,S,T,N);try{let R=await Cx.read(j,_,k);await zl(j,_,k,R)}catch(R){k.warn("Could not generate defines.ts:",R)}let O={[p0.Part.dde]:[],[p0.Part.dlo]:[],[p0.Part.dfiles]:[]},i0={[p0.Part.dde]:Jl,[p0.Part.dlo]:Vl,[p0.Part.dfiles]:Wl};try{for(let R of[p0.Part.dde,p0.Part.dlo,p0.Part.dfiles])if(N.includes(R)&&(k.info(`Building ${R.toUpperCase()}...`),await Zl(k,R,i0[R],O[R],j,_)))return O}catch(R){throw L?new x(R?.message,O):R}return N.includes(p0.Part.pov)?await Jt.tryBuildPov(j,_,k):k.info("Skipping pov build"),N.includes(p0.Part.blo)?await Jt.tryBuildBlo(j,_,k):k.info("Skipping blo build"),await Xl(j,_,k),await Yl(j,_,k),k.done("Project build completed."),O}p.buildAll=A;async function e(j,_,k,S,T,N,L){let O=await J.read(j,_);return J.isLibrary(O)?(k.info("Library project detected. Publishing library..."),s(j,_,k,T,S)):(k.info("App project detected. Publishing app..."),t(j,_,k,T,N,L,S))}p.release=e;async function r(j,_,k,S,T,N){let L=await J.read(j,_),O=`${L.name}-${L.version}.tar.gz`,i0=null;if(J.isLibrary(L))k.info("Library project detected. Packing library..."),i0=await Co(j,_,k,T,S);else{k.info("App project detected. Packing app...");let g=await Do(j,_,k,T,N,S);i0=await Ac(g)}let R=Oe.Utils.joinPath(j,O);i0!==null?(await _.writeFile(R,i0),k.done(`Packaged: ${R.fsPath}`)):k.error(`Could not create archive: ${R.fsPath}`)}p.pack=r;async function t(j,_,k,S,T,N=null,L){if(!await p0.validateAccess(j,_,S,!1,L))throw new Error("Could not validate access to application");let i0=await Do(j,_,k,S,T,L);await p0.updateProfile(j,_,S,L);let R=await p0.publishTag(j,_,S,i0,L);if(N!==null){let g=await J.read(j,_);await tx.updateExistingApplicationVersion(S,g.publisher,g.registry?.id,g.version,{allowedBackends:N},L),k.info(`Tag "${R.version}" with phase "${R.phase}" shared with ${[...N].join(";")}!`)}k.done(`Tag "${R.version}" with phase "${R.phase}" published!`)}p.releaseAPM=t;async function s(j,_,k,S,T){let N=await J.read(j,_),L=await Co(j,_,k,S,T);await Re.publishPackage(S,N,L,T),k.done(`Library "${N.publisher}/${N.name}" with version "${N.version}" published!`)}p.releaseLibrary=s;async function n(j,_,k,S,T,N,L,O=null){if(N==="*"){let H=await J.read(j,_);N=`${H.name}-${H.version}.tar.gz`,k.info(`Publishing detected archive package "${N}"...`)}let i0=Oe.Utils.joinPath(j,N);if(!await _.stat(i0))throw new Error(`Archive package not found: ${i0.fsPath}`);let R=await _.readFile(i0),g=await ec(R),{publisher:I,registry:Y,version:W}=g;J.isLibrary(g)?(await Re.publishPackage(S,g,R,T),k.done(`Library "${I}/${g.name}" with version "${g.version}" published!`)):(await tx.updateApplicationFile(S,I,Y.id,W,"app.tar.gz",R,T),await tx.updateExistingApplicationVersion(S,I,Y?.id,W,{allowedBackends:O||void 0,phase:L||void 0},T),k.info(`Tag "${W}" with phase "${L}" shared with ${[...O||""].join(";")}!`),k.done(`Tag "${W}" with phase "${L}" published!`))}p.publishArchive=n;async function F(j,_,k){let S;try{S=await _.readFile(Oe.Utils.joinPath(j,"README.md"))}catch{throw new Error('Could not find "README.md". "README.md" is required for publishing.')}if(Bo(S)===r0.readme(k))throw new Error('"README.md" matches the default template. Please write a brief project description.');return S}p.getReadmeFile=F;async function f(j,_){let k;try{k=await _.readFile(Oe.Utils.joinPath(j,"CHANGELOG.md"))}catch{throw new Error('Could not find "CHANGELOG.md". "CHANGELOG.md" is required for publishing.')}if(Bo(k)===r0.changelog)throw new Error('"CHANGELOG.md" matches the default template.');return k}p.getChangelogFile=f;async function C(j,_,k,S){let T=await J.read(j,_),{name:N,publisher:L,description:O}=T,i0=J.validateProjectName(N,J.isLibrary(T));if(i0)throw new Error(`name: ${i0}`);let R=J.validateDescription(O);if(R)throw new Error(`description: ${R}`);let g=J.validatePublisherId(L)||await J.validatePublisherOnline(k,L,S);if(g)throw new Error(`publisher: ${g}`);if(!J.isLibrary(T)&&(await J.validateApplicationIcon(j,_,T),J.validateEngineSettings(T),J.isApp(T)&&await J.isApmPartEnabled(j,_,p0.Part.dlo,T)&&(!T.dpid||!Object.values(J.DeviceProfiles).includes(T.dpid))))throw new Error("dpid: The device profile is needed to compile a dlo")}p.validatePublishSettings=C;async function D(j,_){let k=fs.ungzip(j),S=await vt.TarReader.load(k),T={};for(let N of S.fileInfos)_.includes(N.name)&&(T[N.name]=S.getFileBlob(N.name));return T}p.readFilesFromTarGz=D})(hx||={});function Hl(x,A){let e=Object.values(p0.Part);return A===!0?(x.info("Building project..."),e):A===!1?[]:A}async function Kl(x,A,e,r,t,s){await Z0.validateMinimumBackendVersion(x,A,e),s.includes(p0.Part.dde)&&await vA.fetchPreviousHistoryJson(x,A,e,r,t)}async function zl(x,A,e,r){r.defaultsOnly?(await Cx.exportDefinesTs(x,A,r.defaultsOnly),e.log("Generated",r0.filePaths.dist.definesTs,"(defaults only)"),await Cx.exportDefinesTs(x,A,r,r0.filePaths.dist.definesAppTs),e.log("Generated",r0.filePaths.dist.definesAppTs,"(with app.ini overrides)")):(await Cx.exportDefinesTs(x,A,r),e.log("Generated",r0.filePaths.dist.definesTs))}async function Jl(x,A,e){let r=await vA.compileDDE(x,A,e);if(r.ddeJSON){await vA.exportMyDatanetXML(x,A,e,r.ddeJSON);let t=await J.read(x,A);J.isLibrary(t)||await vA.exportHistoryJson(x,A,e,r.ddeJSON),await vA.exportOpenApi(x,A,e,r.ddeJSON),await J.isApmPartEnabled(x,A,p0.Part.dlo,t)&&(await vA.exportAutoDloFiles(x,A,e,r.ddeJSON),await ot.exportDloConfig(x,A,e))}return r.diagnostics}async function Vl(x,A,e){let r=new mr(x,A,e),{diagnostics:t}=await r.compile(x,A);return t}async function Wl(x,A,e){return await Ft.process(x,A,e)}async function Xl(x,A,e){let r=await J.read(x,A);J.isLibrary(r)&&await jr.normalizeLibraryParts(x,A,r,e)}async function Yl(x,A,e){let r=Oe.Utils.joinPath(x,r0.fileNames.reportTemplate);if(await A.stat(r)){let t=Oe.Utils.joinPath(x,r0.filePaths.dist.reportTemplate);await A.copy(r,t),e.log(`Copied "${r0.fileNames.reportTemplate}" to dist folder.`)}}function Ql(x,A,e){A!==p0.Part.dlo&&xc(x,e);let r=e.some(t=>t.level==="error");if(r){let t=`APM part "${A}" has errors. Aborted.`;throw new Error(t)}return r}async function Zl(x,A,e,r,t,s){let n=await e(t,s,x);return r.push(...n),Ql(x,A,n)}function xc(x,A){A.forEach(e=>{let r=e.startCharacter?`:${e.startCharacter+1}`:"",t=`${e.file.path}:${e.line+1}${r} - ${e.message}`;e.level==="error"?x.error(t):e.level==="warning"?x.warn(t):x.log(t)})}async function Co(x,A,e,r,t){let s=await J.read(x,A);return await J.validateBasicManifest(x,A,s),await hx.buildAll(x,A,e,t,r),await Re.createArchive(x,A)}async function Do(x,A,e,r,t,s){if(!Object.values(p0.TagPhase).includes(t))throw new Error(`ReleasePhase: ${t} is not a valid release phase`);return await J.validateBasicManifest(x,A,null),await hx.buildAll(x,A,e,s,r),await p0.createTag(x,A,t)}async function Ac(x){let A=new vt.TarWriter;for(let[r,t]of x.entries())if(r==="tag"){let s=t;A.addFile(r,s)}else{let s=t;A.addFile(r,await s.arrayBuffer())}let e=await A.write();return fs.gzip(await e.arrayBuffer())}async function ec(x){let A=await rc(x,["studio.json","src/studio.json"]);if(!A)throw new Error('Could not find "studio.json" in archive');return JSON.parse(await A.text())}async function rc(x,A){let e=fs.ungzip(x),r=await vt.TarReader.load(e);for(let t of r.fileInfos)if(A.includes(t.name))return r.getFileBlob(t.name);return null}var tc=j0.bufferToBase64;var p0;(D=>{let x;(L=>(L.alpha="alpha",L.beta="beta",L.rc="rc",L.release="release",L.stage="stage",L.passive="passive",L.withdrawn="withdrawn"))(x=D.TagPhase||={});let A;(T=>(T.dde="dde",T.dlo="dlo",T.pov="pov",T.blo="blo",T.dfiles="dfiles"))(A=D.Part||={});function e(p){let{description:j,name:_,pov:k,engines:S,blo:T,publisher:N,type:L}=p,O=L||J.ProjectTypes.app,i0={name:_,abstract:j,author:N||"",pov_location:J.PovLocation.embedded,pov_details_lowlevel:!1,required_be:S?.backend,required_hwfw:S?.hwfw?.join(";"),required_productcode:S?.productId?.join(";"),blo_level:T?.accessLevel||J.BloAccessLevel.restricted,pip_id:""};return k&&k.details&&(i0.pov_location=J.PovLocation.pure,i0.pov_details_lowlevel=!!k.details.lowLevel),O==="addon"&&(i0.required_hwfw=void 0,i0.required_productcode=void 0,i0.addon_max_sources=1,i0.addon_max_per_site=p.maxInstancesPerSite),i0}D.createBaseTagHeader=e;async function r(p,j,_){let k=await J.read(p,j),S=e(k),T={version:k.version,...S,phase:_};return await s(p,j,k,T)}D.createTag=r;async function t(p,j){let _=await J.read(p,j),S={...e(_),blo_autostart:!1};return s(p,j,_,S)}D.createDevTag=t;async function s(p,j,_,k){let S=new FormData;S.append("tag",JSON.stringify(k)),S.append(`src/${J.fileName}`,new Blob([await J.readAsBlob(p,j)]));let T=new Blob([await j.readFile(ne.Utils.joinPath(p,r0.filePaths.dist.ddeXmlPath))]);if(S.append("bin/dde/xml",T),_.icon){let L=await j.readFile(ne.Utils.joinPath(p,_.icon)),O=tc(L);S.append("previews/00.png",new Blob([`data:image/png;base64,${O}`]))}if(Object.hasOwn(k,"phase")){let L=await hx.getReadmeFile(p,j,k.name),O=await hx.getChangelogFile(p,j);S.append("previews/README.md",new Blob([L])),S.append("previews/CHANGELOG.md",new Blob([O]))}if(await J.isApmPartEnabled(p,j,"dlo")){let L=new Blob([await j.readFile(ne.Utils.joinPath(p,r0.filePaths.dist.mainAmxPath))]);S.append("bin/dlo/amx",L)}if(await J.isApmPartEnabled(p,j,"pov",_)){await uo(p,j,S,r0.filePaths.dist.povDetailsPath,"bin/pov/details");let L=new TextEncoder().encode('<!DOCTYPE html><html lang="en">');S.append("bin/pov/list/index.html",new Blob([L]))}let N=await j.findFiles(p,`${r0.filePaths.dist.dfilesPath}/*`);for(let L of N){let O=new Blob([await j.readFile(L)]);S.append(`bin/dfiles/${ne.Utils.basename(L)}`,O)}return await J.isApmPartEnabled(p,j,"blo",_)&&await uo(p,j,S,r0.filePaths.dist.bloPath,"bin/blo"),await nc(p,j,S),S}D.createBuffer=s;async function n(p,j,_,k,S){let T=await J.read(p,j);k||await hx.validatePublishSettings(p,j,_,S);let{registry:N}=T,L=N?.id;if(!L&&!k&&(L=await F(p,j,_,T,S)),L){let{publisher:O}=T;if(!O)return null;try{return{id:L,...await tx.getExistingApplication(_,O,L,S)}}catch(i0){if(i0?.message==="Could not find given application")return L=await F(p,j,_,T,S),{id:L,...await tx.getExistingApplication(_,O,L,S)}}}return null}D.validateAccess=n;async function F(p,j,_,k,S){let T="myDatanet",{publisher:N,name:L,description:O,registry:i0}=k,R={id:i0?.id,type:k.type||J.ProjectTypes.app,name:L,targetSystem:T,description:O||"",allowedBackends:null};J.isAddon(k)&&(R.allowedApplications=null);let g=await tx.createNewApplication(_,N,R,S);if(!g)throw new Error("Failed to initialize application");return k.registry={id:g},await J.write(p,j,k),g}D.registerNew=F;async function f(p,j,_,k){let{name:S,publisher:T,description:N,registry:L}=await J.read(p,j),O=L?.id;await tx.updateExistingApplication(_,T,O,{description:N,name:S,targetSystem:"myDatanet"},k)}D.updateProfile=f;async function C(p,j,_,k,S){let{publisher:T,registry:N,version:L}=await J.read(p,j);return await tx.publishApplicationVersion(_,T,N?.id,L,k,S)}D.publishTag=C})(p0||={});async function uo(x,A,e,r,t){let s=await A.findFiles(x,`${r}/**`);for(let n of s){let F=ne.Utils.joinPath(x,r),f=n.path.substring(F.path.length+1),C=new Blob([await A.readFile(ne.Utils.joinPath(x,`${r}/${f}`))]);e.append(`${t}/${f}`,C)}}async function nc(x,A,e){let r=ne.Utils.joinPath(x,r0.filePaths.dist.reportTemplate);if(await A.stat(r)){let s=new Blob([await A.readFile(r)]);e.append("bin/pov/mdn_report_template.json",s)}let t=ne.Utils.joinPath(x,r0.filePaths.dist.historyJson);await A.stat(t)&&e.append("src/dde/history.json",new Blob([await A.readFile(t)]))}var go=require("deepmerge-ts"),sc=j0.isNumeric,po="52v007",bo="53v001",ic="54v001",ac="56v001",fA={_manifest:null,_stat:null,_overwrites:null,get manifest(){return(0,go.deepmerge)(structuredClone(this._manifest),fA._overwrites||{})},set manifest(x){this._manifest=x},set overwrites(x){this._overwrites=x},get stat(){return this._stat},set stat(x){this._stat=x},clear(){this._stat=null,this._manifest=null}},J;(s0=>{let x=j0.convertBlobToString;s0.fileName="studio.json";let e;(I0=>(I0.m22x="m22x",I0.m23x="m23x",I0.nrf91="nrf91",I0.m2blegw="m2blegw",I0.m2easyv3="m2easyv3",I0.m2easyiot="m2easyiot"))(e=s0.DeviceProfiles||={});let r;(d0=>(d0.app="app",d0.library="library",d0.addon="addon",d0.analytics="analytics"))(r=s0.ProjectTypes||={});let t;(f0=>(f0.restricted="restricted",f0.global="global"))(t=s0.BloAccessLevel||={});let s;(f0=>(f0.embedded="$embedded",f0.pure="$pure"))(s=s0.PovLocation||={});function n(U){fA.overwrites=U}s0.setOverwrites=n;function F(){fA.overwrites=null}s0.clearOverwrites=F;async function f(U,v0){let f0=hr.Utils.joinPath(U,s0.fileName),B0=await v0.stat(f0);if(fA.manifest===null||f0?.fsPath!==fA.stat?.path.fsPath||B0?.ctime!==fA.stat?.ctime||B0?.mtime!==fA.stat?.mtime||B0?.size!==fA.stat?.size){let d0=await v0.readFile(f0),q0=x(d0);fA.manifest=JSON.parse(q0),fA.stat={...B0,path:f0}}return fA.manifest}s0.read=f;async function C(U,v0){return await v0.readFile(hr.Utils.joinPath(U,s0.fileName))}s0.readAsBlob=C;async function D(U,v0){let f0=hr.Utils.joinPath(U,s0.fileName),B0=await v0.readFile(f0),d0=x(B0);return JSON.parse(d0)}s0.readRaw=D;async function p(U,v0,f0){return fA.clear(),cc(f0),v0.writeFile(hr.Utils.joinPath(U,s0.fileName),JSON.stringify(f0,null," "))}s0.write=p;function j(U){return U.library!==void 0?U.library:U.type==="library"}s0.isLibrary=j;function _(U){return U.type==="addon"}s0.isAddon=_;function k(U){return U.type===void 0&&!j(U)?!0:U.type==="app"}s0.isApp=k;function S(U){return U.type===void 0?!0:U.type==="app"}s0.isIotApp=S;function T(U){return U.type==="analytics"}s0.isAnalytics=T;async function N(U,v0,f0){f0||(f0=await f(U,v0)),lc(f0),oc(f0),Fc(f0),Ec(f0)}s0.validateBasicManifest=N;function L(U){let v0="Library name can only contain 'a' through 'z', '0' through '9', '_' and '-'. The Library name must start with an alphabetic or numeric character.";if(U.match(/^[a-z0-9-_]+$/)){let B0=["-","_"];if(B0.includes(U[0])||B0.includes(U[U.length-1]))return v0}else return v0;return U.length<3||U.length>20?"The library name is beyond permissible length of 20 characters.":null}s0.validateLibraryName=L;function O(U,v0){if(v0)return L(U);{let f0="Project name can only contain 'A' through 'Z', 'a' through 'z', '0' through '9', ' ', '_' and '-'. The Project name must start with an alphabetic or numeric character.";if(!U.match(/^([a-zA-Z0-9 _-]+)$/))return f0;if(U.length<3||U.length>40)return"The project name is beyond permissible length of 40 characters.";let d0=["-","_"," "];return d0.includes(U[0])||d0.includes(U[U.length-1])?f0:null}}s0.validateProjectName=O;function i0(U){return U.length<5?"The description must have at least 5 characters.":null}s0.validateDescription=i0;function R(U){if(!U)return"No publisher set yet";let v0="Publisher can only contain 'A' through 'Z', 'a' through 'z', '0' through '9' and '-'. The Publisher start with an alphabetic or numeric character.";if(U.match(/^[a-zA-Z0-9-]+$/)){let B0=["_"];if(B0.includes(U[0])||B0.includes(U[U.length-1]))return v0}else return v0;return null}s0.validatePublisherId=R;async function g(U,v0,f0){return await tx.getPublisher(U,v0,f0)?null:`Publisher '${v0}' does not exist.`}s0.validatePublisherOnline=g;let I=/^(((?!-))(xn--)?[a-z0-9\-_]{0,61}[a-z0-9]{1,1}\.)*(xn--)?([a-z0-9-]{1,61}|[a-z0-9-]{1,30})\.[a-z]{2,}$/;async function Y(U){if(U===void 0)return"Allowed backends not specified yet";if(U===null)return null;if(Array.isArray(U)||U?.includes(";")){let v0=U?.includes(";")?U.split(";"):U;for(let f0 of v0)if(!f0.match(I))return`Domain "${f0}" is invalid`}else if(!U?.match(I)&&U!=="*")return'Invalid value for "allowedBackends"';return null}s0.validateRegistryAllowedBackends=Y;let W=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;async function H(U){if(U===void 0)return"Allowed applications not specified yet";if(U===null)return null;if(Array.isArray(U)||U?.includes(";")){let v0=U?.includes(";")?U.split(";"):U;for(let f0 of v0)if(!f0.match(W))return`Application id "${f0}" is invalid`}else if(!U?.match(W)&&U!=="*")return'Invalid value for "allowedApplications"';return null}s0.validateRegistryAllowedApplications=H;async function K(U,v0,f0){let B0=f0.icon;if(!B0)throw new Error("App icon is required for publishing an application!");let d0=hr.Utils.joinPath(U,B0);if(!await v0.stat(d0))throw new Error(`Could not load icon "${B0}"`);let I0=await v0.readFile(d0),vx=(0,mo.imageDimensionsFromData)(I0);if(!vx)throw new Error("App icon could not be validated!");if(vx?.width!==vx?.height)throw new Error("App icon has to be a square!");if(vx.width>512||vx.width<75)throw new Error("App icon size should be between 75px and 512px!");if(!(0,jo.isPNG)(I0))throw new Error("App icon has to be of type PNG!")}s0.validateApplicationIcon=K;function a0(U){let{engines:v0}=U;if(v0?.backend&&!v0.backend.match(/(^[5-9][2-9]|[6-9]\d+|\d{3,})v(0(0[0-9]|[1-9]\d)|[1-9]\d{2}|[1-9]\d{3,})$/))throw new Error('Setting "engines.backend" is invalid');vc(U),fc(U)}s0.validateEngineSettings=a0;function t0(U,v0){let f0=q0=>{let I0=/^(\d+)v(\d+)$/.exec(q0);return I0?[Number(I0[1]),Number(I0[2])]:null},B0=f0(U),d0=f0(v0);return B0&&d0?B0[0]-d0[0]||B0[1]-d0[1]:U===v0?0:U<v0?-1:1}s0.compareBackendVersion=t0;async function Z(U,v0,f0,B0){B0||(B0=await s0.read(U,v0));let d0=s0.isAddon(B0),q0=s0.isAnalytics(B0);switch(f0){case p0.Part.dlo:return!!B0?.dlo?.mainFile&&!d0&&!q0;case p0.Part.blo:return!!(B0.blo?.buildCommand&&B0.blo?.workingPath);case p0.Part.pov:return!!(B0.pov?.details?.buildCommand&&B0.pov.details.workingPath);case p0.Part.dde:case p0.Part.dfiles:return!0;default:return!1}}s0.isApmPartEnabled=Z})(J||={});function oc(x){let{pov:A}=x;if(A&&A.details){if(!Object.hasOwn(A.details,"buildCommand"))throw new Error('Setting "pov.details.buildCommand" missing!');if(!Object.hasOwn(A.details,"workingPath"))throw new Error('Setting "pov.details.workingPath" missing!')}}function Fc(x){let{blo:A}=x;if(A){if(!Object.hasOwn(A,"buildCommand"))throw new Error('Setting "blo.buildCommand" missing!');if(!Object.hasOwn(A,"workingPath"))throw new Error('Setting "blo.workingPath" missing!');if(A.accessLevel&&!["restricted","global"].includes(A.accessLevel))throw new Error('Only "restricted" or "global" are allowed as value for "blo.accessLevel"!')}}function vc(x){let{backend:A,productId:e,hwfw:r}=x.engines;if(J.isAddon(x)&&(e||r))throw new Error('For project type "addon", "engines.hwfw" or "engines.productId" is not allowed!"');if(A&&A>=po){if(r&&e)throw new Error('Only "engines.hwfw" or "engines.productId" is allowed!"')}else if(e)throw new Error(`"engines.productId" requires "engines.backend" to be "${po}"`)}function fc(x){if(!J.isAddon(x)&&!J.isAnalytics(x))return;let{backend:A}=x.engines,e=J.isAddon(x)?ic:ac;if(!A||A<e)throw new Error(`Project type "${x.type}" requires "engines.backend" to be ">=${e}"`);if(x.dlo)throw new Error(`For project type "${x.type}", "dlo" is not supported!"`);if(x.dpid)throw new Error(`For project type "${x.type}", "dpid" is not supported!"`)}function Ec(x){let{maxInstancesPerSite:A}=x;if(A===void 0){if(J.isAddon(x))throw new Error('Property "maxInstancesPerSite" is required for addon projects!');return}if(!J.isAddon(x))throw new Error('Property "maxInstancesPerSite" is only allowed for addon projects!');if(!Number.isInteger(A))throw new Error('Property "maxInstancesPerSite" must be an integer!');if(A<1||A>100)throw new Error('Property "maxInstancesPerSite" must be between 1 and 100!')}function lc(x){if((x.engines?.backend||"00v000")>=bo||J.isLibrary(x)){if(!ho.default.valid(x.version))throw new Error(`From "engines.backend" version >= ${bo} onwards "version" has to be a semantic version string!"`)}else if(!sc(x.version))throw new Error('"version" has to be a number!')}function cc(x){x.registry&&(delete x.registry.allowedBackends,delete x.registry.target)}var UA=Q0(require("semver"));var wo=Q0(require("node:child_process")),So=require("minimatch");var Bc=require("tinytar-fix"),Cc=require("pako"),se=".studio/libdeps",ft="package.json",dc="package-lock.json";function yo(x){return[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})].map(Z0.dependencyIdToName)}async function Dc(x,A,e,r){let t=ux.Utils.joinPath(x,se,r);try{return await A.stat(ux.Utils.joinPath(t,J.fileName))?await J.readRaw(t,A):null}catch(s){return e.warn(`Could not read manifest for library "${r}": ${s}`),null}}async function uc(x,A,e,r){let t=new Set,s=yo(r),n=null;for(;s.length>0;){let F=s.shift();if(t.has(F))continue;t.add(F);let f=await Dc(x,A,e,F);if(!f)continue;let C=f.engines?.backend;C&&(!n||J.compareBackendVersion(C,n.backend)>0)&&(n={backend:C,requiredBy:`${f.publisher}/${f.name}`}),s.push(...yo(f))}return n}var Z0;(R=>{async function x(g,I=!1){let Y=g.libraryDependencies||{};return I||Object.assign(Y,g.libraryDevDependencies||{}),Y}R.getAll=x;function A(g){return g.split("/")[1]}R.dependencyIdToName=A;function e(g,I){let Y=A(I);return ux.Utils.joinPath(g,se,Y)}R.dependencyToPath=e;function r(g){return isNaN(g.split("")[0])?g.substring(1):g}R.rangeToVersion=r;function t(g,I,Y){if(!UA.satisfies(I,Y,{includePrerelease:!0}))throw new Error(`${g}, version ${I} does not satisfy required constraint ${Y}`)}R.satisfiesSemverRange=t;async function s(g,I,Y={},W=!1){let H=await J.read(g,I),K=H.libraryDependencies||{};W&&Object.assign(K,H.libraryDevDependencies);let a0=Object.keys(Y);for(let t0 of a0)if(Object.hasOwn(K,t0)){let Z=Y[t0],s0=K[t0],U=r(Z),v0=r(s0),f0=UA.compare(U,v0);f0===1?(K[t0]=Z,t(t0,U,s0)):f0===-1&&(K[t0]=s0,t(t0,v0,Z))}else K[t0]=Y[t0];return K}R.validateDependencyTree=s;async function n(g,I,Y,W,H){let K=r(H),a0=ux.Utils.joinPath(g,se,W);try{let t0=await J.read(a0,I);return UA.gte(t0.version,K)&&t0.publisher.toLowerCase()===Y.toLowerCase()}catch{return!1}}R.isDependencyInstalled=n;async function F(g,I,Y,W){let H=ux.Utils.joinPath(g,se,W);await I.rm(H).catch(K=>{Y.error("removeExisting",K)})}R.removeExisting=F;async function f(g,I,Y,W,H){let K=Bc.untar(Cc.ungzip(H));await F(g,I,Y,W);for(let a0 of K.values())try{let t0=ux.Utils.joinPath(g,se,W,a0.name);await I.writeFile(t0,a0.data)}catch(t0){Y.error("Extracting lib",t0)}}R.extractLibraryContent=f;async function C(g,I,Y,W,H,K,a0,t0=!1){let[Z,s0]=K.split("/");if(a0&&await n(g,I,Z,s0,a0))return;await F(g,I,Y,s0);let U=await tx.getLibraryProfile(H,Z,s0,W),v0=a0?U.versions?.find(Ax=>UA.eq(Ax.name,R.rangeToVersion(a0))):U.versions[0];if(!v0)throw new Error(`Library ${K} with version ${a0} does not exist!`);let f0=v0.files.find(Ax=>Ax.name==="studio.json"),d0=(await pc(H,f0.downloadUrl)).libraryDependencies||{},q0={...d0};q0[K]=`^${v0.name}`,await s(g,I,q0,t0);for(let[Ax,xA]of Object.entries(d0))await C(g,I,Y,W,H,Ax,xA,t0);let I0=v0.files.find(Ax=>Ax.name==="library.tar.gz");if(!I0)throw new Error(`Library ${K} has no content!`);let vx=await tx.fetchCustomContent(H,I0.downloadUrl);await f(g,I,Y,s0,vx),await O(g,I,Y,s0,t0);let zx=await J.read(g,I),yA=zx.libraryDependencies||{},kA=zx.libraryDevDependencies||{},ax=t0?kA:yA;ax[K]=`^${v0.name}`,zx.libraryDependencies=yA,zx.libraryDevDependencies=kA,await J.write(g,I,zx)}R.installDependency=C;async function D(g,I,Y,W,H){let K=await J.read(g,I),a0=K.libraryDependencies||{},t0=K.libraryDevDependencies||{},Z=Object.assign(a0,t0);for(let[s0,U]of Object.entries(Z)){let v0=Object.hasOwn(t0,s0);await C(g,I,Y,W,H,s0,U,v0)}for(let[s0]of Object.entries(Z)){let U=A(s0),v0=Object.hasOwn(t0,s0);await O(g,I,Y,U,v0)}Y.done(`Installed ${Object.entries(Z).length} dependencies`)}R.installDependencies=D;async function p(g,I,Y,W,H){let K=await J.read(g,I),a0=K.libraryDependencies||{},t0=K.libraryDevDependencies||{},Z=Object.assign(a0,t0),s0=`${W}/${H}`;delete Z[s0];let U=await bc(g,I,Z);if(!Object.hasOwn(U,s0))await i0(g,I,Y,H),await F(g,I,Y,H),delete t0[s0],delete a0[s0],await J.write(g,I,K);else throw new Error(`Library '${H}' not removed. This library is a dependency of other libraries.`)}R.uninstallDependency=p;async function j(g,I){try{let W=(await $o(ux.Utils.joinPath(g,ft),I)).workspaces;if(Array.isArray(W)&&W.every(K=>typeof K=="string")&&W.length>0)return W;let H=W?.packages;return Array.isArray(H)&&H.every(K=>typeof K=="string")&&H.length>0?H:null}catch{return null}}R.readNpmWorkspacePatterns=j;function _(g,I){let Y=H=>H.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/$/,""),W=Y(g);return I.some(H=>{let K=Y(H);return K===W||(0,So.minimatch)(W,K)})}R.isPathInWorkspaces=_;function k(g,I){if(!I)return{rootInstall:!1,partInstalls:g.map(H=>H.workingPath)};let Y=[],W=!1;for(let H of g)_(H.workingPath,I)?W=!0:Y.push(H.workingPath);return{rootInstall:W,partInstalls:Y}}R.planNpmInstalls=k;async function S(g,I,Y){let W=await J.read(g,I),H=new Set([...Object.keys(W.libraryDependencies||{}),...Object.keys(W.libraryDevDependencies||{})].map(A)),K=new Set,a0=[...H];for(;a0.length>0;){let t0=a0.shift();if(K.has(t0))continue;K.add(t0);let Z=ux.Utils.joinPath(g,se,t0);try{let s0=ux.Utils.joinPath(Z,J.fileName);if(!await I.stat(s0))continue;let U=await J.readRaw(Z,I);await jr.normalizeLibraryParts(Z,I,U,Y),a0.push(...[...Object.keys(U.libraryDependencies||{}),...Object.keys(U.libraryDevDependencies||{})].map(A))}catch(s0){Y.warn(`Could not normalize library parts for "${t0}": ${s0}`)}}}R.normalizeInstalledLibraryParts=S;async function T(g,I,Y){let W=await J.read(g,I),H=await uc(g,I,Y,W);if(!H)return;let K=W.engines?.backend;if(!K||J.compareBackendVersion(H.backend,K)>0){let a0=K?`"${K}"`:"none",t0=J.isLibrary(W)?"library":"application",Z=J.isLibrary(W)?" Every application using this library must then satisfy that version as well.":"";throw new Error(`Library "${H.requiredBy}" requires "engines.backend" >= "${H.backend}" but the ${t0} "${W.publisher}/${W.name}" declares ${a0}. Raise "engines.backend" in studio.json to at least "${H.backend}".${Z}`)}}R.validateMinimumBackendVersion=T;async function N(g,I,Y){await S(g,I,Y);let W=await J.read(g,I),H=[];W.pov?.details?.workingPath&&H.push({name:"pov",workingPath:W.pov.details.workingPath}),W.blo?.workingPath&&H.push({name:"blo",workingPath:W.blo.workingPath});let K=[];for(let s0 of H){let U=ux.Utils.joinPath(g,s0.workingPath),v0=ux.Utils.joinPath(U,ft);await I.stat(v0)&&K.push(s0)}if(K.length===0)return;let a0=await j(g,I),{rootInstall:t0,partInstalls:Z}=k(K,a0);if(t0){let s0=K.filter(U=>!Z.includes(U.workingPath)).map(U=>U.workingPath).join(", ");Y.info(`npm workspaces detected in root package.json - installing dependencies once at the project root (${s0}) using 'npm install' (an in-sync package-lock.json is installed as-is and left unchanged)`),await Wt(g,"npm install --no-audit --no-fund",Y)}for(let s0 of K){if(!Z.includes(s0.workingPath))continue;a0?Y.warn(`${s0.workingPath} (${s0.name}) is not covered by any workspace pattern in the root package.json - installing it separately.`):Y.info(`Installing npm dependencies for ${s0.name} (${s0.workingPath})...`);let U=ux.Utils.joinPath(g,s0.workingPath);await hc(U,I,Y)}}R.installNpmInApmParts=N;async function L(g,I,Y){let W=await J.read(g,I),H=await x(W),K=[],a0=r0.filePaths[Y].path,t0=Y===p0.Part.dlo?"inc":"dfiles";for(let Z in H){let s0=R.dependencyToPath(g,Z),U=R.dependencyIdToName(Z),v0=ux.Utils.joinPath(s0,a0,`${U}.${t0}`);await I.stat(v0)&&K.push({name:U,path:v0})}if(J.isLibrary(W)){let Z=ux.Utils.joinPath(g,a0,`${W.name}.${t0}`);await I.stat(Z)&&K.push({name:W.name,path:Z})}return K}R.getApmPartDependencies=L;async function O(g,I,Y,W,H){let K=await J.read(g,I),a0=[{partName:"blo",partDistPath:"blo",workingPath:K.blo?.workingPath},{partName:"pov",partDistPath:"pov/details",workingPath:K.pov?.details?.workingPath}];for(let{partName:t0,partDistPath:Z,workingPath:s0}of a0){if(!s0)continue;let U=ux.Utils.joinPath(g,se,W,"dist",...Z.split("/"),ft);if(await I.stat(U))try{let f0=await ko(g,I,s0),B0=H?"devDependencies":"dependencies";f0[B0]=f0[B0]||{};let d0=s0.split("/").length,q0=Array(d0).fill("..").join("/");f0[B0][W]=`file:${q0}/${se}/${W}/dist/${Z}`,await _o(g,I,s0,f0),Y.info(`Linked ${W} to ${t0} (${s0})`)}catch(f0){Y.warn(`Could not link ${W} to ${t0}: ${f0}`)}}}R.linkLibraryApmParts=O;async function i0(g,I,Y,W){let H=await J.read(g,I),K=[{partName:"blo",workingPath:H.blo?.workingPath},{partName:"pov",workingPath:H.pov?.details?.workingPath}];for(let{partName:a0,workingPath:t0}of K)if(t0)try{let Z=await ko(g,I,t0),s0=!1;Z.dependencies?.[W]?.startsWith("file:")&&(delete Z.dependencies[W],s0=!0),Z.devDependencies?.[W]?.startsWith("file:")&&(delete Z.devDependencies[W],s0=!0),s0&&(await _o(g,I,t0,Z),Y.info(`Unlinked ${W} from ${a0}`))}catch(Z){Y.warn(`Could not unlink ${W} from ${a0}: ${Z}`)}}R.unlinkLibraryApmParts=i0})(Z0||={});async function $o(x,A){let e=await A.readFile(x);return JSON.parse(j0.convertBlobToString(e))}function ko(x,A,e){return $o(ux.Utils.joinPath(x,e,ft),A)}async function _o(x,A,e,r){let t=ux.Utils.joinPath(x,e,ft),s=JSON.stringify(r,null," ")+`
|
|
2335
|
+
`;await A.writeFile(t,s)}async function pc(x,A){return await tx.fetchCustomContent(x,A,!0)}async function bc(x,A,e){let r={};function t(C,D,p,j=!1){let _=r[C],k=Z0.rangeToVersion(p),S=Z0.rangeToVersion(p);(!_||UA.gt(k,S))&&(r[C]={publisherId:D,version:p,installed:j})}let s=Object.entries(e).map(([C,D])=>{let[p,j]=C.split("/");return t(j,p,D,!0),j}),n={};for(let C of s)try{let D=await mc(x,A,C);n[C]=Object.entries(D).map(([p,j])=>{let[_,k]=p.split("/");return t(k,_,j),k}),s.push(...n[C])}catch{let p=r[C];throw new Error(`Please import "${p.publisherId}/${C}" first.`)}let F=[];for(;;){let C=s.filter(D=>F.includes(D)?!1:(n[D]||[]).every(j=>F.includes(j)));if(F.push(...C),s.length===F.length||!C.length)break}let f={};return[...new Set(F)].forEach(C=>{let{version:D,publisherId:p}=r[C],j=jc(p,C,D);f[j.libraryId]=j.libraryVersion}),f}async function mc(x,A,e){let r=ux.Utils.joinPath(x,se,e);return(await J.read(r,A))?.libraryDependencies||{}}function jc(x,A,e){return{libraryName:A,publisherId:x,libraryVersion:e[0]==="^"?e:"^"+e,libraryId:`${x}/${A}`}}function Wt(x,A,e){return new Promise((r,t)=>{wo.exec(A,{cwd:x.fsPath,env:process.env},(s,n,F)=>{if(n&&e.log(n),F&&e.error(F),s){t(new Error(`${s.message}
|
|
2336
|
+
${n}
|
|
2337
|
+
${F}`));return}r()})})}async function hc(x,A,e){let r=ux.Utils.joinPath(x,dc);if(!await A.stat(r)){e.warn(`No package-lock.json found in ${x.fsPath} - running 'npm install' instead of 'npm ci'.`),await Wt(x,"npm install",e);return}try{await Wt(x,"npm ci",e)}catch{e.warn(`'npm ci' failed in ${x.fsPath} - falling back to 'npm install'. If package-lock.json changed afterwards, commit it.`),await Wt(x,"npm install",e)}}var qo=Q0(require("dotenv")),To=require("vscode-uri");var gc=".env.local",Es;(A=>{async function x(e,r){let t=To.Utils.joinPath(e,gc);if(await r.stat(t)){let s=await r.readFile(t);return qo.default.parse(j0.convertBlobToString(s))}return{}}A.read=x})(Es||={});var gr=Q0(require("chalk")),ie;(r=>{let x;(D=>(D[D.log=0]="log",D[D.done=1]="done",D[D.info=2]="info",D[D.warning=3]="warning",D[D.error=4]="error",D[D.debug=5]="debug"))(x=r.LogMessageType||={}),r.LOG_PREFIX={1:gr.default.bgGreen.black(" DONE "),0:"",2:gr.default.bgBlueBright.black(" INFO "),3:gr.default.bgYellow.black(" WARNING "),4:gr.default.bgRed.black(" ERROR "),5:gr.default.bgBlackBright.black(" DEBUG ")};class e{_logHandler;_silent=!1;_debugEnabled=!1;constructor(s=console){this._logHandler=s}_log(s,n,...F){this._silent&&s!==4||(F=[r.LOG_PREFIX[s],n,...F],this._logHandler.log(...F))}set silent(s){this._silent=s}set output(s){this._logHandler=s}log(s,...n){this._log(0,s,...n)}debug(s,...n){this._debugEnabled&&this._log(5,s,...n)}set debugEnabled(s){this._debugEnabled=s}error(s,...n){this._log(4,s,...n)}info(s,...n){this._log(2,s,...n)}warn(s,...n){this._log(3,s,...n)}done(s,...n){this._log(1,s,...n)}}r.Logger=e})(ie||={});var Ti=require("node:child_process"),kv=require("node:fs"),qi=require("vscode-uri");var vv=require("node:events"),_i=require("vscode-uri"),xx=Q0(Ye());var Zx=Q0(Ye());var hi=Q0(Ye()),Q8=2e3;function WD(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}function XD(x,A){let e=x.device;try{return e?.interface(A).endpoints.find(t=>t.direction==="in")}catch{return}}var mn=class{interface="usb";#A=new Set;#e;#r;#s;#t;#x=!1;#n;constructor(A,e){this.#e=A;let t=A.configuration.interfaces[e].alternate.endpoints;this.#r=t.find(s=>s.direction==="in"),this.#s=t.find(s=>s.direction==="out"),this.#t=XD(A,e)}async write(A){await this.#e.transferOut(this.#s.endpointNumber,A)}onData(A){let e={cb:A};return this.#A.add(e),this.#x||this.#i(),()=>{this.#A.delete(e)}}#i(){this.#x=!0;let A=this.#t;if(!A){this.#n=this.#a();return}A.on("data",e=>{if(e.byteLength===0)return;let r=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);for(let t of this.#A)t.cb(r)}),A.on("error",()=>{}),A.startPoll(1,this.#r.packetSize)}async#a(){for(;this.#x&&this.#e.opened;)try{let A=await this.#e.transferIn(this.#r.endpointNumber,this.#r.packetSize);if(A.data&&A.data.byteLength>0)for(let e of this.#A)e.cb(A.data.buffer)}catch{break}}async stop(){if(!this.#x)return;this.#x=!1;let A=this.#t;A?.pollActive?await new Promise(e=>{let r=setTimeout(e,Q8);A.stopPoll(()=>{clearTimeout(r),e()})}):this.#n&&await Promise.race([this.#n,WD(Q8)])}},jn=class extends mn{constructor(A){super(A,hi.USB_CONFIGURATION.utoInterface)}},hn=class extends mn{constructor(A){super(A,hi.USB_CONFIGURATION.debugInterface)}};var YD=9540,gi;function QD(){if(!gi){let{WebUSB:x}=require("usb");gi=new x({allowedDevices:[{vendorId:YD}]})}return gi}async function ZD(x,A){A.info(`Searching for device with serial number: ${x}`);let e=await QD().getDevices();for(let r of e)if((r.serialNumber||r.productName?.split(" ").pop())?.toLowerCase()===x.toLowerCase())return A.info(`Device found: ${r.productName}`),r;return null}function yi(x){return`Device not found with serial number: ${x}`}var xu=500;function Au(x){if(x instanceof gn)return!0;let A=x instanceof Error?x.message:String(x);return/LIBUSB_ERROR_(ACCESS|BUSY|NO_DEVICE|NOT_FOUND|IO)/.test(A)||A.startsWith(yi(""))}var gn=class extends Error{constructor(A,e){super(`${A}: ${e instanceof Error?e.message:String(e)}`),this.name="TransientUsbOpenError"}};function eu(x,A){try{return{uto:new jn(x),debug:A?new hn(x):void 0}}catch(e){throw new gn("Device descriptors not ready",e)}}function ru(x){return async(A,e=!0)=>{let r=await ZD(A,x);if(!r)throw new Error(yi(A));try{await r.open(),await r.selectConfiguration(Zx.USB_CONFIGURATION.configurationNumber),await r.claimInterface(Zx.USB_CONFIGURATION.utoInterface),e&&await r.claimInterface(Zx.USB_CONFIGURATION.debugInterface);let{uto:t,debug:s}=eu(r,e);return{uto:t,debug:s,async close(){await t.stop(),await s?.stop(),r.opened&&(await r.releaseInterface(Zx.USB_CONFIGURATION.utoInterface).catch(()=>{}),e&&await r.releaseInterface(Zx.USB_CONFIGURATION.debugInterface).catch(()=>{}),await r.close().catch(()=>{}))}}}catch(t){throw r.opened&&await r.close().catch(()=>{}),t}}}function tu(x){return new Promise(A=>setTimeout(A,x))}async function nu(x,A,e,r){let t=Date.now()+r;for(;;)try{return await x(A,e)}catch(s){if(!Au(s)||Date.now()>=t)throw s;await tu(xu)}}function ht(x){return{debug:(A,...e)=>x.debug(A,...e),info:(A,...e)=>x.debug(A,...e),warn:(A,...e)=>x.warn(A,...e),error:(A,...e)=>x.error(A,...e)}}async function ki(x,A={}){let e=A.logger??new ie.Logger,r=A.transportFactory??ru(e),t=A.needDebug!==!1,s=await nu(r,x,t,A.retryMs??0),n=t?s.debug:void 0,F=ht(e),f=n?new Zx.AtCommandHandler(n,F):void 0,C=new Zx.UtoMaster(s.uto,F);return{utoMaster:C,atHandler:f,transports:s,serial:x,close:async()=>{try{await C.dispose(f)}catch{}f?.dispose(),await s.close()}}}async function Z8(x,A,e,r,t=!1,s=0,n){if(!await e.stat(A))return{success:!1,message:`File not found: ${A.fsPath}`};let f=await e.readFile(A),C;try{C=await ki(x,{logger:r,debug:t,needDebug:!1,retryMs:s,transportFactory:n});let{utoMaster:D}=C;if(t){D.on("mdnCom",j=>{r.debug("mdnCom",j)}),D.on("mdnComError",j=>{r.debug("mdnComError",j)});let p=-1;D.on("installing",j=>{j&&j!==p&&(p=j,r.info(`Upload progress: ${j}%`))})}return await D.init(),await D.requestDeviceInfo(),r.info("Device connected, starting upload..."),await D.sendFile(Zx.UtoFileType.pawn,new Uint8Array(f.buffer,f.byteOffset,f.length)),r.done("Upload completed successfully!"),{success:!0,message:"File uploaded successfully"}}catch(D){let p=D instanceof Error?D.message:String(D);return{success:!1,message:p===yi(x)?p:`Upload failed: ${p}`}}finally{await C?.close()}}var xv=require("vscode-uri"),yn=Q0(Ye());var kn=class x{constructor(A,e,r,t,s){this.fs=r;this.persist=t;this.logger=s;this.storage=A,this.file=e}fs;persist;logger;storage;file;lastSerialized=null;static async create(A,e,r={}){let t=xv.Utils.joinPath(A,r0.filePaths.studio.dev.mirror),s=new yn.MemoryStorage;if(r.persist&&await e.stat(t))try{let n=new TextDecoder().decode(await e.readFile(t));s=yn.MemoryStorage.fromJSON(JSON.parse(n))}catch(n){r.logger?.warn(`Ignoring unreadable dev mirror snapshot: ${n instanceof Error?n.message:n}`),s=new yn.MemoryStorage}return new x(s,t,e,r.persist===!0,r.logger)}async save(){if(!this.persist)return;let A=JSON.stringify(this.storage.toJSON());if(A!==this.lastSerialized)try{await this.fs.writeFile(this.file,A),this.lastSerialized=A}catch(e){this.logger?.warn(`Could not write dev mirror snapshot: ${e instanceof Error?e.message:e}`)}}};var rv=require("node:events"),wn=require("node:fs/promises"),tv=require("node:path"),nv=Q0(require("iconv-lite")),Qe=Q0(Ye());var su=5e3,Av=500;function ev(x){let A=x.indexOf("\0");return(A>=0?x.slice(0,A):x).trim()}function iu(x){let A=x.level===Qe.DebugLogLevel.info?"":`${Qe.DebugLogLevel[x.level]}: `,e=x.sequenceId!==void 0&&x.lineNumber!==void 0?` (${x.sequenceId}:${x.lineNumber})`:"";return`${A}${x.message??""}${e}`.trim()}function au(x){if(x.length===0)return!1;let A=0,e=0;for(let r of x){e++;let t=r.codePointAt(0)??0;(t===9||t===10||t===13||t>=32&&t!==127)&&A++}return A/e>.8}var _n=class extends rv.EventEmitter{buffer=[];capacity;logFile;logger;seq=0;disposers=[];writeChain=Promise.resolve();logDirReady=void 0;constructor(A={}){super(),this.capacity=A.capacity??su,this.logFile=A.logFile,this.logger=A.logger}push(A,e,r){let t={seq:++this.seq,ts:Date.now(),source:A,text:e};return r&&(t.raw=Buffer.from(r).toString("base64")),this.buffer.push(t),this.buffer.length>this.capacity&&this.buffer.splice(0,this.buffer.length-this.capacity),this.emit("record",t),this.appendToFile(t),t}appendToFile(A){let e=this.logFile;e&&(this.logDirReady??=(0,wn.mkdir)((0,tv.dirname)(e),{recursive:!0}).then(()=>{}),this.writeChain=this.writeChain.then(async()=>{await this.logDirReady,await(0,wn.appendFile)(e,`${JSON.stringify(A)}
|
|
2338
|
+
`,"utf8")}).catch(r=>{this.logger?.warn(`Could not append to log file: ${r instanceof Error?r.message:r}`)}))}since(A=0,e=Av){let r=e>0?e:Av;return this.buffer.filter(t=>t.seq>A).slice(-r)}get lastSeq(){return this.seq}attachUtoMaster(A){let e=r=>{if(r.wTagFull!==Qe.UtoTag.LOG||!r.data)return;let t=new Uint8Array(r.data.buffer.slice(r.data.byteOffset,r.data.byteOffset+r.data.byteLength));this.pushDecoded("rm2mlog",t)};A.on("utoFrame",e),this.disposers.push(()=>A.off("utoFrame",e))}attachAtHandler(A){let e=new Qe.DebugMaster(A,ht(this.logger??new ie.Logger));e.on("message",r=>{let t=iu(r);t&&this.push("at",t)}),this.disposers.push(()=>e.dispose())}pushDecoded(A,e){let t=[ev(nv.default.decode(Buffer.from(e),"win1252")),ev(Buffer.from(e).toString("utf8"))].find(au);if(t){this.push(A,t);return}let s=Buffer.from(e.subarray(0,32)).toString("hex");this.push(A,`<${e.length} bytes> ${s}${e.length>32?"\u2026":""}`,e)}async dispose(){for(let A of this.disposers)A();this.disposers=[],this.removeAllListeners(),await this.writeChain}};var iv=require("node:events"),gA=Q0(Ye()),ou=1e3,Fu=1e4,vu=200,sv=new Set([gA.UtoTag.HISTDATA_RAW,gA.UtoTag.LOG,gA.UtoTag.ALERTS]),Sn=class extends iv.EventEmitter{opts;tagMap=new Map;relevantTags=new Set;containerByTag=new Map;deviceStamps=new Map;seenStamps=new Map;timer;paused=!1;stopped=!1;inFlight=!1;backoffMs=0;lastTickAt=null;lastChangeAt=null;errorCount=0;constructor(A){super(),this.opts=A;for(let e of A.model.containers){let r=(0,gA.resolveTagForContainer)(e);r!==null&&this.containerByTag.set(r,e)}}get utoMaster(){let A=this.opts.utoMaster();if(!A)throw new Error("Device not connected");return A}async refreshTagMap(){let A=await this.utoMaster.requestDeviceInfo();this.tagMap=new Map,this.relevantTags=new Set,this.seenStamps.clear(),this.deviceStamps.clear(),A&&A.utos.forEach((e,r)=>{this.tagMap.set(e.wTag,{index:r,sTag:e.sTag,historic:e.flags.historic}),(this.containerByTag.has(e.wTag)||sv.has(e.wTag))&&this.relevantTags.add(e.wTag)})}start(){this.opts.intervalMs<=0||(this.stopped=!1,this.schedule(this.opts.intervalMs))}stop(){this.stopped=!0,this.clearTimer()}clearTimer(){this.timer&&(clearTimeout(this.timer),this.timer=void 0)}pause(){this.paused=!0}resume(){this.paused=!1}status(){return{intervalMs:this.opts.intervalMs,lastTick:this.lastTickAt,lastChange:this.lastChangeAt,errors:this.errorCount,paused:this.paused}}deviceStamp(A){return this.deviceStamps.get(A)??null}knowsTag(A){return this.tagMap.has(A)}async refreshStamps(){try{let A=await this.utoMaster.requestStamps();if(!A)return;for(let[e,r]of this.tagMap)r.index<A.stamps.length&&this.deviceStamps.set(e,A.stamps[r.index])}catch(A){this.opts.logger?.warn(`Stamp refresh failed: ${A instanceof Error?A.message:String(A)}`)}}schedule(A){this.stopped||(this.clearTimer(),this.timer=setTimeout(()=>{this.tick().then(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs)).catch(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs))},A),this.timer.unref?.())}async tick(){if(this.stopped||this.paused||this.opts.session.busy||this.inFlight)return[];this.inFlight=!0;try{let A=await this.utoMaster.requestStamps();return this.lastTickAt=Date.now(),this.backoffMs=0,A?this.pullAdvancedTags(A.stamps):[]}catch(A){return this.errorCount++,this.backoffMs=Math.min(this.backoffMs>0?this.backoffMs*2:ou,Fu),this.opts.logger?.warn(`Stamp poll failed: ${A instanceof Error?A.message:String(A)}`),this.emit("error",A instanceof Error?A:new Error(String(A))),[]}finally{this.inFlight=!1}}async pullAdvancedTags(A){let e=[];for(let r of this.relevantTags){let t=await this.pullIfAdvanced(r,A);t&&e.push(t)}if(e.length>0){this.lastChangeAt=Date.now();for(let r of e)this.emit("container-changed",r)}return e}async pullIfAdvanced(A,e){let r=this.tagMap.get(A);if(!r||r.index>=e.length)return null;let t=e[r.index],s=this.seenStamps.get(A);this.deviceStamps.set(A,t),this.seenStamps.set(A,t);let n=await this.mirrorStamp(A);return(s===void 0?t>n:t!==s)?this.pull(A,r,n,t):null}async pullTags(A){let e=[];for(let r of A){let t=this.tagMap.get(r)??{index:-1,sTag:`0x${r.toString(16)}`,historic:!1},s=await this.mirrorStamp(r),n=await this.pull(r,t,t.historic?s:0,this.deviceStamp(r)??0);n&&(e.push(r),this.emit("container-changed",n))}return e}async mirrorStamp(A){let e=await this.opts.storage.getLatestStampForTag(A);return e?(0,gA.dbStampToStamp40)(e):0}async pull(A,e,r,t){return e.historic||sv.has(A)?this.pullHistoric(A,r,t):this.pullSingle(A,t)}async pullSingle(A,e){let r=await this.utoMaster.requestUto(A,0);if(!r)return null;let t=await this.opts.storage.getRowForTag(A);return await this.opts.storage.replaceUtoRow({tag:A,stamp:(0,gA.stamp40ToDbHex)(r.stamp),flags:t?.flags??0,site_related:t?.site_related??0,data:r.data?fu(r.data):null}),this.describeChange(A,r.stamp||e)}async pullHistoric(A,e,r){let t=await this.opts.storage.getRowForTag(A),s=0,n=e,F=async f=>{let C=f.filter(D=>D.stamp40>e).map(D=>(n=Math.max(n,D.stamp40),{tag:A,stamp:(0,gA.stamp40ToDbHex)(D.stamp40),flags:t?.flags??0,site_related:t?.site_related??0,data:D.data}));await this.opts.storage.insertHistoricRows(C),s+=C.length};return await this.utoMaster.requestHistoricUtos(A,e,void 0,void 0,vu,F),s===0?null:this.describeChange(A,n||r)}async describeChange(A,e){let r=this.containerByTag.get(A);if(!r)return{tag:A,container:null,stamp:e};let t=null;try{t=await this.opts.mapper.readContainer(r.name)}catch{}return{tag:A,container:r.name,alias:r.alias,stamp:e,decoded:t}}};function fu(x){return new Uint8Array(x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength))}var qn=(F=>(F[F.Success=0]="Success",F[F.BuildFailed=1]="BuildFailed",F[F.DeviceNotFound=2]="DeviceNotFound",F[F.UsbFailed=3]="UsbFailed",F[F.ModelMissing=7]="ModelMissing",F[F.UnknownContainer=8]="UnknownContainer",F[F.WriteForbidden=9]="WriteForbidden",F))(qn||{}),gx=class extends Error{constructor(e,r){super(e);this.exitCode=r;this.name="DevError"}exitCode},Eu=2e3,lu=3e3,cu=3e4,Bu=1e4,Cu=3e4,du=1e3,av="dev",ov="local",$n="Device not connected",wi=class{tail=Promise.resolve();depth=0;get busy(){return this.depth>0}async run(A,e){this.depth++;let r=this.tail,t=()=>{};this.tail=new Promise(s=>{t=s});try{await Du(r,e)}catch(s){throw this.depth--,r.then(t,t),s}try{return await A()}finally{this.depth--,t()}}};function Du(x,A){return new Promise((e,r)=>{let t=setTimeout(()=>r(new gx(`Device busy: waited ${A} ms for the UTO link`,3)),A);t.unref?.(),x.then(()=>{clearTimeout(t),e()})})}var Ze=class extends vv.EventEmitter{logStream;opts;logger;timeSource;device;mirror;model;mapper;apiHandler;poller;stateManager;localData;offlineSync;buildState={running:!1,ok:null,at:null};lastSyncAt=null;firmwareVersion=null;mirrorSaveTimer;stopped=!1;lock=new wi;constructor(A){super(),this.opts=A,this.logger=A.logger,this.timeSource=A.timeSource??xx.systemTimeSource,this.logStream=new _n({logFile:A.logFile,logger:A.logger}),this.logStream.on("record",e=>this.emit("log",e))}get serial(){return this.opts.serial}get connected(){return this.device!==void 0}get busy(){return this.lock.busy}get ddeModel(){if(!this.model)throw new gx("DDE model not loaded",7);return this.model}get storage(){if(!this.mirror)throw new gx("Mirror not initialised",7);return this.mirror.storage}async start(){if(this.opts.build){let A=await this.build();if(A.ok===!1)throw new gx(A.message??"Build failed",1)}if(await this.loadModel(),this.mirror=await kn.create(this.opts.cwd,this.opts.fs,{persist:this.opts.persistMirror,logger:this.logger}),this.mapper=new xx.DdeMapper(this.ddeModel,this.storage,this.timeSource),await this.connect(),this.opts.flash){let A=await this.flash();if(!A.success)throw new gx(A.message,3)}this.buildApiHandler(),await this.startPoller(),this.opts.persistMirror&&(this.mirrorSaveTimer=setInterval(()=>{this.mirror?.save()},5e3),this.mirrorSaveTimer.unref?.())}async loadModel(){let A=_i.Utils.joinPath(this.opts.cwd,r0.filePaths.dist.ddeXmlPath);if(!await this.opts.fs.stat(A))throw new gx(`No DDE model at ${r0.filePaths.dist.ddeXmlPath} \u2014 run \`studio build\` first`,7);let e=new TextDecoder().decode(await this.opts.fs.readFile(A));this.model=(0,xx.parseDde)(e)}async connect(){try{this.device=this.opts.createDevice?await this.opts.createDevice(this.opts.serial):await ki(this.opts.serial,{transportFactory:this.opts.transportFactory,debug:this.opts.debug,logger:this.logger})}catch(t){let s=t instanceof Error?t.message:String(t);throw new gx(`Could not open device ${this.opts.serial}: ${s}`,/not found/i.test(s)?2:3)}let{utoMaster:A,atHandler:e}=this.device;if(!e)throw new gx(`Device ${this.opts.serial} was opened without its debug interface`,3);this.logStream.attachUtoMaster(A),this.logStream.attachAtHandler(e),A.on("utoFrame",t=>this.emit("uto",t));try{await A.init();let t=await A.requestDeviceInfo();this.firmwareVersion=t?.firmwareVersion??null}catch(t){throw await this.closeDevice(),new gx(`UTO handshake failed: ${t instanceof Error?t.message:String(t)}`,3)}let r=ht(this.logger);this.stateManager=new xx.Rm2mStateManager(e,r),this.stateManager.on("state",t=>this.emit("state",t)),this.localData=new xx.LocalDataManager(e,r),this.offlineSync=new xx.OfflineSyncManager(A,this.storage,r)}async startPoller(){this.poller=new Sn({session:this,utoMaster:()=>this.device?.utoMaster,storage:this.storage,model:this.ddeModel,mapper:this.mapper,intervalMs:this.opts.pollIntervalMs??Eu,logger:this.logger}),this.poller.on("container-changed",A=>{this.emit("container-changed",A),this.logStream.push("uto",`${A.alias??A.container??this.tagLabel(A.tag)} changed`)}),this.poller.on("error",A=>this.emit("error",A)),await this.poller.refreshTagMap(),this.poller.start()}tagLabel(A){return`0x${A.toString(16)}`}get utoMaster(){if(!this.device)throw new gx($n,3);return this.device.utoMaster}get atHandler(){if(!this.device?.atHandler)throw new gx($n,3);return this.device.atHandler}buildApiHandler(){let A={container:async(r,t,s)=>{await this.withLink(()=>this.utoMaster.sendUTOCmdExt(xx.UtoCommand.DATA,r,t,s))},adHocChangeRequest:async(r,t)=>this.withLink(()=>this.offlineSync.executeAdHocChangeRequest(r,t)),backfill:async()=>(await this.sync(),"ready")},e={siteUid:av,deviceId:this.opts.serial,model:this.ddeModel,mapper:this.mapper,storage:this.storage,siteInfo:(0,xx.createSiteInfoFromDde)(this.ddeModel,{siteUid:av,deviceId:this.opts.serial,name:`dev-${this.opts.serial}`,apmId:ov}),me:{name:"studio-dev",roles:["developer"]},push:A,logger:this.logger,timeSource:this.timeSource,allowAnySiteUid:!0};this.apiHandler=(0,xx.createLocalApiHandler)(e)}async handleApi(A){if(!this.apiHandler)throw new gx("Session not started",7);let e=this.writtenTag(A),r=await this.apiHandler(A);if(e===null||r.status>=400)return r;let t=await this.mirrorStamp(e);return await this.awaitDeviceStamp(e,t)||(r.headers={...r.headers,"x-mt-mirror":"stale"}),r}writtenTag(A){let e=A.method.toUpperCase();if(e!=="PUT"&&e!=="POST")return null;let[r,t=""]=A.path.split("?");if(/(^|&)async=1(&|$)/.test(t))return null;let s=/\/sites\/[^/]+\/(?:containers\/)?([^/?]+)$/.exec(r);if(!s)return null;let n=(0,xx.resolveTagInModel)(this.ddeModel,decodeURIComponent(s[1]));return n===null||!(0,xx.isDevicePushableTag)(n)||this.poller?.knowsTag(n)===!1?null:n}async awaitDeviceStamp(A,e){let r=this.opts.waitMs??lu,t=this.poller;if(r<=0||!t)return!0;let s=Date.now()+r;for(;;){let F=await this.withLink(()=>t.refreshStamps()).then(()=>!0,()=>!1)?t.deviceStamp(A):null;if(F!==null&&F>=e)return await this.withLink(()=>t.pullTags([A])).catch(()=>{}),!0;if(Date.now()>=s)return!1;await Fv(100)}}async build(){this.buildState={running:!0,ok:null,at:null},this.emit("build",this.buildState);try{await J.validateBasicManifest(this.opts.cwd,this.opts.fs,null);let A=await hx.buildAll(this.opts.cwd,this.opts.fs,this.logger,this.opts.env??Cx.ENV.production,this.opts.apiToken??null,this.opts.part??!0,!0);this.buildState={running:!1,ok:!0,at:Date.now(),diagnostics:A}}catch(A){this.buildState={running:!1,ok:!1,at:Date.now(),message:A instanceof Error?A.message:String(A),diagnostics:A instanceof hx.BuildError?A.mergedDiagnostics:void 0}}return this.emit("build",this.buildState),this.buildState}async flash(A){let e=_i.Utils.joinPath(this.opts.cwd,A??r0.filePaths.dist.mainAmxPath);this.poller?.pause();try{return await this.withLink(async()=>{await this.closeDevice();try{return await(this.opts.uploadToDevice??Z8)(this.opts.serial,e,this.opts.fs,this.logger,this.opts.debug,Bu,this.opts.transportFactory)}finally{await this.reconnect()}})}finally{this.connected&&await this.poller?.refreshTagMap().catch(()=>{}),this.poller?.resume()}}async reconnect(){let A=Date.now()+Cu;for(let e=0;;e++)try{await this.connect(),this.stopped&&await this.closeDevice();return}catch(r){if(await this.closeDevice(),this.stopped||Date.now()>=A){this.reportReconnectFailure(r);return}e===0&&this.logger.info(`Waiting for device ${this.opts.serial} to come back after the flash...`),await Fv(du)}}reportReconnectFailure(A){let e=A instanceof Error?A.message:String(A);this.logger.error(`Could not reopen device ${this.opts.serial} after the flash: ${e}`),this.stopped||this.emit("error",A instanceof Error?A:new Error(e))}async sync(A){let e=await this.withLink(async()=>{this.poller?.pause();try{return A&&A.length>0?await this.poller.pullTags(A):(await this.offlineSync.sync()).tags.filter(s=>s.outcome==="upload").map(s=>s.tag)}finally{this.poller?.resume()}});this.lastSyncAt=Date.now();let r={tags:e,at:this.lastSyncAt};return this.emit("sync",r),r}async at(A){return this.withLink(async()=>(this.logStream.push("at",`> ${A}`),this.atHandler.sendRaw(A)))}async state(){let A=this.stateManager;if(!A)throw new gx($n,3);return A.getLastState()??await A.fetchState()}localDataSnapshot(){return this.localData?.getSnapshot()??null}async measure(){return this.withLink(async()=>{let A=this.localData;if(!A)throw new gx($n,3);return A.triggerMeasurement()})}status(){return{serial:this.opts.serial,connected:this.connected,apmId:ov,firmwareVersion:this.firmwareVersion,model:{containers:(this.model?.containers??[]).map(A=>({name:A.name,alias:A.alias,kind:A.kind,tag:(0,xx.resolveTagInModel)(this.ddeModel,A.name)}))},lastSync:this.lastSyncAt,buildState:this.buildState,poll:this.poller?.status()??{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0}}}async tick(){return this.poller?this.poller.tick():[]}async mirrorStamp(A){let e=await this.storage.getLatestStampForTag(A);return e?(0,xx.dbStampToStamp40)(e):0}async withLink(A){return this.lock.run(A,this.opts.lockWaitMs??cu)}async closeDevice(){let A=this.device;this.device=void 0,this.stateManager?.dispose(),this.stateManager=void 0,await this.localData?.stopPolling(),this.localData?.dispose(),this.localData=void 0,this.offlineSync=void 0,await A?.close()}async stop(){if(!this.stopped){this.stopped=!0,this.mirrorSaveTimer&&clearInterval(this.mirrorSaveTimer),this.poller?.stop();try{await this.mirror?.save(),await this.logStream.dispose()}finally{await this.closeDevice(),this.removeAllListeners()}}}};function Fv(x){return new Promise(A=>setTimeout(A,x))}var Bv=Q0(require("node:http")),Cv=require("vscode-uri"),dv=Q0(require("yaml"));var Dv=["log","state","sync","build","uto","container-changed","error"],uu=15e3,fv=4*1024*1024,pu="127.0.0.1",bu=8765,uv="no-store",pv="E_NOT_FOUND",Ev="E_BAD_REQUEST",mu=2e3,ju=20;function xr(x,A){return JSON.stringify({err:`${x} ${A}`})}function Fe(x,A,e,r={}){x.writeHead(A,{"content-type":"application/json","cache-control":uv,...r}),x.end(e)}function hu(x){let A=x.replace(/^\[|\]$/g,"").toLowerCase();return A==="localhost"||A==="::1"||A===""||/^127\./.test(A)}function gu(x,A){if(!(hu(A)||x.token)){if(!x.allowRemote)throw new Error(`Refusing to bind to ${A} without --bearer: the device API would be reachable from the network. Pass --bearer <token>, or --allow-remote to bind unauthenticated anyway.`);x.logger.warn(`Serving the unauthenticated device API on ${A} \u2014 anyone who can reach this port can write to and flash the device.`)}}function yu(x){try{let{hostname:A}=new URL(x);return A==="localhost"||A==="127.0.0.1"||A==="[::1]"||A==="::1"}catch{return!1}}function ku(x,A){let e=x.headers.origin;typeof e=="string"&&yu(e)&&(A.setHeader("access-control-allow-origin",e),A.setHeader("access-control-allow-credentials","true"),A.setHeader("vary","origin")),A.setHeader("access-control-allow-methods","GET,POST,PUT,DELETE,OPTIONS"),A.setHeader("access-control-allow-headers","authorization,content-type"),A.setHeader("access-control-expose-headers","x-mt-mirror, x-mt-backfill"),A.setHeader("access-control-max-age","600")}function _u(x,A,e){if(!A)return!0;let r=x.headers.authorization,t=typeof r=="string"?r.replace(/^Bearer\s+/i,"").trim():(e??"").trim();if(t==="")return!1;let s=process.env.MYDATANET_TOKEN;return t===A||s!==void 0&&s!==""&&t===s}var ye=class extends Error{constructor(e,r,t){super(t);this.status=e;this.code=r}status;code};async function bv(x){let A=[],e=0;for await(let r of x){let t=r;if(e+=t.length,e>fv)throw x.pause(),new ye(413,"E_TOO_LARGE",`request body exceeds ${fv} bytes`);A.push(t)}return Buffer.concat(A).toString("utf8")}function mv(x){return x!=="GET"&&x!=="HEAD"}function wu(x){if(!x.trim())return{};let A;try{A=JSON.parse(x)}catch{throw new ye(400,Ev,"malformed JSON body")}if(typeof A!="object"||A===null)throw new ye(400,Ev,"JSON body must be an object");return A}function lv(x,A){let e=x[A];return typeof e=="string"&&e.length>0?e:void 0}function Su(x,A){let e=x[A];if(!Array.isArray(e))return;let r=e.map(Number).filter(t=>Number.isFinite(t));return r.length>0?r:void 0}function cv(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}var Si=class{clients=new Set;heartbeat;constructor(){this.heartbeat=setInterval(()=>this.writeAll(`: ping
|
|
2339
2339
|
|
|
2340
|
-
`),
|
|
2340
|
+
`),uu),this.heartbeat.unref?.()}broadcast(A,e){let r=`event: ${A}
|
|
2341
2341
|
data: ${JSON.stringify(e)}
|
|
2342
2342
|
|
|
2343
|
-
`;for(let t of this.clients)(!t.types||t.types.has(
|
|
2343
|
+
`;for(let t of this.clients)(!t.types||t.types.has(A))&&this.write(t,r)}writeAll(A){for(let e of this.clients)this.write(e,A)}write(A,e){if(A.res.writableEnded||A.res.destroyed){this.clients.delete(A);return}try{if(A.res.write(e)){A.stalled=0;return}}catch{this.clients.delete(A);return}A.stalled++,A.stalled>=ju&&(this.clients.delete(A),A.res.destroy())}subscribe(A,e,r){let t=new URLSearchParams(r).get("types"),s=t?new Set(t.split(",").map(F=>F.trim()).filter(F=>Dv.includes(F))):null;e.writeHead(200,{"content-type":"text/event-stream","cache-control":uv,connection:"keep-alive"}),e.write(`: connected
|
|
2344
2344
|
|
|
2345
|
-
`);let n={res:e,types:s,stalled:0};this.clients.add(n),x.on("close",()=>this.clients.delete(n)),e.on("close",()=>this.clients.delete(n)),e.on("error",()=>this.clients.delete(n))}close(){clearInterval(this.heartbeat);for(let x of this.clients)!x.res.writableEnded&&!x.res.destroyed&&x.res.end();this.clients.clear()}};async function $D(A,x,e,r){let t=x.method??"GET",s={path:r,method:t,headers:Object.fromEntries(Object.entries(x.headers).map(([F,f])=>[F,Array.isArray(f)?f.join(","):f??""])),body:P8(t)?await q8(x):null},n=await A.handleApi(s);se(e,n.status,n.body,n.headers)}async function qD(A,x,e,r){let{session:t}=A;switch(x){case"GET /dev/status":return t.status();case"POST /dev/build":return t.build();case"POST /dev/flash":return t.flash(h8(r,"file"));case"POST /dev/sync":return t.sync(SD(r,"tags"));case"GET /dev/logs":return{lastSeq:t.logStream.lastSeq,records:t.logStream.since(g8(e,"since",0),g8(e,"limit",500))};case"POST /dev/at":return PD(t,h8(r,"cmd"));case"GET /dev/state":return t.state();case"GET /dev/localdata":return t.localDataSnapshot();case"POST /dev/localdata/measure":return t.measure();case"GET /dev/openapi.json":return LD(A);default:return}}async function PD(A,x){if(!x)throw new me(400,"E_BAD_REQUEST","attribute 'cmd' is not valid");return{cmd:x,response:await A.at(x)}}async function TD(A,x,e,r){let[t,s=""]=r.split("?"),n=x.method??"GET",F=P8(n)?await q8(x):"";try{let f=await qD(A,`${n} ${t}`,new URLSearchParams(s),wD(F));if(f===void 0){se(e,404,We($8,`no route for ${n} ${t}`));return}se(e,200,JSON.stringify(f))}catch(f){if(f instanceof me){se(e,f.status,We(f.code,f.message));return}se(e,500,We("E_DEV",f instanceof Error?f.message:String(f)))}}async function ND(A,x,e,r){if(kD(e,r),e.method==="OPTIONS"){r.writeHead(204),r.end();return}let t=e.url??"/",s=t.split("?")[1]??"",n=t==="/events"||t.startsWith("/events?"),F=n?new URLSearchParams(s).get("token")??void 0:void 0;if(!_D(e,A.token,F)){se(r,401,We("E_UNAUTHORIZED","invalid or missing bearer token"));return}try{t.startsWith("/api/")?await $D(A.session,e,r,t):n?x.subscribe(e,r,s):t.startsWith("/dev/")?await TD(A,e,r,t):se(r,404,We($8,`no route for ${t}`))}catch(f){if(f instanceof me&&!r.headersSent){se(r,f.status,We(f.code,f.message),{connection:"close"});return}throw f}}async function T8(A){let{session:x,logger:e}=A,r=A.host??pD;gD(A,r);let t=new ni;for(let F of w8)x.on(F,f=>t.broadcast(F,f));let s=y8.default.createServer((F,f)=>{ND(A,t,F,f).catch(c=>{let D=c instanceof Error?c.message:String(c);e.error(`Dev server error: ${D}`),f.headersSent||se(f,500,We("E_INTERNAL",D))})});try{await new Promise((F,f)=>{s.once("error",f),s.listen(A.port??bD,r,()=>{s.off("error",f),F()})})}catch(F){throw t.close(),F}s.on("error",F=>e.error(`Dev server socket error: ${F.message}`));let n=s.address().port;return{url:`http://${r}:${n}`,port:n,async close(){t.close(),s.closeIdleConnections(),s.closeAllConnections(),await Promise.race([new Promise(F=>s.close(()=>F())),ID(mD)])}}}function ID(A){return new Promise(x=>{setTimeout(x,A).unref?.()})}var MD={"/dev/status":{get:{summary:"Session, model and poll status"}},"/dev/build":{post:{summary:"Build the project, returns diagnostics"}},"/dev/flash":{post:{summary:"Upload an AMX to the device"}},"/dev/sync":{post:{summary:"Pull selected/all tags into the mirror"}},"/dev/logs":{get:{summary:"Device log ring buffer (?since, ?limit)"}},"/dev/at":{post:{summary:"Run one AT command"}},"/dev/state":{get:{summary:"Last rm2m state"}},"/dev/localdata":{get:{summary:"Live local-data values"}},"/dev/localdata/measure":{post:{summary:"Trigger a measurement"}},"/dev/openapi.json":{get:{summary:"This document"}},"/events":{get:{summary:"SSE event stream (?types= filters)"}}};async function LD(A){let x={openapi:"3.0.0",info:{title:"studio dev",version:"1"},paths:{}},e=k8.Utils.joinPath(A.cwd,e0.filePaths.dist.ddeApi);if(await A.fs.stat(e))try{let r=new TextDecoder().decode(await A.fs.readFile(e)),t=_8.default.parse(r);typeof t=="object"&&t!==null&&Object.assign(x,t)}catch(r){let t=r instanceof Error?r.message:String(r);A.logger.warn(`Could not parse ${e0.filePaths.dist.ddeApi}: ${t}`)}return x.paths={...x.paths,...MD},x}var Bt=require("node:fs"),N8=require("node:path"),I8=require("vscode-uri");var RD=300,OD=new Set([e0.fileNames.projectSettings,e0.filePaths.appIni]);function si(A){return A instanceof Error?A.message:String(A)}function GD(A){let x=A?.code;return x==="ENOENT"||x==="ENOTDIR"}function UD(A){let x=[],e=r=>{x.push(r);for(let t of(0,Bt.readdirSync)(r,{withFileTypes:!0}))t.isDirectory()&&e((0,N8.join)(r,t.name))};try{e(A)}catch{}return x}function M8(A){let{cwd:x,session:e,logger:r}=A,t=A.debounceMs??RD,s=[],n,F=!1,f=!1,c=async()=>{if(F){f=!0;return}F=!0;try{let _=await e.build();if(_.ok!==!0){r.error(`Rebuild failed: ${_.message??"see diagnostics"}`);return}if(A.flash!==!1){let k=await e.flash();if(!k.success){r.error(k.message);return}}await e.sync()}catch(_){r.error(`Watch cycle failed: ${_ instanceof Error?_.message:String(_)}`)}finally{F=!1,f&&(f=!1,D())}};function D(){n&&clearTimeout(n),n=setTimeout(()=>{c()},t),n.unref?.()}let p=_=>(k,S)=>{let P=typeof S=="string"?S.replace(/\\/g,"/"):null;(!_||P!==null&&_(P))&&D()},j=(_,k,S)=>{let P=I8.Utils.joinPath(x,_);try{s.push((0,Bt.watch)(P.fsPath,{recursive:k},p(S)))}catch(N){if(GD(N))return;if(k){r.warn(`Recursive file watching is not available on this platform (${si(N)}) \u2014 watching every directory under ${_} individually.`);for(let L of UD(P.fsPath))try{s.push((0,Bt.watch)(L,{recursive:!1},p(S)))}catch(O){r.warn(`Could not watch ${L}: ${si(O)}`)}return}r.warn(`Could not watch ${_}: ${si(N)}`)}};return j(e0.filePaths.dlo.path,!0),j(e0.filePaths.dde.path,!0),j(".",!1,_=>OD.has(_)),{close(){n&&clearTimeout(n);for(let _ of s)_.close()}}}var HD="details";function zD(){return[p0.Part.dde,p0.Part.dlo,p0.Part.dfiles]}async function R8(A,x,e){let r=e.logger??new re.Logger,t=new Ve({cwd:A,fs:x,serial:e.serial,transportFactory:e.transportFactory,createDevice:e.createDevice,pollIntervalMs:e.pollIntervalMs,flash:e.flash!==!1,build:e.build!==!1,part:e.part??zD(),logger:r,env:e.env,apiToken:e.apiToken,waitMs:e.waitMs,logFile:e.logFile,persistMirror:e.persistMirror!==!1,debug:e.debug});t.on("error",c=>r.warn(c instanceof Error?c.message:String(c)));try{await t.start()}catch(c){throw await t.stop(),c}let s,n,F;try{s=await T8({session:t,cwd:A,fs:x,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.watch&&(n=M8({cwd:A,session:t,logger:r,flash:e.flash!==!1})),e.pov&&(F=KD(A,t,s.url,e.pov,r))}catch(c){throw await s?.close(),await t.stop(),c}let f=s;return{url:f.url,port:f.port,session:t,apmId:t.status().apmId,async close(){n?.close(),JD(F,r),await f.close(),await t.stop()}}}function KD(A,x,e,r,t){let s=typeof r=="string"&&r.length>0?r:HD,n=ii.Utils.joinPath(A,"pov",s);if(!(0,L8.existsSync)(ii.Utils.joinPath(n,"package.json").fsPath)){t.error(`POV dev server not started: no package.json in ${n.fsPath}`);return}let F=(0,ai.spawn)("npm",["run","dev"],{cwd:n.fsPath,env:{...process.env,MYDATANET_HOST:e},shell:process.platform==="win32",detached:process.platform!=="win32",stdio:["ignore","pipe","pipe"]}),f=c=>{for(let D of c.toString("utf8").split(/\r?\n/)){let p=D.trim();p&&x.logStream.push("pov",p)}};return F.stdout?.on("data",f),F.stderr?.on("data",f),F.on("error",c=>t.error(`POV dev server failed: ${c.message}`)),t.info(`POV dev server: npm run dev in ${n.fsPath} (MYDATANET_HOST=${e})`),F}function JD(A,x){if(!(!A||A.exitCode!==null||A.signalCode!==null||A.pid===void 0))try{if(process.platform==="win32"){(0,ai.spawn)("taskkill",["/PID",String(A.pid),"/T","/F"],{stdio:"ignore",windowsHide:!0});return}process.kill(-A.pid,"SIGTERM")}catch(e){x.debug(`Could not stop the POV dev server: ${e instanceof Error?e.message:String(e)}`),A.kill()}}var O8=require("uuid"),VD="b4baec47-0ba4-4e37-b237-8f9cde42b8dd",oi=(t=>(t.Get="GET",t.Post="POST",t.Put="PUT",t.Delete="DELETE",t))(oi||{});var hn=class{domain;auth;logger;userInfo=null;constructor(x,e,r){if(typeof x=="object"){let{serverUrl:t,apiToken:s,authHeader:n,logger:F}=x;this.domain=this.normalizeServerUrl(t),this.auth=n||(s?`Bearer ${s}`:""),this.logger=F}else this.domain=this.normalizeServerUrl(x),typeof e=="string"?(this.auth=`Bearer ${e}`,this.logger=r):(this.auth="",this.logger=e)}setAuth(x){this.auth=x}getDomain(){return this.domain}normalizeServerUrl(x){return!x.startsWith("http://")&&!x.startsWith("https://")?`https://${x}`:x}trimDomain(x){return x.replace(/(^\w+:|^)\/\//,"")}async fetchJSON(x,e,r){let t=`${this.domain}${e}`,s={Authorization:this.auth},n={method:x,headers:s};r&&(r instanceof FormData?n.body=r:(s["Content-Type"]="application/json",n.body=JSON.stringify(r)));let F=await fetch(t,n);if(!F.ok){let f=await F.text().catch(()=>"Unknown error");throw new Error(`HTTP ${F.status}: ${f}`)}return F.json()}async authenticate(){this.logger?.info(`Authenticating with ${this.trimDomain(this.domain)}...`);try{let{user:x,customers:e}=await this.fetchJSON("GET","/api/1/me");return this.userInfo={name:x.name,email:x.email,group:x.group,customers:e},this.logger?.info(`Authenticated as ${this.userInfo.name}`),this.userInfo}catch(x){throw new Error(`Authentication failed: ${x instanceof Error?x.message:String(x)}`)}}getUserInfo(){return this.userInfo}async uploadDevTag(x,e){this.logger?.info(`Uploading development tag ${x}...`);let{applid:r}=await this.fetchJSON("POST",`/api/1/app-center/__dev/${x}`,e);return this.logger?.info(`Development tag uploaded, application ID: ${r}`),r}async getCustomer(x){let{_uid:e,name:r}=await this.fetchJSON("GET",`/api/1/customers/${x}`);return{_uid:e,name:r}}async getCustomers(){return this.fetchJSON("GET","/api/1/customers")}async getDeviceSite(x){try{return await this.fetchJSON("GET",`/api/1/devices/${x}/site`)}catch{return null}}async getDevice(x){try{return await this.fetchJSON("GET",`/api/1/devices/${x}`)}catch{return null}}async getSite(x,e){try{return await this.fetchJSON("GET",`/api/1/customers/${x}/sites/${e}`)}catch{return null}}async createDevelopmentSite(x,e,r){if(this.logger?.info(`Creating development site "${e.name}"...`),e.serialNumber){let s=await this.getSite(x,e.name.toLowerCase());if(s)try{return await this.fetchJSON("POST",`/api/1/customers/${x}/sites/${s._uid}/cn-attach-device`,{device_id:e.serialNumber,allow_overwrite:!0,detach_from_old_site:!0,acquire:!0,create:!0}),this.logger?.info(`Device attached to existing site ${s._uid}`),s._uid}catch(n){if(n.message&&!n.message.includes("304"))this.logger?.warn(`Could not attach device to existing site: ${n.message}`);else return s._uid}}let{_uid:t}=await this.fetchJSON("POST",`/api/1/customers/${x}/sites`,{name:e.name,create:!0,force:!0,note:"This is a Studio development site",applid:e.applicationId,device_id:e.serialNumber,reg_code:r,servicetariff:"0000000000000000",servicetariff_indiv_cost:0});return this.logger?.info(`Development site created: ${t}`),t}async updateSiteName(x,e){try{await this.fetchJSON("PUT",`/api/1/sites/${x}`,{name:e})}catch{}}};function Fi(A){return(0,O8.v5)(A,VD)}async function G8(A,x,e,r,t,s,n){let F=await J.read(A,x),f=t.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),c=F.name.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),D=await J.isApmPartEnabled(A,x,p0.Part.dlo,F),p=D&&r,j=p?r.toUpperCase():`${c}_${f}`,_=p?r:j,k=n||j;return k.length>50&&(e.warn(`Site name "${k}" is too long. Truncating to 50 characters.`),k=k.substring(0,50)),{apmId:Fi(_),applicationId:null,name:k,version:1,serialNumber:D?r:void 0,siteUid:null,customerUid:s}}async function WD(A,x,e,r,t,s,n=!1){if(s.length>0)for(let F of s){let[f,c]=F.split("@");await Q0.installDependency(A,x,e,r,t,f,c||null,n)}else await Q0.installDependencies(A,x,e,r,t);await Q0.installNpmInApmParts(A,x,e)}async function XD(A,x,e,r,t=null,s=!0,n){return await J.validateBasicManifest(A,x,null),jx.buildAll(A,x,e,r,t,s,n)}async function YD(A){let x=null;if(A){x=A==="*"?A:A.split(";");let e=await J.validateRegistryAllowedBackends(x);if(e)throw new Error(e)}return x}async function QD(A,x,e,r,t,s,n,F){e.info("Publishing package...");let f=await YD(s);if(F)await jx.publishArchive(A,x,e,t,r,F,n,f);else return await jx.validatePublishSettings(A,x,t,r),jx.release(A,x,e,r,t,n,f)}async function ZD(A,x,e,r,t,s){return jx.pack(A,x,e,r,t,s)}0&&(module.exports={APM,DDE,DDE_Core,DFILES,DLO,DefaultFiles,Dependencies,DevError,DevExitCode,DevSession,DeviceProfiles,Diagnostics,ENV,Globals,Helper,HttpMethod,Library,Log,Manifest,MyDatanetClient,Package,Registry,build,buildDevelopmentInstallInfo,dev,generateDevApmId,install,pack,publish});
|
|
2345
|
+
`);let n={res:e,types:s,stalled:0};this.clients.add(n),A.on("close",()=>this.clients.delete(n)),e.on("close",()=>this.clients.delete(n)),e.on("error",()=>this.clients.delete(n))}close(){clearInterval(this.heartbeat);for(let A of this.clients)!A.res.writableEnded&&!A.res.destroyed&&A.res.end();this.clients.clear()}};async function $u(x,A,e,r){let t=A.method??"GET",s={path:r,method:t,headers:Object.fromEntries(Object.entries(A.headers).map(([F,f])=>[F,Array.isArray(f)?f.join(","):f??""])),body:mv(t)?await bv(A):null},n=await x.handleApi(s);Fe(e,n.status,n.body,n.headers)}async function qu(x,A,e,r){let{session:t}=x;switch(A){case"GET /dev/status":return t.status();case"POST /dev/build":return t.build();case"POST /dev/flash":return t.flash(lv(r,"file"));case"POST /dev/sync":return t.sync(Su(r,"tags"));case"GET /dev/logs":return{lastSeq:t.logStream.lastSeq,records:t.logStream.since(cv(e,"since",0),cv(e,"limit",500))};case"POST /dev/at":return Tu(t,lv(r,"cmd"));case"GET /dev/state":return t.state();case"GET /dev/localdata":return t.localDataSnapshot();case"POST /dev/localdata/measure":return t.measure();case"GET /dev/openapi.json":return Lu(x);default:return}}async function Tu(x,A){if(!A)throw new ye(400,"E_BAD_REQUEST","attribute 'cmd' is not valid");return{cmd:A,response:await x.at(A)}}async function Pu(x,A,e,r){let[t,s=""]=r.split("?"),n=A.method??"GET",F=mv(n)?await bv(A):"";try{let f=await qu(x,`${n} ${t}`,new URLSearchParams(s),wu(F));if(f===void 0){Fe(e,404,xr(pv,`no route for ${n} ${t}`));return}Fe(e,200,JSON.stringify(f))}catch(f){if(f instanceof ye){Fe(e,f.status,xr(f.code,f.message));return}Fe(e,500,xr("E_DEV",f instanceof Error?f.message:String(f)))}}async function Nu(x,A,e,r){if(ku(e,r),e.method==="OPTIONS"){r.writeHead(204),r.end();return}let t=e.url??"/",s=t.split("?")[1]??"",n=t==="/events"||t.startsWith("/events?"),F=n?new URLSearchParams(s).get("token")??void 0:void 0;if(!_u(e,x.token,F)){Fe(r,401,xr("E_UNAUTHORIZED","invalid or missing bearer token"));return}try{t.startsWith("/api/")?await $u(x.session,e,r,t):n?A.subscribe(e,r,s):t.startsWith("/dev/")?await Pu(x,e,r,t):Fe(r,404,xr(pv,`no route for ${t}`))}catch(f){if(f instanceof ye&&!r.headersSent){Fe(r,f.status,xr(f.code,f.message),{connection:"close"});return}throw f}}async function jv(x){let{session:A,logger:e}=x,r=x.host??pu;gu(x,r);let t=new Si;for(let F of Dv)A.on(F,f=>t.broadcast(F,f));let s=Bv.default.createServer((F,f)=>{Nu(x,t,F,f).catch(C=>{let D=C instanceof Error?C.message:String(C);e.error(`Dev server error: ${D}`),f.headersSent||Fe(f,500,xr("E_INTERNAL",D))})});try{await new Promise((F,f)=>{s.once("error",f),s.listen(x.port??bu,r,()=>{s.off("error",f),F()})})}catch(F){throw t.close(),F}s.on("error",F=>e.error(`Dev server socket error: ${F.message}`));let n=s.address().port;return{url:`http://${r}:${n}`,port:n,async close(){t.close(),s.closeIdleConnections(),s.closeAllConnections(),await Promise.race([new Promise(F=>s.close(()=>F())),Mu(mu)])}}}function Mu(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}var Iu={"/dev/status":{get:{summary:"Session, model and poll status"}},"/dev/build":{post:{summary:"Build the project, returns diagnostics"}},"/dev/flash":{post:{summary:"Upload an AMX to the device"}},"/dev/sync":{post:{summary:"Pull selected/all tags into the mirror"}},"/dev/logs":{get:{summary:"Device log ring buffer (?since, ?limit)"}},"/dev/at":{post:{summary:"Run one AT command"}},"/dev/state":{get:{summary:"Last rm2m state"}},"/dev/localdata":{get:{summary:"Live local-data values"}},"/dev/localdata/measure":{post:{summary:"Trigger a measurement"}},"/dev/openapi.json":{get:{summary:"This document"}},"/events":{get:{summary:"SSE event stream (?types= filters)"}}};async function Lu(x){let A={openapi:"3.0.0",info:{title:"studio dev",version:"1"},paths:{}},e=Cv.Utils.joinPath(x.cwd,r0.filePaths.dist.ddeApi);if(await x.fs.stat(e))try{let r=new TextDecoder().decode(await x.fs.readFile(e)),t=dv.default.parse(r);typeof t=="object"&&t!==null&&Object.assign(A,t)}catch(r){let t=r instanceof Error?r.message:String(r);x.logger.warn(`Could not parse ${r0.filePaths.dist.ddeApi}: ${t}`)}return A.paths={...A.paths,...Iu},A}var gt=require("node:fs"),hv=require("node:path"),gv=require("vscode-uri");var Ru=300,Ou=new Set([r0.fileNames.projectSettings,r0.filePaths.appIni]);function $i(x){return x instanceof Error?x.message:String(x)}function Gu(x){let A=x?.code;return A==="ENOENT"||A==="ENOTDIR"}function Uu(x){let A=[],e=r=>{A.push(r);for(let t of(0,gt.readdirSync)(r,{withFileTypes:!0}))t.isDirectory()&&e((0,hv.join)(r,t.name))};try{e(x)}catch{}return A}function yv(x){let{cwd:A,session:e,logger:r}=x,t=x.debounceMs??Ru,s=[],n,F=!1,f=!1,C=async()=>{if(F){f=!0;return}F=!0;try{let _=await e.build();if(_.ok!==!0){r.error(`Rebuild failed: ${_.message??"see diagnostics"}`);return}if(x.flash!==!1){let k=await e.flash();if(!k.success){r.error(k.message);return}}await e.sync()}catch(_){r.error(`Watch cycle failed: ${_ instanceof Error?_.message:String(_)}`)}finally{F=!1,f&&(f=!1,D())}};function D(){n&&clearTimeout(n),n=setTimeout(()=>{C()},t),n.unref?.()}let p=_=>(k,S)=>{let T=typeof S=="string"?S.replace(/\\/g,"/"):null;(!_||T!==null&&_(T))&&D()},j=(_,k,S)=>{let T=gv.Utils.joinPath(A,_);try{s.push((0,gt.watch)(T.fsPath,{recursive:k},p(S)))}catch(N){if(Gu(N))return;if(k){r.warn(`Recursive file watching is not available on this platform (${$i(N)}) \u2014 watching every directory under ${_} individually.`);for(let L of Uu(T.fsPath))try{s.push((0,gt.watch)(L,{recursive:!1},p(S)))}catch(O){r.warn(`Could not watch ${L}: ${$i(O)}`)}return}r.warn(`Could not watch ${_}: ${$i(N)}`)}};return j(r0.filePaths.dlo.path,!0),j(r0.filePaths.dde.path,!0),j(".",!1,_=>Ou.has(_)),{close(){n&&clearTimeout(n);for(let _ of s)_.close()}}}var Hu="details";function Ku(){return[p0.Part.dde,p0.Part.dlo,p0.Part.dfiles]}async function _v(x,A,e){let r=e.logger??new ie.Logger,t=new Ze({cwd:x,fs:A,serial:e.serial,transportFactory:e.transportFactory,createDevice:e.createDevice,pollIntervalMs:e.pollIntervalMs,flash:e.flash!==!1,build:e.build!==!1,part:e.part??Ku(),logger:r,env:e.env,apiToken:e.apiToken,waitMs:e.waitMs,logFile:e.logFile,persistMirror:e.persistMirror!==!1,debug:e.debug});t.on("error",C=>r.warn(C instanceof Error?C.message:String(C)));try{await t.start()}catch(C){throw await t.stop(),C}let s,n,F;try{s=await jv({session:t,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.watch&&(n=yv({cwd:x,session:t,logger:r,flash:e.flash!==!1})),e.pov&&(F=zu(x,t,s.url,e.pov,r))}catch(C){throw await s?.close(),await t.stop(),C}let f=s;return{url:f.url,port:f.port,session:t,apmId:t.status().apmId,async close(){n?.close(),Ju(F,r),await f.close(),await t.stop()}}}function zu(x,A,e,r,t){let s=typeof r=="string"&&r.length>0?r:Hu,n=qi.Utils.joinPath(x,"pov",s);if(!(0,kv.existsSync)(qi.Utils.joinPath(n,"package.json").fsPath)){t.error(`POV dev server not started: no package.json in ${n.fsPath}`);return}let F=(0,Ti.spawn)("npm",["run","dev"],{cwd:n.fsPath,env:{...process.env,MYDATANET_HOST:e},shell:process.platform==="win32",detached:process.platform!=="win32",stdio:["ignore","pipe","pipe"]}),f=C=>{for(let D of C.toString("utf8").split(/\r?\n/)){let p=D.trim();p&&A.logStream.push("pov",p)}};return F.stdout?.on("data",f),F.stderr?.on("data",f),F.on("error",C=>t.error(`POV dev server failed: ${C.message}`)),t.info(`POV dev server: npm run dev in ${n.fsPath} (MYDATANET_HOST=${e})`),F}function Ju(x,A){if(!(!x||x.exitCode!==null||x.signalCode!==null||x.pid===void 0))try{if(process.platform==="win32"){(0,Ti.spawn)("taskkill",["/PID",String(x.pid),"/T","/F"],{stdio:"ignore",windowsHide:!0});return}process.kill(-x.pid,"SIGTERM")}catch(e){A.debug(`Could not stop the POV dev server: ${e instanceof Error?e.message:String(e)}`),x.kill()}}var wv=require("uuid"),Vu="b4baec47-0ba4-4e37-b237-8f9cde42b8dd",Pi=(t=>(t.Get="GET",t.Post="POST",t.Put="PUT",t.Delete="DELETE",t))(Pi||{});var Tn=class{domain;auth;logger;userInfo=null;constructor(A,e,r){if(typeof A=="object"){let{serverUrl:t,apiToken:s,authHeader:n,logger:F}=A;this.domain=this.normalizeServerUrl(t),this.auth=n||(s?`Bearer ${s}`:""),this.logger=F}else this.domain=this.normalizeServerUrl(A),typeof e=="string"?(this.auth=`Bearer ${e}`,this.logger=r):(this.auth="",this.logger=e)}setAuth(A){this.auth=A}getDomain(){return this.domain}normalizeServerUrl(A){return!A.startsWith("http://")&&!A.startsWith("https://")?`https://${A}`:A}trimDomain(A){return A.replace(/(^\w+:|^)\/\//,"")}async fetchJSON(A,e,r){let t=`${this.domain}${e}`,s={Authorization:this.auth},n={method:A,headers:s};r&&(r instanceof FormData?n.body=r:(s["Content-Type"]="application/json",n.body=JSON.stringify(r)));let F=await fetch(t,n);if(!F.ok){let f=await F.text().catch(()=>"Unknown error");throw new Error(`HTTP ${F.status}: ${f}`)}return F.json()}async authenticate(){this.logger?.info(`Authenticating with ${this.trimDomain(this.domain)}...`);try{let{user:A,customers:e}=await this.fetchJSON("GET","/api/1/me");return this.userInfo={name:A.name,email:A.email,group:A.group,customers:e},this.logger?.info(`Authenticated as ${this.userInfo.name}`),this.userInfo}catch(A){throw new Error(`Authentication failed: ${A instanceof Error?A.message:String(A)}`)}}getUserInfo(){return this.userInfo}async uploadDevTag(A,e){this.logger?.info(`Uploading development tag ${A}...`);let{applid:r}=await this.fetchJSON("POST",`/api/1/app-center/__dev/${A}`,e);return this.logger?.info(`Development tag uploaded, application ID: ${r}`),r}async getCustomer(A){let{_uid:e,name:r}=await this.fetchJSON("GET",`/api/1/customers/${A}`);return{_uid:e,name:r}}async getCustomers(){return this.fetchJSON("GET","/api/1/customers")}async getDeviceSite(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}/site`)}catch{return null}}async getDevice(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}`)}catch{return null}}async getSite(A,e){try{return await this.fetchJSON("GET",`/api/1/customers/${A}/sites/${e}`)}catch{return null}}async createDevelopmentSite(A,e,r){if(this.logger?.info(`Creating development site "${e.name}"...`),e.serialNumber){let s=await this.getSite(A,e.name.toLowerCase());if(s)try{return await this.fetchJSON("POST",`/api/1/customers/${A}/sites/${s._uid}/cn-attach-device`,{device_id:e.serialNumber,allow_overwrite:!0,detach_from_old_site:!0,acquire:!0,create:!0}),this.logger?.info(`Device attached to existing site ${s._uid}`),s._uid}catch(n){if(n.message&&!n.message.includes("304"))this.logger?.warn(`Could not attach device to existing site: ${n.message}`);else return s._uid}}let{_uid:t}=await this.fetchJSON("POST",`/api/1/customers/${A}/sites`,{name:e.name,create:!0,force:!0,note:"This is a Studio development site",applid:e.applicationId,device_id:e.serialNumber,reg_code:r,servicetariff:"0000000000000000",servicetariff_indiv_cost:0});return this.logger?.info(`Development site created: ${t}`),t}async updateSiteName(A,e){try{await this.fetchJSON("PUT",`/api/1/sites/${A}`,{name:e})}catch{}}};function Ni(x){return(0,wv.v5)(x,Vu)}async function Sv(x,A,e,r,t,s,n){let F=await J.read(x,A),f=t.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),C=F.name.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),D=await J.isApmPartEnabled(x,A,p0.Part.dlo,F),p=D&&r,j=p?r.toUpperCase():`${C}_${f}`,_=p?r:j,k=n||j;return k.length>50&&(e.warn(`Site name "${k}" is too long. Truncating to 50 characters.`),k=k.substring(0,50)),{apmId:Ni(_),applicationId:null,name:k,version:1,serialNumber:D?r:void 0,siteUid:null,customerUid:s}}async function Wu(x,A,e,r,t,s,n=!1){if(s.length>0)for(let F of s){let[f,C]=F.split("@");await Z0.installDependency(x,A,e,r,t,f,C||null,n)}else await Z0.installDependencies(x,A,e,r,t);await Z0.installNpmInApmParts(x,A,e)}async function Xu(x,A,e,r,t=null,s=!0,n){return await J.validateBasicManifest(x,A,null),hx.buildAll(x,A,e,r,t,s,n)}async function Yu(x){let A=null;if(x){A=x==="*"?x:x.split(";");let e=await J.validateRegistryAllowedBackends(A);if(e)throw new Error(e)}return A}async function Qu(x,A,e,r,t,s,n,F){e.info("Publishing package...");let f=await Yu(s);if(F)await hx.publishArchive(x,A,e,t,r,F,n,f);else return await hx.validatePublishSettings(x,A,t,r),hx.release(x,A,e,r,t,n,f)}async function Zu(x,A,e,r,t,s){return hx.pack(x,A,e,r,t,s)}0&&(module.exports={APM,DDE,DDE_Core,DFILES,DLO,DefaultFiles,Dependencies,DevError,DevExitCode,DevSession,DeviceProfiles,Diagnostics,ENV,Globals,Helper,HttpMethod,Library,Log,Manifest,MyDatanetClient,Package,Registry,build,buildDevelopmentInstallInfo,dev,generateDevApmId,install,pack,publish});
|
|
2346
2346
|
/*! Bundled license information:
|
|
2347
2347
|
|
|
2348
|
-
@microtronics/device-master/dist/
|
|
2348
|
+
@microtronics/device-master/dist/cjs/index.cjs:
|
|
2349
2349
|
(*! Bundled license information:
|
|
2350
2350
|
|
|
2351
2351
|
@noble/ed25519/index.js:
|